Geo beacon for VF.

Dependencies:   MMA8452 aconno_bsp adc52832_common

Files at this revision

API Documentation at this revision

Comitter:
jurica238814
Date:
Sun Jul 16 10:04:48 2017 +0000
Parent:
0:f8c1e0b2d473
Child:
2:5504b714c9ae
Commit message:
Commit before bigger change (dinamic change sleep period)

Changed in this revision

BLE_API.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show diff for this revision Revisions of this file
nRF51822.lib Show diff for this revision Revisions of this file
--- a/BLE_API.lib	Mon Mar 06 09:09:55 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#65474dc93927
--- a/main.cpp	Mon Mar 06 09:09:55 2017 +0000
+++ b/main.cpp	Sun Jul 16 10:04:48 2017 +0000
@@ -1,43 +1,60 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2006-2013 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/*
  *
- *     http://www.apache.org/licenses/LICENSE-2.0
+ *  Made by Jurica Resetar @ aconno
+ *  aconno.de
+ *  All rights reserved
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
  */
 
 #include "mbed.h"
 #include "ble/BLE.h"
-#include "ble/services/HealthThermometerService.h"
+#include "GapAdvertisingData.h"
 #include "acd52832_bsp.h"
-#include "GapAdvertisingData.h"
+
+#define MSD_SIZE        (18)
+#define SLEEP_TIME      0.5            // Sleep time in seconds
+#define WAKE_UP_TIME    100            // Awake time in ms
+#define BUZZER          (p31)
 
-#define SLEEP_TIME      5           // Sleep time in seconds
-#define WAKE_UP_TIME    1000        // Sleep time in ms
+/* Static constants for the BLE example */
+#define MANUFACTURER_SPECIFIC_DATA_ID (0xFF)
+#define MSD_OFFSET                    (4)
+#define BUZZ_TIME                     (200)   // Buzz time in ms
+
 
 bool SLEEP = true;
 int8_t txPower = 4;
-
-static HealthThermometerService *thermometerServicePtr;
+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;
 
-uint8_t MSD[18] = {0x59, 0x00, 0xE1, 0x61, 0x35, 0xBA, 0xC0, 0xEC, 0x47, 0x2A, 0x98, 0x00, 0xAF, 0x18, 0x43, 0xFF, 0x05, 0xE8};
+void turnMeOff(void);
 
+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){
-        SLEEP = false;
-    }
+    //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;
+}
 
 /**
  * This function is called when the ble initialization process has failed
@@ -69,41 +86,70 @@
 
     ble.gap().onDisconnection(disconnectionCallback);
 
-    /* Setup primary service. */
-    thermometerServicePtr = new HealthThermometerService(ble, currentTemperature, HealthThermometerService::LOCATION_EAR);
-
+    /* Get my MAC address */
+    BLEProtocol::AddressType_t temp_address_type;
+    ble.gap().getAddress(&temp_address_type, my_mac_address);
+    
+    
     /* setup advertising */
     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
-    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)MSD, 18);
+    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();    
 }
 
+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. */
+        // Follows Manufacturer Specific Data
+        if ((params->advertisingData[MSD_OFFSET+1]) == 0x59){
+            if ((params->advertisingData[MSD_OFFSET+2]) == 0x00){
+                for(i=0; i<6; i++){
+                    if((params->advertisingData[MSD_OFFSET+i+3]) == my_mac_address[5-i]){
+                        continue;
+                    }
+                    else{
+                        return;
+                    }
+                }
+                buzzer.write(0.8F);
+                wait_ms(200);
+                buzzer.write(0.0F);
+                }
+            }
+        }
+}
+
 int main(void){
-    Ticker ticker;
+    //ticker2.attach(turnMeOff, WAKE_UP_TIME);
+    
     ticker.attach(wakeMeUp, SLEEP_TIME);   // Wake the device up   
     
-    BLE &ble = BLE::Instance();
     ble.init(bleInitComplete);
     ble.gap().setTxPower(txPower);
     GapAdvertisingData postavke = GapAdvertisingData();
     
+    ble.gap().setScanParams(500, 400);
+    ble.gap().startScan(advertisementCallback);
+    
+    buzzer.period(0.001F);
+    buzzer.write(0.0F);
     
     /* 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){
+    
+    while(true){
         if (SLEEP){
             ble.gap().stopAdvertising();
-            sleep();
+            //ble.waitForEvent();
+            //__WFI();
         }
         else{
-            // I'm awake
             ble.gap().startAdvertising();
-            wait_ms(WAKE_UP_TIME);
-            SLEEP = true;
+            ble.waitForEvent();
             }
+        
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Sun Jul 16 10:04:48 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#21dd7008a1540c02150f1b87c12294301db979bb
--- a/mbed.bld	Mon Mar 06 09:09:55 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/ef9c61f8c49f
\ No newline at end of file
--- a/nRF51822.lib	Mon Mar 06 09:09:55 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#c90ae1400bf2