an observer for temperature demo

Dependencies:   BLE_API mbed nRF51822 TMP_nrf51

Fork of BLE_Observer by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
sunsmile2015
Date:
Mon Jul 20 09:00:24 2015 +0000
Parent:
6:850f44146c9f
Child:
8:649bd171929e
Commit message:
1. change the coding style; 2. add struct for adv data and manufacturer data

Changed in this revision

TMP_nrf51.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TMP_nrf51.lib	Mon Jul 20 09:00:24 2015 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/sunsmile2015/code/TMP_nrf51/#189632d43a8f
--- a/main.cpp	Wed Jul 15 02:53:12 2015 +0000
+++ b/main.cpp	Mon Jul 20 09:00:24 2015 +0000
@@ -16,6 +16,24 @@
 
 #include "mbed.h"
 #include "BLE.h"
+#include "TMP_nrf51/TMP_nrf51.h"
+
+#define COMP_ID_TEST 0xFEFE
+
+#pragma pack(1)
+/* Advertising data  */
+typedef struct advertisingData {
+    uint8_t length; /* doesn't include itself*/
+    GapAdvertisingData::DataType dataType;
+    uint8_t data[1];
+} advertisingData_t;
+
+typedef struct manufacturerData {
+    uint16_t companyId;
+    /* User defined manufacture data */
+    TMP_nrf51::tmpSensorValue_t tmpSensorValue;
+} manufacturerData_t;
+#pragma pack()
 
 BLE        ble;
 DigitalOut led1(LED1);
@@ -27,19 +45,20 @@
 
 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params)
 {
-    if((params->advertisingData[9] == 0xFE) && (params->advertisingData[10] == 0xFE)) {
-        float tempVal = 0;
-        printf("Adv peerAddr: [%02x %02x %02x %02x %02x %02x] rssi %d, ScanResp: %u, AdvType: %u\r\n",
-               params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0],
-               params->rssi, params->isScanResponse, params->type);
+    advertisingData_t *pAdvData = NULL;
+    uint8_t len = 0;
     
-        for (unsigned index = 0; index < params->advertisingDataLen; index++) {
-            printf("%02x ", params->advertisingData[index]);
+    /* Search for the manufacturer data */
+    while(len < params->advertisingDataLen) {
+        pAdvData = (advertisingData_t *)&params->advertisingData[len];
+        if(pAdvData->dataType == GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA) {
+            manufacturerData_t *pManuData = (manufacturerData_t *)pAdvData->data;
+            if(pManuData->companyId == COMP_ID_TEST) {
+                printf("Recv temp is %f\r\n", (float)pManuData->tmpSensorValue);
+                break;
+            }
         }
-        
-        memcpy(&tempVal, &params->advertisingData[11], 4); /* temperature value */
-        printf("temp is %f\r\n", tempVal);
-
+        len += (pAdvData->length + 1);
     }
 }
 
@@ -50,7 +69,6 @@
     ticker.attach(periodicCallback, 1);
 
     ble.init();
-
     ble.gap().setScanParams(1800 /* scan interval */, 1500 /* scan window */);
     ble.gap().startScan(advertisementCallback);