Beacon demo for the BLE API using the nRF51822 native mode drivers
Dependencies: BLE_API mbed nRF51822
Fork of BLE_iBeacon by
Diff: main.cpp
- Revision:
- 50:7bc38f01d2d3
- Parent:
- 48:2f0f293a4966
- Child:
- 53:f9ec2c7a47f5
--- a/main.cpp Mon Dec 08 21:42:08 2014 +0000 +++ b/main.cpp Mon Dec 08 22:27:49 2014 +0000 @@ -17,9 +17,7 @@ #include "mbed.h" #include "BLEDevice.h" -BLEDevice ble; - -/* +/** * For this demo application, populate the beacon advertisement payload * with 2 AD structures: FLAG and MSD (manufacturer specific data). * @@ -27,36 +25,41 @@ * Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 11, 18 */ -/* - * The Beacon payload (encapsulated within the MSD advertising data structure) - * has the following composition: - * 128-Bit UUID = 01 12 23 34 45 56 67 78 89 9A AB BC CD DE EF F0 - * Major/Minor = 0000 / 0000 - * Tx Power = C8 - */ -const uint8_t beaconPayload[] = { - 0x4C, 0x00, - 0x02, - 0x15, - 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, - 0x89, 0x9a, 0xab, 0xbc, 0xcd, 0xde, 0xef, 0xf0, - 0x00, 0x00, - 0x00, 0x00, - 0xC8 -}; +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) + }; int main(void) { + /* Initialize BLE baselayer */ ble.init(); - - ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); - ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, beaconPayload, sizeof(beaconPayload)); - + + /* 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); - ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000)); + ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ ble.startAdvertising(); for (;;) { - ble.waitForEvent(); + ble.waitForEvent(); } }