BLE iBeacon demonstrating how to change the payload data every second

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_iBeacon by Bluetooth Low Energy

Revision:
10:391c1acf4b9d
Parent:
9:438f44012039
Child:
11:6774f4827024
--- a/main.cpp	Thu May 22 09:54:46 2014 +0100
+++ b/main.cpp	Thu May 22 10:30:37 2014 +0100
@@ -24,67 +24,61 @@
 Ticker      flipper;
 Serial      pc(USBTX,USBRX);
 
-void tickerCallback(void);
+/*
+ * For this demo application, populate the beacon advertisement payload
+ * with 2 AD structures: FLAG and MSD
+ *
+ * Reference:
+ *  Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 11, 18
+ */
 
-/**************************************************************************/
-/*!
-    @brief  Program entry point
-*/
-/**************************************************************************/
+/* Define an Beacon payload.
+ *
+ * This is the data part of the MSD AdvertisingData structure to be added to
+ * the advertising payload.
+ * --------------------------------------------------------------
+ * 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
+ */
+uint8_t beaconPayload[] = {
+    0x4C, 0x00, // Company identifier code (0x004C == Apple)
+    0x02,       // ID
+    0x15,       // length of the remaining payload
+    0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, // UUID
+    0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61,
+    0x00, 0x00, // the major value to differenciate a location
+    0x00, 0x00, // the minor value to differenciate a location
+    0xC8        // 2's complement of the Tx power (-56dB)
+};
+
+static void setupAppHardware(void);
+static void tickerCallback(void);
+
 int main(void)
 {
-    /* Setup blinky: mainloopLED is toggled in main, tickerLED is toggled via Ticker */
-    mainloopLED = 1;
-    tickerLED   = 1;
-    flipper.attach(&tickerCallback, 1.0);
+    setupAppHardware();
 
     /* Initialise the nRF51822 */
     pc.printf("Initialising the nRF51822\n\r");
     nrf.init();
-
-    GapAdvertisingParams advParams (
-        GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED );
-    GapAdvertisingData   advData;
-    GapAdvertisingData   scanResponse;
-
-    /*
-     * For this demo application, populate the beacon advertisement payload
-     * with 2 AD structures: FLAG and MSD
-     *
-     * Reference:
-     *  Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 11, 18
-     */
-
-    /* Define an Beacon payload.
-
-       This is the data part of the MSD AdvertisingData structure to be added to
-       the advertising payload.
-       --------------------------------------------------------------
-       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
-    */
-    uint8_t beaconPayload[] = {
-        0x4C, 0x00, // Company identifier code (0x004C == Apple)
-        0x02,       // ID
-        0x15,       // length of the remaining payload
-        0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, // UUID
-        0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61,
-        0x00, 0x00, // the major value to differenciate a location
-        0x00, 0x00, // the minor value to differenciate a location
-        0xC8        // 2's complement of the Tx power (-56dB)
-    };
-
-    /* Make sure we get a clean start */
     nrf.reset();
 
-    advData.addFlags(GapAdvertisingData::BREDR_NOT_SUPPORTED);
-    advData.addData(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA,
-                    beaconPayload,
-                    sizeof(beaconPayload));
+    /* Setup advertising data. This includes AD structures in the payload of
+     * advertising packets; and scan-response data. */
+    {
+        GapAdvertisingData advData;
+        advData.addFlags(GapAdvertisingData::BREDR_NOT_SUPPORTED);
+        advData.addData(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA,
+                        beaconPayload,
+                        sizeof(beaconPayload));
+        GapAdvertisingData scanResponse;
+        nrf.getGap().setAdvertisingData(advData, scanResponse);
+    }
 
     /* Start advertising! */
-    nrf.getGap().setAdvertisingData(advData, scanResponse);
+    GapAdvertisingParams advParams(
+        GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
     nrf.getGap().startAdvertising(advParams);
 
     /* Do blinky on mainloopLED while we're waiting for BLE events */
@@ -92,6 +86,17 @@
         mainloopLED = !mainloopLED;
         wait(1);
     }
+
+    /* unreachable. */
+}
+
+void setupAppHardware(void)
+{
+    /* Setup blinkies: mainloopLED is toggled in main, tickerLED is
+     * toggled via Ticker */
+    mainloopLED = 1;
+    tickerLED   = 1;
+    flipper.attach(&tickerCallback, 1.0);
 }
 
 /**************************************************************************/