BLE EddystoneService example

This example is a fork of the following mbed-os example:

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-EddystoneService/

Please read the documentation in this page.

Committer:
Vincent Coubard
Date:
Thu Jul 28 23:27:37 2016 +0100
Revision:
2:9ee673e0b86a
Parent:
1:9db4d46bb63f
Child:
3:5120491ba317
Sync with mbed-os-5.1.0-rc3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Vincent Coubard 2:9ee673e0b86a 1 /* mbed Microcontroller Library
Vincent Coubard 2:9ee673e0b86a 2 * Copyright (c) 2006-2015 ARM Limited
Vincent Coubard 2:9ee673e0b86a 3 *
Vincent Coubard 2:9ee673e0b86a 4 * Licensed under the Apache License, Version 2.0 (the "License");
Vincent Coubard 2:9ee673e0b86a 5 * you may not use this file except in compliance with the License.
Vincent Coubard 2:9ee673e0b86a 6 * You may obtain a copy of the License at
Vincent Coubard 2:9ee673e0b86a 7 *
Vincent Coubard 2:9ee673e0b86a 8 * http://www.apache.org/licenses/LICENSE-2.0
Vincent Coubard 2:9ee673e0b86a 9 *
Vincent Coubard 2:9ee673e0b86a 10 * Unless required by applicable law or agreed to in writing, software
Vincent Coubard 2:9ee673e0b86a 11 * distributed under the License is distributed on an "AS IS" BASIS,
Vincent Coubard 2:9ee673e0b86a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Vincent Coubard 2:9ee673e0b86a 13 * See the License for the specific language governing permissions and
Vincent Coubard 2:9ee673e0b86a 14 * limitations under the License.
Vincent Coubard 2:9ee673e0b86a 15 */
Vincent Coubard 2:9ee673e0b86a 16
Vincent Coubard 2:9ee673e0b86a 17 #ifndef __EDDYSTONESERVICE_H__
Vincent Coubard 2:9ee673e0b86a 18 #define __EDDYSTONESERVICE_H__
Vincent Coubard 2:9ee673e0b86a 19
Vincent Coubard 2:9ee673e0b86a 20 #include <mbed-events/events.h>
Vincent Coubard 2:9ee673e0b86a 21 #include "ble/BLE.h"
Vincent Coubard 2:9ee673e0b86a 22 #include "EddystoneTypes.h"
Vincent Coubard 2:9ee673e0b86a 23 #include "URLFrame.h"
Vincent Coubard 2:9ee673e0b86a 24 #include "UIDFrame.h"
Vincent Coubard 2:9ee673e0b86a 25 #include "TLMFrame.h"
Vincent Coubard 2:9ee673e0b86a 26 #include <string.h>
Vincent Coubard 2:9ee673e0b86a 27 #ifdef YOTTA_CFG_MBED_OS
Vincent Coubard 2:9ee673e0b86a 28 #include <mbed.h>
Vincent Coubard 2:9ee673e0b86a 29 #include "mbed-drivers/CircularBuffer.h"
Vincent Coubard 2:9ee673e0b86a 30 #else
Vincent Coubard 2:9ee673e0b86a 31 #include "mbed.h"
Vincent Coubard 2:9ee673e0b86a 32 #include "CircularBuffer.h"
Vincent Coubard 2:9ee673e0b86a 33 #endif
Vincent Coubard 2:9ee673e0b86a 34
Vincent Coubard 2:9ee673e0b86a 35 #ifndef YOTTA_CFG_EDDYSTONE_DEFAULT_URL_FRAME_INTERVAL
Vincent Coubard 2:9ee673e0b86a 36 #define YOTTA_CFG_EDDYSTONE_DEFAULT_URL_FRAME_INTERVAL 700
Vincent Coubard 2:9ee673e0b86a 37 #endif
Vincent Coubard 2:9ee673e0b86a 38
Vincent Coubard 2:9ee673e0b86a 39 #ifndef YOTTA_CFG_EDDYSTONE_DEFAULT_UID_FRAME_INTERVAL
Vincent Coubard 2:9ee673e0b86a 40 #define YOTTA_CFG_EDDYSTONE_DEFAULT_UID_FRAME_INTERVAL 300
Vincent Coubard 2:9ee673e0b86a 41 #endif
Vincent Coubard 2:9ee673e0b86a 42
Vincent Coubard 2:9ee673e0b86a 43 #ifndef YOTTA_CFG_EDDYSTONE_DEFAULT_TLM_FRAME_INTERVAL
Vincent Coubard 2:9ee673e0b86a 44 #define YOTTA_CFG_EDDYSTONE_DEFAULT_TLM_FRAME_INTERVAL 2000
Vincent Coubard 2:9ee673e0b86a 45 #endif
Vincent Coubard 2:9ee673e0b86a 46
Vincent Coubard 2:9ee673e0b86a 47 #ifndef YOTTA_CFG_EDDYSTONE_DEFAULT_EDDYSTONE_URL_CONFIG_ADV_INTERVAL
Vincent Coubard 2:9ee673e0b86a 48 #define YOTTA_CFG_EDDYSTONE_DEFAULT_EDDYSTONE_URL_CONFIG_ADV_INTERVAL 1000
Vincent Coubard 2:9ee673e0b86a 49 #endif
Vincent Coubard 2:9ee673e0b86a 50
Vincent Coubard 2:9ee673e0b86a 51 /**
Vincent Coubard 2:9ee673e0b86a 52 * This class implements the Eddystone-URL Config Service and the Eddystone
Vincent Coubard 2:9ee673e0b86a 53 * Protocol Specification as defined in the publicly available specification at
Vincent Coubard 2:9ee673e0b86a 54 * https://github.com/google/eddystone/blob/master/protocol-specification.md.
Vincent Coubard 2:9ee673e0b86a 55 */
Vincent Coubard 2:9ee673e0b86a 56 class EddystoneService
Vincent Coubard 2:9ee673e0b86a 57 {
Vincent Coubard 2:9ee673e0b86a 58 public:
Vincent Coubard 2:9ee673e0b86a 59 /**
Vincent Coubard 2:9ee673e0b86a 60 * Total number of GATT Characteristics in the Eddystonei-URL Configuration
Vincent Coubard 2:9ee673e0b86a 61 * Service.
Vincent Coubard 2:9ee673e0b86a 62 */
Vincent Coubard 2:9ee673e0b86a 63 static const uint16_t TOTAL_CHARACTERISTICS = 9;
Vincent Coubard 2:9ee673e0b86a 64
Vincent Coubard 2:9ee673e0b86a 65 /**
Vincent Coubard 2:9ee673e0b86a 66 * Default interval for advertising packets for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 67 * Configuration Service.
Vincent Coubard 2:9ee673e0b86a 68 */
Vincent Coubard 2:9ee673e0b86a 69 static const uint32_t DEFAULT_CONFIG_PERIOD_MSEC = YOTTA_CFG_EDDYSTONE_DEFAULT_EDDYSTONE_URL_CONFIG_ADV_INTERVAL;
Vincent Coubard 2:9ee673e0b86a 70 /**
Vincent Coubard 2:9ee673e0b86a 71 * Recommended interval for advertising packets containing Eddystone URL
Vincent Coubard 2:9ee673e0b86a 72 * frames.
Vincent Coubard 2:9ee673e0b86a 73 */
Vincent Coubard 2:9ee673e0b86a 74 static const uint16_t DEFAULT_URL_FRAME_PERIOD_MSEC = YOTTA_CFG_EDDYSTONE_DEFAULT_URL_FRAME_INTERVAL;
Vincent Coubard 2:9ee673e0b86a 75 /**
Vincent Coubard 2:9ee673e0b86a 76 * Recommended interval for advertising packets containing Eddystone UID
Vincent Coubard 2:9ee673e0b86a 77 * frames.
Vincent Coubard 2:9ee673e0b86a 78 */
Vincent Coubard 2:9ee673e0b86a 79 static const uint16_t DEFAULT_UID_FRAME_PERIOD_MSEC = YOTTA_CFG_EDDYSTONE_DEFAULT_UID_FRAME_INTERVAL;
Vincent Coubard 2:9ee673e0b86a 80 /**
Vincent Coubard 2:9ee673e0b86a 81 * Recommended interval for advertising packets containing Eddystone TLM
Vincent Coubard 2:9ee673e0b86a 82 * frames.
Vincent Coubard 2:9ee673e0b86a 83 */
Vincent Coubard 2:9ee673e0b86a 84 static const uint16_t DEFAULT_TLM_FRAME_PERIOD_MSEC = YOTTA_CFG_EDDYSTONE_DEFAULT_TLM_FRAME_INTERVAL;
Vincent Coubard 2:9ee673e0b86a 85
Vincent Coubard 2:9ee673e0b86a 86 /**
Vincent Coubard 2:9ee673e0b86a 87 * Enumeration that defines the various operation modes of the
Vincent Coubard 2:9ee673e0b86a 88 * EddystoneService.
Vincent Coubard 2:9ee673e0b86a 89 *
Vincent Coubard 2:9ee673e0b86a 90 * @note The main app can change the mode of EddystoneService at any point
Vincent Coubard 2:9ee673e0b86a 91 * of time by calling startConfigService() or startBeaconService().
Vincent Coubard 2:9ee673e0b86a 92 * Resources from the previous mode will be freed.
Vincent Coubard 2:9ee673e0b86a 93 *
Vincent Coubard 2:9ee673e0b86a 94 * @note It is currently NOT possible to force EddystoneService back into
Vincent Coubard 2:9ee673e0b86a 95 * EDDYSTONE_MODE_NONE.
Vincent Coubard 2:9ee673e0b86a 96 */
Vincent Coubard 2:9ee673e0b86a 97 enum OperationModes {
Vincent Coubard 2:9ee673e0b86a 98 /**
Vincent Coubard 2:9ee673e0b86a 99 * NONE: EddystoneService has been initialized but no memory has been
Vincent Coubard 2:9ee673e0b86a 100 * dynamically allocated. Additionally, no services are running
Vincent Coubard 2:9ee673e0b86a 101 * nothing is being advertised.
Vincent Coubard 2:9ee673e0b86a 102 */
Vincent Coubard 2:9ee673e0b86a 103 EDDYSTONE_MODE_NONE,
Vincent Coubard 2:9ee673e0b86a 104 /**
Vincent Coubard 2:9ee673e0b86a 105 * CONFIG: EddystoneService has been initialized, the configuration
Vincent Coubard 2:9ee673e0b86a 106 * service started and memory has been allocated for BLE
Vincent Coubard 2:9ee673e0b86a 107 * characteristics. Memory consumption peaks during CONFIG
Vincent Coubard 2:9ee673e0b86a 108 * mode.
Vincent Coubard 2:9ee673e0b86a 109 */
Vincent Coubard 2:9ee673e0b86a 110 EDDYSTONE_MODE_CONFIG,
Vincent Coubard 2:9ee673e0b86a 111 /**
Vincent Coubard 2:9ee673e0b86a 112 * BEACON: Eddystone service is running as a beacon advertising URL,
Vincent Coubard 2:9ee673e0b86a 113 * UID and/or TLM frames depending on how it is configured.
Vincent Coubard 2:9ee673e0b86a 114 */
Vincent Coubard 2:9ee673e0b86a 115 EDDYSTONE_MODE_BEACON
Vincent Coubard 2:9ee673e0b86a 116 };
Vincent Coubard 2:9ee673e0b86a 117
Vincent Coubard 2:9ee673e0b86a 118 /**
Vincent Coubard 2:9ee673e0b86a 119 * Structure that encapsulates the Eddystone configuration parameters. This
Vincent Coubard 2:9ee673e0b86a 120 * structure is particularly useful when storing the parameters to
Vincent Coubard 2:9ee673e0b86a 121 * persistent storage.
Vincent Coubard 2:9ee673e0b86a 122 */
Vincent Coubard 2:9ee673e0b86a 123 struct EddystoneParams_t {
Vincent Coubard 2:9ee673e0b86a 124 /**
Vincent Coubard 2:9ee673e0b86a 125 * The value of the Eddystone-URL Configuration Service Lock State
Vincent Coubard 2:9ee673e0b86a 126 * characteristic.
Vincent Coubard 2:9ee673e0b86a 127 */
Vincent Coubard 2:9ee673e0b86a 128 bool lockState;
Vincent Coubard 2:9ee673e0b86a 129 /**
Vincent Coubard 2:9ee673e0b86a 130 * The value of the Eddystone-URL Configuration Service Lock
Vincent Coubard 2:9ee673e0b86a 131 * characteristic that can be used to lock the beacon and set the
Vincent Coubard 2:9ee673e0b86a 132 * single-use lock-code.
Vincent Coubard 2:9ee673e0b86a 133 */
Vincent Coubard 2:9ee673e0b86a 134 Lock_t lock;
Vincent Coubard 2:9ee673e0b86a 135 /**
Vincent Coubard 2:9ee673e0b86a 136 * The value of the Eddystone-URL Configuration Service Unlock
Vincent Coubard 2:9ee673e0b86a 137 * characteristic that can be used to unlock the beacon and clear the
Vincent Coubard 2:9ee673e0b86a 138 * single-use lock-code.
Vincent Coubard 2:9ee673e0b86a 139 */
Vincent Coubard 2:9ee673e0b86a 140 Lock_t unlock;
Vincent Coubard 2:9ee673e0b86a 141 /**
Vincent Coubard 2:9ee673e0b86a 142 * The value of the Eddystone-URL Configuration Service Flags
Vincent Coubard 2:9ee673e0b86a 143 * characteristic. This value is currently fixed to 0x10.
Vincent Coubard 2:9ee673e0b86a 144 */
Vincent Coubard 2:9ee673e0b86a 145 uint8_t flags;
Vincent Coubard 2:9ee673e0b86a 146 /**
Vincent Coubard 2:9ee673e0b86a 147 * The value of the Eddystone-URL Configuration Service Advertised TX
Vincent Coubard 2:9ee673e0b86a 148 * Power Levels characteristic that is an array of bytes whose values
Vincent Coubard 2:9ee673e0b86a 149 * are put into the advertising packets when in EDDYSTONE_BEACON_MODE.
Vincent Coubard 2:9ee673e0b86a 150 *
Vincent Coubard 2:9ee673e0b86a 151 * @note These are not the same values set internally into the radio tx
Vincent Coubard 2:9ee673e0b86a 152 * power.
Vincent Coubard 2:9ee673e0b86a 153 */
Vincent Coubard 2:9ee673e0b86a 154 PowerLevels_t advPowerLevels;
Vincent Coubard 2:9ee673e0b86a 155 /**
Vincent Coubard 2:9ee673e0b86a 156 * The value of the Eddystone-URL Configuration Service TX Power Mode
Vincent Coubard 2:9ee673e0b86a 157 * characteristic. This value is an index into the
Vincent Coubard 2:9ee673e0b86a 158 * EddystoneParams_t::advPowerLevels array.
Vincent Coubard 2:9ee673e0b86a 159 */
Vincent Coubard 2:9ee673e0b86a 160 uint8_t txPowerMode;
Vincent Coubard 2:9ee673e0b86a 161 /**
Vincent Coubard 2:9ee673e0b86a 162 * The value of the Eddystone-URL Configuration Service Beacon Period
Vincent Coubard 2:9ee673e0b86a 163 * characteristic that is the interval (in milliseconds) of the
Vincent Coubard 2:9ee673e0b86a 164 * Eddystone-URL frames.
Vincent Coubard 2:9ee673e0b86a 165 *
Vincent Coubard 2:9ee673e0b86a 166 * @note A value of zero disables Eddystone-URL frame trasmissions.
Vincent Coubard 2:9ee673e0b86a 167 */
Vincent Coubard 2:9ee673e0b86a 168 uint16_t urlFramePeriod;
Vincent Coubard 2:9ee673e0b86a 169 /**
Vincent Coubard 2:9ee673e0b86a 170 * The configured interval (in milliseconds) of the Eddystone-UID
Vincent Coubard 2:9ee673e0b86a 171 * frames.
Vincent Coubard 2:9ee673e0b86a 172 *
Vincent Coubard 2:9ee673e0b86a 173 * @note A value of zero disables Eddystone-UID frame transmissions.
Vincent Coubard 2:9ee673e0b86a 174 *
Vincent Coubard 2:9ee673e0b86a 175 * @note Currently it is only possible to modify this value by using
Vincent Coubard 2:9ee673e0b86a 176 * the setUIDFrameAdvertisingInterval() API.
Vincent Coubard 2:9ee673e0b86a 177 */
Vincent Coubard 2:9ee673e0b86a 178 uint16_t uidFramePeriod;
Vincent Coubard 2:9ee673e0b86a 179 /**
Vincent Coubard 2:9ee673e0b86a 180 * The configured interval (in milliseconds) of the Eddystone-TLM
Vincent Coubard 2:9ee673e0b86a 181 * frames.
Vincent Coubard 2:9ee673e0b86a 182 *
Vincent Coubard 2:9ee673e0b86a 183 * @note A value of zero disables Eddystone-TLM frame transmissions.
Vincent Coubard 2:9ee673e0b86a 184 *
Vincent Coubard 2:9ee673e0b86a 185 * @note Currently it is only possible to modify this value by using
Vincent Coubard 2:9ee673e0b86a 186 * the setTLMFrameAdvertisingInterval() API.
Vincent Coubard 2:9ee673e0b86a 187 */
Vincent Coubard 2:9ee673e0b86a 188 uint16_t tlmFramePeriod;
Vincent Coubard 2:9ee673e0b86a 189 /**
Vincent Coubard 2:9ee673e0b86a 190 * The configured version of the Eddystone-TLM frames.
Vincent Coubard 2:9ee673e0b86a 191 */
Vincent Coubard 2:9ee673e0b86a 192 uint8_t tlmVersion;
Vincent Coubard 2:9ee673e0b86a 193 /**
Vincent Coubard 2:9ee673e0b86a 194 * The length of the encoded URL in EddystoneParams_t::urlData used
Vincent Coubard 2:9ee673e0b86a 195 * within Eddystone-URL frames.
Vincent Coubard 2:9ee673e0b86a 196 */
Vincent Coubard 2:9ee673e0b86a 197 uint8_t urlDataLength;
Vincent Coubard 2:9ee673e0b86a 198 /**
Vincent Coubard 2:9ee673e0b86a 199 * The value of the Eddystone-URL Configuration Service URI Data
Vincent Coubard 2:9ee673e0b86a 200 * characteristic that contains an encoded URL as described in the
Vincent Coubard 2:9ee673e0b86a 201 * Eddystone Specification at
Vincent Coubard 2:9ee673e0b86a 202 * https://github.com/google/eddystone/blob/master/eddystone-url/README.md#eddystone-url-http-url-encoding.
Vincent Coubard 2:9ee673e0b86a 203 */
Vincent Coubard 2:9ee673e0b86a 204 UrlData_t urlData;
Vincent Coubard 2:9ee673e0b86a 205 /**
Vincent Coubard 2:9ee673e0b86a 206 * The configured 10-byte namespace ID in Eddystone-UID frames that may
Vincent Coubard 2:9ee673e0b86a 207 * be used to group a particular set of beacons.
Vincent Coubard 2:9ee673e0b86a 208 */
Vincent Coubard 2:9ee673e0b86a 209 UIDNamespaceID_t uidNamespaceID;
Vincent Coubard 2:9ee673e0b86a 210 /**
Vincent Coubard 2:9ee673e0b86a 211 * The configured 6-byte instance ID that may be used to uniquely
Vincent Coubard 2:9ee673e0b86a 212 * identify individual devices in a group.
Vincent Coubard 2:9ee673e0b86a 213 */
Vincent Coubard 2:9ee673e0b86a 214 UIDInstanceID_t uidInstanceID;
Vincent Coubard 2:9ee673e0b86a 215 };
Vincent Coubard 2:9ee673e0b86a 216
Vincent Coubard 2:9ee673e0b86a 217 /**
Vincent Coubard 2:9ee673e0b86a 218 * Enumeration that defines the various error codes for EddystoneService.
Vincent Coubard 2:9ee673e0b86a 219 */
Vincent Coubard 2:9ee673e0b86a 220 enum EddystoneError_t {
Vincent Coubard 2:9ee673e0b86a 221 /**
Vincent Coubard 2:9ee673e0b86a 222 * No error occurred.
Vincent Coubard 2:9ee673e0b86a 223 */
Vincent Coubard 2:9ee673e0b86a 224 EDDYSTONE_ERROR_NONE,
Vincent Coubard 2:9ee673e0b86a 225 /**
Vincent Coubard 2:9ee673e0b86a 226 * The supplied advertising interval is invalid. The interval may be
Vincent Coubard 2:9ee673e0b86a 227 * too short/long for the type of advertising packets being broadcast.
Vincent Coubard 2:9ee673e0b86a 228 *
Vincent Coubard 2:9ee673e0b86a 229 * @note For the acceptable range of advertising interval refer to the
Vincent Coubard 2:9ee673e0b86a 230 * following functions in mbed BLE API:
Vincent Coubard 2:9ee673e0b86a 231 * - Gap::getMinNonConnectableAdvertisingInterval()
Vincent Coubard 2:9ee673e0b86a 232 * - Gap::getMinAdvertisingInterval()
Vincent Coubard 2:9ee673e0b86a 233 * - Gap::getMaxAdvertisingInterval()
Vincent Coubard 2:9ee673e0b86a 234 */
Vincent Coubard 2:9ee673e0b86a 235 EDDYSTONE_ERROR_INVALID_ADVERTISING_INTERVAL,
Vincent Coubard 2:9ee673e0b86a 236 /**
Vincent Coubard 2:9ee673e0b86a 237 * The result of executing a call when the the EddystoneService is in
Vincent Coubard 2:9ee673e0b86a 238 * the incorrect operation mode.
Vincent Coubard 2:9ee673e0b86a 239 */
Vincent Coubard 2:9ee673e0b86a 240 EDDYSTONE_ERROR_INVALID_STATE
Vincent Coubard 2:9ee673e0b86a 241 };
Vincent Coubard 2:9ee673e0b86a 242
Vincent Coubard 2:9ee673e0b86a 243 /**
Vincent Coubard 2:9ee673e0b86a 244 * Enumeration that defines the available frame types within Eddystone
Vincent Coubard 2:9ee673e0b86a 245 * advertising packets.
Vincent Coubard 2:9ee673e0b86a 246 */
Vincent Coubard 2:9ee673e0b86a 247 enum FrameType {
Vincent Coubard 2:9ee673e0b86a 248 /**
Vincent Coubard 2:9ee673e0b86a 249 * The Eddystone-URL frame. Refer to
Vincent Coubard 2:9ee673e0b86a 250 * https://github.com/google/eddystone/tree/master/eddystone-url.
Vincent Coubard 2:9ee673e0b86a 251 */
Vincent Coubard 2:9ee673e0b86a 252 EDDYSTONE_FRAME_URL,
Vincent Coubard 2:9ee673e0b86a 253 /**
Vincent Coubard 2:9ee673e0b86a 254 * The Eddystone-URL frame. Refer to
Vincent Coubard 2:9ee673e0b86a 255 * https://github.com/google/eddystone/tree/master/eddystone-uid.
Vincent Coubard 2:9ee673e0b86a 256 */
Vincent Coubard 2:9ee673e0b86a 257 EDDYSTONE_FRAME_UID,
Vincent Coubard 2:9ee673e0b86a 258 /**
Vincent Coubard 2:9ee673e0b86a 259 * The Eddystone-URL frame. Refer to
Vincent Coubard 2:9ee673e0b86a 260 * https://github.com/google/eddystone/tree/master/eddystone-tlm.
Vincent Coubard 2:9ee673e0b86a 261 */
Vincent Coubard 2:9ee673e0b86a 262 EDDYSTONE_FRAME_TLM,
Vincent Coubard 2:9ee673e0b86a 263 /**
Vincent Coubard 2:9ee673e0b86a 264 * The total number Eddystone frame types.
Vincent Coubard 2:9ee673e0b86a 265 */
Vincent Coubard 2:9ee673e0b86a 266 NUM_EDDYSTONE_FRAMES
Vincent Coubard 2:9ee673e0b86a 267 };
Vincent Coubard 2:9ee673e0b86a 268
Vincent Coubard 2:9ee673e0b86a 269 /**
Vincent Coubard 2:9ee673e0b86a 270 * The size of the advertising frame queue.
Vincent Coubard 2:9ee673e0b86a 271 *
Vincent Coubard 2:9ee673e0b86a 272 * @note [WARNING] If the advertising rate for any of the frames is higher
Vincent Coubard 2:9ee673e0b86a 273 * than 100ms then frames will be dropped, this value must be
Vincent Coubard 2:9ee673e0b86a 274 * increased.
Vincent Coubard 2:9ee673e0b86a 275 */
Vincent Coubard 2:9ee673e0b86a 276 static const uint16_t ADV_FRAME_QUEUE_SIZE = NUM_EDDYSTONE_FRAMES;
Vincent Coubard 2:9ee673e0b86a 277
Vincent Coubard 2:9ee673e0b86a 278
Vincent Coubard 2:9ee673e0b86a 279 /**
Vincent Coubard 2:9ee673e0b86a 280 * Constructor that Initializes the EddystoneService using parameters from
Vincent Coubard 2:9ee673e0b86a 281 * the supplied EddystoneParams_t. This constructor is particularly useful
Vincent Coubard 2:9ee673e0b86a 282 * for configuring the EddystoneService with parameters fetched from
Vincent Coubard 2:9ee673e0b86a 283 * persistent storage.
Vincent Coubard 2:9ee673e0b86a 284 *
Vincent Coubard 2:9ee673e0b86a 285 * @param[in] bleIn
Vincent Coubard 2:9ee673e0b86a 286 * The BLE instance.
Vincent Coubard 2:9ee673e0b86a 287 * @param[in] paramIn
Vincent Coubard 2:9ee673e0b86a 288 * The input Eddystone configuration parameters.
Vincent Coubard 2:9ee673e0b86a 289 * @param[in] radioPowerLevelsIn
Vincent Coubard 2:9ee673e0b86a 290 * The value set internally into the radion tx power.
Vincent Coubard 2:9ee673e0b86a 291 * @param[in] advConfigIntervalIn
Vincent Coubard 2:9ee673e0b86a 292 * The advertising interval for advertising packets of the
Vincent Coubard 2:9ee673e0b86a 293 * Eddystone-URL Configuration Service.
Vincent Coubard 2:9ee673e0b86a 294 */
Vincent Coubard 2:9ee673e0b86a 295 EddystoneService(BLE &bleIn,
Vincent Coubard 2:9ee673e0b86a 296 EddystoneParams_t &paramsIn,
Vincent Coubard 2:9ee673e0b86a 297 const PowerLevels_t &radioPowerLevelsIn,
Vincent Coubard 2:9ee673e0b86a 298 events::EventQueue& eventQueue,
Vincent Coubard 2:9ee673e0b86a 299 uint32_t advConfigIntervalIn = DEFAULT_CONFIG_PERIOD_MSEC);
Vincent Coubard 2:9ee673e0b86a 300
Vincent Coubard 2:9ee673e0b86a 301 /**
Vincent Coubard 2:9ee673e0b86a 302 * Constructor to initialize the EddystoneService to default values.
Vincent Coubard 2:9ee673e0b86a 303 *
Vincent Coubard 2:9ee673e0b86a 304 * @param[in] bleIn
Vincent Coubard 2:9ee673e0b86a 305 * The BLE instance.
Vincent Coubard 2:9ee673e0b86a 306 * @param[in] advPowerLevelsIn
Vincent Coubard 2:9ee673e0b86a 307 * The value of the Eddystone-URL Configuration Service TX
Vincent Coubard 2:9ee673e0b86a 308 * Power Mode characteristic.
Vincent Coubard 2:9ee673e0b86a 309 * @param[in] radioPowerLevelsIn
Vincent Coubard 2:9ee673e0b86a 310 * The value set internally into the radion tx power.
Vincent Coubard 2:9ee673e0b86a 311 * @param[in] advConfigIntervalIn
Vincent Coubard 2:9ee673e0b86a 312 * The advertising interval for advertising packets of the
Vincent Coubard 2:9ee673e0b86a 313 * Eddystone-URL Configuration Service.
Vincent Coubard 2:9ee673e0b86a 314 *
Vincent Coubard 2:9ee673e0b86a 315 * @note When using this constructor the setURLData(), setTMLData() and
Vincent Coubard 2:9ee673e0b86a 316 * setUIDData() functions must be called to initialize
Vincent Coubard 2:9ee673e0b86a 317 * EddystoneService manually.
Vincent Coubard 2:9ee673e0b86a 318 */
Vincent Coubard 2:9ee673e0b86a 319 EddystoneService(BLE &bleIn,
Vincent Coubard 2:9ee673e0b86a 320 const PowerLevels_t &advPowerLevelsIn,
Vincent Coubard 2:9ee673e0b86a 321 const PowerLevels_t &radioPowerLevelsIn,
Vincent Coubard 2:9ee673e0b86a 322 EventQueue &eventQueue,
Vincent Coubard 2:9ee673e0b86a 323 uint32_t advConfigIntervalIn = DEFAULT_CONFIG_PERIOD_MSEC);
Vincent Coubard 2:9ee673e0b86a 324
Vincent Coubard 2:9ee673e0b86a 325 /**
Vincent Coubard 2:9ee673e0b86a 326 * Setup callback to update BatteryVoltage in Eddystone-TLM frames
Vincent Coubard 2:9ee673e0b86a 327 *
Vincent Coubard 2:9ee673e0b86a 328 * @param[in] tlmBatteryVoltageCallbackIn
Vincent Coubard 2:9ee673e0b86a 329 * The callback being registered.
Vincent Coubard 2:9ee673e0b86a 330 */
Vincent Coubard 2:9ee673e0b86a 331 void onTLMBatteryVoltageUpdate(TlmUpdateCallback_t tlmBatteryVoltageCallbackIn);
Vincent Coubard 2:9ee673e0b86a 332
Vincent Coubard 2:9ee673e0b86a 333 /**
Vincent Coubard 2:9ee673e0b86a 334 * Setup callback to update BeaconTemperature in Eddystone-TLM frames
Vincent Coubard 2:9ee673e0b86a 335 *
Vincent Coubard 2:9ee673e0b86a 336 * @param[in] tlmBeaconTemperatureCallbackIn
Vincent Coubard 2:9ee673e0b86a 337 * The callback being registered.
Vincent Coubard 2:9ee673e0b86a 338 */
Vincent Coubard 2:9ee673e0b86a 339 void onTLMBeaconTemperatureUpdate(TlmUpdateCallback_t tlmBeaconTemperatureCallbackIn);
Vincent Coubard 2:9ee673e0b86a 340
Vincent Coubard 2:9ee673e0b86a 341 /**
Vincent Coubard 2:9ee673e0b86a 342 * Set the Eddystone-TLM frame version. The other components of
Vincent Coubard 2:9ee673e0b86a 343 * Eddystone-TLM frames are updated just before the frame is broadcast
Vincent Coubard 2:9ee673e0b86a 344 * since information such as beacon temperature and time since boot changes
Vincent Coubard 2:9ee673e0b86a 345 * relatively quickly.
Vincent Coubard 2:9ee673e0b86a 346 *
Vincent Coubard 2:9ee673e0b86a 347 * @param[in] tlmVersionIn
Vincent Coubard 2:9ee673e0b86a 348 * The Eddyston-TLM version to set.
Vincent Coubard 2:9ee673e0b86a 349 */
Vincent Coubard 2:9ee673e0b86a 350 void setTLMData(uint8_t tlmVersionIn = 0);
Vincent Coubard 2:9ee673e0b86a 351
Vincent Coubard 2:9ee673e0b86a 352 /**
Vincent Coubard 2:9ee673e0b86a 353 * Set the Eddystone-URL frame URL data.
Vincent Coubard 2:9ee673e0b86a 354 *
Vincent Coubard 2:9ee673e0b86a 355 * @param[in] urlDataIn
Vincent Coubard 2:9ee673e0b86a 356 * A pointer to the plain null terminated string representing
Vincent Coubard 2:9ee673e0b86a 357 * a URL to be encoded.
Vincent Coubard 2:9ee673e0b86a 358 */
Vincent Coubard 2:9ee673e0b86a 359 void setURLData(const char *urlDataIn);
Vincent Coubard 2:9ee673e0b86a 360
Vincent Coubard 2:9ee673e0b86a 361 /**
Vincent Coubard 2:9ee673e0b86a 362 * Set the Eddystone-UID namespace and instance IDs.
Vincent Coubard 2:9ee673e0b86a 363 *
Vincent Coubard 2:9ee673e0b86a 364 * @param[in] uidNamespaceIDIn
Vincent Coubard 2:9ee673e0b86a 365 * The new Eddystone-UID namespace ID.
Vincent Coubard 2:9ee673e0b86a 366 * @param[in] uidInstanceIDIn
Vincent Coubard 2:9ee673e0b86a 367 * The new Eddystone-UID instance ID.
Vincent Coubard 2:9ee673e0b86a 368 */
Vincent Coubard 2:9ee673e0b86a 369 void setUIDData(const UIDNamespaceID_t &uidNamespaceIDIn, const UIDInstanceID_t &uidInstanceIDIn);
Vincent Coubard 2:9ee673e0b86a 370
Vincent Coubard 2:9ee673e0b86a 371 /**
Vincent Coubard 2:9ee673e0b86a 372 * Set the interval of the Eddystone-URL frames.
Vincent Coubard 2:9ee673e0b86a 373 *
Vincent Coubard 2:9ee673e0b86a 374 * @param[in] urlFrameIntervalIn
Vincent Coubard 2:9ee673e0b86a 375 * The new frame interval in milliseconds. The default is
Vincent Coubard 2:9ee673e0b86a 376 * DEFAULT_URL_FRAME_PERIOD_MSEC.
Vincent Coubard 2:9ee673e0b86a 377 *
Vincent Coubard 2:9ee673e0b86a 378 * @note A value of zero disables Eddystone-URL frame transmissions.
Vincent Coubard 2:9ee673e0b86a 379 */
Vincent Coubard 2:9ee673e0b86a 380 void setURLFrameAdvertisingInterval(uint16_t urlFrameIntervalIn = DEFAULT_URL_FRAME_PERIOD_MSEC);
Vincent Coubard 2:9ee673e0b86a 381
Vincent Coubard 2:9ee673e0b86a 382 /**
Vincent Coubard 2:9ee673e0b86a 383 * Set the interval of the Eddystone-UID frames.
Vincent Coubard 2:9ee673e0b86a 384 *
Vincent Coubard 2:9ee673e0b86a 385 * @param[in] uidFrameIntervalIn
Vincent Coubard 2:9ee673e0b86a 386 * The new frame interval in milliseconds. The default is
Vincent Coubard 2:9ee673e0b86a 387 * DEFAULT_UID_FRAME_PERIOD_MSEC.
Vincent Coubard 2:9ee673e0b86a 388 *
Vincent Coubard 2:9ee673e0b86a 389 * @note A value of zero disables Eddystone-UID frame transmissions.
Vincent Coubard 2:9ee673e0b86a 390 */
Vincent Coubard 2:9ee673e0b86a 391 void setUIDFrameAdvertisingInterval(uint16_t uidFrameIntervalIn = DEFAULT_UID_FRAME_PERIOD_MSEC);
Vincent Coubard 2:9ee673e0b86a 392
Vincent Coubard 2:9ee673e0b86a 393 /**
Vincent Coubard 2:9ee673e0b86a 394 * Set the interval for the Eddystone-TLM frames.
Vincent Coubard 2:9ee673e0b86a 395 *
Vincent Coubard 2:9ee673e0b86a 396 * @param[in] tlmFrameIntervalIn
Vincent Coubard 2:9ee673e0b86a 397 * The new frame interval in milliseconds. The default is
Vincent Coubard 2:9ee673e0b86a 398 * DEFAULT_TLM_FRAME_PERIOD_MSEC.
Vincent Coubard 2:9ee673e0b86a 399 *
Vincent Coubard 2:9ee673e0b86a 400 * @note A value of zero desables Eddystone-TLM frames.
Vincent Coubard 2:9ee673e0b86a 401 */
Vincent Coubard 2:9ee673e0b86a 402 void setTLMFrameAdvertisingInterval(uint16_t tlmFrameIntervalIn = DEFAULT_TLM_FRAME_PERIOD_MSEC);
Vincent Coubard 2:9ee673e0b86a 403
Vincent Coubard 2:9ee673e0b86a 404 /**
Vincent Coubard 2:9ee673e0b86a 405 * Change the EddystoneService OperationMode to EDDYSTONE_MODE_CONFIG.
Vincent Coubard 2:9ee673e0b86a 406 *
Vincent Coubard 2:9ee673e0b86a 407 * @retval EDDYSTONE_ERROR_NONE if the operation succeeded.
Vincent Coubard 2:9ee673e0b86a 408 * @retval EDDYSONE_ERROR_INVALID_ADVERTISING_INTERVAL if the configured
Vincent Coubard 2:9ee673e0b86a 409 * advertising interval is zero.
Vincent Coubard 2:9ee673e0b86a 410 *
Vincent Coubard 2:9ee673e0b86a 411 * @note If EddystoneService was previously in EDDYSTONE_MODE_BEACON, then
Vincent Coubard 2:9ee673e0b86a 412 * the resources allocated to that mode of operation such as memory
Vincent Coubard 2:9ee673e0b86a 413 * are freed and the BLE instance shutdown before the new operation
Vincent Coubard 2:9ee673e0b86a 414 * mode is configured.
Vincent Coubard 2:9ee673e0b86a 415 */
Vincent Coubard 2:9ee673e0b86a 416 EddystoneError_t startConfigService(void);
Vincent Coubard 2:9ee673e0b86a 417
Vincent Coubard 2:9ee673e0b86a 418 /**
Vincent Coubard 2:9ee673e0b86a 419 * Change the EddystoneService OperationMode to EDDYSTONE_MODE_BEACON.
Vincent Coubard 2:9ee673e0b86a 420 *
Vincent Coubard 2:9ee673e0b86a 421 * @retval EDDYSTONE_ERROR_NONE if the operation succeeded.
Vincent Coubard 2:9ee673e0b86a 422 * @retval EDDYSONE_ERROR_INVALID_ADVERTISING_INTERVAL if the configured
Vincent Coubard 2:9ee673e0b86a 423 * advertising interval is zero.
Vincent Coubard 2:9ee673e0b86a 424 *
Vincent Coubard 2:9ee673e0b86a 425 * @note If EddystoneService was previously in EDDYSTONE_MODE_CONFIG, then
Vincent Coubard 2:9ee673e0b86a 426 * the resources allocated to that mode of operation such as memory
Vincent Coubard 2:9ee673e0b86a 427 * are freed and the BLE instance shutdown before the new operation
Vincent Coubard 2:9ee673e0b86a 428 * mode is configured.
Vincent Coubard 2:9ee673e0b86a 429 */
Vincent Coubard 2:9ee673e0b86a 430 EddystoneError_t startBeaconService(void);
Vincent Coubard 2:9ee673e0b86a 431
Vincent Coubard 2:9ee673e0b86a 432 /**
Vincent Coubard 2:9ee673e0b86a 433 * Change the EddystoneService OperationMode to EDDYSTONE_MODE_NONE.
Vincent Coubard 2:9ee673e0b86a 434 *
Vincent Coubard 2:9ee673e0b86a 435 * @retval EDDYSTONE_ERROR_NONE if the operation succeeded.
Vincent Coubard 2:9ee673e0b86a 436 * @retval EDDYSTONE_ERROR_INVALID_STATE if the state of the
Vincent Coubard 2:9ee673e0b86a 437 * EddystoneService already is EDDYSTONE_MODE_NONE.
Vincent Coubard 2:9ee673e0b86a 438 *
Vincent Coubard 2:9ee673e0b86a 439 * @note If EddystoneService was previously in EDDYSTONE_MODE_CONFIG or
Vincent Coubard 2:9ee673e0b86a 440 * EDDYSTONE_MODE_BEACON, then the resources allocated to that mode
Vincent Coubard 2:9ee673e0b86a 441 * of operation such as memory are freed and the BLE instance
Vincent Coubard 2:9ee673e0b86a 442 * shutdown before the new operation mode is configured.
Vincent Coubard 2:9ee673e0b86a 443 */
Vincent Coubard 2:9ee673e0b86a 444 EddystoneError_t stopCurrentService(void);
Vincent Coubard 2:9ee673e0b86a 445
Vincent Coubard 2:9ee673e0b86a 446 /**
Vincent Coubard 2:9ee673e0b86a 447 * Set the Comple Local Name for the BLE device. This not only updates
Vincent Coubard 2:9ee673e0b86a 448 * the value of the Device Name Characteristic, it also updates the scan
Vincent Coubard 2:9ee673e0b86a 449 * response payload if the EddystoneService is currently in
Vincent Coubard 2:9ee673e0b86a 450 * EDDYSTONE_MODE_CONFIG.
Vincent Coubard 2:9ee673e0b86a 451 *
Vincent Coubard 2:9ee673e0b86a 452 * @param[in] deviceNameIn
Vincent Coubard 2:9ee673e0b86a 453 * A pointer to a null terminated string containing the new
Vincent Coubard 2:9ee673e0b86a 454 * device name.
Vincent Coubard 2:9ee673e0b86a 455 *
Vincent Coubard 2:9ee673e0b86a 456 * @return BLE_ERROR_NONE if the name was successfully set. Otherwise an
Vincent Coubard 2:9ee673e0b86a 457 * appropriate error.
Vincent Coubard 2:9ee673e0b86a 458 *
Vincent Coubard 2:9ee673e0b86a 459 * @note EddystoneService does not make an internal copy of the string
Vincent Coubard 2:9ee673e0b86a 460 * pointed to by @p deviceNameIn. Therefore, the user is responsible
Vincent Coubard 2:9ee673e0b86a 461 * for ensuring that the string persists in memory as long as it is
Vincent Coubard 2:9ee673e0b86a 462 * in use by the EddystoneService.
Vincent Coubard 2:9ee673e0b86a 463 *
Vincent Coubard 2:9ee673e0b86a 464 * @note The device name is not considered an Eddystone configuration
Vincent Coubard 2:9ee673e0b86a 465 * parameter; therefore, it is not contained within the
Vincent Coubard 2:9ee673e0b86a 466 * EddystoneParams_t structure and must be stored to persistent
Vincent Coubard 2:9ee673e0b86a 467 * storage separately.
Vincent Coubard 2:9ee673e0b86a 468 */
Vincent Coubard 2:9ee673e0b86a 469 ble_error_t setCompleteDeviceName(const char *deviceNameIn);
Vincent Coubard 2:9ee673e0b86a 470
Vincent Coubard 2:9ee673e0b86a 471 /**
Vincent Coubard 2:9ee673e0b86a 472 * Get the Eddystone Configuration parameters. This is particularly useful
Vincent Coubard 2:9ee673e0b86a 473 * for storing the configuration parameters in persistent storage.
Vincent Coubard 2:9ee673e0b86a 474 * It is not the responsibility of the Eddystone implementation to store
Vincent Coubard 2:9ee673e0b86a 475 * the configured parameters in persistent storage since this is
Vincent Coubard 2:9ee673e0b86a 476 * platform-specific.
Vincent Coubard 2:9ee673e0b86a 477 *
Vincent Coubard 2:9ee673e0b86a 478 * @param[out] params
Vincent Coubard 2:9ee673e0b86a 479 * A reference to an EddystoneParams_t structure with the
Vincent Coubard 2:9ee673e0b86a 480 * configured parameters of the EddystoneService.
Vincent Coubard 2:9ee673e0b86a 481 */
Vincent Coubard 2:9ee673e0b86a 482 void getEddystoneParams(EddystoneParams_t &params);
Vincent Coubard 2:9ee673e0b86a 483
Vincent Coubard 2:9ee673e0b86a 484 private:
Vincent Coubard 2:9ee673e0b86a 485 /**
Vincent Coubard 2:9ee673e0b86a 486 * Helper function used only once during construction of an
Vincent Coubard 2:9ee673e0b86a 487 * EddystoneService object to avoid duplicated code.
Vincent Coubard 2:9ee673e0b86a 488 *
Vincent Coubard 2:9ee673e0b86a 489 * @param[in] advPowerLevelsIn
Vincent Coubard 2:9ee673e0b86a 490 * The value of the Eddystone-URL Configuration Service TX
Vincent Coubard 2:9ee673e0b86a 491 * Power Mode characteristic.
Vincent Coubard 2:9ee673e0b86a 492 * @param[in] radioPowerLevelsIn
Vincent Coubard 2:9ee673e0b86a 493 * The value set internally into the radion tx power.
Vincent Coubard 2:9ee673e0b86a 494 * @param[in] advConfigIntervalIn
Vincent Coubard 2:9ee673e0b86a 495 * The advertising interval for advertising packets of the
Vincent Coubard 2:9ee673e0b86a 496 * Eddystone-URL Configuration Service.
Vincent Coubard 2:9ee673e0b86a 497 */
Vincent Coubard 2:9ee673e0b86a 498 void eddystoneConstructorHelper(const PowerLevels_t &advPowerLevelsIn,
Vincent Coubard 2:9ee673e0b86a 499 const PowerLevels_t &radioPowerLevelsIn,
Vincent Coubard 2:9ee673e0b86a 500 uint32_t advConfigIntervalIn);
Vincent Coubard 2:9ee673e0b86a 501
Vincent Coubard 2:9ee673e0b86a 502 /**
Vincent Coubard 2:9ee673e0b86a 503 * Helper funtion that will be registered as an initialization complete
Vincent Coubard 2:9ee673e0b86a 504 * callback when BLE::shutdown() is called. This is necessary when changing
Vincent Coubard 2:9ee673e0b86a 505 * Eddystone OperationModes. Once the BLE initialization is complete, this
Vincent Coubard 2:9ee673e0b86a 506 * callback will initialize all the necessary resource to operate
Vincent Coubard 2:9ee673e0b86a 507 * Eddystone service in the selected mode.
Vincent Coubard 2:9ee673e0b86a 508 *
Vincent Coubard 2:9ee673e0b86a 509 * @param[in] initContext
Vincent Coubard 2:9ee673e0b86a 510 * The context provided by BLE API when initialization
Vincent Coubard 2:9ee673e0b86a 511 * completes.
Vincent Coubard 2:9ee673e0b86a 512 */
Vincent Coubard 2:9ee673e0b86a 513 void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext);
Vincent Coubard 2:9ee673e0b86a 514
Vincent Coubard 2:9ee673e0b86a 515 /**
Vincent Coubard 2:9ee673e0b86a 516 * When in EDDYSTONE_MODE_BEACON this function is called to update the
Vincent Coubard 2:9ee673e0b86a 517 * advertising payload to contain the information related to the specified
Vincent Coubard 2:9ee673e0b86a 518 * FrameType.
Vincent Coubard 2:9ee673e0b86a 519 *
Vincent Coubard 2:9ee673e0b86a 520 * @param[in] frameType
Vincent Coubard 2:9ee673e0b86a 521 * The frame to populate the advertising payload with.
Vincent Coubard 2:9ee673e0b86a 522 */
Vincent Coubard 2:9ee673e0b86a 523 void swapAdvertisedFrame(FrameType frameType);
Vincent Coubard 2:9ee673e0b86a 524
Vincent Coubard 2:9ee673e0b86a 525 /**
Vincent Coubard 2:9ee673e0b86a 526 * Helper function that manages the BLE radio that is used to broadcast
Vincent Coubard 2:9ee673e0b86a 527 * advertising packets. To advertise frames at the configured intervals
Vincent Coubard 2:9ee673e0b86a 528 * the actual advertising interval of the BLE instance is set to the value
Vincent Coubard 2:9ee673e0b86a 529 * returned by Gap::getMaxAdvertisingInterval() from the BLE API. When a
Vincent Coubard 2:9ee673e0b86a 530 * frame needs to be advertised, the enqueueFrame() callbacks add the frame
Vincent Coubard 2:9ee673e0b86a 531 * type to the advFrameQueue and post a manageRadio() callback. When the
Vincent Coubard 2:9ee673e0b86a 532 * callback is executed, the frame is dequeued and advertised using the
Vincent Coubard 2:9ee673e0b86a 533 * radio (by updating the advertising payload). manageRadio() also posts a
Vincent Coubard 2:9ee673e0b86a 534 * callback to itself Gap::getMinNonConnectableAdvertisingInterval()
Vincent Coubard 2:9ee673e0b86a 535 * milliseconds later. In this callback, manageRadio() will advertise the
Vincent Coubard 2:9ee673e0b86a 536 * next frame in the queue, yet if there is none it calls
Vincent Coubard 2:9ee673e0b86a 537 * Gap::stopAdvertising() and does not post any further callbacks.
Vincent Coubard 2:9ee673e0b86a 538 */
Vincent Coubard 2:9ee673e0b86a 539 void manageRadio(void);
Vincent Coubard 2:9ee673e0b86a 540
Vincent Coubard 2:9ee673e0b86a 541 /**
Vincent Coubard 2:9ee673e0b86a 542 * Regular callbacks posted at the rate of urlFramePeriod, uidFramePeriod
Vincent Coubard 2:9ee673e0b86a 543 * and tlmFramePeriod milliseconds enqueue frames to be advertised. If the
Vincent Coubard 2:9ee673e0b86a 544 * frame queue is currently empty, then this function directly calls
Vincent Coubard 2:9ee673e0b86a 545 * manageRadio() to broadcast the required FrameType.
Vincent Coubard 2:9ee673e0b86a 546 *
Vincent Coubard 2:9ee673e0b86a 547 * @param[in] frameType
Vincent Coubard 2:9ee673e0b86a 548 * The FrameType to enqueue for broadcasting.
Vincent Coubard 2:9ee673e0b86a 549 */
Vincent Coubard 2:9ee673e0b86a 550 void enqueueFrame(FrameType frameType);
Vincent Coubard 2:9ee673e0b86a 551
Vincent Coubard 2:9ee673e0b86a 552 /**
Vincent Coubard 2:9ee673e0b86a 553 * Helper function that updates the advertising payload when in
Vincent Coubard 2:9ee673e0b86a 554 * EDDYSTONE_MODE_BEACON to contain a new frame.
Vincent Coubard 2:9ee673e0b86a 555 *
Vincent Coubard 2:9ee673e0b86a 556 * @param[in] rawFrame
Vincent Coubard 2:9ee673e0b86a 557 * The raw bytes of the frame to advertise.
Vincent Coubard 2:9ee673e0b86a 558 * @param[in] rawFrameLength
Vincent Coubard 2:9ee673e0b86a 559 * The length in bytes of the array pointed to by @p rawFrame.
Vincent Coubard 2:9ee673e0b86a 560 */
Vincent Coubard 2:9ee673e0b86a 561 void updateAdvertisementPacket(const uint8_t* rawFrame, size_t rawFrameLength);
Vincent Coubard 2:9ee673e0b86a 562
Vincent Coubard 2:9ee673e0b86a 563 /**
Vincent Coubard 2:9ee673e0b86a 564 * Helper function that updates the information in the Eddystone-TLM frames
Vincent Coubard 2:9ee673e0b86a 565 * Internally, this function executes the registered callbacks to update
Vincent Coubard 2:9ee673e0b86a 566 * beacon Battery Voltage and Temperature (if available). Furthermore, this
Vincent Coubard 2:9ee673e0b86a 567 * function updates the raw frame data. This operation must be done fairly
Vincent Coubard 2:9ee673e0b86a 568 * often because the Eddystone-TLM frame Time Since Boot must have a 0.1
Vincent Coubard 2:9ee673e0b86a 569 * seconds resolution according to the Eddystone specification.
Vincent Coubard 2:9ee673e0b86a 570 */
Vincent Coubard 2:9ee673e0b86a 571 void updateRawTLMFrame(void);
Vincent Coubard 2:9ee673e0b86a 572
Vincent Coubard 2:9ee673e0b86a 573 /**
Vincent Coubard 2:9ee673e0b86a 574 * Initialize the resources required when switching to
Vincent Coubard 2:9ee673e0b86a 575 * EDDYSTONE_MODE_BEACON.
Vincent Coubard 2:9ee673e0b86a 576 */
Vincent Coubard 2:9ee673e0b86a 577 void setupBeaconService(void);
Vincent Coubard 2:9ee673e0b86a 578
Vincent Coubard 2:9ee673e0b86a 579 /**
Vincent Coubard 2:9ee673e0b86a 580 * Initialize the resources required when switching to
Vincent Coubard 2:9ee673e0b86a 581 * EDDYSTONE_MODE_CONFIG. This includes the GATT services and
Vincent Coubard 2:9ee673e0b86a 582 * characteristics required by the Eddystone-URL Configuration Service.
Vincent Coubard 2:9ee673e0b86a 583 */
Vincent Coubard 2:9ee673e0b86a 584 void setupConfigService(void);
Vincent Coubard 2:9ee673e0b86a 585
Vincent Coubard 2:9ee673e0b86a 586 /**
Vincent Coubard 2:9ee673e0b86a 587 * Free the resources acquired by a call to setupConfigService().
Vincent Coubard 2:9ee673e0b86a 588 */
Vincent Coubard 2:9ee673e0b86a 589 void freeConfigCharacteristics(void);
Vincent Coubard 2:9ee673e0b86a 590
Vincent Coubard 2:9ee673e0b86a 591 /**
Vincent Coubard 2:9ee673e0b86a 592 * Free the resources acquired by a call to setupBeaconService() and
Vincent Coubard 2:9ee673e0b86a 593 * cancel all pending callbacks that operate the radio and frame queue.
Vincent Coubard 2:9ee673e0b86a 594 *
Vincent Coubard 2:9ee673e0b86a 595 * @note This call will not modify the current state of the BLE device.
Vincent Coubard 2:9ee673e0b86a 596 * EddystoneService::stopBeaconService should only be called after
Vincent Coubard 2:9ee673e0b86a 597 * a call to BLE::shutdown().
Vincent Coubard 2:9ee673e0b86a 598 */
Vincent Coubard 2:9ee673e0b86a 599 void stopBeaconService(void);
Vincent Coubard 2:9ee673e0b86a 600
Vincent Coubard 2:9ee673e0b86a 601 /**
Vincent Coubard 2:9ee673e0b86a 602 * Helper function used to update the GATT database following any
Vincent Coubard 2:9ee673e0b86a 603 * change to the internal state of the service object.
Vincent Coubard 2:9ee673e0b86a 604 */
Vincent Coubard 2:9ee673e0b86a 605 void updateCharacteristicValues(void);
Vincent Coubard 2:9ee673e0b86a 606
Vincent Coubard 2:9ee673e0b86a 607 /**
Vincent Coubard 2:9ee673e0b86a 608 * Setup the payload of advertising packets for Eddystone-URL Configuration
Vincent Coubard 2:9ee673e0b86a 609 * Service.
Vincent Coubard 2:9ee673e0b86a 610 */
Vincent Coubard 2:9ee673e0b86a 611 void setupEddystoneConfigAdvertisements(void);
Vincent Coubard 2:9ee673e0b86a 612
Vincent Coubard 2:9ee673e0b86a 613 /**
Vincent Coubard 2:9ee673e0b86a 614 * Helper function to setup the payload of scan response packets for
Vincent Coubard 2:9ee673e0b86a 615 * Eddystone-URL Configuration Service.
Vincent Coubard 2:9ee673e0b86a 616 */
Vincent Coubard 2:9ee673e0b86a 617 void setupEddystoneConfigScanResponse(void);
Vincent Coubard 2:9ee673e0b86a 618
Vincent Coubard 2:9ee673e0b86a 619 /**
Vincent Coubard 2:9ee673e0b86a 620 * Callback registered to the BLE API to authorize write operations to the
Vincent Coubard 2:9ee673e0b86a 621 * Eddystone-URL Configuration Service Lock characteristic.
Vincent Coubard 2:9ee673e0b86a 622 *
Vincent Coubard 2:9ee673e0b86a 623 * @param[in] authParams
Vincent Coubard 2:9ee673e0b86a 624 * Write authentication information.
Vincent Coubard 2:9ee673e0b86a 625 */
Vincent Coubard 2:9ee673e0b86a 626 void lockAuthorizationCallback(GattWriteAuthCallbackParams *authParams);
Vincent Coubard 2:9ee673e0b86a 627
Vincent Coubard 2:9ee673e0b86a 628 /**
Vincent Coubard 2:9ee673e0b86a 629 * Callback registered to the BLE API to authorize write operations to the
Vincent Coubard 2:9ee673e0b86a 630 * Eddystone-URL Configuration Service Unlock characteristic.
Vincent Coubard 2:9ee673e0b86a 631 *
Vincent Coubard 2:9ee673e0b86a 632 * @param[in] authParams
Vincent Coubard 2:9ee673e0b86a 633 * Write authentication information.
Vincent Coubard 2:9ee673e0b86a 634 */
Vincent Coubard 2:9ee673e0b86a 635 void unlockAuthorizationCallback(GattWriteAuthCallbackParams *authParams);
Vincent Coubard 2:9ee673e0b86a 636
Vincent Coubard 2:9ee673e0b86a 637 /**
Vincent Coubard 2:9ee673e0b86a 638 * Callback registered to the BLE API to authorize write operations to the
Vincent Coubard 2:9ee673e0b86a 639 * Eddystone-URL Configuration Service URI Data characteristic.
Vincent Coubard 2:9ee673e0b86a 640 *
Vincent Coubard 2:9ee673e0b86a 641 * @param[in] authParams
Vincent Coubard 2:9ee673e0b86a 642 * Write authentication information.
Vincent Coubard 2:9ee673e0b86a 643 */
Vincent Coubard 2:9ee673e0b86a 644 void urlDataWriteAuthorizationCallback(GattWriteAuthCallbackParams *authParams);
Vincent Coubard 2:9ee673e0b86a 645
Vincent Coubard 2:9ee673e0b86a 646 void powerModeAuthorizationCallback(GattWriteAuthCallbackParams *authParams);
Vincent Coubard 2:9ee673e0b86a 647
Vincent Coubard 2:9ee673e0b86a 648 /**
Vincent Coubard 2:9ee673e0b86a 649 * Callback registered to the BLE API to authorize write operations to the
Vincent Coubard 2:9ee673e0b86a 650 * following Eddystone-URL Configuration Service characteristics:
Vincent Coubard 2:9ee673e0b86a 651 * - Flags
Vincent Coubard 2:9ee673e0b86a 652 * - Beacon Period
Vincent Coubard 2:9ee673e0b86a 653 * - Reset
Vincent Coubard 2:9ee673e0b86a 654 *
Vincent Coubard 2:9ee673e0b86a 655 * @param[in] authParams
Vincent Coubard 2:9ee673e0b86a 656 * Write authentication information.
Vincent Coubard 2:9ee673e0b86a 657 */
Vincent Coubard 2:9ee673e0b86a 658 template <typename T>
Vincent Coubard 2:9ee673e0b86a 659 void basicAuthorizationCallback(GattWriteAuthCallbackParams *authParams);
Vincent Coubard 2:9ee673e0b86a 660
Vincent Coubard 2:9ee673e0b86a 661 /**
Vincent Coubard 2:9ee673e0b86a 662 * This callback is invoked when a GATT client attempts to modify any of the
Vincent Coubard 2:9ee673e0b86a 663 * characteristics of this service. Attempts to do so are also applied to
Vincent Coubard 2:9ee673e0b86a 664 * the internal state of this service object.
Vincent Coubard 2:9ee673e0b86a 665 *
Vincent Coubard 2:9ee673e0b86a 666 * @param[in] writeParams
Vincent Coubard 2:9ee673e0b86a 667 * Information about the values that are being written.
Vincent Coubard 2:9ee673e0b86a 668 */
Vincent Coubard 2:9ee673e0b86a 669 void onDataWrittenCallback(const GattWriteCallbackParams *writeParams);
Vincent Coubard 2:9ee673e0b86a 670
Vincent Coubard 2:9ee673e0b86a 671 /**
Vincent Coubard 2:9ee673e0b86a 672 * Correct the advertising interval for non-connectable packets.
Vincent Coubard 2:9ee673e0b86a 673 *
Vincent Coubard 2:9ee673e0b86a 674 * @param[in] beaconPeriodIn
Vincent Coubard 2:9ee673e0b86a 675 * The input interval in milliseconds.
Vincent Coubard 2:9ee673e0b86a 676 *
Vincent Coubard 2:9ee673e0b86a 677 * @return The corrected interval in milliseconds.
Vincent Coubard 2:9ee673e0b86a 678 *
Vincent Coubard 2:9ee673e0b86a 679 * @note For the acceptable range of advertising interval refer to the
Vincent Coubard 2:9ee673e0b86a 680 * following functions in mbed BLE API:
Vincent Coubard 2:9ee673e0b86a 681 * - Gap::getMinNonConnectableAdvertisingInterval()
Vincent Coubard 2:9ee673e0b86a 682 * - Gap::getMaxAdvertisingInterval()
Vincent Coubard 2:9ee673e0b86a 683 */
Vincent Coubard 2:9ee673e0b86a 684 uint16_t correctAdvertisementPeriod(uint16_t beaconPeriodIn) const;
Vincent Coubard 2:9ee673e0b86a 685
Vincent Coubard 2:9ee673e0b86a 686 /**
Vincent Coubard 2:9ee673e0b86a 687 * BLE instance that EddystoneService will operate on.
Vincent Coubard 2:9ee673e0b86a 688 */
Vincent Coubard 2:9ee673e0b86a 689 BLE &ble;
Vincent Coubard 2:9ee673e0b86a 690 /**
Vincent Coubard 2:9ee673e0b86a 691 * The advertising interval for Eddystone-URL Config Service advertising
Vincent Coubard 2:9ee673e0b86a 692 * packets.
Vincent Coubard 2:9ee673e0b86a 693 */
Vincent Coubard 2:9ee673e0b86a 694 uint32_t advConfigInterval;
Vincent Coubard 2:9ee673e0b86a 695 /**
Vincent Coubard 2:9ee673e0b86a 696 * Current EddystoneServce operation mode.
Vincent Coubard 2:9ee673e0b86a 697 */
Vincent Coubard 2:9ee673e0b86a 698 uint8_t operationMode;
Vincent Coubard 2:9ee673e0b86a 699
Vincent Coubard 2:9ee673e0b86a 700 /**
Vincent Coubard 2:9ee673e0b86a 701 * Encapsulation of a URL frame.
Vincent Coubard 2:9ee673e0b86a 702 */
Vincent Coubard 2:9ee673e0b86a 703 URLFrame urlFrame;
Vincent Coubard 2:9ee673e0b86a 704 /**
Vincent Coubard 2:9ee673e0b86a 705 * Encapsulation of a UID frame.
Vincent Coubard 2:9ee673e0b86a 706 */
Vincent Coubard 2:9ee673e0b86a 707 UIDFrame uidFrame;
Vincent Coubard 2:9ee673e0b86a 708 /**
Vincent Coubard 2:9ee673e0b86a 709 * Encapsulation of a TLM frame.
Vincent Coubard 2:9ee673e0b86a 710 */
Vincent Coubard 2:9ee673e0b86a 711 TLMFrame tlmFrame;
Vincent Coubard 2:9ee673e0b86a 712
Vincent Coubard 2:9ee673e0b86a 713 /**
Vincent Coubard 2:9ee673e0b86a 714 * The value set internally into the radion tx power.
Vincent Coubard 2:9ee673e0b86a 715 */
Vincent Coubard 2:9ee673e0b86a 716 PowerLevels_t radioPowerLevels;
Vincent Coubard 2:9ee673e0b86a 717 /**
Vincent Coubard 2:9ee673e0b86a 718 * An array containing possible values for advertised tx power in Eddystone
Vincent Coubard 2:9ee673e0b86a 719 * frames. Also, the value of the Eddystone-URL Configuration Service
Vincent Coubard 2:9ee673e0b86a 720 * Advertised TX Power Levels characteristic.
Vincent Coubard 2:9ee673e0b86a 721 */
Vincent Coubard 2:9ee673e0b86a 722 PowerLevels_t advPowerLevels;
Vincent Coubard 2:9ee673e0b86a 723 /**
Vincent Coubard 2:9ee673e0b86a 724 * The value of the Eddystone-URL Configuration Service Lock State
Vincent Coubard 2:9ee673e0b86a 725 * characteristic.
Vincent Coubard 2:9ee673e0b86a 726 */
Vincent Coubard 2:9ee673e0b86a 727 bool lockState;
Vincent Coubard 2:9ee673e0b86a 728 /**
Vincent Coubard 2:9ee673e0b86a 729 * The value of the Eddystone-URL Configuration Service reset
Vincent Coubard 2:9ee673e0b86a 730 * characteristic.
Vincent Coubard 2:9ee673e0b86a 731 */
Vincent Coubard 2:9ee673e0b86a 732 bool resetFlag;
Vincent Coubard 2:9ee673e0b86a 733 /**
Vincent Coubard 2:9ee673e0b86a 734 * The value of the Eddystone-URL Configuration Service Lock
Vincent Coubard 2:9ee673e0b86a 735 * characteristic.
Vincent Coubard 2:9ee673e0b86a 736 */
Vincent Coubard 2:9ee673e0b86a 737 Lock_t lock;
Vincent Coubard 2:9ee673e0b86a 738 /**
Vincent Coubard 2:9ee673e0b86a 739 * The value of the Eddystone-URL Configuration Service Unlock
Vincent Coubard 2:9ee673e0b86a 740 * characteristic.
Vincent Coubard 2:9ee673e0b86a 741 */
Vincent Coubard 2:9ee673e0b86a 742 Lock_t unlock;
Vincent Coubard 2:9ee673e0b86a 743 /**
Vincent Coubard 2:9ee673e0b86a 744 * The value of the Eddystone-URL Configuration Service Flags
Vincent Coubard 2:9ee673e0b86a 745 * characteristic.
Vincent Coubard 2:9ee673e0b86a 746 */
Vincent Coubard 2:9ee673e0b86a 747 uint8_t flags;
Vincent Coubard 2:9ee673e0b86a 748 /**
Vincent Coubard 2:9ee673e0b86a 749 * The value of the Eddystone-URL Configuration Service TX Power Mode
Vincent Coubard 2:9ee673e0b86a 750 * characteristic.
Vincent Coubard 2:9ee673e0b86a 751 */
Vincent Coubard 2:9ee673e0b86a 752 uint8_t txPowerMode;
Vincent Coubard 2:9ee673e0b86a 753 /**
Vincent Coubard 2:9ee673e0b86a 754 * The value of the Eddystone-URL Configuration Service Beacon Period
Vincent Coubard 2:9ee673e0b86a 755 * characteristic. Also, the advertising interval (in milliseconds) of
Vincent Coubard 2:9ee673e0b86a 756 * Eddystone-URL frames.
Vincent Coubard 2:9ee673e0b86a 757 */
Vincent Coubard 2:9ee673e0b86a 758 uint16_t urlFramePeriod;
Vincent Coubard 2:9ee673e0b86a 759 /**
Vincent Coubard 2:9ee673e0b86a 760 * The advertising interval (in milliseconds) of Eddystone-UID frames.
Vincent Coubard 2:9ee673e0b86a 761 */
Vincent Coubard 2:9ee673e0b86a 762 uint16_t uidFramePeriod;
Vincent Coubard 2:9ee673e0b86a 763 /**
Vincent Coubard 2:9ee673e0b86a 764 * The advertising interval (in milliseconds) of Eddystone-TLM frames.
Vincent Coubard 2:9ee673e0b86a 765 */
Vincent Coubard 2:9ee673e0b86a 766 uint16_t tlmFramePeriod;
Vincent Coubard 2:9ee673e0b86a 767
Vincent Coubard 2:9ee673e0b86a 768 /**
Vincent Coubard 2:9ee673e0b86a 769 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 770 * Configuration Service Lock State characteristic.
Vincent Coubard 2:9ee673e0b86a 771 */
Vincent Coubard 2:9ee673e0b86a 772 ReadOnlyGattCharacteristic<bool> *lockStateChar;
Vincent Coubard 2:9ee673e0b86a 773 /**
Vincent Coubard 2:9ee673e0b86a 774 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 775 * Configuration Service Lock characteristic.
Vincent Coubard 2:9ee673e0b86a 776 */
Vincent Coubard 2:9ee673e0b86a 777 WriteOnlyArrayGattCharacteristic<uint8_t, sizeof(Lock_t)> *lockChar;
Vincent Coubard 2:9ee673e0b86a 778 /**
Vincent Coubard 2:9ee673e0b86a 779 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 780 * Configuration Service Unlock characteristic.
Vincent Coubard 2:9ee673e0b86a 781 */
Vincent Coubard 2:9ee673e0b86a 782 WriteOnlyArrayGattCharacteristic<uint8_t, sizeof(Lock_t)> *unlockChar;
Vincent Coubard 2:9ee673e0b86a 783 /**
Vincent Coubard 2:9ee673e0b86a 784 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 785 * Configuration Service URI Data characteristic.
Vincent Coubard 2:9ee673e0b86a 786 */
Vincent Coubard 2:9ee673e0b86a 787 GattCharacteristic *urlDataChar;
Vincent Coubard 2:9ee673e0b86a 788 /**
Vincent Coubard 2:9ee673e0b86a 789 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 790 * Configuration Service Flags characteristic.
Vincent Coubard 2:9ee673e0b86a 791 */
Vincent Coubard 2:9ee673e0b86a 792 ReadWriteGattCharacteristic<uint8_t> *flagsChar;
Vincent Coubard 2:9ee673e0b86a 793 /**
Vincent Coubard 2:9ee673e0b86a 794 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 795 * Configuration Service Advertised TX Power Levels characteristic.
Vincent Coubard 2:9ee673e0b86a 796 */
Vincent Coubard 2:9ee673e0b86a 797 ReadWriteArrayGattCharacteristic<int8_t, sizeof(PowerLevels_t)> *advPowerLevelsChar;
Vincent Coubard 2:9ee673e0b86a 798 /**
Vincent Coubard 2:9ee673e0b86a 799 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 800 * Configuration Service TX Power Mode characteristic.
Vincent Coubard 2:9ee673e0b86a 801 */
Vincent Coubard 2:9ee673e0b86a 802 ReadWriteGattCharacteristic<uint8_t> *txPowerModeChar;
Vincent Coubard 2:9ee673e0b86a 803 /**
Vincent Coubard 2:9ee673e0b86a 804 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 805 * Configuration Service Beacon Period characteristic.
Vincent Coubard 2:9ee673e0b86a 806 */
Vincent Coubard 2:9ee673e0b86a 807 ReadWriteGattCharacteristic<uint16_t> *beaconPeriodChar;
Vincent Coubard 2:9ee673e0b86a 808 /**
Vincent Coubard 2:9ee673e0b86a 809 * Pointer to the BLE API characteristic encapsulation for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 810 * Configuration Service Reset characteristic.
Vincent Coubard 2:9ee673e0b86a 811 */
Vincent Coubard 2:9ee673e0b86a 812 WriteOnlyGattCharacteristic<bool> *resetChar;
Vincent Coubard 2:9ee673e0b86a 813
Vincent Coubard 2:9ee673e0b86a 814 /**
Vincent Coubard 2:9ee673e0b86a 815 * Pointer to the raw bytes that will be used to populate Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 816 * frames.
Vincent Coubard 2:9ee673e0b86a 817 */
Vincent Coubard 2:9ee673e0b86a 818 uint8_t *rawUrlFrame;
Vincent Coubard 2:9ee673e0b86a 819 /**
Vincent Coubard 2:9ee673e0b86a 820 * Pointer to the raw bytes that will be used to populate Eddystone-UID
Vincent Coubard 2:9ee673e0b86a 821 * frames.
Vincent Coubard 2:9ee673e0b86a 822 */
Vincent Coubard 2:9ee673e0b86a 823 uint8_t *rawUidFrame;
Vincent Coubard 2:9ee673e0b86a 824 /**
Vincent Coubard 2:9ee673e0b86a 825 * Pointer to the raw bytes that will be used to populate Eddystone-TLM
Vincent Coubard 2:9ee673e0b86a 826 * frames.
Vincent Coubard 2:9ee673e0b86a 827 */
Vincent Coubard 2:9ee673e0b86a 828 uint8_t *rawTlmFrame;
Vincent Coubard 2:9ee673e0b86a 829
Vincent Coubard 2:9ee673e0b86a 830 /**
Vincent Coubard 2:9ee673e0b86a 831 * Circular buffer that represents of Eddystone frames to be advertised.
Vincent Coubard 2:9ee673e0b86a 832 */
Vincent Coubard 2:9ee673e0b86a 833 CircularBuffer<FrameType, ADV_FRAME_QUEUE_SIZE> advFrameQueue;
Vincent Coubard 2:9ee673e0b86a 834
Vincent Coubard 2:9ee673e0b86a 835 /**
Vincent Coubard 2:9ee673e0b86a 836 * The registered callback to update the Eddystone-TLM frame Battery
Vincent Coubard 2:9ee673e0b86a 837 * Voltage.
Vincent Coubard 2:9ee673e0b86a 838 */
Vincent Coubard 2:9ee673e0b86a 839 TlmUpdateCallback_t tlmBatteryVoltageCallback;
Vincent Coubard 2:9ee673e0b86a 840 /**
Vincent Coubard 2:9ee673e0b86a 841 * The registered callback to update the Eddystone-TLM frame Beacon
Vincent Coubard 2:9ee673e0b86a 842 * Temperature.
Vincent Coubard 2:9ee673e0b86a 843 */
Vincent Coubard 2:9ee673e0b86a 844 TlmUpdateCallback_t tlmBeaconTemperatureCallback;
Vincent Coubard 2:9ee673e0b86a 845
Vincent Coubard 2:9ee673e0b86a 846 /**
Vincent Coubard 2:9ee673e0b86a 847 * Timer that keeps track of the time since boot.
Vincent Coubard 2:9ee673e0b86a 848 */
Vincent Coubard 2:9ee673e0b86a 849 Timer timeSinceBootTimer;
Vincent Coubard 2:9ee673e0b86a 850
Vincent Coubard 2:9ee673e0b86a 851 /**
Vincent Coubard 2:9ee673e0b86a 852 * Callback handle to keep track of periodic
Vincent Coubard 2:9ee673e0b86a 853 * enqueueFrame(EDDYSTONE_FRAME_UID) callbacks that populate the
Vincent Coubard 2:9ee673e0b86a 854 * advFrameQueue.
Vincent Coubard 2:9ee673e0b86a 855 */
Vincent Coubard 2:9ee673e0b86a 856 int uidFrameCallbackHandle;
Vincent Coubard 2:9ee673e0b86a 857 /**
Vincent Coubard 2:9ee673e0b86a 858 * Minar callback handle to keep track of periodic
Vincent Coubard 2:9ee673e0b86a 859 * enqueueFrame(EDDYSTONE_FRAME_URL) callbacks that populate the
Vincent Coubard 2:9ee673e0b86a 860 * advFrameQueue.
Vincent Coubard 2:9ee673e0b86a 861 */
Vincent Coubard 2:9ee673e0b86a 862 int urlFrameCallbackHandle;
Vincent Coubard 2:9ee673e0b86a 863 /**
Vincent Coubard 2:9ee673e0b86a 864 * Minar callback handle to keep track of periodic
Vincent Coubard 2:9ee673e0b86a 865 * enqueueFrame(EDDYSTONE_FRAME_TLM) callbacks that populate the
Vincent Coubard 2:9ee673e0b86a 866 * advFrameQueue.
Vincent Coubard 2:9ee673e0b86a 867 */
Vincent Coubard 2:9ee673e0b86a 868 int tlmFrameCallbackHandle;
Vincent Coubard 2:9ee673e0b86a 869 /**
Vincent Coubard 2:9ee673e0b86a 870 * Minar callback handle to keep track of manageRadio() callbacks.
Vincent Coubard 2:9ee673e0b86a 871 */
Vincent Coubard 2:9ee673e0b86a 872 int radioManagerCallbackHandle;
Vincent Coubard 2:9ee673e0b86a 873
Vincent Coubard 2:9ee673e0b86a 874 /**
Vincent Coubard 2:9ee673e0b86a 875 * GattCharacteristic table used to populate the BLE ATT table in the
Vincent Coubard 2:9ee673e0b86a 876 * GATT Server.
Vincent Coubard 2:9ee673e0b86a 877 */
Vincent Coubard 2:9ee673e0b86a 878 GattCharacteristic *charTable[TOTAL_CHARACTERISTICS];
Vincent Coubard 2:9ee673e0b86a 879
Vincent Coubard 2:9ee673e0b86a 880 /**
Vincent Coubard 2:9ee673e0b86a 881 * Pointer to the device name currently being used.
Vincent Coubard 2:9ee673e0b86a 882 */
Vincent Coubard 2:9ee673e0b86a 883 const char *deviceName;
Vincent Coubard 2:9ee673e0b86a 884
Vincent Coubard 2:9ee673e0b86a 885 /**
Vincent Coubard 2:9ee673e0b86a 886 * Event queue used to post callbacks s
Vincent Coubard 2:9ee673e0b86a 887 */
Vincent Coubard 2:9ee673e0b86a 888 EventQueue& eventQueue;
Vincent Coubard 2:9ee673e0b86a 889 };
Vincent Coubard 2:9ee673e0b86a 890
Vincent Coubard 2:9ee673e0b86a 891 #endif /* __EDDYSTONESERVICE_H__ */