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