diff --git a/inc/bluetooth/MicroBitPartialFlashingService.h b/inc/bluetooth/MicroBitPartialFlashingService.h index 64a1d5bb..198b1cb3 100644 --- a/inc/bluetooth/MicroBitPartialFlashingService.h +++ b/inc/bluetooth/MicroBitPartialFlashingService.h @@ -101,7 +101,8 @@ class MicroBitPartialFlashingService uint8_t blockPacketCount = 0; // Keep track of blocks of data - uint32_t block[16]; + // uint32_t block[16]; // Replaced with pointer, memory allocated when PFS is used + uint32_t *block = NULL; uint8_t blockNum = 0; uint32_t offset = 0; diff --git a/source/bluetooth/MicroBitPartialFlashingService.cpp b/source/bluetooth/MicroBitPartialFlashingService.cpp index b0f1c42a..d1480831 100644 --- a/source/bluetooth/MicroBitPartialFlashingService.cpp +++ b/source/bluetooth/MicroBitPartialFlashingService.cpp @@ -41,6 +41,7 @@ DEALINGS IN THE SOFTWARE. MicroBitPartialFlashingService::MicroBitPartialFlashingService(BLEDevice &_ble, EventModel &_messageBus) : ble(_ble), messageBus(_messageBus) { + // Set up partial flashing characteristic uint8_t initCharacteristicValue = 0x00; GattCharacteristic partialFlashCharacteristic(MicroBitPartialFlashingServiceCharacteristicUUID, &initCharacteristicValue, sizeof(initCharacteristicValue), @@ -48,7 +49,6 @@ MicroBitPartialFlashingService::MicroBitPartialFlashingService(BLEDevice &_ble, // Set default security requirements partialFlashCharacteristic.requireSecurity(SecurityManager::MICROBIT_BLE_SECURITY_LEVEL); - // Create Partial Flashing Service GattCharacteristic *characteristics[] = {&partialFlashCharacteristic}; GattService service(MicroBitPartialFlashingServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic*) ); @@ -200,6 +200,11 @@ void MicroBitPartialFlashingService::flashData(uint8_t *data) packetCount++; + // Reallocate block + if(block == NULL) { + (uint32_t*) malloc(16 * sizeof(uint32_t)); + } + // Add to block memcpy(block + (4*blockNum), data + 4, 16);