Kris Scholte Lubberink
/
SSS_Ble
Ble for smart sOlutions
Diff: source/InterestService.cpp
- Revision:
- 10:d845189d146e
- Parent:
- 9:92d861703f96
- Child:
- 11:d6ed1437c2ee
--- a/source/InterestService.cpp Tue Jun 11 11:16:55 2019 +0200 +++ b/source/InterestService.cpp Fri Jun 14 10:24:57 2019 +0200 @@ -4,12 +4,28 @@ #include <wait_api.h> #include "InterestService.h" + +#include "FlashIAP.h" +#include "MyStripSingleton.h" + +uint32_t sector_size; +uint32_t page_size; +uint32_t prog_size; +uint32_t address; +mbed::FlashIAP flash_device; + #pragma pack(push,1) struct packed_A { uint32_t magic; - int value[5]; + uint32_t interest1; + uint32_t interest2; + uint32_t interest3; + uint32_t interest4; + uint32_t interest5; + }; #pragma pack(pop) +enum { MAGIC_VALUE = 0xC0FFEE }; InterestService::InterestService(BLE& _ble) : ble(_ble), @@ -17,11 +33,6 @@ &interests, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NONE) { - -// static bool serviceAdded = false; /* We should only ever need to add the information service once. */ -// if (serviceAdded) { -// return; -// } printf("[PERIPHERAL] Adding interest service.. \r\n"); GattCharacteristic *charTable[] = { &interestCharacteristic }; @@ -32,76 +43,119 @@ ble.gattServer().addService(interestService); ble.gattServer().onDataWritten(this, &InterestService::onDataWritten); readFromFs(); +} -// serviceAdded = true; +bool initializeDevice() +{ + return flash_device.init() == 0; } +void determineValues() +{ + sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL); + page_size = flash_device.get_page_size(); + address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size); + printf("[PERIPHERAL]\t Sector size: %d \r\n", sector_size); + printf("[PERIPHERAL]\t Page size: %d \r\n", page_size); + printf("[PERIPHERAL]\t Address: %d \r\n", address); +} void InterestService::onDataWritten(const GattWriteCallbackParams *writeParams) { //TODO: You gave me some data... Let's store it! uint16_t handle = writeParams->handle; - printf("You wrote some data... But for which char? \r\n"); + printf("[PERIPHERAL]\t You wrote some data... But for which char? \r\n"); printf("%d == %d", handle, interestCharacteristic.getValueHandle());//colorCharacteristic.getValueHandle()); - if(handle == interestCharacteristic.getValueHandle()){ - printf("You wrote interests!"); - printf("The value should be an array of 20 integers."); + if(handle == 6 || handle == 16 || handle == interestCharacteristic.getValueHandle()){ + printf("[PERIPHERAL]\t You wrote interests!"); + printf("[PERIPHERAL]\t The value should be an array of 5 integers."); // color = writeParams->data; int index = 0; for (int i=0; i < 20; i++) { interests[i] = writeParams->data[i]; index++; - printf("Index: %d, val %08X \r\n", index, interests[i]); + printf("[PERIPHERAL]\t Index: %d, val %08X \r\n", index, interests[i]); } printf("[PERIPHERAL]\t Writing that to the FS..\r\n"); writeToFs(); } } + int InterestService::readFromFs() { - enum { MAGIC_VALUE = 0xC0FFEE20 }; - mbed::FlashIAP flash_device; - flash_device.init(); - int sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL); - int page_size = flash_device.get_page_size(); - int address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size); - printf("Sector size: %d \r\n", sector_size); - printf("Page size: %d \r\n", page_size); - printf("Address: %d \r\n", address); + if(initializeDevice()){ + determineValues(); + + + uint8_t *data_flashed = new uint8_t[24]; + uint8_t buffer[24]; + flash_device.read(buffer, address, 24); + packed_A const *ptr = (packed_A const *) buffer; +// printf("%d", ptr->magic); - int buffer[5]; - flash_device.read(buffer, address, 5); - packed_A const *ptr = (packed_A const *) buffer; + if(ptr->magic == MAGIC_VALUE) { + printf("[PERIPHERAL]\t Address initialized, current magic %6x \r\n", ptr->magic); + printf("[PERIPHERAL]\t Address initialized, current list %lx,%lx,%lx,%lx,%lx \r\n", + ptr->interest1, + ptr->interest2, + ptr->interest3, + ptr->interest4, + ptr->interest5); + + interests[0] = ptr->interest1; + interests[1] = ptr->interest2; + interests[2] = ptr->interest3; + interests[3] = ptr->interest4; + interests[4] = ptr->interest5; + //TODO: wRITE THIS TO THE GATTSERVER + ble.gattServer().write(interestCharacteristic.getValueHandle(), (uint8_t *) &interests, sizeof(interests_T)); - if(ptr->magic == MAGIC_VALUE) { - printf("Address initialized, current list %d,%d,%d,%d,%d \r\n", ptr->value[0], - ptr->value[1], - ptr->value[2], - ptr->value[3], - ptr->value[4]); + printf("[PERIPHERAL]\t Interests should now be set to: %8x,%8x,%8x,%8x,%8x \r\n", + interests[0], + interests[1], + interests[2], + interests[3], + interests[4] + ) ; + MyStripSingleton::getInstance()->ints.interest1 = ptr->interest1; + MyStripSingleton::getInstance()->ints.interest2 = ptr->interest2; + MyStripSingleton::getInstance()->ints.interest3 = ptr->interest3; + MyStripSingleton::getInstance()->ints.interest4 = ptr->interest4; + MyStripSingleton::getInstance()->ints.interest5 = ptr->interest5; + - for (int i=0; i < 20; i++) { - interests[i] = int((unsigned char)(ptr->value[i] &0xff) << 24 | - (unsigned char)(ptr->value[i+1]&0xff) << 16 | - (unsigned char)(ptr->value[i+2]&0xff) << 8 | - (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); + printf("[PERIPHERAL]\t Interest 1: %d %6x \r\n", MyStripSingleton::getInstance()->ints.interest1 >> 24, MyStripSingleton::getInstance()->ints.interest1); + printf("[PERIPHERAL]\t Interest 2: %d %8x \r\n", MyStripSingleton::getInstance()->ints.interest2 >> 24, MyStripSingleton::getInstance()->ints.interest2 ); + printf("[PERIPHERAL]\t Interest 3: %d %8x \r\n", MyStripSingleton::getInstance()->ints.interest3 >> 24, MyStripSingleton::getInstance()->ints.interest3 ); + printf("[PERIPHERAL]\t Interest 4: %d %8x \r\n", MyStripSingleton::getInstance()->ints.interest4 >> 24, MyStripSingleton::getInstance()->ints.interest4 ); + printf("[PERIPHERAL]\t Interest 5: %d %8x \r\n", MyStripSingleton::getInstance()->ints.interest5 >> 24, MyStripSingleton::getInstance()->ints.interest5 ); + } else { + printf("[PERIPHERAL]\t Uninitialized, setting up first time"); + packed_A newmemory; + newmemory.magic = MAGIC_VALUE; + newmemory.interest1 = 0UL; + newmemory.interest2 = 0UL; + newmemory.interest3 = 0UL; + newmemory.interest4 = 0UL; + newmemory.interest5 = 0UL; + interests[0] = 0; + interests[1] = 0; + interests[2] = 0; + interests[3] = 0; + interests[4] = 0; + ble.gattServer().write(interestCharacteristic.getValueHandle(), (uint8_t *) &interests, sizeof(interests_T)); + + flash_device.erase(address, flash_device.get_sector_size(address)); + flash_device.program(&newmemory, address, flash_device.get_sector_size(address)); + printf("[PERIPHERAL]\t Flashed for the first time."); } - + return 0; } else { - printf("Uninitialized, setting up first time"); - packed_A newmemory; - newmemory.magic = MAGIC_VALUE; - for (int i=0; i < 20; i++) { - newmemory.value[i] = 2; - } - flash_device.erase(address, flash_device.get_sector_size(address)); - flash_device.program(&newmemory, address, sizeof(newmemory)); - printf("Flashed"); + printf("[PERIPHERAL]\t Couldn't init fs. \r\n"); + return -1; } - return 0; } int InterestService::writeToFs() { - enum { MAGIC_VALUE = 0xC0FFEE20 }; mbed::FlashIAP flash_device; flash_device.init(); printf("[PERIPHERAL]\t Inited FS.. \r\n"); @@ -109,24 +163,46 @@ int sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL); int page_size = flash_device.get_page_size(); int address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size); - printf("[PERIPHERAL]\t Ready?"); + printf("[PERIPHERAL]\t Ready?\r\n"); newmemory.magic = MAGIC_VALUE; - for (int i=0; i < 5; i++) { - printf("[PERIPHERAL]\t U wrote: %d", interests[i]); - newmemory.value[i] = interests[i]; - } + newmemory.interest1 = int((unsigned char)( interests[0]) << 24| + (unsigned char)( interests[1]) << 16 | + (unsigned char)( interests[2]) << 8 | + (unsigned char)( interests[3])); + newmemory.interest2 = int((unsigned char)( interests[4]) << 24| + (unsigned char)( interests[5]) << 16 | + (unsigned char)( interests[6]) << 8 | + (unsigned char)( interests[7])); + newmemory.interest3 = int((unsigned char)( interests[8]) << 24| + (unsigned char)( interests[9]) << 16 | + (unsigned char)( interests[10]) << 8 | + (unsigned char)( interests[11])); + newmemory.interest4 = int((unsigned char)( interests[12]) << 24| + (unsigned char)( interests[13]) << 16 | + (unsigned char)( interests[14]) << 8 | + (unsigned char)( interests[15])); + newmemory.interest5 = int((unsigned char)( interests[16]) << 24| + (unsigned char)( interests[17]) << 16 | + (unsigned char)( interests[18]) << 8 | + (unsigned char)( interests[19])); + printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest1 );//interests[i]); + printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest2 );//interests[i]); + printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest3 );//interests[i]); + printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest4 );//interests[i]); + printf("[PERIPHERAL]\t Mem is now: %d \r\n", newmemory.interest5 );//interests[i]); - printf("[PERIPHERAL]\t %d", sizeof(newmemory)); - printf("[PERIPHERAL]\t %d", address); - printf("[PERIPHERAL]\t %d", sizeof(interests)); + printf("[PERIPHERAL]\t %d\r\n", sizeof(newmemory)); + printf("[PERIPHERAL]\t %d\r\n", address); + printf("[PERIPHERAL]\t %d\r\n", sizeof(interests)); flash_device.erase(address, flash_device.get_sector_size(address)); wait(0.2); -// return 0; - flash_device.program(&newmemory, address, sizeof(newmemory)); - printf("Flashed"); + int result = flash_device.program(&newmemory, address, flash_device.get_sector_size(address)); + printf("[PERIPHERAL]\t Flashed with result %d \r\n", result); + readFromFs(); + return 0; } @@ -136,4 +212,4 @@ InterestService::~InterestService() { printf("[PERIPHERAL]\t Destructing InterestService\r\n"); -} +} \ No newline at end of file