BLE beacon example

Committer:
lmottola
Date:
Tue Nov 13 13:43:41 2018 +0000
Revision:
74:3c07c0f8bd78
Parent:
45:0d307fc39fd0
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 12:af576944a152 1 #include <events/mbed_events.h>
mbed_official 3:41f6be68aefb 2 #include <mbed.h>
mbed_official 3:41f6be68aefb 3 #include "ble/BLE.h"
mbed_official 3:41f6be68aefb 4 #include "ble/services/iBeacon.h"
mbed_official 3:41f6be68aefb 5
mbed_official 3:41f6be68aefb 6 static iBeacon* ibeaconPtr;
mbed_official 3:41f6be68aefb 7
mbed_official 28:9090fe431353 8 static EventQueue eventQueue(/* event count */ 4 * EVENTS_EVENT_SIZE);
mbed_official 3:41f6be68aefb 9
mbed_official 3:41f6be68aefb 10 /**
mbed_official 3:41f6be68aefb 11 * This function is called when the ble initialization process has failled
mbed_official 3:41f6be68aefb 12 */
mbed_official 3:41f6be68aefb 13 void onBleInitError(BLE &ble, ble_error_t error)
mbed_official 3:41f6be68aefb 14 {
mbed_official 3:41f6be68aefb 15 /* Initialization error handling should go here */
mbed_official 3:41f6be68aefb 16 }
mbed_official 3:41f6be68aefb 17
mbed_official 3:41f6be68aefb 18 /**
mbed_official 3:41f6be68aefb 19 * Callback triggered when the ble initialization process has finished
mbed_official 3:41f6be68aefb 20 */
mbed_official 3:41f6be68aefb 21 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
mbed_official 3:41f6be68aefb 22 {
mbed_official 3:41f6be68aefb 23 BLE& ble = params->ble;
mbed_official 3:41f6be68aefb 24 ble_error_t error = params->error;
mbed_official 3:41f6be68aefb 25
mbed_official 3:41f6be68aefb 26 if (error != BLE_ERROR_NONE) {
mbed_official 3:41f6be68aefb 27 /* In case of error, forward the error handling to onBleInitError */
mbed_official 3:41f6be68aefb 28 onBleInitError(ble, error);
mbed_official 3:41f6be68aefb 29 return;
mbed_official 3:41f6be68aefb 30 }
mbed_official 3:41f6be68aefb 31
mbed_official 3:41f6be68aefb 32 /* Ensure that it is the default instance of BLE */
mbed_official 3:41f6be68aefb 33 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
mbed_official 3:41f6be68aefb 34 return;
mbed_official 3:41f6be68aefb 35 }
mbed_official 3:41f6be68aefb 36
mbed_official 3:41f6be68aefb 37 /**
mbed_official 3:41f6be68aefb 38 * The Beacon payload has the following composition:
mbed_official 3:41f6be68aefb 39 * 128-Bit / 16byte UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61
mbed_official 3:41f6be68aefb 40 * Major/Minor = 0x1122 / 0x3344
mbed_official 3:41f6be68aefb 41 * Tx Power = 0xC8 = 200, 2's compliment is 256-200 = (-56dB)
mbed_official 3:41f6be68aefb 42 *
lmottola 74:3c07c0f8bd78 43 * Note: please remember to calibrate your beacons TX Power for more accurate results
mbed_official 3:41f6be68aefb 44 */
mbed_official 3:41f6be68aefb 45 static const uint8_t uuid[] = {0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4,
mbed_official 3:41f6be68aefb 46 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61};
mbed_official 3:41f6be68aefb 47 uint16_t majorNumber = 1122;
mbed_official 3:41f6be68aefb 48 uint16_t minorNumber = 3344;
mbed_official 3:41f6be68aefb 49 uint16_t txPower = 0xC8;
mbed_official 3:41f6be68aefb 50 ibeaconPtr = new iBeacon(ble, uuid, majorNumber, minorNumber, txPower);
mbed_official 3:41f6be68aefb 51
mbed_official 3:41f6be68aefb 52 ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
mbed_official 3:41f6be68aefb 53 ble.gap().startAdvertising();
mbed_official 3:41f6be68aefb 54 }
mbed_official 3:41f6be68aefb 55
mbed_official 3:41f6be68aefb 56 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
mbed_official 3:41f6be68aefb 57 BLE &ble = BLE::Instance();
mbed_official 12:af576944a152 58 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
mbed_official 3:41f6be68aefb 59 }
mbed_official 3:41f6be68aefb 60
mbed_official 3:41f6be68aefb 61 int main()
mbed_official 3:41f6be68aefb 62 {
mbed_official 3:41f6be68aefb 63 BLE &ble = BLE::Instance();
mbed_official 3:41f6be68aefb 64 ble.onEventsToProcess(scheduleBleEventsProcessing);
mbed_official 3:41f6be68aefb 65 ble.init(bleInitComplete);
mbed_official 3:41f6be68aefb 66
mbed_official 12:af576944a152 67 eventQueue.dispatch_forever();
mbed_official 3:41f6be68aefb 68
mbed_official 3:41f6be68aefb 69 return 0;
mbed_official 3:41f6be68aefb 70 }