Kris Scholte Lubberink
/
SSS_Ble
Ble for smart sOlutions
source/InterestService.cpp@11:d6ed1437c2ee, 2019-06-20 (annotated)
- Committer:
- kris@kris-X682X
- Date:
- Thu Jun 20 13:20:24 2019 +0200
- Revision:
- 11:d6ed1437c2ee
- Parent:
- 10:d845189d146e
Refactored
Who changed what in which revision?
User | Revision | Line number | New 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 | 9:92d861703f96 | 5 | #include <wait_api.h> |
kris@kris-X682X | 6:ee9c86f06eae | 6 | #include "InterestService.h" |
kris@kris-X682X | 10:d845189d146e | 7 | |
kris@kris-X682X | 10:d845189d146e | 8 | #include "FlashIAP.h" |
kris@kris-X682X | 10:d845189d146e | 9 | #include "MyStripSingleton.h" |
kris@kris-X682X | 10:d845189d146e | 10 | |
kris@kris-X682X | 10:d845189d146e | 11 | uint32_t sector_size; |
kris@kris-X682X | 10:d845189d146e | 12 | uint32_t page_size; |
kris@kris-X682X | 10:d845189d146e | 13 | uint32_t prog_size; |
kris@kris-X682X | 10:d845189d146e | 14 | uint32_t address; |
kris@kris-X682X | 10:d845189d146e | 15 | mbed::FlashIAP flash_device; |
kris@kris-X682X | 10:d845189d146e | 16 | |
kris@kris-X682X | 6:ee9c86f06eae | 17 | #pragma pack(push,1) |
kris@kris-X682X | 6:ee9c86f06eae | 18 | struct packed_A { |
kris@kris-X682X | 6:ee9c86f06eae | 19 | uint32_t magic; |
kris@kris-X682X | 10:d845189d146e | 20 | uint32_t interest1; |
kris@kris-X682X | 10:d845189d146e | 21 | uint32_t interest2; |
kris@kris-X682X | 10:d845189d146e | 22 | uint32_t interest3; |
kris@kris-X682X | 10:d845189d146e | 23 | uint32_t interest4; |
kris@kris-X682X | 10:d845189d146e | 24 | uint32_t interest5; |
kris@kris-X682X | 10:d845189d146e | 25 | |
kris@kris-X682X | 6:ee9c86f06eae | 26 | }; |
kris@kris-X682X | 6:ee9c86f06eae | 27 | #pragma pack(pop) |
kris@kris-X682X | 10:d845189d146e | 28 | enum { MAGIC_VALUE = 0xC0FFEE }; |
kris@kris-X682X | 6:ee9c86f06eae | 29 | |
kris@kris-X682X | 6:ee9c86f06eae | 30 | InterestService::InterestService(BLE& _ble) : |
kris@kris-X682X | 6:ee9c86f06eae | 31 | ble(_ble), |
kris@kris-X682X | 6:ee9c86f06eae | 32 | interestCharacteristic( (UUID)CustomUUIDs::UUID_INTEREST_CHAR, |
kris@kris-X682X | 6:ee9c86f06eae | 33 | &interests, |
kris@kris-X682X | 6:ee9c86f06eae | 34 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NONE) |
kris@kris-X682X | 6:ee9c86f06eae | 35 | { |
kris@kris-X682X | 6:ee9c86f06eae | 36 | printf("[PERIPHERAL] Adding interest service.. \r\n"); |
kris@kris-X682X | 6:ee9c86f06eae | 37 | GattCharacteristic *charTable[] = { &interestCharacteristic }; |
kris@kris-X682X | 6:ee9c86f06eae | 38 | |
kris@kris-X682X | 9:92d861703f96 | 39 | GattService interestService( |
kris@kris-X682X | 6:ee9c86f06eae | 40 | CustomUUIDs::UUID_INTEREST_SERVICE, |
kris@kris-X682X | 6:ee9c86f06eae | 41 | charTable, |
kris@kris-X682X | 6:ee9c86f06eae | 42 | sizeof(charTable) / sizeof(GattCharacteristic *)); |
kris@kris-X682X | 9:92d861703f96 | 43 | ble.gattServer().addService(interestService); |
kris@kris-X682X | 6:ee9c86f06eae | 44 | ble.gattServer().onDataWritten(this, &InterestService::onDataWritten); |
kris@kris-X682X | 6:ee9c86f06eae | 45 | readFromFs(); |
kris@kris-X682X | 10:d845189d146e | 46 | } |
kris@kris-X682X | 6:ee9c86f06eae | 47 | |
kris@kris-X682X | 10:d845189d146e | 48 | bool initializeDevice() |
kris@kris-X682X | 10:d845189d146e | 49 | { |
kris@kris-X682X | 10:d845189d146e | 50 | return flash_device.init() == 0; |
kris@kris-X682X | 6:ee9c86f06eae | 51 | } |
kris@kris-X682X | 6:ee9c86f06eae | 52 | |
kris@kris-X682X | 10:d845189d146e | 53 | void determineValues() |
kris@kris-X682X | 10:d845189d146e | 54 | { |
kris@kris-X682X | 10:d845189d146e | 55 | sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL); |
kris@kris-X682X | 10:d845189d146e | 56 | page_size = flash_device.get_page_size(); |
kris@kris-X682X | 10:d845189d146e | 57 | address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size); |
kris@kris-X682X | 10:d845189d146e | 58 | printf("[PERIPHERAL]\t Sector size: %d \r\n", sector_size); |
kris@kris-X682X | 10:d845189d146e | 59 | printf("[PERIPHERAL]\t Page size: %d \r\n", page_size); |
kris@kris-X682X | 10:d845189d146e | 60 | printf("[PERIPHERAL]\t Address: %d \r\n", address); |
kris@kris-X682X | 10:d845189d146e | 61 | } |
kris@kris-X682X | 6:ee9c86f06eae | 62 | void InterestService::onDataWritten(const GattWriteCallbackParams *writeParams) { |
kris@kris-X682X | 6:ee9c86f06eae | 63 | //TODO: You gave me some data... Let's store it! |
kris@kris-X682X | 6:ee9c86f06eae | 64 | uint16_t handle = writeParams->handle; |
kris@kris-X682X | 10:d845189d146e | 65 | printf("[PERIPHERAL]\t You wrote some data... But for which char? \r\n"); |
kris@kris-X682X | 6:ee9c86f06eae | 66 | printf("%d == %d", handle, interestCharacteristic.getValueHandle());//colorCharacteristic.getValueHandle()); |
kris@kris-X682X | 10:d845189d146e | 67 | if(handle == 6 || handle == 16 || handle == interestCharacteristic.getValueHandle()){ |
kris@kris-X682X | 10:d845189d146e | 68 | printf("[PERIPHERAL]\t You wrote interests!"); |
kris@kris-X682X | 10:d845189d146e | 69 | printf("[PERIPHERAL]\t The value should be an array of 5 integers."); |
kris@kris-X682X | 6:ee9c86f06eae | 70 | // color = writeParams->data; |
kris@kris-X682X | 6:ee9c86f06eae | 71 | int index = 0; |
kris@kris-X682X | 7:9cda1b0f25ae | 72 | for (int i=0; i < 20; i++) { |
kris@kris-X682X | 7:9cda1b0f25ae | 73 | interests[i] = writeParams->data[i]; |
kris@kris-X682X | 6:ee9c86f06eae | 74 | index++; |
kris@kris-X682X | 10:d845189d146e | 75 | printf("[PERIPHERAL]\t Index: %d, val %08X \r\n", index, interests[i]); |
kris@kris-X682X | 6:ee9c86f06eae | 76 | } |
kris@kris-X682X | 9:92d861703f96 | 77 | printf("[PERIPHERAL]\t Writing that to the FS..\r\n"); |
kris@kris-X682X | 6:ee9c86f06eae | 78 | writeToFs(); |
kris@kris-X682X | 9:92d861703f96 | 79 | } |
kris@kris-X682X | 6:ee9c86f06eae | 80 | } |
kris@kris-X682X | 6:ee9c86f06eae | 81 | |
kris@kris-X682X | 10:d845189d146e | 82 | |
kris@kris-X682X | 6:ee9c86f06eae | 83 | int InterestService::readFromFs() { |
kris@kris-X682X | 10:d845189d146e | 84 | if(initializeDevice()){ |
kris@kris-X682X | 10:d845189d146e | 85 | determineValues(); |
kris@kris-X682X | 10:d845189d146e | 86 | |
kris@kris-X682X | 10:d845189d146e | 87 | |
kris@kris-X682X | 10:d845189d146e | 88 | uint8_t *data_flashed = new uint8_t[24]; |
kris@kris-X682X | 10:d845189d146e | 89 | uint8_t buffer[24]; |
kris@kris-X682X | 10:d845189d146e | 90 | flash_device.read(buffer, address, 24); |
kris@kris-X682X | 10:d845189d146e | 91 | packed_A const *ptr = (packed_A const *) buffer; |
kris@kris-X682X | 10:d845189d146e | 92 | // printf("%d", ptr->magic); |
kris@kris-X682X | 6:ee9c86f06eae | 93 | |
kris@kris-X682X | 10:d845189d146e | 94 | if(ptr->magic == MAGIC_VALUE) { |
kris@kris-X682X | 10:d845189d146e | 95 | printf("[PERIPHERAL]\t Address initialized, current magic %6x \r\n", ptr->magic); |
kris@kris-X682X | 10:d845189d146e | 96 | printf("[PERIPHERAL]\t Address initialized, current list %lx,%lx,%lx,%lx,%lx \r\n", |
kris@kris-X682X | 10:d845189d146e | 97 | ptr->interest1, |
kris@kris-X682X | 10:d845189d146e | 98 | ptr->interest2, |
kris@kris-X682X | 10:d845189d146e | 99 | ptr->interest3, |
kris@kris-X682X | 10:d845189d146e | 100 | ptr->interest4, |
kris@kris-X682X | 10:d845189d146e | 101 | ptr->interest5); |
kris@kris-X682X | 10:d845189d146e | 102 | |
kris@kris-X682X | 10:d845189d146e | 103 | interests[0] = ptr->interest1; |
kris@kris-X682X | 10:d845189d146e | 104 | interests[1] = ptr->interest2; |
kris@kris-X682X | 10:d845189d146e | 105 | interests[2] = ptr->interest3; |
kris@kris-X682X | 10:d845189d146e | 106 | interests[3] = ptr->interest4; |
kris@kris-X682X | 10:d845189d146e | 107 | interests[4] = ptr->interest5; |
kris@kris-X682X | 10:d845189d146e | 108 | ble.gattServer().write(interestCharacteristic.getValueHandle(), (uint8_t *) &interests, sizeof(interests_T)); |
kris@kris-X682X | 6:ee9c86f06eae | 109 | |
kris@kris-X682X | 10:d845189d146e | 110 | printf("[PERIPHERAL]\t Interests should now be set to: %8x,%8x,%8x,%8x,%8x \r\n", |
kris@kris-X682X | 10:d845189d146e | 111 | interests[0], |
kris@kris-X682X | 10:d845189d146e | 112 | interests[1], |
kris@kris-X682X | 10:d845189d146e | 113 | interests[2], |
kris@kris-X682X | 10:d845189d146e | 114 | interests[3], |
kris@kris-X682X | 10:d845189d146e | 115 | interests[4] |
kris@kris-X682X | 10:d845189d146e | 116 | ) ; |
kris@kris-X682X | 10:d845189d146e | 117 | MyStripSingleton::getInstance()->ints.interest1 = ptr->interest1; |
kris@kris-X682X | 10:d845189d146e | 118 | MyStripSingleton::getInstance()->ints.interest2 = ptr->interest2; |
kris@kris-X682X | 10:d845189d146e | 119 | MyStripSingleton::getInstance()->ints.interest3 = ptr->interest3; |
kris@kris-X682X | 10:d845189d146e | 120 | MyStripSingleton::getInstance()->ints.interest4 = ptr->interest4; |
kris@kris-X682X | 10:d845189d146e | 121 | MyStripSingleton::getInstance()->ints.interest5 = ptr->interest5; |
kris@kris-X682X | 10:d845189d146e | 122 | |
kris@kris-X682X | 7:9cda1b0f25ae | 123 | |
kris@kris-X682X | 10:d845189d146e | 124 | printf("[PERIPHERAL]\t Interest 1: %d %6x \r\n", MyStripSingleton::getInstance()->ints.interest1 >> 24, MyStripSingleton::getInstance()->ints.interest1); |
kris@kris-X682X | 10:d845189d146e | 125 | printf("[PERIPHERAL]\t Interest 2: %d %8x \r\n", MyStripSingleton::getInstance()->ints.interest2 >> 24, MyStripSingleton::getInstance()->ints.interest2 ); |
kris@kris-X682X | 10:d845189d146e | 126 | printf("[PERIPHERAL]\t Interest 3: %d %8x \r\n", MyStripSingleton::getInstance()->ints.interest3 >> 24, MyStripSingleton::getInstance()->ints.interest3 ); |
kris@kris-X682X | 10:d845189d146e | 127 | printf("[PERIPHERAL]\t Interest 4: %d %8x \r\n", MyStripSingleton::getInstance()->ints.interest4 >> 24, MyStripSingleton::getInstance()->ints.interest4 ); |
kris@kris-X682X | 10:d845189d146e | 128 | printf("[PERIPHERAL]\t Interest 5: %d %8x \r\n", MyStripSingleton::getInstance()->ints.interest5 >> 24, MyStripSingleton::getInstance()->ints.interest5 ); |
kris@kris-X682X | 10:d845189d146e | 129 | } else { |
kris@kris-X682X | 10:d845189d146e | 130 | printf("[PERIPHERAL]\t Uninitialized, setting up first time"); |
kris@kris-X682X | 10:d845189d146e | 131 | packed_A newmemory; |
kris@kris-X682X | 10:d845189d146e | 132 | newmemory.magic = MAGIC_VALUE; |
kris@kris-X682X | 10:d845189d146e | 133 | newmemory.interest1 = 0UL; |
kris@kris-X682X | 10:d845189d146e | 134 | newmemory.interest2 = 0UL; |
kris@kris-X682X | 10:d845189d146e | 135 | newmemory.interest3 = 0UL; |
kris@kris-X682X | 10:d845189d146e | 136 | newmemory.interest4 = 0UL; |
kris@kris-X682X | 10:d845189d146e | 137 | newmemory.interest5 = 0UL; |
kris@kris-X682X | 10:d845189d146e | 138 | interests[0] = 0; |
kris@kris-X682X | 10:d845189d146e | 139 | interests[1] = 0; |
kris@kris-X682X | 10:d845189d146e | 140 | interests[2] = 0; |
kris@kris-X682X | 10:d845189d146e | 141 | interests[3] = 0; |
kris@kris-X682X | 10:d845189d146e | 142 | interests[4] = 0; |
kris@kris-X682X | 10:d845189d146e | 143 | ble.gattServer().write(interestCharacteristic.getValueHandle(), (uint8_t *) &interests, sizeof(interests_T)); |
kris@kris-X682X | 10:d845189d146e | 144 | |
kris@kris-X682X | 10:d845189d146e | 145 | flash_device.erase(address, flash_device.get_sector_size(address)); |
kris@kris-X682X | 10:d845189d146e | 146 | flash_device.program(&newmemory, address, flash_device.get_sector_size(address)); |
kris@kris-X682X | 10:d845189d146e | 147 | printf("[PERIPHERAL]\t Flashed for the first time."); |
kris@kris-X682X | 7:9cda1b0f25ae | 148 | } |
kris@kris-X682X | 10:d845189d146e | 149 | return 0; |
kris@kris-X682X | 6:ee9c86f06eae | 150 | } else { |
kris@kris-X682X | 10:d845189d146e | 151 | printf("[PERIPHERAL]\t Couldn't init fs. \r\n"); |
kris@kris-X682X | 10:d845189d146e | 152 | return -1; |
kris@kris-X682X | 6:ee9c86f06eae | 153 | } |
kris@kris-X682X | 6:ee9c86f06eae | 154 | } |
kris@kris-X682X | 6:ee9c86f06eae | 155 | |
kris@kris-X682X | 6:ee9c86f06eae | 156 | |
kris@kris-X682X | 6:ee9c86f06eae | 157 | int InterestService::writeToFs() { |
kris@kris-X682X | 6:ee9c86f06eae | 158 | mbed::FlashIAP flash_device; |
kris@kris-X682X | 6:ee9c86f06eae | 159 | flash_device.init(); |
kris@kris-X682X | 9:92d861703f96 | 160 | printf("[PERIPHERAL]\t Inited FS.. \r\n"); |
kris@kris-X682X | 6:ee9c86f06eae | 161 | packed_A newmemory; |
kris@kris-X682X | 6:ee9c86f06eae | 162 | int sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL); |
kris@kris-X682X | 6:ee9c86f06eae | 163 | int page_size = flash_device.get_page_size(); |
kris@kris-X682X | 6:ee9c86f06eae | 164 | int address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size); |
kris@kris-X682X | 10:d845189d146e | 165 | printf("[PERIPHERAL]\t Ready?\r\n"); |
kris@kris-X682X | 6:ee9c86f06eae | 166 | |
kris@kris-X682X | 6:ee9c86f06eae | 167 | newmemory.magic = MAGIC_VALUE; |
kris@kris-X682X | 10:d845189d146e | 168 | newmemory.interest1 = int((unsigned char)( interests[0]) << 24| |
kris@kris-X682X | 10:d845189d146e | 169 | (unsigned char)( interests[1]) << 16 | |
kris@kris-X682X | 10:d845189d146e | 170 | (unsigned char)( interests[2]) << 8 | |
kris@kris-X682X | 10:d845189d146e | 171 | (unsigned char)( interests[3])); |
kris@kris-X682X | 10:d845189d146e | 172 | newmemory.interest2 = int((unsigned char)( interests[4]) << 24| |
kris@kris-X682X | 10:d845189d146e | 173 | (unsigned char)( interests[5]) << 16 | |
kris@kris-X682X | 10:d845189d146e | 174 | (unsigned char)( interests[6]) << 8 | |
kris@kris-X682X | 10:d845189d146e | 175 | (unsigned char)( interests[7])); |
kris@kris-X682X | 10:d845189d146e | 176 | newmemory.interest3 = int((unsigned char)( interests[8]) << 24| |
kris@kris-X682X | 10:d845189d146e | 177 | (unsigned char)( interests[9]) << 16 | |
kris@kris-X682X | 10:d845189d146e | 178 | (unsigned char)( interests[10]) << 8 | |
kris@kris-X682X | 10:d845189d146e | 179 | (unsigned char)( interests[11])); |
kris@kris-X682X | 10:d845189d146e | 180 | newmemory.interest4 = int((unsigned char)( interests[12]) << 24| |
kris@kris-X682X | 10:d845189d146e | 181 | (unsigned char)( interests[13]) << 16 | |
kris@kris-X682X | 10:d845189d146e | 182 | (unsigned char)( interests[14]) << 8 | |
kris@kris-X682X | 10:d845189d146e | 183 | (unsigned char)( interests[15])); |
kris@kris-X682X | 10:d845189d146e | 184 | newmemory.interest5 = int((unsigned char)( interests[16]) << 24| |
kris@kris-X682X | 10:d845189d146e | 185 | (unsigned char)( interests[17]) << 16 | |
kris@kris-X682X | 10:d845189d146e | 186 | (unsigned char)( interests[18]) << 8 | |
kris@kris-X682X | 10:d845189d146e | 187 | (unsigned char)( interests[19])); |
kris@kris-X682X | 10:d845189d146e | 188 | printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest1 );//interests[i]); |
kris@kris-X682X | 10:d845189d146e | 189 | printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest2 );//interests[i]); |
kris@kris-X682X | 10:d845189d146e | 190 | printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest3 );//interests[i]); |
kris@kris-X682X | 10:d845189d146e | 191 | printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest4 );//interests[i]); |
kris@kris-X682X | 10:d845189d146e | 192 | printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest5 );//interests[i]); |
kris@kris-X682X | 7:9cda1b0f25ae | 193 | |
kris@kris-X682X | 9:92d861703f96 | 194 | |
kris@kris-X682X | 10:d845189d146e | 195 | printf("[PERIPHERAL]\t %d\r\n", sizeof(newmemory)); |
kris@kris-X682X | 10:d845189d146e | 196 | printf("[PERIPHERAL]\t %d\r\n", address); |
kris@kris-X682X | 10:d845189d146e | 197 | printf("[PERIPHERAL]\t %d\r\n", sizeof(interests)); |
kris@kris-X682X | 9:92d861703f96 | 198 | |
kris@kris-X682X | 6:ee9c86f06eae | 199 | flash_device.erase(address, flash_device.get_sector_size(address)); |
kris@kris-X682X | 9:92d861703f96 | 200 | wait(0.2); |
kris@kris-X682X | 10:d845189d146e | 201 | int result = flash_device.program(&newmemory, address, flash_device.get_sector_size(address)); |
kris@kris-X682X | 10:d845189d146e | 202 | printf("[PERIPHERAL]\t Flashed with result %d \r\n", result); |
kris@kris-X682X | 10:d845189d146e | 203 | readFromFs(); |
kris@kris-X682X | 10:d845189d146e | 204 | |
kris@kris-X682X | 6:ee9c86f06eae | 205 | return 0; |
kris@kris-X682X | 6:ee9c86f06eae | 206 | } |
kris@kris-X682X | 6:ee9c86f06eae | 207 | |
kris@kris-X682X | 6:ee9c86f06eae | 208 | int InterestService::createFs(){ |
kris@kris-X682X | 6:ee9c86f06eae | 209 | return true; |
kris@kris-X682X | 6:ee9c86f06eae | 210 | } |
kris@kris-X682X | 6:ee9c86f06eae | 211 | |
kris@kris-X682X | 6:ee9c86f06eae | 212 | InterestService::~InterestService() { |
kris@kris-X682X | 9:92d861703f96 | 213 | printf("[PERIPHERAL]\t Destructing InterestService\r\n"); |
kris@kris-X682X | 10:d845189d146e | 214 | } |