Improve readability with getHandle inline
Fork of BLE_API by
Revision 229:e14bc27b224f, committed 2014-12-02
- Comitter:
- schilit
- Date:
- Tue Dec 02 02:51:52 2014 +0000
- Parent:
- 228:570b15f10ef1
- Child:
- 257:6be2b4b0cd71
- Commit message:
- define firmwarePowerLevels and defaultPowerLevels.
Changed in this revision
services/URIBeaconConfigService.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/services/URIBeaconConfigService.h Mon Dec 01 17:49:29 2014 +0000 +++ b/services/URIBeaconConfigService.h Tue Dec 02 02:51:52 2014 +0000 @@ -61,7 +61,8 @@ URIBeaconConfigService(BLEDevice &bleIn, const char *uriDataIn, uint8_t flagsIn = 0, - const int8_t powerLevelsIn[NUM_POWER_MODES] = NULL, + const int8_t defaultPowerLevelsIn[NUM_POWER_MODES] = NULL, + const int8_t firmwarePowerLevelsIn[NUM_POWER_MODES] = NULL, TXPowerModes_t powerModeIn = TX_POWER_MODE_LOW, uint16_t beaconPeriodIn = 1000) : ble(bleIn), @@ -72,7 +73,6 @@ uriDataLength(0), uriData(), flags(flagsIn), - powerLevels(), beaconPeriod(beaconPeriodIn), lockedStateChar(lockedStateCharUUID, reinterpret_cast<uint8_t *>(&lockedState), 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ), uriDataChar(uriDataCharUUID, uriData, MAX_SIZE_URI_DATA_CHAR_VALUE, MAX_SIZE_URI_DATA_CHAR_VALUE, @@ -84,18 +84,22 @@ 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) - { + 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; } strcpy(reinterpret_cast<char *>(uriData), uriDataIn); - if (powerLevelsIn != NULL) { - memcpy(powerLevels, powerLevelsIn, sizeof(powerLevels)); + if (defaultPowerLevelsIn != NULL) { + memcpy(defaultPowerLevels, defaultPowerLevelsIn, sizeof(defaultPowerLevels)); + memcpy(powerLevels, defaultPowerLevels, sizeof(powerLevels)); updateTxPowerLevelsCharacteristic(); } + if (firmwarePowerLevelsIn != NULL) { + memcpy(firmwarePowerLevels, firmwarePowerLevelsIn, sizeof(firmwarePowerLevels)); + } + configureGAP(); GattCharacteristic *charTable[] = {&lockedStateChar, &uriDataChar, &flagsChar, &txPowerLevelsChar, &beaconPeriodChar, &resetChar}; @@ -138,10 +142,13 @@ } /** - * Update the txPowerLevels table. + * Update the firmwarePowerLevels and defaultPowerLevels tables. */ - void setTxPowerLevels(const int8_t powerLevelsIn[NUM_POWER_MODES]) { - memcpy(powerLevels, powerLevelsIn, sizeof(powerLevels)); + void setDefaultTxPowerLevels(const int8_t firmwarePowerLevelsIn[NUM_POWER_MODES], + const int8_t defaultPowerLevelsIn[NUM_POWER_MODES]) { + memcpy(firmwarePowerLevels, firmwarePowerLevelsIn, sizeof(firmwarePowerLevels)); + memcpy(defaultPowerLevels, defaultPowerLevelsIn, sizeof(defaultPowerLevels)); + memcpy(powerLevels, defaultPowerLevelsIn, sizeof(powerLevels)); configureGAP(); updateTxPowerLevelsCharacteristic(); } @@ -188,7 +195,7 @@ ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, serviceDataPayload, encodedBytes + 4); ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(beaconPeriod)); - ble.setTxPower(powerLevels[txPowerMode]); + ble.setTxPower(firmwarePowerLevels[txPowerMode]); } size_t encodeURISchemePrefix(const char *&urldata, size_t &sizeofURLData) { @@ -272,11 +279,11 @@ return encodedBytes; } - + inline uint16_t getHandle(GattCharacteristic& characteristic) { return characteristic.getValueAttribute().getHandle(); } - + void onDataWritten(const GattCharacteristicWriteCBParams *params) { uint16_t handle = params->charHandle; if (handle == getHandle(uriDataChar)) { @@ -337,7 +344,7 @@ uriDataLength = 0; memset(uriData, 0, MAX_SIZE_URI_DATA_CHAR_VALUE); flags = 0; - memset(powerLevels, 0, sizeof(powerLevels)); + memcpy(powerLevels, defaultPowerLevels, sizeof(powerLevels)); txPowerMode = TX_POWER_MODE_LOW; beaconPeriod = 0; @@ -405,7 +412,12 @@ uint16_t uriDataLength; uint8_t uriData[MAX_SIZE_URI_DATA_CHAR_VALUE]; uint8_t flags; + // Current value of AdvertisedPowerLevels int8_t powerLevels[NUM_POWER_MODES]; + // Default values to restore on Reset + int8_t defaultPowerLevels[NUM_POWER_MODES]; + // Firmware power levels used with setTxPower() + int8_t firmwarePowerLevels[NUM_POWER_MODES]; TXPowerModes_t txPowerMode; uint16_t beaconPeriod; bool resetFlag;