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