Geo beacon for VF.
Dependencies: MMA8452 aconno_bsp adc52832_common
Diff: main.cpp
- Revision:
- 3:2a4ac5b87046
- Parent:
- 2:5504b714c9ae
- Child:
- 4:331dddea780e
- Child:
- 5:0f42dcae4cdf
--- a/main.cpp Sun Jul 16 15:10:18 2017 +0000
+++ b/main.cpp Mon Jul 17 11:35:44 2017 +0000
@@ -11,15 +11,15 @@
#include "GapAdvertisingData.h"
#include "acd52832_bsp.h"
-#define SLEEP_TIME (0.85) // Sleep time in seconds
-#define AWAKE_TIME (0.15)
+#define SLEEP_TIME (0.85) // Sleep time in seconds WAS 0.85
+#define AWAKE_TIME (0.15) // Was 0.15
#define BUZZER (p31)
/* Static constants for the BLE example */
-#define MSD_SIZE (18)
-#define MSD_ID (0xFF)
-#define MSD_OFFSET (4)
-#define BUZZ_TIME (0.4) // Buzz time in s
+#define MAX_BLE_PACKET_SIZE (31)
+#define MSD_SIZE (18)
+#define MSD_ID (0xFF)
+#define BUZZ_TIME (1.0) // Buzz time in s
bool SLEEP = true;
@@ -40,6 +40,9 @@
BLE::Instance().gap().startAdvertising();
}
+/**
+ * The function is called when ticker generates interrupt
+ */
void turnBuzzOff(void){
buzzer.write(0.0F);
turnBuzzOffT.detach();
@@ -89,14 +92,40 @@
ble.gap().startAdvertising();
}
-void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params){
+
+uint8_t findMSDIndex(const Gap::AdvertisementCallbackParams_t *params){
uint8_t i=0;
- if ((params->advertisingData[MSD_OFFSET]) == MSD_ID ){
+ uint8_t len;
+
+ do{
+ len = params->advertisingData[i];
+ i++;
+ if(params->advertisingData[i] == MSD_ID) return i;
+ else i += (len-1);
+ }while(i<MAX_BLE_PACKET_SIZE);
+
+ return 0;
+}
+
+/**
+ * Function is called when BLE radio discovers any kind of advertisment
+ */
+void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params){
+ uint8_t i=0;
+ uint8_t msdOffset;
+
+ msdOffset = findMSDIndex(params);
+ if(msdOffset == 0){
+ // There's no MSD in BLE advertisement data
+ return;
+ }
+
+ if ((params->advertisingData[msdOffset]) == MSD_ID){
// Follows Manufacturer Specific Data
- if ((params->advertisingData[MSD_OFFSET+1]) == 0x59){
- if ((params->advertisingData[MSD_OFFSET+2]) == 0x00){
+ if ((params->advertisingData[msdOffset+1]) == 0x59){
+ if ((params->advertisingData[msdOffset+2]) == 0x00){
for(i=0; i<6; i++){
- if((params->advertisingData[MSD_OFFSET+i+3]) == my_mac_address[5-i]){
+ if((params->advertisingData[msdOffset+i+3]) == my_mac_address[5-i]){
continue;
}
else{
@@ -146,15 +175,12 @@
/* SpinWait for initialization to complete. This is necessary because the
* BLE object is used in the main loop below. */
- while (ble.hasInitialized() == false) { /* spin loop */ }
+ while (ble.hasInitialized() == false){
+ /* spin loop */
+ }
while(true){
- if(SLEEP){
- __WFI();
- }
- else{
- ble.waitForEvent();
- }
+ if(SLEEP) __WFI();
+ else ble.waitForEvent();
}
-
}

