Beacon demo for the BLE API using the nRF51822 native mode drivers

Dependencies:   BLE_API SDFileSystem mbed-rtos mbed nRF51822 X_NUCLEO_IDB0XA1

Fork of BLE_iBeacon by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
tangcan0823
Date:
Fri Oct 21 04:18:17 2016 +0000
Parent:
79:4e16bde5c10a
Commit message:
memory

Changed in this revision

SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Fri Oct 21 04:18:17 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/neilt6/code/SDFileSystem/#e4d2567200db
--- a/main.cpp	Tue Sep 20 12:41:28 2016 +0100
+++ b/main.cpp	Fri Oct 21 04:18:17 2016 +0000
@@ -1,61 +1,160 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2006-2015 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
- *
- * 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/HeartRateService.h" 
+#include "ble/services/BatteryService.h" 
+#include "ble/services/DeviceInformationService.h" 
+#include "rtos.h" 
+#include <string.h> 
+#include "SDFileSystem.h"
+
+Semaphore one_slot(1); 
+
+SDFileSystem sd(p25, p28, p29, p21, "sd");
+BLE ble; 
+int address[10][12]={}; 
+const GapScanningParams scanningParams; 
+
+
+int counter= 0; 
+void onScanCallback(const Gap::AdvertisementCallbackParams_t *params) 
+{ 
+time_t seconds = time(NULL); // JST 
+struct tm *t = localtime(&seconds); 
+/*printf("%04d/%02d/%02d %02d:%02d:%02d\r\n", 
+t->tm_year + 1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); 
+*/ 
+
+int i=0,a=0,b=0,flag=0; 
+for(i=0;i<10;i++){ 
+if(address[i][0]==params->peerAddr[5]){ 
+flag=1; 
+break; 
+} 
+} 
+if(flag==0){ 
+for(i=0; i<6; i++){ 
+address[counter][i]=params->peerAddr[5-i]; 
+} 
+time_t seconds = time(NULL); 
+struct tm *t = localtime(&seconds); 
+address[counter][6]=t->tm_year; 
+address[counter][7]=t->tm_mon; 
+address[counter][8]= t->tm_mday; 
+address[counter][9]= t->tm_hour; 
+address[counter][10]= t->tm_min; 
+address[counter][11]= t->tm_sec; 
+
+counter++; 
+for(a=0; a<counter; a++){ 
+for(b=0; b<12 ; b++){ 
+    FILE *fp = fopen("/sd/mydata/sdtest.txt", "w");
+    if(fp == NULL) {
+        error("Could not open file for write\n");
+    }
+if(b==0){printf("DEV:"); 
+fprintf(fp,"DEV:");} 
+if(b<6){printf("%02x ", address[a][b]); 
+fprintf(fp,"%02x ", address[a][b]);} 
+else if(b>5){printf("%02d:",address[a][b]); 
+fprintf(fp,"%02d:",address[a][b]);} 
+if(b==11){ 
+printf("\r\n"); 
+fprintf(fp,"\r\n"); 
+ fclose(fp); 
+
+} 
+} 
+
+if(a==counter-1)printf("----------\n\r"); 
+} 
+} 
+
 
-#include "mbed.h"
-#include "ble/services/iBeacon.h"
+/* for(int i=0; i<6; i++){ 
+address[0][i]=params->peerAddr[5-i]; 
+} 
+for(int b=0; b<6 ; b++){ 
+if(b==0)printf("DEV:"); 
+printf("%02x ", address[0][b]); 
+if(b==5)printf("\n\r"); 
+}*/ 
+} 
+
+
+void test_thread(void const *name) { 
+
+
+while (true) { 
+Timer timer; 
+one_slot.wait(); 
+printf("%s\n\r", (const char*)name); 
+//1 
+if(!strcmp((const char*)name, "1")){ 
+printf("**this is 1**\n\r"); 
+ble.gap().stopAdvertising(); 
+ble.startScan(&onScanCallback); 
+
+} 
 
-BLE ble;
-    
-void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
-{
-    BLE &ble          = params->ble;
-    ble_error_t error = params->error;
+//2 
+if(!strcmp((const char*)name, "2")){ 
+printf("**this is 2**\n\r"); 
+timer.start(); 
+while(1){ 
+ble.waitForEvent(); 
+if(timer.read() > 9){ 
+timer.stop(); 
+timer.reset(); 
+ble.stopScan(); 
+break; 
+} 
+} 
+} 
+//3 
+if(!strcmp((const char*)name, "3")){ 
+printf("**this is 3**\n\r"); 
+ble.gap().startAdvertising(); 
+
+} 
+
 
-    if (error != BLE_ERROR_NONE) {
-        return;
-    }
+Thread::wait(10000); 
+one_slot.release(); 
+} 
+} 
+
+// const static char DEVICE_NAME[] = "BLE1";
+
+void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) 
+{ 
+BLE &ble = params->ble; 
+ble_error_t error = params->error; 
+
+if (error != BLE_ERROR_NONE) { 
+return; 
+} 
+const uint8_t address1[] = {0xAA,0xAA,0xAA,0xAA,0xAA,0xAA}; 
+ble.gap().setAddress(BLEProtocol::AddressType::PUBLIC, address1); 
+// ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); 
+// ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 
+// ble.gap().setAdvertisingInterval(1000); /* 1000ms. */ 
+} 
+
+int main (void) { 
+
+mkdir("/sd/mydata", 0777);
     
-    /**
-     * The Beacon payload has the following composition:
-     * 128-Bit / 16byte UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61
-     * Major/Minor  = 0x1122 / 0x3344
-     * Tx Power     = 0xC8 = 200, 2's compliment is 256-200 = (-56dB)
-     *
-     * Note: please remember to calibrate your beacons TX Power for more accurate results.
-     */
-    const uint8_t uuid[] = {0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4,
-                            0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61};
-    uint16_t majorNumber = 1122;
-    uint16_t minorNumber = 3344;
-    uint16_t txPower     = 0xC8;
-    iBeacon *ibeacon = new iBeacon(ble, uuid, majorNumber, minorNumber, txPower);
+//ble.init(); 
+ble.init(bleInitComplete); 
+ble.setScanParams(GapScanningParams::SCAN_INTERVAL_MAX, 
+GapScanningParams::SCAN_WINDOW_MAX, 0); 
+
+
 
-    ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
-    ble.gap().startAdvertising();
-}
+
+Thread t2(test_thread, (void *)"2"); 
+Thread t3(test_thread, (void *)"3"); 
 
-int main(void)
-{
-    ble.init(bleInitComplete);
-    
-    /* SpinWait for initialization to complete. This is necessary because the
-     * BLE object is used in the main loop below. */
-    while (!ble.hasInitialized()) { /* spin loop */ }
+test_thread((void *)"1"); 
 
-    while (true) {
-        ble.waitForEvent(); // allows or low power operation
-    }
-}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Fri Oct 21 04:18:17 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#3da5f554d8bf
--- a/mbed_app.json	Tue Sep 20 12:41:28 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-{
-    "target_overrides": {
-        "K64F": {
-            "target.features_add": ["BLE"],
-            "target.extra_labels_add": ["ST_BLUENRG"],
-            "target.macros_add": ["IDB0XA1_D13_PATCH"]
-        },
-        "NUCLEO_F401RE": {
-            "target.features_add": ["BLE"],
-            "target.extra_labels_add": ["ST_BLUENRG"]
-        }
-    }
-}
\ No newline at end of file