Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Mon May 20 09:55:38 2019 +0200
Revision:
6:ee9c86f06eae
Child:
7:9cda1b0f25ae
WIP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kris@kris-X682X 6:ee9c86f06eae 1 //
kris@kris-X682X 6:ee9c86f06eae 2 // Created by kris on 7-5-19.
kris@kris-X682X 6:ee9c86f06eae 3 //
kris@kris-X682X 6:ee9c86f06eae 4
kris@kris-X682X 6:ee9c86f06eae 5 #include "InterestService.h"
kris@kris-X682X 6:ee9c86f06eae 6 #pragma pack(push,1)
kris@kris-X682X 6:ee9c86f06eae 7 struct packed_A {
kris@kris-X682X 6:ee9c86f06eae 8 uint32_t magic;
kris@kris-X682X 6:ee9c86f06eae 9 int value[5];
kris@kris-X682X 6:ee9c86f06eae 10 };
kris@kris-X682X 6:ee9c86f06eae 11 #pragma pack(pop)
kris@kris-X682X 6:ee9c86f06eae 12
kris@kris-X682X 6:ee9c86f06eae 13 InterestService::InterestService(BLE& _ble) :
kris@kris-X682X 6:ee9c86f06eae 14 ble(_ble),
kris@kris-X682X 6:ee9c86f06eae 15 interestCharacteristic( (UUID)CustomUUIDs::UUID_INTEREST_CHAR,
kris@kris-X682X 6:ee9c86f06eae 16 &interests,
kris@kris-X682X 6:ee9c86f06eae 17 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NONE)
kris@kris-X682X 6:ee9c86f06eae 18 {
kris@kris-X682X 6:ee9c86f06eae 19
kris@kris-X682X 6:ee9c86f06eae 20 static bool serviceAdded = false; /* We should only ever need to add the information service once. */
kris@kris-X682X 6:ee9c86f06eae 21 if (serviceAdded) {
kris@kris-X682X 6:ee9c86f06eae 22 return;
kris@kris-X682X 6:ee9c86f06eae 23 }
kris@kris-X682X 6:ee9c86f06eae 24 printf("[PERIPHERAL] Adding interest service.. \r\n");
kris@kris-X682X 6:ee9c86f06eae 25 GattCharacteristic *charTable[] = { &interestCharacteristic };
kris@kris-X682X 6:ee9c86f06eae 26
kris@kris-X682X 6:ee9c86f06eae 27 GattService colorService(
kris@kris-X682X 6:ee9c86f06eae 28 CustomUUIDs::UUID_INTEREST_SERVICE,
kris@kris-X682X 6:ee9c86f06eae 29 charTable,
kris@kris-X682X 6:ee9c86f06eae 30 sizeof(charTable) / sizeof(GattCharacteristic *));
kris@kris-X682X 6:ee9c86f06eae 31 ble.gattServer().addService(colorService);
kris@kris-X682X 6:ee9c86f06eae 32 ble.gattServer().onDataWritten(this, &InterestService::onDataWritten);
kris@kris-X682X 6:ee9c86f06eae 33 readFromFs();
kris@kris-X682X 6:ee9c86f06eae 34
kris@kris-X682X 6:ee9c86f06eae 35 serviceAdded = true;
kris@kris-X682X 6:ee9c86f06eae 36 }
kris@kris-X682X 6:ee9c86f06eae 37
kris@kris-X682X 6:ee9c86f06eae 38 void InterestService::onDataWritten(const GattWriteCallbackParams *writeParams) {
kris@kris-X682X 6:ee9c86f06eae 39 //TODO: You gave me some data... Let's store it!
kris@kris-X682X 6:ee9c86f06eae 40 uint16_t handle = writeParams->handle;
kris@kris-X682X 6:ee9c86f06eae 41 printf("You wrote some data... But for which char? \r\n");
kris@kris-X682X 6:ee9c86f06eae 42 printf("%d == %d", handle, interestCharacteristic.getValueHandle());//colorCharacteristic.getValueHandle());
kris@kris-X682X 6:ee9c86f06eae 43 if(handle == interestCharacteristic.getValueHandle()){
kris@kris-X682X 6:ee9c86f06eae 44 printf("You wrote interests!");
kris@kris-X682X 6:ee9c86f06eae 45 printf("The value should be an array of 5 integers.");
kris@kris-X682X 6:ee9c86f06eae 46 // color = writeParams->data;
kris@kris-X682X 6:ee9c86f06eae 47 int index = 0;
kris@kris-X682X 6:ee9c86f06eae 48 for (int i=0; i < 5; i++) {
kris@kris-X682X 6:ee9c86f06eae 49 interests[i] = writeParams->data[i];//+3] << 24 | (writeParams->data[i+2] & 0xff) << 16 | (writeParams->data[i+1] & 0xff) << 8| (writeParams->data[i] & 0xff);
kris@kris-X682X 6:ee9c86f06eae 50 index++;
kris@kris-X682X 6:ee9c86f06eae 51 printf("Index: %d, val %08X \r\n", index, interests[i]);
kris@kris-X682X 6:ee9c86f06eae 52 }
kris@kris-X682X 6:ee9c86f06eae 53 writeToFs();
kris@kris-X682X 6:ee9c86f06eae 54 }
kris@kris-X682X 6:ee9c86f06eae 55 }
kris@kris-X682X 6:ee9c86f06eae 56
kris@kris-X682X 6:ee9c86f06eae 57 int InterestService::readFromFs() {
kris@kris-X682X 6:ee9c86f06eae 58 enum { MAGIC_VALUE = 0xDEADBEEF };
kris@kris-X682X 6:ee9c86f06eae 59 mbed::FlashIAP flash_device;
kris@kris-X682X 6:ee9c86f06eae 60 flash_device.init();
kris@kris-X682X 6:ee9c86f06eae 61 int sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL);
kris@kris-X682X 6:ee9c86f06eae 62 int page_size = flash_device.get_page_size();
kris@kris-X682X 6:ee9c86f06eae 63 int address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size);
kris@kris-X682X 6:ee9c86f06eae 64 printf("Sector size: %d \r\n", sector_size);
kris@kris-X682X 6:ee9c86f06eae 65 printf("Page size: %d \r\n", page_size);
kris@kris-X682X 6:ee9c86f06eae 66 printf("Address: %d \r\n", address);
kris@kris-X682X 6:ee9c86f06eae 67
kris@kris-X682X 6:ee9c86f06eae 68 int buffer[24];
kris@kris-X682X 6:ee9c86f06eae 69 flash_device.read(buffer, address, 24);
kris@kris-X682X 6:ee9c86f06eae 70 packed_A const *ptr = (packed_A const *) buffer;
kris@kris-X682X 6:ee9c86f06eae 71
kris@kris-X682X 6:ee9c86f06eae 72 if(ptr->magic == MAGIC_VALUE) {
kris@kris-X682X 6:ee9c86f06eae 73 printf("Address initialized, current list %d,%d,%d,%d,%d \r\n", ptr->value[0],
kris@kris-X682X 6:ee9c86f06eae 74 ptr->value[1],
kris@kris-X682X 6:ee9c86f06eae 75 ptr->value[2],
kris@kris-X682X 6:ee9c86f06eae 76 ptr->value[3],
kris@kris-X682X 6:ee9c86f06eae 77 ptr->value[4]);
kris@kris-X682X 6:ee9c86f06eae 78 interests[0] = ptr->value[0];
kris@kris-X682X 6:ee9c86f06eae 79 interests[1] = ptr->value[1];
kris@kris-X682X 6:ee9c86f06eae 80 interests[2] = ptr->value[2];
kris@kris-X682X 6:ee9c86f06eae 81 interests[3] = ptr->value[3];
kris@kris-X682X 6:ee9c86f06eae 82 interests[4] = ptr->value[4];
kris@kris-X682X 6:ee9c86f06eae 83 } else {
kris@kris-X682X 6:ee9c86f06eae 84 printf("Uninitialized, setting up first time");
kris@kris-X682X 6:ee9c86f06eae 85 packed_A newmemory;
kris@kris-X682X 6:ee9c86f06eae 86 newmemory.magic = MAGIC_VALUE;
kris@kris-X682X 6:ee9c86f06eae 87 newmemory.value[0] = 2;
kris@kris-X682X 6:ee9c86f06eae 88 newmemory.value[1] = 3;
kris@kris-X682X 6:ee9c86f06eae 89 newmemory.value[2] = 4;
kris@kris-X682X 6:ee9c86f06eae 90 newmemory.value[3] = 5;
kris@kris-X682X 6:ee9c86f06eae 91 newmemory.value[4] = 6;
kris@kris-X682X 6:ee9c86f06eae 92 flash_device.erase(address, flash_device.get_sector_size(address));
kris@kris-X682X 6:ee9c86f06eae 93 flash_device.program(&newmemory, address, sizeof(newmemory));
kris@kris-X682X 6:ee9c86f06eae 94 printf("Flashed");
kris@kris-X682X 6:ee9c86f06eae 95 }
kris@kris-X682X 6:ee9c86f06eae 96 return 0;
kris@kris-X682X 6:ee9c86f06eae 97 }
kris@kris-X682X 6:ee9c86f06eae 98
kris@kris-X682X 6:ee9c86f06eae 99
kris@kris-X682X 6:ee9c86f06eae 100 int InterestService::writeToFs() {
kris@kris-X682X 6:ee9c86f06eae 101 enum { MAGIC_VALUE = 0xDEADBEEF };
kris@kris-X682X 6:ee9c86f06eae 102 mbed::FlashIAP flash_device;
kris@kris-X682X 6:ee9c86f06eae 103 flash_device.init();
kris@kris-X682X 6:ee9c86f06eae 104 packed_A newmemory;
kris@kris-X682X 6:ee9c86f06eae 105 int sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL);
kris@kris-X682X 6:ee9c86f06eae 106 int page_size = flash_device.get_page_size();
kris@kris-X682X 6:ee9c86f06eae 107 int address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size);
kris@kris-X682X 6:ee9c86f06eae 108
kris@kris-X682X 6:ee9c86f06eae 109 newmemory.magic = MAGIC_VALUE;
kris@kris-X682X 6:ee9c86f06eae 110 newmemory.value[0] = interests[0];
kris@kris-X682X 6:ee9c86f06eae 111 newmemory.value[1] = interests[1];
kris@kris-X682X 6:ee9c86f06eae 112 newmemory.value[2] = interests[2];
kris@kris-X682X 6:ee9c86f06eae 113 newmemory.value[3] = interests[3];
kris@kris-X682X 6:ee9c86f06eae 114 newmemory.value[4] = interests[4];
kris@kris-X682X 6:ee9c86f06eae 115 flash_device.erase(address, flash_device.get_sector_size(address));
kris@kris-X682X 6:ee9c86f06eae 116 flash_device.program(&newmemory, address, sizeof(newmemory));
kris@kris-X682X 6:ee9c86f06eae 117 printf("Flashed");
kris@kris-X682X 6:ee9c86f06eae 118 return 0;
kris@kris-X682X 6:ee9c86f06eae 119 }
kris@kris-X682X 6:ee9c86f06eae 120
kris@kris-X682X 6:ee9c86f06eae 121 int InterestService::createFs(){
kris@kris-X682X 6:ee9c86f06eae 122 return true;
kris@kris-X682X 6:ee9c86f06eae 123 }
kris@kris-X682X 6:ee9c86f06eae 124
kris@kris-X682X 6:ee9c86f06eae 125 InterestService::~InterestService() {
kris@kris-X682X 6:ee9c86f06eae 126 printf("[PERIPHERAL]\t Destructing InterestService");
kris@kris-X682X 6:ee9c86f06eae 127 }