Geo beacon for VF.
Dependencies: MMA8452 aconno_bsp adc52832_common
Diff: main.cpp
- Revision:
- 17:51a5456a46cd
- Parent:
- 16:a338d2417fd5
- Child:
- 18:e844d3e6ab88
--- a/main.cpp Thu Aug 10 11:02:02 2017 +0000
+++ b/main.cpp Thu Aug 10 13:31:28 2017 +0000
@@ -16,15 +16,17 @@
#define DEBUG (1)
#define DEBUG_ACC (0)
-#define PRINT (1)
+#define PRINT (0)
+#define DEBUG_MAC (0)
+#define DEBUG_CONNECTION (0)
-#define SLEEP_TIME_S (1.0) /* Sleep time in seconds WAS 0.85 */
-#define ADV_TIMER_TIME_S (4.0) /* Advertising time (in s) */
-#define SCAN_TIMER_TIME_S (2.0) /* Scanning time (in s) */
+#define SLEEP_TIME_S (2.0) /* Sleep time in seconds WAS 0.85 */
+#define ADV_TIMER_TIME_S (2.0) /* Advertising time (in s) */
+#define SCAN_TIMER_TIME_S (1.0) /* Scanning time (in s) */
#define FREE_TIME_S (0.1) /* Time between end of a scanning and sleep mode */
#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 SHORT_SLEEP_TIME_PERIOD_S (10) /* 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 */
@@ -32,7 +34,7 @@
#define MSD_SIZE (18)
#define MSD_ID (0xFF)
-#define BUZZ_TIME_S (0.25) /* Buzz time in s */
+#define BUZZ_TIME_S (1) /* 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)
@@ -101,38 +103,43 @@
void onConnectionCallback(const Gap::ConnectionCallbackParams_t *params){
- scanLED = !scanLED; // Blue
- wait_ms(100);
- scanLED = !scanLED; // Blue
- wait_ms(100);
- scanLED = !scanLED; // Blue
- wait_ms(100);
- scanLED = !scanLED; // Blue
- wait_ms(100);
- scanLED = !scanLED; // Blue
- wait_ms(100);
- scanLED = !scanLED; // Blue
- wait_ms(100);
- scanLED = 1; // Blue
-
- //WakeSleepT.detach();
+ #if DEBUG_CONNECTION
+ scanLED = !scanLED; // Blue
+ wait_ms(100);
+ scanLED = !scanLED; // Blue
+ wait_ms(100);
+ scanLED = !scanLED; // Blue
+ wait_ms(100);
+ scanLED = !scanLED; // Blue
+ wait_ms(100);
+ scanLED = !scanLED; // Blue
+ wait_ms(100);
+ scanLED = !scanLED; // Blue
+ wait_ms(100);
+ scanLED = 1; // Blue
+ #endif
+ WakeSleepT.detach();
+ sleepFlag = false;
}
/* Restart Advertising on disconnection*/
void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){
- shushShush = true;
- advLED = !advLED; // RED
- wait_ms(100);
- advLED = !advLED;
- wait_ms(100);
- advLED = !advLED;
- wait_ms(100);
- advLED = !advLED;
- wait_ms(100);
- advLED = !advLED;
- wait_ms(100);
- advLED = 1;
+ #if DEBUG_CONNECTION
+ advLED = !advLED; // RED
+ wait_ms(100);
+ advLED = !advLED;
+ wait_ms(100);
+ advLED = !advLED;
+ wait_ms(100);
+ advLED = !advLED;
+ wait_ms(100);
+ advLED = 1;
+ wait_ms(100);
+ advLED = 1;
+ #endif
+ WakeSleepT.attach(WakeMeUp, FREE_TIME_S);
+ sleepFlag = true;
}
void onDataWrittenCallback(const GattWriteCallbackParams *params) {
@@ -140,18 +147,25 @@
// Something is written into AckCharacteristic
if(params->data[0] == 0xBA)
if(params->data[1] == 0xBE){
- connectedLED = !connectedLED; // BLUE
- wait_ms(100);
- connectedLED = !connectedLED;
- wait_ms(100);
- connectedLED = !connectedLED;
- wait_ms(100);
- connectedLED = !connectedLED;
- wait_ms(100);
- connectedLED = !connectedLED;
- wait_ms(100);
- connectedLED = 1;
- wait_ms(100);
+ #if DEBUG_CONNECTION
+ connectedLED = !connectedLED; // BLUE
+ wait_ms(100);
+ connectedLED = !connectedLED;
+ wait_ms(100);
+ connectedLED = !connectedLED;
+ wait_ms(100);
+ connectedLED = !connectedLED;
+ wait_ms(100);
+ connectedLED = !connectedLED;
+ wait_ms(100);
+ connectedLED = 1;
+ wait_ms(100);
+ #endif
+ buzzer.period(0.0009F);
+ buzzer.write(0.5F);
+ WakeSleepT.detach();
+ turnBuzzOffT.detach();
+ turnBuzzOffT.attach(TurnBuzzOff, BUZZ_TIME_S);
/*
This function should make advertiser stop
*/
@@ -160,9 +174,7 @@
}
}
else{
- // Execute this for wrong data written into characteristic
- wait_ms(500);
-
+ // Execute this for wrong data written into characteristic
}
}
@@ -202,8 +214,8 @@
ackServicePtr->updateMacAddress(myMacAddress); // Update MAC address
ble.gap().onDisconnection(disconnectionCallback);
- //ble.gap().onConnection(onConnectionCallback); // -->> Uncomment these two lines for shush-shush
- //ble.gattServer().onDataWritten(onDataWrittenCallback);
+ ble.gap().onConnection(onConnectionCallback); // -->> Uncomment these two lines for shush-shush
+ ble.gattServer().onDataWritten(onDataWrittenCallback);
/* setup advertising */
@@ -220,6 +232,20 @@
uint8_t i=0;
uint8_t len;
uint8_t min = params->advertisingDataLen;
+ if(min == 13){
+ advLED = 0;
+ wait_ms(50);
+ advLED = !advLED;
+ wait_ms(50);
+ advLED = !advLED;
+ wait_ms(50);
+ advLED = !advLED;
+ wait_ms(50);
+ advLED = !advLED;
+ wait_ms(50);
+ advLED = 1;
+ wait_ms(50);
+ }
if((params->advertisingDataLen < (MAC_SIZE_B + 2)) || params->advertisingDataLen == 0){
// Empty advertisement or not long enough for MAX
return 0;
@@ -243,27 +269,33 @@
ble.gap().getAddress(&temp_address_type, myMacAddress);
if(msdOffset == 0){
+ #if DEBUG_MAC
for(i=0; i<10; i++){
scanLED = !scanLED; // BLUE
wait_ms(100);
}
+ #endif
return 0; // There's no MSD in BLE advertisement data
}
for(i=0; i<6; i++){
//if((params->advertisingData[0+i+4]) != myMacAddress[i]){
//if(params->advertisingData[4] != myMacAddress[4]){
if(params->advertisingData[msdOffset + 3 + i] != myMacAddress[5-i]){ // myMacAddress[0] == 0x91
- for(i=0; i<10; i++){
- connectedLED = !connectedLED; // Green
- wait_ms(100);
- }
+ #if DEBUG_MAC
+ for(i=0; i<10; i++){
+ connectedLED = !connectedLED; // Green
+ wait_ms(100);
+ }
+ #endif
return 0;
}
}
- for(i=0; i<10; i++){
- advLED = !advLED; // RED
- wait_ms(100);
- }
+ #if DEBUG_MAC
+ for(i=0; i<10; i++){
+ advLED = !advLED; // RED
+ wait_ms(100);
+ }
+ #endif
return 1;
}
@@ -273,8 +305,8 @@
void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params){
uint8_t msdOffset, i;
- //msdOffset = findMSDIndex(params);
- msdOffset = 1; // 1 or 4
+ msdOffset = findMSDIndex(params);
+ //msdOffset = 1; // 1 or 4
if(msdOffset == 0){
return; // There's no MSD in BLE advertisement data
}
@@ -290,7 +322,8 @@
}
*/
if(CheckMac(params, myMacAddress, msdOffset)){
- ble.gap().stopScan();
+ //ble.gap().stopScan();
+ buzzer.period(0.0009F);
buzzer.write(0.5F);
WakeSleepT.detach();
turnBuzzOffT.detach();
@@ -313,6 +346,7 @@
* The function is called when ticker generates interrupt
*/
void TurnBuzzOff(void){
+ buzzer.period(0.00F);
buzzer.write(0.0F);
tempSleepTime = SHORT_SLEEP_TIME_S;
turnBuzzOffT.detach();
@@ -330,6 +364,8 @@
}
else{
ble.gap().startAdvertising();
+ buzzer.period(0.00F);
+ buzzer.write(0.0F);
#if DEBUG
advLED = 0;
scanLED = 1;
@@ -388,12 +424,6 @@
#endif
}
-void buzz(void){
- buzzer.write(0.5f);
- wait_ms(100);
- buzzer.write(0.0f);
- sleepFlag = 0;
-}
void pulse_handler(void){
#if DEBUG_ACC

