Simple beacon for nRF51822

Dependencies:   BLE_API mbed nRF51822Copy

Fork of BLE_iBeacon by Bluetooth Low Energy

This is the demo beacon for ARM TechCon 2014.

Based on the original library, this demo reads the onboard switches and temperature sensor and beacons them out as a BLE advertisment.

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);
 }
 
 /**************************************************************************/