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(); } - } + }