Demo program of a simple BLE temperature gateway that scans for temperature broadcasts from beacons while simultaneously acting as a peripheral.

Dependencies:   BLE_API mbed nRF51822

Revision:
0:3aa044e110b8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TemperatureTable.h	Mon Oct 05 12:59:40 2015 +0000
@@ -0,0 +1,76 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __BLE_TEMPERATURE_TABLE_H__
+#define __BLE_TEMPERATURE_TABLE_H__
+
+template <typename BeaconIDType, typename TemperatureType, unsigned MAX_SIZE>
+class TemperatureTable {
+public:
+    TemperatureTable(void) : totalBeacons(0), hasUpdatedData(true), tempValues(), beaconIds() {
+        /* empty */
+    }
+
+    /* Add temperature to the table IF AND ONLY IF the data is not already there */
+    void addBeacon(BeaconIDType beaconId, TemperatureType temperature) {
+        for (unsigned i = 0; i < totalBeacons; i++) {
+            if (beaconId == beaconIds[i]) {
+                if (tempValues[i] != temperature) { /* Update old temperature value */
+                    tempValues[i]  = temperature;
+                    hasUpdatedData = true;
+                }
+                return;
+            }
+        }
+
+        /* The beacon doesn't exist in the table; add an entry if there is space. */
+        if (totalBeacons < MAX_SIZE) {
+            beaconIds[totalBeacons]  = beaconId;
+            tempValues[totalBeacons] = temperature;
+            totalBeacons++;
+            hasUpdatedData = true;
+        }
+    }
+
+    
+    TemperatureType *getTemperatures(void) {
+        return tempValues;
+    }
+
+    size_t getTotalBeacons(void) const {
+        return totalBeacons;
+    }
+
+    BeaconIDType *getBeaconIds(void) {
+        return beaconIds;
+    }
+
+    bool hasUpdate(void) const {
+        return hasUpdatedData;
+    }
+
+    void resetHasUpdate(void) {
+        hasUpdatedData = false;
+    }
+
+private:
+    size_t          totalBeacons;
+    bool            hasUpdatedData;
+    TemperatureType tempValues[MAX_SIZE];
+    BeaconIDType    beaconIds[MAX_SIZE];
+};
+
+#endif /* #ifndef __BLE_TEMPERATURE_TABLE_H__ */