Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BLE_API by
Diff: services/URIBeaconConfigService.h
- Revision:
- 314:193908f2b13b
- Parent:
- 313:c4599a1aba23
- Child:
- 315:943225af2cf4
--- a/services/URIBeaconConfigService.h Mon Mar 09 16:23:55 2015 +0000
+++ b/services/URIBeaconConfigService.h Mon Mar 09 16:23:55 2015 +0000
@@ -17,6 +17,9 @@
#ifndef SERVICES_URIBEACONCONFIGSERVICE_H_
#define SERVICES_URIBEACONCONFIGSERVICE_H_
+#include "BLEDevice.h"
+#include "mbed.h"
+
#define UUID_URI_BEACON(FIRST, SECOND) { \
0xee, 0x0c, FIRST, SECOND, 0x87, 0x86, 0x40, 0xba, \
0xab, 0x96, 0x99, 0xb9, 0x1a, 0xc9, 0x81, 0xd8, \
@@ -186,10 +189,7 @@
&defaultAdvPowerLevels[URIBeaconConfigService::TX_POWER_MODE_LOW]),
sizeof(uint8_t));
- /////// TODO
- // ble.setTxPower(
- // firmwarePowerLevels[URIBeaconConfigService::TX_POWER_MODE_LOW]);
-
+ ble.setTxPower(params.advPowerLevels[params.txPowerMode]);
ble.setDeviceName(reinterpret_cast<uint8_t *>(&DEVICE_NAME));
ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(ADVERTISING_INTERVAL_MSEC));
@@ -198,56 +198,41 @@
/* Helper function to switch to the non-connectible normal mode for URIBeacon. This gets called after a timeout. */
void setupURIBeaconAdvertisements()
{
- // uint8_t serviceData[SERVICE_DATA_MAX];
- // int serviceDataLen = 0;
+ uint8_t serviceData[SERVICE_DATA_MAX];
+ int serviceDataLen = 0;
- // advertisingStateLed = 1;
- // connectionStateLed = 1;
-
+ /* Reinitialize the BLE stack. This will clear away the existing services and advertising state. */
ble.shutdown();
ble.init();
// Fields from the Service
- // int beaconPeriod = persistentData.params.beaconPeriod;
- // int txPowerMode = persistentData.params.txPowerMode;
- // int uriDataLength = persistentData.params.uriDataLength;
- // URIBeaconConfigService::UriData_t &uriData = persistentData.params.uriData;
- // URIBeaconConfigService::PowerLevels_t &advPowerLevels = persistentData.params.advPowerLevels;
- // uint8_t flags = persistentData.params.flags;
-
- // pstorageSave();
+ int beaconPeriod = params.beaconPeriod;
+ int txPowerMode = params.txPowerMode;
+ int uriDataLength = params.uriDataLength;
+ URIBeaconConfigService::UriData_t &uriData = params.uriData;
+ URIBeaconConfigService::PowerLevels_t &advPowerLevels = params.advPowerLevels;
+ uint8_t flags = params.flags;
- // delete uriBeaconConfig;
- // uriBeaconConfig = NULL;
-
- // ble.clearAdvertisingPayload();
- // ble.setTxPower(firmwarePowerLevels[txPowerMode]);
-
- // ble.setAdvertisingType(
- // GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
+ extern void saveURIBeaconConfigParams(Params_t *paramsP); /* forward declaration; necessary to avoid a circular dependency. */
+ saveURIBeaconConfigParams(¶ms);
- // ble.setAdvertisingInterval(
- // Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(beaconPeriod));
-
- // ble.accumulateAdvertisingPayload(
- // GapAdvertisingData::BREDR_NOT_SUPPORTED |
- // GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
-
- // ble.accumulateAdvertisingPayload(
- // GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, BEACON_UUID,
- // sizeof(BEACON_UUID));
+ ble.clearAdvertisingPayload();
+ ble.setTxPower(params.advPowerLevels[params.txPowerMode]);
+ ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
+ ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(beaconPeriod));
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, BEACON_UUID, sizeof(BEACON_UUID));
- // serviceData[serviceDataLen++] = BEACON_UUID[0];
- // serviceData[serviceDataLen++] = BEACON_UUID[1];
- // serviceData[serviceDataLen++] = flags;
- // serviceData[serviceDataLen++] = advPowerLevels[txPowerMode];
- // for (int j=0; j < uriDataLength; j++) {
- // serviceData[serviceDataLen++] = uriData[j];
- // }
+ serviceData[serviceDataLen++] = BEACON_UUID[0];
+ serviceData[serviceDataLen++] = BEACON_UUID[1];
+ serviceData[serviceDataLen++] = flags;
+ serviceData[serviceDataLen++] = advPowerLevels[txPowerMode];
+ for (int j=0; j < uriDataLength; j++) {
+ serviceData[serviceDataLen++] = uriData[j];
+ }
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, serviceData, serviceDataLen);
- // ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, serviceData, serviceDataLen);
-
- // ble.startAdvertising();
+ ble.startAdvertising();
}
// After advertising timeout, stop config and switch to UriBeacon
@@ -255,9 +240,9 @@
{
Gap::GapState_t state;
state = ble.getGapState();
- if (!state.connected) {
+ if (state.advertising) {
setupURIBeaconAdvertisements();
- configAdvertisementTimeoutTicker.detach();
+ configAdvertisementTimeoutTicker.detach(); /* disable the timeout Ticker. */
}
}
