Beacon demo for the BLE API using the nRF51822 native mode drivers
Dependencies: BLE_API mbed nRF51822 X_NUCLEO_IDB0XA1
Fork of BLE_iBeacon by
Diff: main.cpp
- Revision:
- 53:f9ec2c7a47f5
- Parent:
- 50:7bc38f01d2d3
- Child:
- 54:3a655a9fce9a
--- a/main.cpp Wed Jan 21 10:05:06 2015 +0000 +++ b/main.cpp Thu Feb 12 22:36:55 2015 +0000 @@ -15,7 +15,7 @@ */ #include "mbed.h" -#include "BLEDevice.h" +#include "iBeaconService.h" /** * For this demo application, populate the beacon advertisement payload @@ -27,39 +27,35 @@ BLEDevice ble; - /** - * The Beacon payload (encapsulated within the MSD advertising data structure) - * has the following composition: - * 128-Bit UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 - * Major/Minor = 0000 / 0000 - * Tx Power = C8 (-56dB) - */ - const static uint8_t iBeaconPayload[] = { - 0x4C, 0x00, // Company identifier code (0x004C == Apple) - 0x02, // ID - 0x15, // length of the remaining payload - 0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, // location UUID - 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61, - 0x00, 0x00, // the major value to differentiate a location - 0x00, 0x00, // the minor value to differentiate a location - 0xC8 // 2's complement of the Tx power (-56dB) - }; +/** + * 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. + */ +uint8_t uuid[] = {0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, + 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61 + }; +uint16_t majorNumber = 0x1122; +uint16_t minorNumber = 0x3344; +uint16_t txPower = 0xC8; int main(void) { - /* Initialize BLE baselayer */ + // Initialize BLE baselayer ble.init(); - - /* Set up iBeacon data*/ - ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE ); - ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, iBeaconPayload, sizeof(iBeaconPayload)); - - /* Set advertising interval. Longer interval = longer battery life */ - ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED); + + // Initialize ibeacon + iBeaconService ibeacon(ble, uuid, majorNumber, minorNumber, txPower); + + // Set advertising time ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ ble.startAdvertising(); - for (;;) { - ble.waitForEvent(); + while(1) { + ble.waitForEvent(); // allows or low power operation } }