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:
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
     }
 }