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

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_iBeacon by Bluetooth Low Energy

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(); 
     }
 }