Improve readability with getHandle inline

Fork of BLE_API by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

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;