Lightly modified version of the BLE stack, that doesn't bring up a DFUService by default... as we have our own.
Fork of BLE_API by
Diff: services/URIBeaconConfigService.h
- Revision:
- 271:7f2465b7978e
- Parent:
- 270:e2e0f4c850fd
- Child:
- 272:65b9d9c87ed1
--- a/services/URIBeaconConfigService.h Wed Jan 21 09:32:52 2015 +0000 +++ b/services/URIBeaconConfigService.h Wed Jan 21 09:32:52 2015 +0000 @@ -82,6 +82,7 @@ serviceDataPayload(), initSucceeded(false), lockedState(false), + lockBits(), uriDataLength(0), uriData(), flags(flagsIn), @@ -99,8 +100,7 @@ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE), beaconPeriodChar(beaconPeriodCharUUID, reinterpret_cast<uint8_t *>(&beaconPeriod), 2, 2, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE), - resetChar(resetCharUUID, reinterpret_cast<uint8_t *>(&resetFlag), 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE), - lockBits() + resetChar(resetCharUUID, reinterpret_cast<uint8_t *>(&resetFlag), 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE) { if ((uriDataIn == NULL) || ((uriDataLength = strlen(uriDataIn)) == 0) || (uriDataLength > MAX_SIZE_URI_DATA_CHAR_VALUE)) { return; @@ -198,6 +198,21 @@ updateBeaconPeriodCharacteristic(); } +protected: + void updateLockBits(const LockBits_t lockBitsIn) { + static const uint8_t allZeroes[SIZEOF_LOCK_BITS] = {0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0}; + + memcpy(lockBits, lockBitsIn, SIZEOF_LOCK_BITS); + if (memcmp(lockBits, allZeroes, SIZEOF_LOCK_BITS)) { + lockedState = true; + } + } + + void copyLockBitsInto(LockBits_t lockBitsOut) const { + memcpy(lockBitsOut, lockBits, SIZEOF_LOCK_BITS); + } + /** * APIs around making lockBits persistent. */ @@ -347,17 +362,9 @@ */ void onDataWritten(const GattCharacteristicWriteCBParams *params) { uint16_t handle = params->charHandle; - - static const uint8_t allZeroes[SIZEOF_LOCK_BITS] = {0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - if (handle == lockChar.getValueHandle()) { - if (memcmp(params->data, allZeroes, SIZEOF_LOCK_BITS)) { - memcpy(lockBits, params->data, SIZEOF_LOCK_BITS); - lockedState = true; - - storage_saveLockBits(); - } + updateLockBits(params->data); + storage_saveLockBits(); } else if (handle == unlockChar.getValueHandle()) { memset(lockBits, 0, SIZEOF_LOCK_BITS); lockedState = false; @@ -506,6 +513,8 @@ bool initSucceeded; bool lockedState; + uint8_t lockBits[SIZEOF_LOCK_BITS]; + uint16_t uriDataLength; uint8_t uriData[MAX_SIZE_URI_DATA_CHAR_VALUE]; uint8_t flags; @@ -523,9 +532,6 @@ GattCharacteristic txPowerModeChar; GattCharacteristic beaconPeriodChar; GattCharacteristic resetChar; - -protected: - uint8_t lockBits[SIZEOF_LOCK_BITS]; }; #endif /* #ifndef __BLE_URI_BEACON_CONFIG_SERVICE_H__*/ \ No newline at end of file