Geo beacon for VF.
Dependencies: MMA8452 aconno_bsp adc52832_common
Diff: main.cpp
- Revision:
- 2:5504b714c9ae
- Parent:
- 1:5f34885f5cff
- Child:
- 3:2a4ac5b87046
--- a/main.cpp Sun Jul 16 10:04:48 2017 +0000
+++ b/main.cpp Sun Jul 16 15:10:18 2017 +0000
@@ -11,49 +11,39 @@
#include "GapAdvertisingData.h"
#include "acd52832_bsp.h"
-#define MSD_SIZE (18)
-#define SLEEP_TIME 0.5 // Sleep time in seconds
-#define WAKE_UP_TIME 100 // Awake time in ms
+#define SLEEP_TIME (0.85) // Sleep time in seconds
+#define AWAKE_TIME (0.15)
#define BUZZER (p31)
/* Static constants for the BLE example */
-#define MANUFACTURER_SPECIFIC_DATA_ID (0xFF)
-#define MSD_OFFSET (4)
-#define BUZZ_TIME (200) // Buzz time in ms
+#define MSD_SIZE (18)
+#define MSD_ID (0xFF)
+#define MSD_OFFSET (4)
+#define BUZZ_TIME (0.4) // Buzz time in s
bool SLEEP = true;
int8_t txPower = 4;
uint8_t MSD[MSD_SIZE] = {0x59, 0x00, 0xE1, 0x61, 0x35, 0xBA, 0xC0, 0xEC, 0x47, 0x2A, 0x98, 0x00, 0xAF, 0x18, 0x43, 0xFF, 0x05, 0x00};
-uint8_t mac_address[6] = {0xCF, 0x36, 0x23, 0x9A, 0x55, 0x96};
uint8_t my_mac_address[6] = {};
-uint8_t LOOKING = 0;
-void turnMeOff(void);
+void turnBuzzOff(void);
+void goToSleep();
+Ticker WakeSleepT;
+Ticker turnBuzzOffT;
PwmOut buzzer(BUZZER);
BLE &ble = BLE::Instance();
-Ticker ticker;
-Ticker ticker2;
-
+
/* Restart Advertising on disconnection*/
void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){
BLE::Instance().gap().startAdvertising();
}
-void wakeMeUp(void){
- //ticker.detach();
- //ticker2.attach(turnMeOff, WAKE_UP_TIME);
- //LED = !LED;
- //SLEEP = !SLEEP;
- if(SLEEP) SLEEP = false;
- else SLEEP = true;
-}
-
-void turnMeOff(void){
- //ticker.attach(wakeMeUp, SLEEP_TIME); // Wake the device up
- //ticker2.detach();
- SLEEP = true;
+void turnBuzzOff(void){
+ buzzer.write(0.0F);
+ turnBuzzOffT.detach();
+ WakeSleepT.attach(goToSleep, AWAKE_TIME);
}
/**
@@ -95,13 +85,13 @@
ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)MSD, MSD_SIZE);
ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
- ble.gap().setAdvertisingInterval(1000); /* 1000ms */
- ble.gap().startAdvertising();
+ ble.gap().setAdvertisingInterval(100); // --> Has to be at least 100ms!
+ ble.gap().startAdvertising();
}
void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params){
uint8_t i=0;
- if ((params->advertisingData[MSD_OFFSET]) == MANUFACTURER_SPECIFIC_DATA_ID ){ /* !ALERT! Update this filter to suit your device. */
+ if ((params->advertisingData[MSD_OFFSET]) == MSD_ID ){
// Follows Manufacturer Specific Data
if ((params->advertisingData[MSD_OFFSET+1]) == 0x59){
if ((params->advertisingData[MSD_OFFSET+2]) == 0x00){
@@ -113,43 +103,58 @@
return;
}
}
- buzzer.write(0.8F);
- wait_ms(200);
- buzzer.write(0.0F);
- }
+ turnBuzzOffT.detach();
+ WakeSleepT.detach();
+ buzzer.write(0.5F);
+ turnBuzzOffT.attach(turnBuzzOff, BUZZ_TIME);
}
}
+ }
+}
+
+void WakeMeUp(){
+ WakeSleepT.detach();
+ WakeSleepT.attach(goToSleep, AWAKE_TIME);
+
+ ble.gap().startScan(advertisementCallback);
+ ble.gap().startAdvertising();
+ SLEEP = false;
+}
+
+void goToSleep(){
+ WakeSleepT.detach();
+ WakeSleepT.attach(WakeMeUp, SLEEP_TIME);
+
+ ble.gap().stopAdvertising();
+ ble.gap().stopScan();
+ SLEEP = true;
}
int main(void){
- //ticker2.attach(turnMeOff, WAKE_UP_TIME);
-
- ticker.attach(wakeMeUp, SLEEP_TIME); // Wake the device up
-
+ WakeSleepT.attach(goToSleep, AWAKE_TIME);
ble.init(bleInitComplete);
ble.gap().setTxPower(txPower);
GapAdvertisingData postavke = GapAdvertisingData();
- ble.gap().setScanParams(500, 400);
+ ble.gap().setScanParams(100, 100);
ble.gap().startScan(advertisementCallback);
buzzer.period(0.001F);
buzzer.write(0.0F);
+ __enable_irq();
+
/* 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(true){
- if (SLEEP){
- ble.gap().stopAdvertising();
- //ble.waitForEvent();
- //__WFI();
- }
+ if(SLEEP){
+ __WFI();
+ }
else{
- ble.gap().startAdvertising();
ble.waitForEvent();
}
-
}
+
}

