Changed to work with St Board
Dependencies: BLE_API X_NUCLEO_IDB0XA1 mbed
Fork of BLE_URIBeacon by
Diff: main.cpp
- 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. */