Changed to work with St Board

Dependencies:   BLE_API X_NUCLEO_IDB0XA1 mbed

Fork of BLE_URIBeacon by Bluetooth Low Energy

Revision:
8:b816829fb712
Parent:
7:6faec5978fb4
Child:
9:e7f47bec97b8
--- a/main.cpp	Mon Dec 01 14:35:47 2014 +0000
+++ b/main.cpp	Wed Dec 03 14:48:28 2014 +0000
@@ -21,25 +21,66 @@
 #include "DeviceInformationService.h"
 
 BLEDevice ble;
+URIBeaconConfigService *uriBeaconConfig;
 
 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
 {
     ble.startAdvertising();
 }
 
+void switchCallback(void)
+{
+    static bool switched = false;
+    if (!switched) {
+        printf("executing switch\r\n");
+        delete uriBeaconConfig;
+        uriBeaconConfig = NULL;
+
+        static const uint8_t BEACON_UUID[] = {0xD8, 0xFE};
+        static const uint8_t urldata[] = {
+            BEACON_UUID[0],
+            BEACON_UUID[1],
+            0x00, // flags
+            0x20, // power
+            0x00, // http://www.
+            'm',
+            'b',
+            'e',
+            'd',
+            0x08, // .".org"
+        };
+
+        ble.shutdown();
+        ble.init();
+
+        ble.clearAdvertisingPayload();
+        ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, BEACON_UUID, sizeof(BEACON_UUID));
+        ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, urldata, sizeof(urldata));
+
+        ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
+        ble.setAdvertisingInterval(1600); /* 1s; in multiples of 0.625ms. */
+        ble.startAdvertising();
+
+        switched = true;
+    }
+}
+
 int main(void)
 {
+    Ticker ticker;
+    ticker.attach(switchCallback, 30);
+
     ble.init();
     ble.onDisconnection(disconnectionCallback);
 
-    URIBeaconConfigService uriBeaconConfig(ble, "http://www.mbed.org");
-    if (!uriBeaconConfig.configuredSuccessfully()) {
+    uriBeaconConfig = new URIBeaconConfigService(ble, "http://www.mbed.org");
+    if (!uriBeaconConfig->configuredSuccessfully()) {
         error("failed to accommodate URI");
     }
     /* optional use of the API offered by URIBeaconConfigService */
     const int8_t powerLevels[] = {-20, -4, 0, 10};
-    uriBeaconConfig.setTxPowerLevels(powerLevels);
-    uriBeaconConfig.setTxPowerMode(URIBeaconConfigService::TX_POWER_MODE_LOW);
+    uriBeaconConfig->setTxPowerLevels(powerLevels);
+    uriBeaconConfig->setTxPowerMode(URIBeaconConfigService::TX_POWER_MODE_LOW);
 
     /* Setup auxiliary services. */
     DFUService dfu(ble); /* To allow over-the-air firmware udpates. optional. */