Geo beacon for VF.

Dependencies:   MMA8452 aconno_bsp adc52832_common

Revision:
15:934a04c958f5
Parent:
14:d506c0679c0b
Child:
16:a338d2417fd5
--- a/main.cpp	Thu Jul 27 15:04:50 2017 +0000
+++ b/main.cpp	Fri Jul 28 12:28:05 2017 +0000
@@ -22,6 +22,7 @@
 #define AWAKE_TIME_S              (ADV_TIMER_TIME_S+SCAN_TIMER_TIME_S+FREE_TIME_S)      /* Was 0.15 */
 #define SHORT_SLEEP_TIME_S        (0.5)       /* Shorter sleep time (s) */
 #define SHORT_SLEEP_TIME_PERIOD_S (5)        /* Time after a last scanned advertisment. In the period, sleep time is SHORT_SLEEP_TIME */
+#define MAC_SIZE_B                (6)
 
 
 /* Static constants for the BLE example */
@@ -29,7 +30,7 @@
 #define MSD_SIZE            (18)
 #define MSD_ID              (0xFF)
 
-#define BUZZ_TIME_S           (0.25)   /* Buzz time in s */
+#define BUZZ_TIME_S          (0.25)   /* Buzz time in s */
 #define ADV_INTERVAL        (100)   /* Advertising interval (in ms) */
 #define SCAN_INTERVAL       (SCAN_TIMER_TIME_S)   /* Scan interval (in ms) */
 #define SCAN_WINDOW         (SCAN_TIMER_TIME_S)
@@ -137,13 +138,18 @@
 uint8_t findMSDIndex(const Gap::AdvertisementCallbackParams_t *params){
     uint8_t i=0;
     uint8_t len;
+    uint8_t min = params->advertisingDataLen;
+    if((params->advertisingDataLen < (MAC_SIZE_B + 2)) || params->advertisingDataLen == 0){
+        // Empty advertisement or not long enough for MAX
+        return 0;
+    }
     
     do{
         len = params->advertisingData[i];
         i++;
         if(params->advertisingData[i] == MSD_ID) return i;
         else i += (len-1);
-    }while(i<MAX_BLE_PACKET_SIZE);
+    }while(i<min);
     
     return 0;
 }
@@ -155,7 +161,7 @@
         return 0;     // There's no MSD in BLE advertisement data
     }
     for(i=0; i<6; i++){
-        if(!(params->advertisingData[msdOffset+i+3]) == *(myMacAddress+5-i)){
+        if((params->advertisingData[msdOffset+i+3]) != myMacAddress[5-i]){
             return 0;
         }
     }       
@@ -166,9 +172,10 @@
  *  Function is called when BLE radio discovers any kind of advertisment 
  */
 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params){
-    uint8_t msdOffset;
-    
-    msdOffset = findMSDIndex(params);
+    uint8_t msdOffset, i;
+                    
+    //msdOffset = findMSDIndex(params);
+    msdOffset = 4;
     if(msdOffset == 0){
         return;     // There's no MSD in BLE advertisement data
     }
@@ -176,7 +183,11 @@
         // Follows Manufacturer Specific Data
         if ((params->advertisingData[msdOffset+1]) == 0x59){
             if ((params->advertisingData[msdOffset+2]) == 0x00){
-                if(CheckMac(params, myMacAddress, msdOffset)){
+                for(i=0; i<6; i++){
+                    if((params->advertisingData[msdOffset+i+3]) != myMacAddress[5-i]){
+                        return;
+                    }
+                    //if(CheckMac(params, myMacAddress, msdOffset) || 1){
                     ble.gap().stopScan();
                     buzzer.write(0.5F);
                     WakeSleepT.detach();