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
public/BLEDevice.h@198:933961a2ac6f, 2014-11-28 (annotated)
- Committer:
- rgrover1
- Date:
- Fri Nov 28 14:11:25 2014 +0000
- Revision:
- 198:933961a2ac6f
- Parent:
- 147:f772d9b93808
- Child:
- 199:6b57874115f6
Synchronized with git rev 1c37781d
Author: Rohit Grover
Release 0.2.5
=============
Features
~~~~~~~~
* Introduce the URIBeacon2 service.
* Add helper API Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(); this can then be
used in calls to setAdvertisingInterval().
* Remove Stream as a base class for UARTService. Instantiating Stream() was
causing the C library to initialize the serial console UART implicitly;
which caused a constant drain of around 1mA. This change means that we can
no longer benefit from the APIs offered by Stream, and we can no longer re-
target STDOUT to UARTService like before; but that's not worth losing 1mA.
* Remove some un-necessary header files from BLEDevice.h.
Bugfixes
~~~~~~~~
Compatibility
~~~~~~~~~~~~~
This release is backward compatible with 0.2.4.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rohit Grover |
106:a20be740075d | 1 | /* mbed Microcontroller Library |
Rohit Grover |
106:a20be740075d | 2 | * Copyright (c) 2006-2013 ARM Limited |
Rohit Grover |
106:a20be740075d | 3 | * |
Rohit Grover |
106:a20be740075d | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
Rohit Grover |
106:a20be740075d | 5 | * you may not use this file except in compliance with the License. |
Rohit Grover |
106:a20be740075d | 6 | * You may obtain a copy of the License at |
Rohit Grover |
106:a20be740075d | 7 | * |
Rohit Grover |
106:a20be740075d | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
Rohit Grover |
106:a20be740075d | 9 | * |
Rohit Grover |
106:a20be740075d | 10 | * Unless required by applicable law or agreed to in writing, software |
Rohit Grover |
106:a20be740075d | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
Rohit Grover |
106:a20be740075d | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Rohit Grover |
106:a20be740075d | 13 | * See the License for the specific language governing permissions and |
Rohit Grover |
106:a20be740075d | 14 | * limitations under the License. |
Rohit Grover |
106:a20be740075d | 15 | */ |
Rohit Grover |
106:a20be740075d | 16 | |
Rohit Grover |
110:d5a824cee1d3 | 17 | #ifndef __BLE_DEVICE__ |
Rohit Grover |
110:d5a824cee1d3 | 18 | #define __BLE_DEVICE__ |
Rohit Grover |
110:d5a824cee1d3 | 19 | |
rgrover1 | 198:933961a2ac6f | 20 | #include "blecommon.h" |
Rohit Grover |
106:a20be740075d | 21 | #include "Gap.h" |
Rohit Grover |
106:a20be740075d | 22 | #include "GattServer.h" |
Rohit Grover |
111:189ff241dae1 | 23 | #include "BLEDeviceInstanceBase.h" |
Rohit Grover |
106:a20be740075d | 24 | |
Rohit Grover |
106:a20be740075d | 25 | /** |
Rohit Grover |
106:a20be740075d | 26 | * The base class used to abstract away BLE capable radio transceivers or SOCs, |
Rohit Grover |
106:a20be740075d | 27 | * to enable this BLE API to work with any radio transparently. |
Rohit Grover |
106:a20be740075d | 28 | */ |
Rohit Grover |
106:a20be740075d | 29 | class BLEDevice |
Rohit Grover |
106:a20be740075d | 30 | { |
Rohit Grover |
106:a20be740075d | 31 | public: |
Rohit Grover |
106:a20be740075d | 32 | /** |
Rohit Grover |
106:a20be740075d | 33 | * Initialize the BLE controller. This should be called before using |
Rohit Grover |
106:a20be740075d | 34 | * anything else in the BLE_API. |
Rohit Grover |
106:a20be740075d | 35 | */ |
Rohit Grover |
106:a20be740075d | 36 | ble_error_t init(); |
Rohit Grover |
106:a20be740075d | 37 | ble_error_t reset(void); |
Rohit Grover |
106:a20be740075d | 38 | |
Rohit Grover |
106:a20be740075d | 39 | /* GAP specific APIs */ |
Rohit Grover |
106:a20be740075d | 40 | public: |
Rohit Grover |
106:a20be740075d | 41 | /** |
Rohit Grover |
106:a20be740075d | 42 | * Set the BTLE MAC address and type. |
Rohit Grover |
123:fede41ce9407 | 43 | * @return BLE_ERROR_NONE on success. |
Rohit Grover |
106:a20be740075d | 44 | */ |
rgrover1 | 140:407d134c179d | 45 | ble_error_t setAddress(Gap::addr_type_t type, const Gap::address_t address); |
Rohit Grover |
123:fede41ce9407 | 46 | |
Rohit Grover |
123:fede41ce9407 | 47 | /** |
Rohit Grover |
123:fede41ce9407 | 48 | * Fetch the BTLE MAC address and type. |
Rohit Grover |
123:fede41ce9407 | 49 | * @return BLE_ERROR_NONE on success. |
Rohit Grover |
123:fede41ce9407 | 50 | */ |
rgrover1 | 140:407d134c179d | 51 | ble_error_t getAddress(Gap::addr_type_t *typeP, Gap::address_t address); |
Rohit Grover |
106:a20be740075d | 52 | |
Rohit Grover |
106:a20be740075d | 53 | /** |
Rohit Grover |
106:a20be740075d | 54 | * @param[in] advType |
Rohit Grover |
106:a20be740075d | 55 | * The GAP advertising mode to use for this device. Valid |
Rohit Grover |
106:a20be740075d | 56 | * values are defined in AdvertisingType: |
Rohit Grover |
106:a20be740075d | 57 | * |
Rohit Grover |
106:a20be740075d | 58 | * \par ADV_NON_CONNECTABLE_UNDIRECTED |
Rohit Grover |
106:a20be740075d | 59 | * All connections to the peripheral device will be refused. |
Rohit Grover |
106:a20be740075d | 60 | * |
Rohit Grover |
106:a20be740075d | 61 | * \par ADV_CONNECTABLE_DIRECTED |
Rohit Grover |
106:a20be740075d | 62 | * Only connections from a pre-defined central device will be |
Rohit Grover |
106:a20be740075d | 63 | * accepted. |
Rohit Grover |
106:a20be740075d | 64 | * |
Rohit Grover |
106:a20be740075d | 65 | * \par ADV_CONNECTABLE_UNDIRECTED |
Rohit Grover |
106:a20be740075d | 66 | * Any central device can connect to this peripheral. |
Rohit Grover |
106:a20be740075d | 67 | * |
Rohit Grover |
106:a20be740075d | 68 | * \par ADV_SCANNABLE_UNDIRECTED |
Rohit Grover |
106:a20be740075d | 69 | * Any central device can connect to this peripheral, and |
Rohit Grover |
106:a20be740075d | 70 | * the secondary Scan Response payload will be included or |
Rohit Grover |
106:a20be740075d | 71 | * available to central devices. |
Rohit Grover |
106:a20be740075d | 72 | * |
Rohit Grover |
106:a20be740075d | 73 | * \par |
Rohit Grover |
106:a20be740075d | 74 | * See Bluetooth Core Specification 4.0 (Vol. 3), Part C, |
Rohit Grover |
106:a20be740075d | 75 | * Section 9.3 and Core Specification 4.0 (Vol. 6), Part B, |
Rohit Grover |
106:a20be740075d | 76 | * Section 2.3.1 for further information on GAP connection |
Rohit Grover |
106:a20be740075d | 77 | * modes |
Rohit Grover |
106:a20be740075d | 78 | */ |
Rohit Grover |
106:a20be740075d | 79 | void setAdvertisingType(GapAdvertisingParams::AdvertisingType); |
Rohit Grover |
106:a20be740075d | 80 | |
Rohit Grover |
106:a20be740075d | 81 | /** |
Rohit Grover |
106:a20be740075d | 82 | * @param[in] interval |
Rohit Grover |
106:a20be740075d | 83 | * Advertising interval between 0x0020 and 0x4000 in 0.625ms |
Rohit Grover |
106:a20be740075d | 84 | * units (20ms to 10.24s). If using non-connectable mode |
Rohit Grover |
106:a20be740075d | 85 | * (ADV_NON_CONNECTABLE_UNDIRECTED) this min value is |
Rohit Grover |
106:a20be740075d | 86 | * 0x00A0 (100ms). To reduce the likelihood of collisions, the |
Rohit Grover |
106:a20be740075d | 87 | * link layer perturbs this interval by a pseudo-random delay |
Rohit Grover |
106:a20be740075d | 88 | * with a range of 0 ms to 10 ms for each advertising event. |
Rohit Grover |
106:a20be740075d | 89 | * |
Rohit Grover |
106:a20be740075d | 90 | * \par |
Rohit Grover |
106:a20be740075d | 91 | * Decreasing this value will allow central devices to detect |
Rohit Grover |
106:a20be740075d | 92 | * your peripheral faster at the expense of more power being |
Rohit Grover |
106:a20be740075d | 93 | * used by the radio due to the higher data transmit rate. |
Rohit Grover |
106:a20be740075d | 94 | * |
Rohit Grover |
106:a20be740075d | 95 | * \par |
Rohit Grover |
106:a20be740075d | 96 | * This field must be set to 0 if connectionMode is equal |
Rohit Grover |
106:a20be740075d | 97 | * to ADV_CONNECTABLE_DIRECTED |
Rohit Grover |
106:a20be740075d | 98 | * |
Rohit Grover |
106:a20be740075d | 99 | * \par |
Rohit Grover |
106:a20be740075d | 100 | * See Bluetooth Core Specification, Vol 3., Part C, |
Rohit Grover |
106:a20be740075d | 101 | * Appendix A for suggested advertising intervals. |
Rohit Grover |
106:a20be740075d | 102 | */ |
Rohit Grover |
106:a20be740075d | 103 | void setAdvertisingInterval(uint16_t interval); |
Rohit Grover |
106:a20be740075d | 104 | |
Rohit Grover |
106:a20be740075d | 105 | /** |
Rohit Grover |
106:a20be740075d | 106 | * @param[in] timeout |
Rohit Grover |
106:a20be740075d | 107 | * Advertising timeout between 0x1 and 0x3FFF (1 and 16383) |
Rohit Grover |
106:a20be740075d | 108 | * in seconds. Enter 0 to disable the advertising timeout. |
Rohit Grover |
106:a20be740075d | 109 | */ |
Rohit Grover |
106:a20be740075d | 110 | void setAdvertisingTimeout(uint16_t timeout); |
Rohit Grover |
106:a20be740075d | 111 | |
Rohit Grover |
106:a20be740075d | 112 | /** |
Rohit Grover |
106:a20be740075d | 113 | * Please refer to the APIs above. |
Rohit Grover |
106:a20be740075d | 114 | */ |
Rohit Grover |
106:a20be740075d | 115 | void setAdvertisingParams(const GapAdvertisingParams &advParams); |
Rohit Grover |
106:a20be740075d | 116 | |
Rohit Grover |
106:a20be740075d | 117 | /** |
Rohit Grover |
106:a20be740075d | 118 | * This API is typically used as an internal helper to udpate the transport |
Rohit Grover |
106:a20be740075d | 119 | * backend with advertising data before starting to advertise. It may also |
Rohit Grover |
106:a20be740075d | 120 | * be explicity used to dynamically reset the accumulated advertising |
Rohit Grover |
106:a20be740075d | 121 | * payload and scanResponse; to do this, the application can clear and re- |
Rohit Grover |
106:a20be740075d | 122 | * accumulate a new advertising payload (and scanResponse) before using this |
Rohit Grover |
106:a20be740075d | 123 | * API. |
Rohit Grover |
106:a20be740075d | 124 | */ |
Rohit Grover |
106:a20be740075d | 125 | ble_error_t setAdvertisingPayload(void); |
Rohit Grover |
106:a20be740075d | 126 | |
Rohit Grover |
106:a20be740075d | 127 | /** |
Rohit Grover |
106:a20be740075d | 128 | * Reset any advertising payload prepared from prior calls to |
Rohit Grover |
106:a20be740075d | 129 | * accumulateAdvertisingPayload(). |
Rohit Grover |
106:a20be740075d | 130 | */ |
Rohit Grover |
106:a20be740075d | 131 | void clearAdvertisingPayload(void); |
Rohit Grover |
106:a20be740075d | 132 | |
Rohit Grover |
106:a20be740075d | 133 | /** |
Rohit Grover |
106:a20be740075d | 134 | * Accumulate an AD structure in the advertising payload. Please note that |
Rohit Grover |
106:a20be740075d | 135 | * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used |
Rohit Grover |
106:a20be740075d | 136 | * as an additional 31 bytes if the advertising payload proves to be too |
Rohit Grover |
106:a20be740075d | 137 | * small. |
Rohit Grover |
106:a20be740075d | 138 | * |
Rohit Grover |
106:a20be740075d | 139 | * @param flags |
Rohit Grover |
106:a20be740075d | 140 | * The flags to be added. Multiple flags may be specified in |
Rohit Grover |
106:a20be740075d | 141 | * combination. |
Rohit Grover |
106:a20be740075d | 142 | */ |
Rohit Grover |
106:a20be740075d | 143 | ble_error_t accumulateAdvertisingPayload(uint8_t flags); |
Rohit Grover |
106:a20be740075d | 144 | |
Rohit Grover |
106:a20be740075d | 145 | /** |
Rohit Grover |
106:a20be740075d | 146 | * Accumulate an AD structure in the advertising payload. Please note that |
Rohit Grover |
106:a20be740075d | 147 | * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used |
Rohit Grover |
106:a20be740075d | 148 | * as an additional 31 bytes if the advertising payload proves to be too |
Rohit Grover |
106:a20be740075d | 149 | * small. |
Rohit Grover |
106:a20be740075d | 150 | * |
Rohit Grover |
106:a20be740075d | 151 | * @param app |
Rohit Grover |
106:a20be740075d | 152 | * The appearance of the peripheral. |
Rohit Grover |
106:a20be740075d | 153 | */ |
Rohit Grover |
106:a20be740075d | 154 | ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::Appearance app); |
Rohit Grover |
106:a20be740075d | 155 | |
Rohit Grover |
106:a20be740075d | 156 | /** |
Rohit Grover |
106:a20be740075d | 157 | * Accumulate an AD structure in the advertising payload. Please note that |
Rohit Grover |
106:a20be740075d | 158 | * the payload is limited to 31 bytes. The SCAN_RESPONSE message may be used |
Rohit Grover |
106:a20be740075d | 159 | * as an additional 31 bytes if the advertising payload proves to be too |
Rohit Grover |
106:a20be740075d | 160 | * small. |
Rohit Grover |
106:a20be740075d | 161 | * |
Rohit Grover |
106:a20be740075d | 162 | * @param app |
Rohit Grover |
106:a20be740075d | 163 | * The max transmit power to be used by the controller. This is |
Rohit Grover |
106:a20be740075d | 164 | * only a hint. |
Rohit Grover |
106:a20be740075d | 165 | */ |
Rohit Grover |
106:a20be740075d | 166 | ble_error_t accumulateAdvertisingPayloadTxPower(int8_t power); |
Rohit Grover |
106:a20be740075d | 167 | |
Rohit Grover |
106:a20be740075d | 168 | /** |
Rohit Grover |
106:a20be740075d | 169 | * Accumulate a variable length byte-stream as an AD structure in the |
Rohit Grover |
106:a20be740075d | 170 | * advertising payload. Please note that the payload is limited to 31 bytes. |
Rohit Grover |
106:a20be740075d | 171 | * The SCAN_RESPONSE message may be used as an additional 31 bytes if the |
Rohit Grover |
106:a20be740075d | 172 | * advertising payload proves to be too small. |
Rohit Grover |
106:a20be740075d | 173 | * |
Rohit Grover |
106:a20be740075d | 174 | * @param type The type which describes the variable length data. |
Rohit Grover |
106:a20be740075d | 175 | * @param data data bytes. |
Rohit Grover |
106:a20be740075d | 176 | * @param len length of data. |
Rohit Grover |
106:a20be740075d | 177 | */ |
Rohit Grover |
106:a20be740075d | 178 | ble_error_t accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len); |
Rohit Grover |
106:a20be740075d | 179 | |
Rohit Grover |
106:a20be740075d | 180 | /** |
Rohit Grover |
106:a20be740075d | 181 | * Accumulate a variable length byte-stream as an AD structure in the |
Rohit Grover |
106:a20be740075d | 182 | * scanResponse payload. |
Rohit Grover |
106:a20be740075d | 183 | * |
Rohit Grover |
106:a20be740075d | 184 | * @param type The type which describes the variable length data. |
Rohit Grover |
106:a20be740075d | 185 | * @param data data bytes. |
Rohit Grover |
106:a20be740075d | 186 | * @param len length of data. |
Rohit Grover |
106:a20be740075d | 187 | */ |
Rohit Grover |
106:a20be740075d | 188 | ble_error_t accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len); |
Rohit Grover |
106:a20be740075d | 189 | |
Rohit Grover |
106:a20be740075d | 190 | /** |
Rohit Grover |
106:a20be740075d | 191 | * Start advertising (GAP Discoverable, Connectable modes, Broadcast |
Rohit Grover |
106:a20be740075d | 192 | * Procedure). |
Rohit Grover |
106:a20be740075d | 193 | */ |
Rohit Grover |
106:a20be740075d | 194 | ble_error_t startAdvertising(void); |
Rohit Grover |
106:a20be740075d | 195 | |
Rohit Grover |
106:a20be740075d | 196 | /** |
Rohit Grover |
106:a20be740075d | 197 | * Stop advertising (GAP Discoverable, Connectable modes, Broadcast |
Rohit Grover |
106:a20be740075d | 198 | * Procedure). |
Rohit Grover |
106:a20be740075d | 199 | */ |
Rohit Grover |
106:a20be740075d | 200 | ble_error_t stopAdvertising(void); |
Rohit Grover |
106:a20be740075d | 201 | |
Rohit Grover |
116:ca826083980e | 202 | ble_error_t disconnect(Gap::DisconnectionReason_t reason); |
Rohit Grover |
106:a20be740075d | 203 | |
Rohit Grover |
106:a20be740075d | 204 | /* APIs to set GAP callbacks. */ |
Rohit Grover |
106:a20be740075d | 205 | void onTimeout(Gap::EventCallback_t timeoutCallback); |
Rohit Grover |
106:a20be740075d | 206 | |
Rohit Grover |
116:ca826083980e | 207 | void onConnection(Gap::ConnectionEventCallback_t connectionCallback); |
Rohit Grover |
106:a20be740075d | 208 | /** |
Rohit Grover |
106:a20be740075d | 209 | * Used to setup a callback for GAP disconnection. |
Rohit Grover |
106:a20be740075d | 210 | */ |
Rohit Grover |
116:ca826083980e | 211 | void onDisconnection(Gap::DisconnectionEventCallback_t disconnectionCallback); |
Rohit Grover |
106:a20be740075d | 212 | |
Rohit Grover |
106:a20be740075d | 213 | /** |
Rohit Grover |
106:a20be740075d | 214 | * Setup a callback for the GATT event DATA_SENT. |
Rohit Grover |
106:a20be740075d | 215 | */ |
Rohit Grover |
116:ca826083980e | 216 | void onDataSent(GattServer::ServerEventCallbackWithCount_t callback); |
Rohit Grover |
106:a20be740075d | 217 | |
Rohit Grover |
106:a20be740075d | 218 | /** |
Rohit Grover |
106:a20be740075d | 219 | * Setup a callback for when a characteristic has its value updated by a |
Rohit Grover |
106:a20be740075d | 220 | * client. |
Rohit Grover |
118:620d28e7a1ba | 221 | * |
Rohit Grover |
118:620d28e7a1ba | 222 | * @Note: it is possible to chain together multiple onDataWritten callbacks |
Rohit Grover |
118:620d28e7a1ba | 223 | * (potentially from different modules of an application) to receive updates |
Rohit Grover |
118:620d28e7a1ba | 224 | * to characteristics. Many services, such as DFU and UART add their own |
Rohit Grover |
118:620d28e7a1ba | 225 | * onDataWritten callbacks behind the scenes to trap interesting events. |
Rohit Grover |
118:620d28e7a1ba | 226 | * |
Rohit Grover |
118:620d28e7a1ba | 227 | * @Note: it is also possible to setup a callback into a member function of |
Rohit Grover |
118:620d28e7a1ba | 228 | * some object. |
Rohit Grover |
106:a20be740075d | 229 | */ |
Rohit Grover |
118:620d28e7a1ba | 230 | void onDataWritten(void (*callback)(const GattCharacteristicWriteCBParams *eventDataP)); |
rgrover1 | 140:407d134c179d | 231 | template <typename T> void onDataWritten(T * objPtr, void (T::*memberPtr)(const GattCharacteristicWriteCBParams *context)); |
Rohit Grover |
118:620d28e7a1ba | 232 | |
Rohit Grover |
106:a20be740075d | 233 | void onUpdatesEnabled(GattServer::EventCallback_t callback); |
Rohit Grover |
106:a20be740075d | 234 | void onUpdatesDisabled(GattServer::EventCallback_t callback); |
Rohit Grover |
106:a20be740075d | 235 | void onConfirmationReceived(GattServer::EventCallback_t callback); |
Rohit Grover |
106:a20be740075d | 236 | |
Rohit Grover |
106:a20be740075d | 237 | /** |
Rohit Grover |
106:a20be740075d | 238 | * Add a service declaration to the local server ATT table. Also add the |
Rohit Grover |
106:a20be740075d | 239 | * characteristics contained within. |
Rohit Grover |
106:a20be740075d | 240 | */ |
Rohit Grover |
106:a20be740075d | 241 | ble_error_t addService(GattService &service); |
Rohit Grover |
106:a20be740075d | 242 | |
Rohit Grover |
106:a20be740075d | 243 | Gap::GapState_t getGapState(void) const; |
Rohit Grover |
106:a20be740075d | 244 | |
Rohit Grover |
118:620d28e7a1ba | 245 | /** |
Rohit Grover |
118:620d28e7a1ba | 246 | * @param[in/out] lengthP |
Rohit Grover |
118:620d28e7a1ba | 247 | * input: Length in bytes to be read, |
Rohit Grover |
118:620d28e7a1ba | 248 | * output: Total length of attribute value upon successful return. |
Rohit Grover |
118:620d28e7a1ba | 249 | */ |
Rohit Grover |
106:a20be740075d | 250 | ble_error_t readCharacteristicValue(uint16_t handle, uint8_t *const buffer, uint16_t *const lengthP); |
Rohit Grover |
118:620d28e7a1ba | 251 | |
Rohit Grover |
118:620d28e7a1ba | 252 | /** |
Rohit Grover |
118:620d28e7a1ba | 253 | * @param localOnly |
Rohit Grover |
118:620d28e7a1ba | 254 | * Only update the characteristic locally regardless of notify/indicate flags in the CCCD. |
Rohit Grover |
118:620d28e7a1ba | 255 | */ |
rgrover1 | 140:407d134c179d | 256 | ble_error_t updateCharacteristicValue(uint16_t handle, const uint8_t *value, uint16_t size, bool localOnly = false); |
Rohit Grover |
106:a20be740075d | 257 | |
Rohit Grover |
106:a20be740075d | 258 | /** |
Rohit Grover |
106:a20be740075d | 259 | * Yield control to the BLE stack or to other tasks waiting for events. This |
Rohit Grover |
106:a20be740075d | 260 | * is a sleep function which will return when there is an application |
Rohit Grover |
106:a20be740075d | 261 | * specific interrupt, but the MCU might wake up several times before |
Rohit Grover |
106:a20be740075d | 262 | * returning (to service the stack). This is not always interchangeable with |
Rohit Grover |
106:a20be740075d | 263 | * WFE(). |
Rohit Grover |
106:a20be740075d | 264 | */ |
Rohit Grover |
106:a20be740075d | 265 | void waitForEvent(void); |
Rohit Grover |
106:a20be740075d | 266 | |
Rohit Grover |
106:a20be740075d | 267 | ble_error_t getPreferredConnectionParams(Gap::ConnectionParams_t *params); |
Rohit Grover |
106:a20be740075d | 268 | ble_error_t setPreferredConnectionParams(const Gap::ConnectionParams_t *params); |
Rohit Grover |
106:a20be740075d | 269 | ble_error_t updateConnectionParams(Gap::Handle_t handle, const Gap::ConnectionParams_t *params); |
Rohit Grover |
108:c85ab5f1eca0 | 270 | |
Rohit Grover |
108:c85ab5f1eca0 | 271 | /** |
Rohit Grover |
108:c85ab5f1eca0 | 272 | * This call allows the application to get the BLE stack version information. |
Rohit Grover |
108:c85ab5f1eca0 | 273 | * |
Rohit Grover |
108:c85ab5f1eca0 | 274 | * @return A pointer to a const string representing the version. |
Rohit Grover |
108:c85ab5f1eca0 | 275 | * Note: The string is owned by the BLE_API. |
Rohit Grover |
108:c85ab5f1eca0 | 276 | */ |
Rohit Grover |
108:c85ab5f1eca0 | 277 | const char *getVersion(void); |
Rohit Grover |
108:c85ab5f1eca0 | 278 | |
rgrover1 | 140:407d134c179d | 279 | /** |
rgrover1 | 140:407d134c179d | 280 | * Set the device name characteristic in the GAP service. |
rgrover1 | 140:407d134c179d | 281 | * @param deviceName The new value for the device-name. This is a UTF-8 encoded, <b>NULL-terminated</b> string. |
rgrover1 | 140:407d134c179d | 282 | */ |
rgrover1 | 140:407d134c179d | 283 | ble_error_t setDeviceName(const uint8_t *deviceName); |
Rohit Grover |
108:c85ab5f1eca0 | 284 | |
rgrover1 | 140:407d134c179d | 285 | /** |
rgrover1 | 140:407d134c179d | 286 | * Get the value of the device name characteristic in the GAP service. |
rgrover1 | 140:407d134c179d | 287 | * @param[out] deviceName Pointer to an empty buffer where the UTF-8 *non NULL- |
rgrover1 | 140:407d134c179d | 288 | * terminated* string will be placed. Set this |
rgrover1 | 140:407d134c179d | 289 | * value to NULL in order to obtain the deviceName-length |
rgrover1 | 140:407d134c179d | 290 | * from the 'length' parameter. |
rgrover1 | 140:407d134c179d | 291 | * |
rgrover1 | 140:407d134c179d | 292 | * @param[in/out] lengthP (on input) Length of the buffer pointed to by deviceName; |
rgrover1 | 140:407d134c179d | 293 | * (on output) the complete device name length (without the |
rgrover1 | 140:407d134c179d | 294 | * null terminator). |
rgrover1 | 140:407d134c179d | 295 | * |
rgrover1 | 140:407d134c179d | 296 | * @note If the device name is longer than the size of the supplied buffer, |
rgrover1 | 140:407d134c179d | 297 | * length will return the complete device name length, |
rgrover1 | 140:407d134c179d | 298 | * and not the number of bytes actually returned in deviceName. |
rgrover1 | 140:407d134c179d | 299 | * The application may use this information to retry with a suitable buffer size. |
rgrover1 | 140:407d134c179d | 300 | * |
rgrover1 | 140:407d134c179d | 301 | * Sample use: |
rgrover1 | 140:407d134c179d | 302 | * uint8_t deviceName[20]; |
rgrover1 | 140:407d134c179d | 303 | * unsigned length = sizeof(deviceName); |
rgrover1 | 140:407d134c179d | 304 | * ble.getDeviceName(deviceName, &length); |
rgrover1 | 140:407d134c179d | 305 | * if (length < sizeof(deviceName)) { |
rgrover1 | 140:407d134c179d | 306 | * deviceName[length] = 0; |
rgrover1 | 140:407d134c179d | 307 | * } |
rgrover1 | 140:407d134c179d | 308 | * DEBUG("length: %u, deviceName: %s\r\n", length, deviceName); |
rgrover1 | 140:407d134c179d | 309 | */ |
rgrover1 | 140:407d134c179d | 310 | ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP); |
Rohit Grover |
108:c85ab5f1eca0 | 311 | |
rgrover1 | 140:407d134c179d | 312 | /** |
rgrover1 | 140:407d134c179d | 313 | * Set the appearance characteristic in the GAP service. |
rgrover1 | 140:407d134c179d | 314 | * @param[in] appearance The new value for the device-appearance. |
rgrover1 | 140:407d134c179d | 315 | */ |
rgrover1 | 140:407d134c179d | 316 | ble_error_t setAppearance(uint16_t appearance); |
Rohit Grover |
108:c85ab5f1eca0 | 317 | |
rgrover1 | 140:407d134c179d | 318 | /** |
rgrover1 | 140:407d134c179d | 319 | * Set the appearance characteristic in the GAP service. |
rgrover1 | 140:407d134c179d | 320 | * @param[out] appearance The new value for the device-appearance. |
rgrover1 | 140:407d134c179d | 321 | */ |
rgrover1 | 140:407d134c179d | 322 | ble_error_t getAppearance(uint16_t *appearanceP); |
Rohit Grover |
108:c85ab5f1eca0 | 323 | |
rgrover1 | 140:407d134c179d | 324 | /** |
rgrover1 | 140:407d134c179d | 325 | * Set the radio's transmit power. |
rgrover1 | 140:407d134c179d | 326 | * @param[in] txPower Radio transmit power in dBm. |
rgrover1 | 140:407d134c179d | 327 | */ |
rgrover1 | 140:407d134c179d | 328 | ble_error_t setTxPower(int8_t txPower); |
Rohit Grover |
106:a20be740075d | 329 | |
Rohit Grover |
106:a20be740075d | 330 | public: |
Rohit Grover |
106:a20be740075d | 331 | BLEDevice() : transport(createBLEDeviceInstance()), advParams(), advPayload(), scanResponse(), needToSetAdvPayload(true) { |
Rohit Grover |
106:a20be740075d | 332 | advPayload.clear(); |
Rohit Grover |
106:a20be740075d | 333 | scanResponse.clear(); |
Rohit Grover |
106:a20be740075d | 334 | } |
Rohit Grover |
106:a20be740075d | 335 | |
Rohit Grover |
106:a20be740075d | 336 | private: |
Rohit Grover |
106:a20be740075d | 337 | BLEDeviceInstanceBase *const transport; /* the device specific backend */ |
Rohit Grover |
106:a20be740075d | 338 | |
Rohit Grover |
106:a20be740075d | 339 | GapAdvertisingParams advParams; |
Rohit Grover |
106:a20be740075d | 340 | GapAdvertisingData advPayload; |
Rohit Grover |
106:a20be740075d | 341 | GapAdvertisingData scanResponse; |
Rohit Grover |
106:a20be740075d | 342 | |
Rohit Grover |
106:a20be740075d | 343 | /* Accumulation of AD structures in the advertisement payload should |
Rohit Grover |
106:a20be740075d | 344 | * eventually result in a call to the target's setAdvertisingData() before |
Rohit Grover |
106:a20be740075d | 345 | * the server begins advertising. This flag marks the status of the pending update.*/ |
Rohit Grover |
106:a20be740075d | 346 | bool needToSetAdvPayload; |
Rohit Grover |
106:a20be740075d | 347 | |
Rohit Grover |
106:a20be740075d | 348 | /** |
Rohit Grover |
106:a20be740075d | 349 | * DEPRECATED |
Rohit Grover |
106:a20be740075d | 350 | */ |
Rohit Grover |
106:a20be740075d | 351 | public: |
Rohit Grover |
106:a20be740075d | 352 | ble_error_t setAdvertisingData(const GapAdvertisingData &ADStructures, const GapAdvertisingData &scanResponse); |
Rohit Grover |
106:a20be740075d | 353 | ble_error_t setAdvertisingData(const GapAdvertisingData &ADStructures); |
Rohit Grover |
106:a20be740075d | 354 | |
Rohit Grover |
106:a20be740075d | 355 | ble_error_t startAdvertising(const GapAdvertisingParams &advParams); |
Rohit Grover |
106:a20be740075d | 356 | }; |
Rohit Grover |
106:a20be740075d | 357 | |
Rohit Grover |
106:a20be740075d | 358 | /* BLEDevice methods. Most of these simply forward the calls to the underlying |
Rohit Grover |
106:a20be740075d | 359 | * transport.*/ |
Rohit Grover |
106:a20be740075d | 360 | |
Rohit Grover |
106:a20be740075d | 361 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 362 | BLEDevice::reset(void) |
Rohit Grover |
106:a20be740075d | 363 | { |
Rohit Grover |
106:a20be740075d | 364 | return transport->reset(); |
Rohit Grover |
106:a20be740075d | 365 | } |
Rohit Grover |
106:a20be740075d | 366 | |
Rohit Grover |
106:a20be740075d | 367 | inline ble_error_t |
rgrover1 | 140:407d134c179d | 368 | BLEDevice::setAddress(Gap::addr_type_t type, const Gap::address_t address) |
Rohit Grover |
106:a20be740075d | 369 | { |
Rohit Grover |
106:a20be740075d | 370 | return transport->getGap().setAddress(type, address); |
Rohit Grover |
106:a20be740075d | 371 | } |
Rohit Grover |
106:a20be740075d | 372 | |
Rohit Grover |
123:fede41ce9407 | 373 | inline ble_error_t |
rgrover1 | 140:407d134c179d | 374 | BLEDevice::getAddress(Gap::addr_type_t *typeP, Gap::address_t address) |
Rohit Grover |
123:fede41ce9407 | 375 | { |
Rohit Grover |
123:fede41ce9407 | 376 | return transport->getGap().getAddress(typeP, address); |
Rohit Grover |
123:fede41ce9407 | 377 | } |
Rohit Grover |
123:fede41ce9407 | 378 | |
Rohit Grover |
106:a20be740075d | 379 | inline void |
Rohit Grover |
106:a20be740075d | 380 | BLEDevice::setAdvertisingType(GapAdvertisingParams::AdvertisingType advType) |
Rohit Grover |
106:a20be740075d | 381 | { |
Rohit Grover |
106:a20be740075d | 382 | advParams.setAdvertisingType(advType); |
Rohit Grover |
106:a20be740075d | 383 | } |
Rohit Grover |
106:a20be740075d | 384 | |
Rohit Grover |
106:a20be740075d | 385 | inline void |
Rohit Grover |
106:a20be740075d | 386 | BLEDevice::setAdvertisingInterval(uint16_t interval) |
Rohit Grover |
106:a20be740075d | 387 | { |
Rohit Grover |
106:a20be740075d | 388 | advParams.setInterval(interval); |
Rohit Grover |
106:a20be740075d | 389 | } |
Rohit Grover |
106:a20be740075d | 390 | |
Rohit Grover |
106:a20be740075d | 391 | inline void |
Rohit Grover |
106:a20be740075d | 392 | BLEDevice::setAdvertisingTimeout(uint16_t timeout) |
Rohit Grover |
106:a20be740075d | 393 | { |
Rohit Grover |
106:a20be740075d | 394 | advParams.setTimeout(timeout); |
Rohit Grover |
106:a20be740075d | 395 | } |
Rohit Grover |
106:a20be740075d | 396 | |
Rohit Grover |
106:a20be740075d | 397 | inline void |
Rohit Grover |
106:a20be740075d | 398 | BLEDevice::setAdvertisingParams(const GapAdvertisingParams &newAdvParams) |
Rohit Grover |
106:a20be740075d | 399 | { |
Rohit Grover |
106:a20be740075d | 400 | advParams = newAdvParams; |
Rohit Grover |
106:a20be740075d | 401 | } |
Rohit Grover |
106:a20be740075d | 402 | |
Rohit Grover |
106:a20be740075d | 403 | inline void |
Rohit Grover |
106:a20be740075d | 404 | BLEDevice::clearAdvertisingPayload(void) |
Rohit Grover |
106:a20be740075d | 405 | { |
Rohit Grover |
106:a20be740075d | 406 | needToSetAdvPayload = true; |
Rohit Grover |
106:a20be740075d | 407 | advPayload.clear(); |
Rohit Grover |
106:a20be740075d | 408 | } |
Rohit Grover |
106:a20be740075d | 409 | |
Rohit Grover |
106:a20be740075d | 410 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 411 | BLEDevice::accumulateAdvertisingPayload(uint8_t flags) |
Rohit Grover |
106:a20be740075d | 412 | { |
Rohit Grover |
106:a20be740075d | 413 | needToSetAdvPayload = true; |
Rohit Grover |
106:a20be740075d | 414 | return advPayload.addFlags(flags); |
Rohit Grover |
106:a20be740075d | 415 | } |
Rohit Grover |
106:a20be740075d | 416 | |
Rohit Grover |
106:a20be740075d | 417 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 418 | BLEDevice::accumulateAdvertisingPayload(GapAdvertisingData::Appearance app) |
Rohit Grover |
106:a20be740075d | 419 | { |
Rohit Grover |
106:a20be740075d | 420 | needToSetAdvPayload = true; |
rgrover1 | 140:407d134c179d | 421 | transport->getGap().setAppearance(app); |
Rohit Grover |
106:a20be740075d | 422 | return advPayload.addAppearance(app); |
Rohit Grover |
106:a20be740075d | 423 | } |
Rohit Grover |
106:a20be740075d | 424 | |
Rohit Grover |
106:a20be740075d | 425 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 426 | BLEDevice::accumulateAdvertisingPayloadTxPower(int8_t txPower) |
Rohit Grover |
106:a20be740075d | 427 | { |
Rohit Grover |
106:a20be740075d | 428 | needToSetAdvPayload = true; |
Rohit Grover |
106:a20be740075d | 429 | return advPayload.addTxPower(txPower); |
Rohit Grover |
106:a20be740075d | 430 | } |
Rohit Grover |
106:a20be740075d | 431 | |
Rohit Grover |
106:a20be740075d | 432 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 433 | BLEDevice::accumulateAdvertisingPayload(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) |
Rohit Grover |
106:a20be740075d | 434 | { |
Rohit Grover |
106:a20be740075d | 435 | needToSetAdvPayload = true; |
rgrover1 | 140:407d134c179d | 436 | if (type == GapAdvertisingData::COMPLETE_LOCAL_NAME) { |
rgrover1 | 140:407d134c179d | 437 | transport->getGap().setDeviceName(data); |
rgrover1 | 140:407d134c179d | 438 | } |
Rohit Grover |
106:a20be740075d | 439 | return advPayload.addData(type, data, len); |
Rohit Grover |
106:a20be740075d | 440 | } |
Rohit Grover |
106:a20be740075d | 441 | |
Rohit Grover |
106:a20be740075d | 442 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 443 | BLEDevice::accumulateScanResponse(GapAdvertisingData::DataType type, const uint8_t *data, uint8_t len) |
Rohit Grover |
106:a20be740075d | 444 | { |
Rohit Grover |
106:a20be740075d | 445 | needToSetAdvPayload = true; |
Rohit Grover |
106:a20be740075d | 446 | return scanResponse.addData(type, data, len); |
Rohit Grover |
106:a20be740075d | 447 | } |
Rohit Grover |
106:a20be740075d | 448 | |
Rohit Grover |
106:a20be740075d | 449 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 450 | BLEDevice::setAdvertisingPayload(void) { |
Rohit Grover |
106:a20be740075d | 451 | needToSetAdvPayload = false; |
Rohit Grover |
106:a20be740075d | 452 | return transport->getGap().setAdvertisingData(advPayload, scanResponse); |
Rohit Grover |
106:a20be740075d | 453 | } |
Rohit Grover |
106:a20be740075d | 454 | |
Rohit Grover |
106:a20be740075d | 455 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 456 | BLEDevice::startAdvertising(void) |
Rohit Grover |
106:a20be740075d | 457 | { |
rgrover1 | 140:407d134c179d | 458 | ble_error_t rc; |
rgrover1 | 140:407d134c179d | 459 | if ((rc = transport->getGattServer().initializeGATTDatabase()) != BLE_ERROR_NONE) { |
rgrover1 | 140:407d134c179d | 460 | return rc; |
rgrover1 | 140:407d134c179d | 461 | } |
Rohit Grover |
106:a20be740075d | 462 | if (needToSetAdvPayload) { |
Rohit Grover |
106:a20be740075d | 463 | if ((rc = setAdvertisingPayload()) != BLE_ERROR_NONE) { |
Rohit Grover |
106:a20be740075d | 464 | return rc; |
Rohit Grover |
106:a20be740075d | 465 | } |
Rohit Grover |
106:a20be740075d | 466 | } |
Rohit Grover |
106:a20be740075d | 467 | |
Rohit Grover |
106:a20be740075d | 468 | return transport->getGap().startAdvertising(advParams); |
Rohit Grover |
106:a20be740075d | 469 | } |
Rohit Grover |
106:a20be740075d | 470 | |
Rohit Grover |
106:a20be740075d | 471 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 472 | BLEDevice::stopAdvertising(void) |
Rohit Grover |
106:a20be740075d | 473 | { |
Rohit Grover |
106:a20be740075d | 474 | return transport->getGap().stopAdvertising(); |
Rohit Grover |
106:a20be740075d | 475 | } |
Rohit Grover |
106:a20be740075d | 476 | |
Rohit Grover |
106:a20be740075d | 477 | inline ble_error_t |
Rohit Grover |
116:ca826083980e | 478 | BLEDevice::disconnect(Gap::DisconnectionReason_t reason) |
Rohit Grover |
106:a20be740075d | 479 | { |
Rohit Grover |
116:ca826083980e | 480 | return transport->getGap().disconnect(reason); |
Rohit Grover |
106:a20be740075d | 481 | } |
Rohit Grover |
106:a20be740075d | 482 | |
Rohit Grover |
106:a20be740075d | 483 | inline void |
Rohit Grover |
106:a20be740075d | 484 | BLEDevice::onTimeout(Gap::EventCallback_t timeoutCallback) |
Rohit Grover |
106:a20be740075d | 485 | { |
Rohit Grover |
106:a20be740075d | 486 | transport->getGap().setOnTimeout(timeoutCallback); |
Rohit Grover |
106:a20be740075d | 487 | } |
Rohit Grover |
106:a20be740075d | 488 | |
Rohit Grover |
106:a20be740075d | 489 | inline void |
Rohit Grover |
116:ca826083980e | 490 | BLEDevice::onConnection(Gap::ConnectionEventCallback_t connectionCallback) |
Rohit Grover |
106:a20be740075d | 491 | { |
Rohit Grover |
106:a20be740075d | 492 | transport->getGap().setOnConnection(connectionCallback); |
Rohit Grover |
106:a20be740075d | 493 | } |
Rohit Grover |
106:a20be740075d | 494 | |
Rohit Grover |
106:a20be740075d | 495 | inline void |
Rohit Grover |
116:ca826083980e | 496 | BLEDevice::onDisconnection(Gap::DisconnectionEventCallback_t disconnectionCallback) |
Rohit Grover |
106:a20be740075d | 497 | { |
Rohit Grover |
106:a20be740075d | 498 | transport->getGap().setOnDisconnection(disconnectionCallback); |
Rohit Grover |
106:a20be740075d | 499 | } |
Rohit Grover |
106:a20be740075d | 500 | |
Rohit Grover |
106:a20be740075d | 501 | inline void |
Rohit Grover |
116:ca826083980e | 502 | BLEDevice::onDataSent(GattServer::ServerEventCallbackWithCount_t callback) |
Rohit Grover |
106:a20be740075d | 503 | { |
Rohit Grover |
106:a20be740075d | 504 | transport->getGattServer().setOnDataSent(callback); |
Rohit Grover |
106:a20be740075d | 505 | } |
Rohit Grover |
106:a20be740075d | 506 | |
Rohit Grover |
106:a20be740075d | 507 | inline void |
Rohit Grover |
118:620d28e7a1ba | 508 | BLEDevice::onDataWritten(void (*callback)(const GattCharacteristicWriteCBParams *eventDataP)) { |
Rohit Grover |
106:a20be740075d | 509 | transport->getGattServer().setOnDataWritten(callback); |
Rohit Grover |
106:a20be740075d | 510 | } |
Rohit Grover |
106:a20be740075d | 511 | |
Rohit Grover |
118:620d28e7a1ba | 512 | template <typename T> inline void |
Rohit Grover |
118:620d28e7a1ba | 513 | BLEDevice::onDataWritten(T *objPtr, void (T::*memberPtr)(const GattCharacteristicWriteCBParams *context)) { |
Rohit Grover |
118:620d28e7a1ba | 514 | transport->getGattServer().setOnDataWritten(objPtr, memberPtr); |
Rohit Grover |
118:620d28e7a1ba | 515 | } |
Rohit Grover |
118:620d28e7a1ba | 516 | |
Rohit Grover |
106:a20be740075d | 517 | inline void |
Rohit Grover |
106:a20be740075d | 518 | BLEDevice::onUpdatesEnabled(GattServer::EventCallback_t callback) |
Rohit Grover |
106:a20be740075d | 519 | { |
Rohit Grover |
106:a20be740075d | 520 | transport->getGattServer().setOnUpdatesEnabled(callback); |
Rohit Grover |
106:a20be740075d | 521 | } |
Rohit Grover |
106:a20be740075d | 522 | |
Rohit Grover |
106:a20be740075d | 523 | inline void |
Rohit Grover |
106:a20be740075d | 524 | BLEDevice::onUpdatesDisabled(GattServer::EventCallback_t callback) |
Rohit Grover |
106:a20be740075d | 525 | { |
Rohit Grover |
106:a20be740075d | 526 | transport->getGattServer().setOnUpdatesDisabled(callback); |
Rohit Grover |
106:a20be740075d | 527 | } |
Rohit Grover |
106:a20be740075d | 528 | |
Rohit Grover |
106:a20be740075d | 529 | inline void |
Rohit Grover |
106:a20be740075d | 530 | BLEDevice::onConfirmationReceived(GattServer::EventCallback_t callback) |
Rohit Grover |
106:a20be740075d | 531 | { |
Rohit Grover |
106:a20be740075d | 532 | transport->getGattServer().setOnConfirmationReceived(callback); |
Rohit Grover |
106:a20be740075d | 533 | } |
Rohit Grover |
106:a20be740075d | 534 | |
Rohit Grover |
106:a20be740075d | 535 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 536 | BLEDevice::addService(GattService &service) |
Rohit Grover |
106:a20be740075d | 537 | { |
Rohit Grover |
106:a20be740075d | 538 | return transport->getGattServer().addService(service); |
Rohit Grover |
106:a20be740075d | 539 | } |
Rohit Grover |
106:a20be740075d | 540 | |
Rohit Grover |
106:a20be740075d | 541 | inline Gap::GapState_t |
Rohit Grover |
106:a20be740075d | 542 | BLEDevice::getGapState(void) const |
Rohit Grover |
106:a20be740075d | 543 | { |
Rohit Grover |
106:a20be740075d | 544 | return transport->getGap().getState(); |
Rohit Grover |
106:a20be740075d | 545 | } |
Rohit Grover |
106:a20be740075d | 546 | |
Rohit Grover |
106:a20be740075d | 547 | inline ble_error_t BLEDevice::readCharacteristicValue(uint16_t handle, uint8_t *const buffer, uint16_t *const lengthP) |
Rohit Grover |
106:a20be740075d | 548 | { |
Rohit Grover |
106:a20be740075d | 549 | return transport->getGattServer().readValue(handle, buffer, lengthP); |
Rohit Grover |
106:a20be740075d | 550 | } |
Rohit Grover |
106:a20be740075d | 551 | |
Rohit Grover |
106:a20be740075d | 552 | inline ble_error_t |
rgrover1 | 140:407d134c179d | 553 | BLEDevice::updateCharacteristicValue(uint16_t handle, const uint8_t *value, uint16_t size, bool localOnly) |
Rohit Grover |
106:a20be740075d | 554 | { |
Rohit Grover |
106:a20be740075d | 555 | return transport->getGattServer().updateValue(handle, const_cast<uint8_t *>(value), size, localOnly); |
Rohit Grover |
106:a20be740075d | 556 | } |
Rohit Grover |
106:a20be740075d | 557 | |
Rohit Grover |
106:a20be740075d | 558 | inline void |
Rohit Grover |
106:a20be740075d | 559 | BLEDevice::waitForEvent(void) |
Rohit Grover |
106:a20be740075d | 560 | { |
Rohit Grover |
106:a20be740075d | 561 | transport->waitForEvent(); |
Rohit Grover |
106:a20be740075d | 562 | } |
Rohit Grover |
106:a20be740075d | 563 | |
Rohit Grover |
106:a20be740075d | 564 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 565 | BLEDevice::getPreferredConnectionParams(Gap::ConnectionParams_t *params) |
Rohit Grover |
106:a20be740075d | 566 | { |
Rohit Grover |
106:a20be740075d | 567 | return transport->getGap().getPreferredConnectionParams(params); |
Rohit Grover |
106:a20be740075d | 568 | } |
Rohit Grover |
106:a20be740075d | 569 | |
Rohit Grover |
106:a20be740075d | 570 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 571 | BLEDevice::setPreferredConnectionParams(const Gap::ConnectionParams_t *params) |
Rohit Grover |
106:a20be740075d | 572 | { |
Rohit Grover |
106:a20be740075d | 573 | return transport->getGap().setPreferredConnectionParams(params); |
Rohit Grover |
106:a20be740075d | 574 | } |
Rohit Grover |
106:a20be740075d | 575 | |
Rohit Grover |
106:a20be740075d | 576 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 577 | BLEDevice::updateConnectionParams(Gap::Handle_t handle, const Gap::ConnectionParams_t *params) { |
Rohit Grover |
106:a20be740075d | 578 | return transport->getGap().updateConnectionParams(handle, params); |
Rohit Grover |
106:a20be740075d | 579 | } |
Rohit Grover |
106:a20be740075d | 580 | |
Rohit Grover |
108:c85ab5f1eca0 | 581 | inline const char * |
Rohit Grover |
108:c85ab5f1eca0 | 582 | BLEDevice::getVersion(void) |
Rohit Grover |
108:c85ab5f1eca0 | 583 | { |
Rohit Grover |
108:c85ab5f1eca0 | 584 | return transport->getVersion(); |
Rohit Grover |
108:c85ab5f1eca0 | 585 | } |
Rohit Grover |
108:c85ab5f1eca0 | 586 | |
Rohit Grover |
108:c85ab5f1eca0 | 587 | inline ble_error_t |
Rohit Grover |
108:c85ab5f1eca0 | 588 | BLEDevice::setDeviceName(const uint8_t *deviceName) |
Rohit Grover |
108:c85ab5f1eca0 | 589 | { |
Rohit Grover |
116:ca826083980e | 590 | return transport->getGap().setDeviceName(deviceName); |
Rohit Grover |
108:c85ab5f1eca0 | 591 | } |
Rohit Grover |
108:c85ab5f1eca0 | 592 | |
Rohit Grover |
108:c85ab5f1eca0 | 593 | inline ble_error_t |
Rohit Grover |
108:c85ab5f1eca0 | 594 | BLEDevice::getDeviceName(uint8_t *deviceName, unsigned *lengthP) |
Rohit Grover |
108:c85ab5f1eca0 | 595 | { |
Rohit Grover |
116:ca826083980e | 596 | return transport->getGap().getDeviceName(deviceName, lengthP); |
Rohit Grover |
108:c85ab5f1eca0 | 597 | } |
Rohit Grover |
108:c85ab5f1eca0 | 598 | |
Rohit Grover |
108:c85ab5f1eca0 | 599 | inline ble_error_t |
Rohit Grover |
108:c85ab5f1eca0 | 600 | BLEDevice::setAppearance(uint16_t appearance) |
Rohit Grover |
108:c85ab5f1eca0 | 601 | { |
Rohit Grover |
116:ca826083980e | 602 | return transport->getGap().setAppearance(appearance); |
Rohit Grover |
108:c85ab5f1eca0 | 603 | } |
Rohit Grover |
108:c85ab5f1eca0 | 604 | |
Rohit Grover |
108:c85ab5f1eca0 | 605 | inline ble_error_t |
Rohit Grover |
108:c85ab5f1eca0 | 606 | BLEDevice::getAppearance(uint16_t *appearanceP) |
Rohit Grover |
108:c85ab5f1eca0 | 607 | { |
Rohit Grover |
116:ca826083980e | 608 | return transport->getGap().getAppearance(appearanceP); |
Rohit Grover |
108:c85ab5f1eca0 | 609 | } |
Rohit Grover |
108:c85ab5f1eca0 | 610 | |
Rohit Grover |
108:c85ab5f1eca0 | 611 | inline ble_error_t |
Rohit Grover |
108:c85ab5f1eca0 | 612 | BLEDevice::setTxPower(int8_t txPower) |
Rohit Grover |
108:c85ab5f1eca0 | 613 | { |
Rohit Grover |
108:c85ab5f1eca0 | 614 | return transport->setTxPower(txPower); |
Rohit Grover |
108:c85ab5f1eca0 | 615 | } |
Rohit Grover |
108:c85ab5f1eca0 | 616 | |
Rohit Grover |
106:a20be740075d | 617 | /* |
Rohit Grover |
106:a20be740075d | 618 | * ALL OF THE FOLLOWING METHODS ARE DEPRECATED |
Rohit Grover |
106:a20be740075d | 619 | */ |
Rohit Grover |
106:a20be740075d | 620 | |
Rohit Grover |
106:a20be740075d | 621 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 622 | BLEDevice::setAdvertisingData(const GapAdvertisingData &ADStructures, const GapAdvertisingData &scanResponse) |
Rohit Grover |
106:a20be740075d | 623 | { |
Rohit Grover |
106:a20be740075d | 624 | needToSetAdvPayload = false; |
Rohit Grover |
106:a20be740075d | 625 | return transport->getGap().setAdvertisingData(ADStructures, scanResponse); |
Rohit Grover |
106:a20be740075d | 626 | } |
Rohit Grover |
106:a20be740075d | 627 | |
Rohit Grover |
106:a20be740075d | 628 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 629 | BLEDevice::setAdvertisingData(const GapAdvertisingData &ADStructures) |
Rohit Grover |
106:a20be740075d | 630 | { |
Rohit Grover |
106:a20be740075d | 631 | GapAdvertisingData scanResponse; |
Rohit Grover |
106:a20be740075d | 632 | |
Rohit Grover |
106:a20be740075d | 633 | needToSetAdvPayload = false; |
Rohit Grover |
106:a20be740075d | 634 | return transport->getGap().setAdvertisingData(ADStructures, scanResponse); |
Rohit Grover |
106:a20be740075d | 635 | } |
Rohit Grover |
106:a20be740075d | 636 | |
Rohit Grover |
106:a20be740075d | 637 | inline ble_error_t |
Rohit Grover |
106:a20be740075d | 638 | BLEDevice::startAdvertising(const GapAdvertisingParams &_advParams) |
Rohit Grover |
106:a20be740075d | 639 | { |
Rohit Grover |
106:a20be740075d | 640 | return transport->getGap().startAdvertising(_advParams); |
Rohit Grover |
106:a20be740075d | 641 | } |
Rohit Grover |
106:a20be740075d | 642 | |
rgrover1 | 126:fdebe4d5d62f | 643 | #endif // ifndef __BLE_DEVICE__ |