Nathan Yonkee / Mbed 2 deprecated Nucleo_sinewave_output_copy

Dependencies:   mbed

Committer:
Nathan Yonkee
Date:
Fri Mar 02 07:16:49 2018 -0700
Revision:
10:46a4cf51ee38
Parent:
9:d58e77ebd769
remove mbed-os

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathan Yonkee 9:d58e77ebd769 1 /* mbed Microcontroller Library
Nathan Yonkee 9:d58e77ebd769 2 * Copyright (c) 2006-2013 ARM Limited
Nathan Yonkee 9:d58e77ebd769 3 *
Nathan Yonkee 9:d58e77ebd769 4 * Licensed under the Apache License, Version 2.0 (the "License");
Nathan Yonkee 9:d58e77ebd769 5 * you may not use this file except in compliance with the License.
Nathan Yonkee 9:d58e77ebd769 6 * You may obtain a copy of the License at
Nathan Yonkee 9:d58e77ebd769 7 *
Nathan Yonkee 9:d58e77ebd769 8 * http://www.apache.org/licenses/LICENSE-2.0
Nathan Yonkee 9:d58e77ebd769 9 *
Nathan Yonkee 9:d58e77ebd769 10 * Unless required by applicable law or agreed to in writing, software
Nathan Yonkee 9:d58e77ebd769 11 * distributed under the License is distributed on an "AS IS" BASIS,
Nathan Yonkee 9:d58e77ebd769 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Nathan Yonkee 9:d58e77ebd769 13 * See the License for the specific language governing permissions and
Nathan Yonkee 9:d58e77ebd769 14 * limitations under the License.
Nathan Yonkee 9:d58e77ebd769 15 */
Nathan Yonkee 9:d58e77ebd769 16
Nathan Yonkee 9:d58e77ebd769 17 #ifndef MBED_DISCOVERED_CHARACTERISTIC_H__
Nathan Yonkee 9:d58e77ebd769 18 #define MBED_DISCOVERED_CHARACTERISTIC_H__
Nathan Yonkee 9:d58e77ebd769 19
Nathan Yonkee 9:d58e77ebd769 20 #include "UUID.h"
Nathan Yonkee 9:d58e77ebd769 21 #include "Gap.h"
Nathan Yonkee 9:d58e77ebd769 22 #include "GattAttribute.h"
Nathan Yonkee 9:d58e77ebd769 23 #include "GattClient.h"
Nathan Yonkee 9:d58e77ebd769 24 #include "CharacteristicDescriptorDiscovery.h"
Nathan Yonkee 9:d58e77ebd769 25 #include "DiscoveredCharacteristicDescriptor.h"
Nathan Yonkee 9:d58e77ebd769 26
Nathan Yonkee 9:d58e77ebd769 27 /**
Nathan Yonkee 9:d58e77ebd769 28 * @addtogroup ble
Nathan Yonkee 9:d58e77ebd769 29 * @{
Nathan Yonkee 9:d58e77ebd769 30 * @addtogroup gatt
Nathan Yonkee 9:d58e77ebd769 31 * @{
Nathan Yonkee 9:d58e77ebd769 32 * @addtogroup client
Nathan Yonkee 9:d58e77ebd769 33 * @{
Nathan Yonkee 9:d58e77ebd769 34 */
Nathan Yonkee 9:d58e77ebd769 35
Nathan Yonkee 9:d58e77ebd769 36 /**
Nathan Yonkee 9:d58e77ebd769 37 * Representation of a characteristic discovered.
Nathan Yonkee 9:d58e77ebd769 38 *
Nathan Yonkee 9:d58e77ebd769 39 * The GattClient discovery procedure initiated with
Nathan Yonkee 9:d58e77ebd769 40 * GattClient::launchServiceDiscovery() generates instances of this class.
Nathan Yonkee 9:d58e77ebd769 41 *
Nathan Yonkee 9:d58e77ebd769 42 * It exposes the main attributes of the discovered characteristic:
Nathan Yonkee 9:d58e77ebd769 43 * - The UUID of the characteristic, it can be retrieved by a call to the
Nathan Yonkee 9:d58e77ebd769 44 * function getUUID(). This UUID is the type of the characteristic.
Nathan Yonkee 9:d58e77ebd769 45 * - Attribute Handles of the characteristic are present as the triplet
Nathan Yonkee 9:d58e77ebd769 46 * declaration handle, value handle and last handle. The value handle is
Nathan Yonkee 9:d58e77ebd769 47 * used to read or write the content of the characteristic.
Nathan Yonkee 9:d58e77ebd769 48 * - The properties contain the set of operations the characteristic can
Nathan Yonkee 9:d58e77ebd769 49 * handle, for instance being read or written.
Nathan Yonkee 9:d58e77ebd769 50 *
Nathan Yonkee 9:d58e77ebd769 51 * It important to note that the value of the characteristic - if it is
Nathan Yonkee 9:d58e77ebd769 52 * accessible - is not fetched at discovery time.
Nathan Yonkee 9:d58e77ebd769 53 *
Nathan Yonkee 9:d58e77ebd769 54 * The main operations the class offers are reading, writing and discovering
Nathan Yonkee 9:d58e77ebd769 55 * the descriptors of the characteristic discovered.
Nathan Yonkee 9:d58e77ebd769 56 *
Nathan Yonkee 9:d58e77ebd769 57 * Reading a discovered characteristic can be accomplished in two different
Nathan Yonkee 9:d58e77ebd769 58 * fashions:
Nathan Yonkee 9:d58e77ebd769 59 *
Nathan Yonkee 9:d58e77ebd769 60 * If the user has a callback registered for the data read operation in the
Nathan Yonkee 9:d58e77ebd769 61 * GattClient, then a call to the read(uint16_t) function will initiate a read of
Nathan Yonkee 9:d58e77ebd769 62 * the characteristic. Results of the operation will be pass on the callback
Nathan Yonkee 9:d58e77ebd769 63 * registered by GattClient::onDataRead(), which processes all the responses to
Nathan Yonkee 9:d58e77ebd769 64 * read requests. The read request for a given characteristic can be identified
Nathan Yonkee 9:d58e77ebd769 65 * by the connection handle and the attribute handle, which are present in
Nathan Yonkee 9:d58e77ebd769 66 * GattReadCallbackParams.
Nathan Yonkee 9:d58e77ebd769 67 *
Nathan Yonkee 9:d58e77ebd769 68 * Another overload (read(uint16_t, const GattClient::ReadCallback_t&)) of the
Nathan Yonkee 9:d58e77ebd769 69 * read function accepts a completion callback as a last parameter. That
Nathan Yonkee 9:d58e77ebd769 70 * completion callback will be invoked automatically once the response to the
Nathan Yonkee 9:d58e77ebd769 71 * read request for that given characteristic has been received. However,
Nathan Yonkee 9:d58e77ebd769 72 * convenience came at the expense of dynamic memory usage for the time of the
Nathan Yonkee 9:d58e77ebd769 73 * transaction.
Nathan Yonkee 9:d58e77ebd769 74 *
Nathan Yonkee 9:d58e77ebd769 75 * Similarly, two versions of the write() API are exposed. One where the user
Nathan Yonkee 9:d58e77ebd769 76 * has to register a callback handling write response through the function
Nathan Yonkee 9:d58e77ebd769 77 * GattClient::onDataWritten() and another one that accepts a completion
Nathan Yonkee 9:d58e77ebd769 78 * callback in input.
Nathan Yonkee 9:d58e77ebd769 79 *
Nathan Yonkee 9:d58e77ebd769 80 * It is also possible to send a write command, which is not acknowledged by the
Nathan Yonkee 9:d58e77ebd769 81 * peer server by using the function writeWoResponse().
Nathan Yonkee 9:d58e77ebd769 82 *
Nathan Yonkee 9:d58e77ebd769 83 * Finally, descriptors of the characteristic can be discovered by invoking the
Nathan Yonkee 9:d58e77ebd769 84 * function discoverDescriptors, which is shorthand for calling
Nathan Yonkee 9:d58e77ebd769 85 * GattClient::discoverCharacteristicDescriptors. That discovery is necessary to
Nathan Yonkee 9:d58e77ebd769 86 * enable or disable characteristic notification or indication that is achieved
Nathan Yonkee 9:d58e77ebd769 87 * by writing on the Client Characteristic Configuration Descriptor (CCCD).
Nathan Yonkee 9:d58e77ebd769 88 */
Nathan Yonkee 9:d58e77ebd769 89 class DiscoveredCharacteristic {
Nathan Yonkee 9:d58e77ebd769 90 public:
Nathan Yonkee 9:d58e77ebd769 91 /**
Nathan Yonkee 9:d58e77ebd769 92 * Properties of a discovered characteristic.
Nathan Yonkee 9:d58e77ebd769 93 */
Nathan Yonkee 9:d58e77ebd769 94 struct Properties_t {
Nathan Yonkee 9:d58e77ebd769 95 /**
Nathan Yonkee 9:d58e77ebd769 96 * Permits broadcasts of the characteristic value using the character
Nathan Yonkee 9:d58e77ebd769 97 * the Server Characteristic Configuration Descriptor.
Nathan Yonkee 9:d58e77ebd769 98 *
Nathan Yonkee 9:d58e77ebd769 99 * @note If set, descriptors of the characteristic contain a Server
Nathan Yonkee 9:d58e77ebd769 100 * Characteristic Configuration Descriptor.
Nathan Yonkee 9:d58e77ebd769 101 */
Nathan Yonkee 9:d58e77ebd769 102 uint8_t _broadcast :1;
Nathan Yonkee 9:d58e77ebd769 103
Nathan Yonkee 9:d58e77ebd769 104 /**
Nathan Yonkee 9:d58e77ebd769 105 * If set, the value of the characteristic can be read.
Nathan Yonkee 9:d58e77ebd769 106 */
Nathan Yonkee 9:d58e77ebd769 107 uint8_t _read :1;
Nathan Yonkee 9:d58e77ebd769 108
Nathan Yonkee 9:d58e77ebd769 109 /**
Nathan Yonkee 9:d58e77ebd769 110 * If set, a write command can write the characteristic value
Nathan Yonkee 9:d58e77ebd769 111 * (write without response).
Nathan Yonkee 9:d58e77ebd769 112 */
Nathan Yonkee 9:d58e77ebd769 113 uint8_t _writeWoResp :1;
Nathan Yonkee 9:d58e77ebd769 114
Nathan Yonkee 9:d58e77ebd769 115 /**
Nathan Yonkee 9:d58e77ebd769 116 * If set, clients can issue requests to write the characteristic.
Nathan Yonkee 9:d58e77ebd769 117 */
Nathan Yonkee 9:d58e77ebd769 118 uint8_t _write :1;
Nathan Yonkee 9:d58e77ebd769 119
Nathan Yonkee 9:d58e77ebd769 120 /**
Nathan Yonkee 9:d58e77ebd769 121 * If set, the server can emit notifications of the Characteristic Value
Nathan Yonkee 9:d58e77ebd769 122 * (without client acknowledgment).
Nathan Yonkee 9:d58e77ebd769 123 *
Nathan Yonkee 9:d58e77ebd769 124 * @note If set, descriptors of the characteristic contain a Client
Nathan Yonkee 9:d58e77ebd769 125 * Characteristic Configuration Descriptor.
Nathan Yonkee 9:d58e77ebd769 126 */
Nathan Yonkee 9:d58e77ebd769 127 uint8_t _notify :1;
Nathan Yonkee 9:d58e77ebd769 128
Nathan Yonkee 9:d58e77ebd769 129 /**
Nathan Yonkee 9:d58e77ebd769 130 * If set, the server can emit indication of the Characteristic Value
Nathan Yonkee 9:d58e77ebd769 131 * (with client acknowledgement).
Nathan Yonkee 9:d58e77ebd769 132 *
Nathan Yonkee 9:d58e77ebd769 133 * @note If set, descriptors of the characteristic contain a Client
Nathan Yonkee 9:d58e77ebd769 134 * Characteristic Configuration Descriptor.
Nathan Yonkee 9:d58e77ebd769 135 */
Nathan Yonkee 9:d58e77ebd769 136 uint8_t _indicate :1;
Nathan Yonkee 9:d58e77ebd769 137
Nathan Yonkee 9:d58e77ebd769 138 /**
Nathan Yonkee 9:d58e77ebd769 139 * If set, signed write of the Characteristic Value is supported.
Nathan Yonkee 9:d58e77ebd769 140 */
Nathan Yonkee 9:d58e77ebd769 141 uint8_t _authSignedWrite :1;
Nathan Yonkee 9:d58e77ebd769 142
Nathan Yonkee 9:d58e77ebd769 143 public:
Nathan Yonkee 9:d58e77ebd769 144 /**
Nathan Yonkee 9:d58e77ebd769 145 * Return the value of the broadcast propertie.
Nathan Yonkee 9:d58e77ebd769 146 *
Nathan Yonkee 9:d58e77ebd769 147 * @return true if the Server Characteristic Configuration Descriptor
Nathan Yonkee 9:d58e77ebd769 148 * of the characteristic can be configured to broadcast the
Nathan Yonkee 9:d58e77ebd769 149 * characteristic value during broadcast procedure.
Nathan Yonkee 9:d58e77ebd769 150 *
Nathan Yonkee 9:d58e77ebd769 151 * @see _broadcast
Nathan Yonkee 9:d58e77ebd769 152 */
Nathan Yonkee 9:d58e77ebd769 153 bool broadcast(void) const
Nathan Yonkee 9:d58e77ebd769 154 {
Nathan Yonkee 9:d58e77ebd769 155 return _broadcast;
Nathan Yonkee 9:d58e77ebd769 156 }
Nathan Yonkee 9:d58e77ebd769 157
Nathan Yonkee 9:d58e77ebd769 158 /**
Nathan Yonkee 9:d58e77ebd769 159 * Return the value of the read property
Nathan Yonkee 9:d58e77ebd769 160 *
Nathan Yonkee 9:d58e77ebd769 161 * @return true if the characteristic value can be read and false
Nathan Yonkee 9:d58e77ebd769 162 * otherwise.
Nathan Yonkee 9:d58e77ebd769 163 *
Nathan Yonkee 9:d58e77ebd769 164 * @see _read
Nathan Yonkee 9:d58e77ebd769 165 */
Nathan Yonkee 9:d58e77ebd769 166 bool read(void) const
Nathan Yonkee 9:d58e77ebd769 167 {
Nathan Yonkee 9:d58e77ebd769 168 return _read;
Nathan Yonkee 9:d58e77ebd769 169 }
Nathan Yonkee 9:d58e77ebd769 170
Nathan Yonkee 9:d58e77ebd769 171 /**
Nathan Yonkee 9:d58e77ebd769 172 * Return the value of the write without response property.
Nathan Yonkee 9:d58e77ebd769 173 *
Nathan Yonkee 9:d58e77ebd769 174 * @return true if the characteristic accepts write without response
Nathan Yonkee 9:d58e77ebd769 175 * commands and false otherwise.
Nathan Yonkee 9:d58e77ebd769 176 *
Nathan Yonkee 9:d58e77ebd769 177 * @see _writeWoResp
Nathan Yonkee 9:d58e77ebd769 178 */
Nathan Yonkee 9:d58e77ebd769 179 bool writeWoResp(void) const
Nathan Yonkee 9:d58e77ebd769 180 {
Nathan Yonkee 9:d58e77ebd769 181 return _writeWoResp;
Nathan Yonkee 9:d58e77ebd769 182 }
Nathan Yonkee 9:d58e77ebd769 183
Nathan Yonkee 9:d58e77ebd769 184 /**
Nathan Yonkee 9:d58e77ebd769 185 * Return the value of the write property.
Nathan Yonkee 9:d58e77ebd769 186 *
Nathan Yonkee 9:d58e77ebd769 187 * @return true if writing the characteristic accepts write requests and
Nathan Yonkee 9:d58e77ebd769 188 * false otherwise.
Nathan Yonkee 9:d58e77ebd769 189 *
Nathan Yonkee 9:d58e77ebd769 190 * @see _write
Nathan Yonkee 9:d58e77ebd769 191 */
Nathan Yonkee 9:d58e77ebd769 192 bool write(void) const
Nathan Yonkee 9:d58e77ebd769 193 {
Nathan Yonkee 9:d58e77ebd769 194 return _write;
Nathan Yonkee 9:d58e77ebd769 195 }
Nathan Yonkee 9:d58e77ebd769 196
Nathan Yonkee 9:d58e77ebd769 197 /**
Nathan Yonkee 9:d58e77ebd769 198 * Return the value of the notification property.
Nathan Yonkee 9:d58e77ebd769 199 *
Nathan Yonkee 9:d58e77ebd769 200 * @return true if the Client Characteristic Configuration Descriptor
Nathan Yonkee 9:d58e77ebd769 201 * can be configured to notify the characteristic value to a given
Nathan Yonkee 9:d58e77ebd769 202 * client and false otherwise.
Nathan Yonkee 9:d58e77ebd769 203 *
Nathan Yonkee 9:d58e77ebd769 204 * @note unlike indication, the notification procedure does not require
Nathan Yonkee 9:d58e77ebd769 205 * acknowledgement from the client.
Nathan Yonkee 9:d58e77ebd769 206 *
Nathan Yonkee 9:d58e77ebd769 207 * @see _notify
Nathan Yonkee 9:d58e77ebd769 208 */
Nathan Yonkee 9:d58e77ebd769 209 bool notify(void) const
Nathan Yonkee 9:d58e77ebd769 210 {
Nathan Yonkee 9:d58e77ebd769 211 return _notify;
Nathan Yonkee 9:d58e77ebd769 212 }
Nathan Yonkee 9:d58e77ebd769 213
Nathan Yonkee 9:d58e77ebd769 214 /**
Nathan Yonkee 9:d58e77ebd769 215 * Return the value of the indicate property.
Nathan Yonkee 9:d58e77ebd769 216 *
Nathan Yonkee 9:d58e77ebd769 217 * @return true if the Client Characteristic Configuration Descriptor
Nathan Yonkee 9:d58e77ebd769 218 * can be configured to indicate the characteristic value to a given
Nathan Yonkee 9:d58e77ebd769 219 * client and false otherwise.
Nathan Yonkee 9:d58e77ebd769 220 *
Nathan Yonkee 9:d58e77ebd769 221 * @note unlike notification the indication procedure does require
Nathan Yonkee 9:d58e77ebd769 222 * acknowledgment from the client.
Nathan Yonkee 9:d58e77ebd769 223 *
Nathan Yonkee 9:d58e77ebd769 224 * @see _indicate
Nathan Yonkee 9:d58e77ebd769 225 */
Nathan Yonkee 9:d58e77ebd769 226 bool indicate(void) const
Nathan Yonkee 9:d58e77ebd769 227 {
Nathan Yonkee 9:d58e77ebd769 228 return _indicate;
Nathan Yonkee 9:d58e77ebd769 229 }
Nathan Yonkee 9:d58e77ebd769 230
Nathan Yonkee 9:d58e77ebd769 231 /**
Nathan Yonkee 9:d58e77ebd769 232 * Return the value of the authenticated signed writes property.
Nathan Yonkee 9:d58e77ebd769 233 *
Nathan Yonkee 9:d58e77ebd769 234 * @return true if the characteristic accepts authenticated signed write
Nathan Yonkee 9:d58e77ebd769 235 * and false otherwise.
Nathan Yonkee 9:d58e77ebd769 236 */
Nathan Yonkee 9:d58e77ebd769 237 bool authSignedWrite(void) const
Nathan Yonkee 9:d58e77ebd769 238 {
Nathan Yonkee 9:d58e77ebd769 239 return _authSignedWrite;
Nathan Yonkee 9:d58e77ebd769 240 }
Nathan Yonkee 9:d58e77ebd769 241
Nathan Yonkee 9:d58e77ebd769 242 /**
Nathan Yonkee 9:d58e77ebd769 243 * Equal to operator for DiscoveredCharacteristic::Properties_t.
Nathan Yonkee 9:d58e77ebd769 244 *
Nathan Yonkee 9:d58e77ebd769 245 * @param[in] lhs The left hand side of the equality expression.
Nathan Yonkee 9:d58e77ebd769 246 * @param[in] rhs The right hand side of the equality expression.
Nathan Yonkee 9:d58e77ebd769 247 *
Nathan Yonkee 9:d58e77ebd769 248 * @return true if operands are equals and false otherwise.
Nathan Yonkee 9:d58e77ebd769 249 */
Nathan Yonkee 9:d58e77ebd769 250 friend bool operator==(Properties_t lhs, Properties_t rhs)
Nathan Yonkee 9:d58e77ebd769 251 {
Nathan Yonkee 9:d58e77ebd769 252 return lhs._broadcast == rhs._broadcast &&
Nathan Yonkee 9:d58e77ebd769 253 lhs._read == rhs._read &&
Nathan Yonkee 9:d58e77ebd769 254 lhs._writeWoResp == rhs._writeWoResp &&
Nathan Yonkee 9:d58e77ebd769 255 lhs._write == rhs._write &&
Nathan Yonkee 9:d58e77ebd769 256 lhs._notify == rhs._notify &&
Nathan Yonkee 9:d58e77ebd769 257 lhs._indicate == rhs._indicate &&
Nathan Yonkee 9:d58e77ebd769 258 lhs._authSignedWrite == rhs._authSignedWrite;
Nathan Yonkee 9:d58e77ebd769 259 }
Nathan Yonkee 9:d58e77ebd769 260
Nathan Yonkee 9:d58e77ebd769 261 /**
Nathan Yonkee 9:d58e77ebd769 262 * Not equal to operator for DiscoveredCharacteristic::Properties_t.
Nathan Yonkee 9:d58e77ebd769 263 *
Nathan Yonkee 9:d58e77ebd769 264 * @param lhs The left hand side of the expression.
Nathan Yonkee 9:d58e77ebd769 265 * @param rhs The right hand side of the expression.
Nathan Yonkee 9:d58e77ebd769 266 *
Nathan Yonkee 9:d58e77ebd769 267 * @return true if operands are not equals, false otherwise.
Nathan Yonkee 9:d58e77ebd769 268 */
Nathan Yonkee 9:d58e77ebd769 269 friend bool operator!=(Properties_t lhs, Properties_t rhs)
Nathan Yonkee 9:d58e77ebd769 270 {
Nathan Yonkee 9:d58e77ebd769 271 return !(lhs == rhs);
Nathan Yonkee 9:d58e77ebd769 272 }
Nathan Yonkee 9:d58e77ebd769 273
Nathan Yonkee 9:d58e77ebd769 274 private:
Nathan Yonkee 9:d58e77ebd769 275 /* Disallow implicit conversion to integer types. */
Nathan Yonkee 9:d58e77ebd769 276 operator uint8_t() const;
Nathan Yonkee 9:d58e77ebd769 277 operator unsigned() const;
Nathan Yonkee 9:d58e77ebd769 278 };
Nathan Yonkee 9:d58e77ebd769 279
Nathan Yonkee 9:d58e77ebd769 280 /**
Nathan Yonkee 9:d58e77ebd769 281 * Initiate a read of the characteristic value.
Nathan Yonkee 9:d58e77ebd769 282 *
Nathan Yonkee 9:d58e77ebd769 283 * The characteristic value is read in its entirety from the value attribute
Nathan Yonkee 9:d58e77ebd769 284 * of the characteristic.
Nathan Yonkee 9:d58e77ebd769 285 *
Nathan Yonkee 9:d58e77ebd769 286 * Read responses will be passed to the callback registered in
Nathan Yonkee 9:d58e77ebd769 287 * GattClient::onDataRead(). Read responses to read requests that this function
Nathan Yonkee 9:d58e77ebd769 288 * call initiates will have their GattReadCallbackParams::connHandle
Nathan Yonkee 9:d58e77ebd769 289 * field equal to the value returned by getConnectionHandle() and their
Nathan Yonkee 9:d58e77ebd769 290 * GattReadCallbackParams::handle field equal to the value returned by
Nathan Yonkee 9:d58e77ebd769 291 * getValueHandle().
Nathan Yonkee 9:d58e77ebd769 292 *
Nathan Yonkee 9:d58e77ebd769 293 * @param[in] offset The position - in the characteristic value bytes stream
Nathan Yonkee 9:d58e77ebd769 294 * - where the read operation begin. This parameter is optional.
Nathan Yonkee 9:d58e77ebd769 295 *
Nathan Yonkee 9:d58e77ebd769 296 * @return BLE_ERROR_NONE if a read has been initiated.
Nathan Yonkee 9:d58e77ebd769 297 * @return BLE_ERROR_INVALID_STATE if some internal state about the
Nathan Yonkee 9:d58e77ebd769 298 * connection is invalid.
Nathan Yonkee 9:d58e77ebd769 299 * @return BLE_STACK_BUSY if some client procedure is already in progress.
Nathan Yonkee 9:d58e77ebd769 300 * @return BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's
Nathan Yonkee 9:d58e77ebd769 301 * properties.
Nathan Yonkee 9:d58e77ebd769 302 */
Nathan Yonkee 9:d58e77ebd769 303 ble_error_t read(uint16_t offset = 0) const;
Nathan Yonkee 9:d58e77ebd769 304
Nathan Yonkee 9:d58e77ebd769 305 /**
Nathan Yonkee 9:d58e77ebd769 306 * Initiate a read of the characteristic value and pass the response to its
Nathan Yonkee 9:d58e77ebd769 307 * completion callback.
Nathan Yonkee 9:d58e77ebd769 308 *
Nathan Yonkee 9:d58e77ebd769 309 * @param[in] offset The position - in the characteristic value bytes stream
Nathan Yonkee 9:d58e77ebd769 310 * - where the read operation begin.
Nathan Yonkee 9:d58e77ebd769 311 *
Nathan Yonkee 9:d58e77ebd769 312 * @param[in] onRead Completion callback which will accept the response of
Nathan Yonkee 9:d58e77ebd769 313 * the read request. The callback is copied; it is unnecessary to keep it
Nathan Yonkee 9:d58e77ebd769 314 * in memory after the call.
Nathan Yonkee 9:d58e77ebd769 315 *
Nathan Yonkee 9:d58e77ebd769 316 * @return BLE_ERROR_NONE if a read has been initiated.
Nathan Yonkee 9:d58e77ebd769 317 * @return BLE_ERROR_INVALID_STATE if some internal state about the
Nathan Yonkee 9:d58e77ebd769 318 * connection is invalid.
Nathan Yonkee 9:d58e77ebd769 319 * @return BLE_STACK_BUSY if some client procedure is already in progress.
Nathan Yonkee 9:d58e77ebd769 320 * @return BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's
Nathan Yonkee 9:d58e77ebd769 321 * properties.
Nathan Yonkee 9:d58e77ebd769 322 *
Nathan Yonkee 9:d58e77ebd769 323 * @note This function is similar to read(uint16_t) const; however, it uses
Nathan Yonkee 9:d58e77ebd769 324 * dynamic memory to store the use completion callback.
Nathan Yonkee 9:d58e77ebd769 325 */
Nathan Yonkee 9:d58e77ebd769 326 ble_error_t read(
Nathan Yonkee 9:d58e77ebd769 327 uint16_t offset,
Nathan Yonkee 9:d58e77ebd769 328 const GattClient::ReadCallback_t &onRead
Nathan Yonkee 9:d58e77ebd769 329 ) const;
Nathan Yonkee 9:d58e77ebd769 330
Nathan Yonkee 9:d58e77ebd769 331 /**
Nathan Yonkee 9:d58e77ebd769 332 * Perform a write without response procedure.
Nathan Yonkee 9:d58e77ebd769 333 *
Nathan Yonkee 9:d58e77ebd769 334 * @note The server does not acknowledge write without responses.
Nathan Yonkee 9:d58e77ebd769 335 * Therefore, they won't generate any event on the client side.
Nathan Yonkee 9:d58e77ebd769 336 *
Nathan Yonkee 9:d58e77ebd769 337 * @param[in] length The amount of data being written.
Nathan Yonkee 9:d58e77ebd769 338 * @param[in] value The bytes being written.
Nathan Yonkee 9:d58e77ebd769 339 *
Nathan Yonkee 9:d58e77ebd769 340 * @return BLE_ERROR_NONE Successfully started the Write procedure.
Nathan Yonkee 9:d58e77ebd769 341 * @return BLE_ERROR_INVALID_STATE if some internal state about the
Nathan Yonkee 9:d58e77ebd769 342 * connection is invalid.
Nathan Yonkee 9:d58e77ebd769 343 * @return BLE_STACK_BUSY if some client procedure is already in progress.
Nathan Yonkee 9:d58e77ebd769 344 * @return BLE_ERROR_NO_MEM if there are no available buffers left to
Nathan Yonkee 9:d58e77ebd769 345 * process the request.
Nathan Yonkee 9:d58e77ebd769 346 * @return BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's
Nathan Yonkee 9:d58e77ebd769 347 * properties.
Nathan Yonkee 9:d58e77ebd769 348 */
Nathan Yonkee 9:d58e77ebd769 349 ble_error_t writeWoResponse(uint16_t length, const uint8_t *value) const;
Nathan Yonkee 9:d58e77ebd769 350
Nathan Yonkee 9:d58e77ebd769 351 /**
Nathan Yonkee 9:d58e77ebd769 352 * Initiate a discovery of the characteristic descriptors.
Nathan Yonkee 9:d58e77ebd769 353 *
Nathan Yonkee 9:d58e77ebd769 354 * When a descriptor is discovered, the callback onDescriptorDiscovered is
Nathan Yonkee 9:d58e77ebd769 355 * invoked with the descriptor discovered as parameter. When the process
Nathan Yonkee 9:d58e77ebd769 356 * ends, the callback onTermination is invoked.
Nathan Yonkee 9:d58e77ebd769 357 *
Nathan Yonkee 9:d58e77ebd769 358 * @param[in] onDescriptorDiscovered Callback is invoked when a descriptor is
Nathan Yonkee 9:d58e77ebd769 359 * discovered.
Nathan Yonkee 9:d58e77ebd769 360 *
Nathan Yonkee 9:d58e77ebd769 361 * @param[in] onTermination Callback is invoked when the discovery process ends.
Nathan Yonkee 9:d58e77ebd769 362 *
Nathan Yonkee 9:d58e77ebd769 363 * @return BLE_ERROR_NONE if descriptor discovery is launched successfully;
Nathan Yonkee 9:d58e77ebd769 364 * else an appropriate error.
Nathan Yonkee 9:d58e77ebd769 365 *
Nathan Yonkee 9:d58e77ebd769 366 * @note This function is shorthand for
Nathan Yonkee 9:d58e77ebd769 367 * GattClient::discoverCharacteristicDescriptors; therefore,
Nathan Yonkee 9:d58e77ebd769 368 * GattClient::isCharacteristicDescriptorDiscoveryActive can be used to
Nathan Yonkee 9:d58e77ebd769 369 * determine the descriptor discovery and
Nathan Yonkee 9:d58e77ebd769 370 * GattClient::terminateCharacteristicDescriptorDiscovery can be used to
Nathan Yonkee 9:d58e77ebd769 371 * end the discovery process.
Nathan Yonkee 9:d58e77ebd769 372 */
Nathan Yonkee 9:d58e77ebd769 373 ble_error_t discoverDescriptors(
Nathan Yonkee 9:d58e77ebd769 374 const CharacteristicDescriptorDiscovery::DiscoveryCallback_t &onDescriptorDiscovered,
Nathan Yonkee 9:d58e77ebd769 375 const CharacteristicDescriptorDiscovery::TerminationCallback_t &onTermination
Nathan Yonkee 9:d58e77ebd769 376 ) const;
Nathan Yonkee 9:d58e77ebd769 377
Nathan Yonkee 9:d58e77ebd769 378 /**
Nathan Yonkee 9:d58e77ebd769 379 * Initiate a write procedure of the characteristic value.
Nathan Yonkee 9:d58e77ebd769 380 *
Nathan Yonkee 9:d58e77ebd769 381 * Unlike write without responses (see writeWoResponse()), an acknowledgment
Nathan Yonkee 9:d58e77ebd769 382 * is expected for this procedure. The response of the peer GATT server to
Nathan Yonkee 9:d58e77ebd769 383 * the write request is passed to callbacks registered in
Nathan Yonkee 9:d58e77ebd769 384 * GattClient::onDataWritten().
Nathan Yonkee 9:d58e77ebd769 385 *
Nathan Yonkee 9:d58e77ebd769 386 * Similarly to read responses, responses to write request of this
Nathan Yonkee 9:d58e77ebd769 387 * characteristic can be identified by their connection handle (
Nathan Yonkee 9:d58e77ebd769 388 * GattWriteCallbackParams::connHandle), which is equal to the value
Nathan Yonkee 9:d58e77ebd769 389 * returned by getConnectionHandle() and their attribute handle (
Nathan Yonkee 9:d58e77ebd769 390 * GattWriteCallbackParams::handle), which is equal to the value
Nathan Yonkee 9:d58e77ebd769 391 * returned by getValueHandle().
Nathan Yonkee 9:d58e77ebd769 392 *
Nathan Yonkee 9:d58e77ebd769 393 * @param[in] length The amount of data being written.
Nathan Yonkee 9:d58e77ebd769 394 * @param[in] value The bytes being written.
Nathan Yonkee 9:d58e77ebd769 395 *
Nathan Yonkee 9:d58e77ebd769 396 * @return BLE_ERROR_NONE Successfully started the Write procedure.
Nathan Yonkee 9:d58e77ebd769 397 * @return BLE_ERROR_INVALID_STATE If some internal state about the
Nathan Yonkee 9:d58e77ebd769 398 * connection is invalid.
Nathan Yonkee 9:d58e77ebd769 399 * @return BLE_STACK_BUSY If some client procedure is already in progress.
Nathan Yonkee 9:d58e77ebd769 400 * @return BLE_ERROR_NO_MEM If there are no available buffers left to
Nathan Yonkee 9:d58e77ebd769 401 * process the request.
Nathan Yonkee 9:d58e77ebd769 402 * @return BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's
Nathan Yonkee 9:d58e77ebd769 403 * properties.
Nathan Yonkee 9:d58e77ebd769 404 *
Nathan Yonkee 9:d58e77ebd769 405 * @note Internally, the API uses the write or long write procedure, depending
Nathan Yonkee 9:d58e77ebd769 406 * on the number of bytes to write and the MTU size.
Nathan Yonkee 9:d58e77ebd769 407 */
Nathan Yonkee 9:d58e77ebd769 408 ble_error_t write(uint16_t length, const uint8_t *value) const;
Nathan Yonkee 9:d58e77ebd769 409
Nathan Yonkee 9:d58e77ebd769 410 /**
Nathan Yonkee 9:d58e77ebd769 411 * Initiate a write procedure of the characteristic value.
Nathan Yonkee 9:d58e77ebd769 412 *
Nathan Yonkee 9:d58e77ebd769 413 * Same as write(uint16_t, const uint8_t *) const but accepts a completion
Nathan Yonkee 9:d58e77ebd769 414 * callback, which is invoked when the server response is received.
Nathan Yonkee 9:d58e77ebd769 415 *
Nathan Yonkee 9:d58e77ebd769 416 * @param[in] length The amount of bytes to write.
Nathan Yonkee 9:d58e77ebd769 417 * @param[in] value The bytes to write.
Nathan Yonkee 9:d58e77ebd769 418 * @param[in] onWrite Continuation callback of the write procedure.
Nathan Yonkee 9:d58e77ebd769 419 *
Nathan Yonkee 9:d58e77ebd769 420 * @return BLE_ERROR_NONE Successfully started the Write procedure.
Nathan Yonkee 9:d58e77ebd769 421 * @return BLE_ERROR_INVALID_STATE if some internal state about the
Nathan Yonkee 9:d58e77ebd769 422 * connection is invalid.
Nathan Yonkee 9:d58e77ebd769 423 * @return BLE_STACK_BUSY if some client procedure is already in progress.
Nathan Yonkee 9:d58e77ebd769 424 * @return BLE_ERROR_NO_MEM if there are no available buffers left to
Nathan Yonkee 9:d58e77ebd769 425 * process the request.
Nathan Yonkee 9:d58e77ebd769 426 * @return BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's
Nathan Yonkee 9:d58e77ebd769 427 * properties.
Nathan Yonkee 9:d58e77ebd769 428 */
Nathan Yonkee 9:d58e77ebd769 429 ble_error_t write(
Nathan Yonkee 9:d58e77ebd769 430 uint16_t length,
Nathan Yonkee 9:d58e77ebd769 431 const uint8_t *value,
Nathan Yonkee 9:d58e77ebd769 432 const GattClient::WriteCallback_t &onWrite
Nathan Yonkee 9:d58e77ebd769 433 ) const;
Nathan Yonkee 9:d58e77ebd769 434
Nathan Yonkee 9:d58e77ebd769 435 void setupLongUUID(UUID::LongUUIDBytes_t longUUID, UUID::ByteOrder_t order = UUID::MSB) {
Nathan Yonkee 9:d58e77ebd769 436 uuid.setupLong(longUUID, order);
Nathan Yonkee 9:d58e77ebd769 437 }
Nathan Yonkee 9:d58e77ebd769 438
Nathan Yonkee 9:d58e77ebd769 439 public:
Nathan Yonkee 9:d58e77ebd769 440 /**
Nathan Yonkee 9:d58e77ebd769 441 * Get the UUID of the discovered characteristic.
Nathan Yonkee 9:d58e77ebd769 442 *
Nathan Yonkee 9:d58e77ebd769 443 * @return The UUID of this characteristic.
Nathan Yonkee 9:d58e77ebd769 444 */
Nathan Yonkee 9:d58e77ebd769 445 const UUID &getUUID(void) const
Nathan Yonkee 9:d58e77ebd769 446 {
Nathan Yonkee 9:d58e77ebd769 447 return uuid;
Nathan Yonkee 9:d58e77ebd769 448 }
Nathan Yonkee 9:d58e77ebd769 449
Nathan Yonkee 9:d58e77ebd769 450 /**
Nathan Yonkee 9:d58e77ebd769 451 * Get the properties of this characteristic.
Nathan Yonkee 9:d58e77ebd769 452 *
Nathan Yonkee 9:d58e77ebd769 453 * @return The set of properties of this characteristic.
Nathan Yonkee 9:d58e77ebd769 454 */
Nathan Yonkee 9:d58e77ebd769 455 const Properties_t &getProperties(void) const
Nathan Yonkee 9:d58e77ebd769 456 {
Nathan Yonkee 9:d58e77ebd769 457 return props;
Nathan Yonkee 9:d58e77ebd769 458 }
Nathan Yonkee 9:d58e77ebd769 459
Nathan Yonkee 9:d58e77ebd769 460 /**
Nathan Yonkee 9:d58e77ebd769 461 * Get the declaration handle of this characteristic.
Nathan Yonkee 9:d58e77ebd769 462 *
Nathan Yonkee 9:d58e77ebd769 463 * The declaration handle is the first handle of a characteristic
Nathan Yonkee 9:d58e77ebd769 464 * definition. The value accessible at this handle contains the following
Nathan Yonkee 9:d58e77ebd769 465 * informations:
Nathan Yonkee 9:d58e77ebd769 466 * - The characteristics properties (see Properties_t). This value can
Nathan Yonkee 9:d58e77ebd769 467 * be accessed by using #getProperties .
Nathan Yonkee 9:d58e77ebd769 468 * - The characteristic value attribute handle. This field can be accessed
Nathan Yonkee 9:d58e77ebd769 469 * by using #getValueHandle .
Nathan Yonkee 9:d58e77ebd769 470 * - The characteristic UUID, this value can be accessed by using the
Nathan Yonkee 9:d58e77ebd769 471 * function #getUUID .
Nathan Yonkee 9:d58e77ebd769 472 *
Nathan Yonkee 9:d58e77ebd769 473 * @return the declaration handle of this characteristic.
Nathan Yonkee 9:d58e77ebd769 474 */
Nathan Yonkee 9:d58e77ebd769 475 GattAttribute::Handle_t getDeclHandle(void) const
Nathan Yonkee 9:d58e77ebd769 476 {
Nathan Yonkee 9:d58e77ebd769 477 return declHandle;
Nathan Yonkee 9:d58e77ebd769 478 }
Nathan Yonkee 9:d58e77ebd769 479
Nathan Yonkee 9:d58e77ebd769 480 /**
Nathan Yonkee 9:d58e77ebd769 481 * Get the attribute handle of the characteristic value.
Nathan Yonkee 9:d58e77ebd769 482 *
Nathan Yonkee 9:d58e77ebd769 483 * This handle is used to read or write the value of the characteristic.
Nathan Yonkee 9:d58e77ebd769 484 *
Nathan Yonkee 9:d58e77ebd769 485 * @return The handle to access the value of this characteristic.
Nathan Yonkee 9:d58e77ebd769 486 */
Nathan Yonkee 9:d58e77ebd769 487 GattAttribute::Handle_t getValueHandle(void) const
Nathan Yonkee 9:d58e77ebd769 488 {
Nathan Yonkee 9:d58e77ebd769 489 return valueHandle;
Nathan Yonkee 9:d58e77ebd769 490 }
Nathan Yonkee 9:d58e77ebd769 491
Nathan Yonkee 9:d58e77ebd769 492 /**
Nathan Yonkee 9:d58e77ebd769 493 * Return the last attribute handle of the characteristic definition.
Nathan Yonkee 9:d58e77ebd769 494 *
Nathan Yonkee 9:d58e77ebd769 495 * The attribute layout of a characteristic definition is:
Nathan Yonkee 9:d58e77ebd769 496 * - Declaration attribute (see #getDeclHandle).
Nathan Yonkee 9:d58e77ebd769 497 * - Value attribute (see #getValueHandle).
Nathan Yonkee 9:d58e77ebd769 498 * - Zero or more characteristic descriptors attribute.
Nathan Yonkee 9:d58e77ebd769 499 *
Nathan Yonkee 9:d58e77ebd769 500 * The last attribute handle is used internally to discover characteristic
Nathan Yonkee 9:d58e77ebd769 501 * descriptors. The discovery operates on the range [ValueHandle + 1 :
Nathan Yonkee 9:d58e77ebd769 502 * LastHandle].
Nathan Yonkee 9:d58e77ebd769 503 *
Nathan Yonkee 9:d58e77ebd769 504 * @return The last handle of this characteristic definition.
Nathan Yonkee 9:d58e77ebd769 505 *
Nathan Yonkee 9:d58e77ebd769 506 * @note This function is public for informative purposes.
Nathan Yonkee 9:d58e77ebd769 507 */
Nathan Yonkee 9:d58e77ebd769 508 GattAttribute::Handle_t getLastHandle(void) const
Nathan Yonkee 9:d58e77ebd769 509 {
Nathan Yonkee 9:d58e77ebd769 510 return lastHandle;
Nathan Yonkee 9:d58e77ebd769 511 }
Nathan Yonkee 9:d58e77ebd769 512
Nathan Yonkee 9:d58e77ebd769 513 /**
Nathan Yonkee 9:d58e77ebd769 514 * Get the GattClient, which can operate on this characteristic.
Nathan Yonkee 9:d58e77ebd769 515 *
Nathan Yonkee 9:d58e77ebd769 516 * @return The GattClient, which can operate on this characteristic.
Nathan Yonkee 9:d58e77ebd769 517 */
Nathan Yonkee 9:d58e77ebd769 518 GattClient* getGattClient()
Nathan Yonkee 9:d58e77ebd769 519 {
Nathan Yonkee 9:d58e77ebd769 520 return gattc;
Nathan Yonkee 9:d58e77ebd769 521 }
Nathan Yonkee 9:d58e77ebd769 522
Nathan Yonkee 9:d58e77ebd769 523 /**
Nathan Yonkee 9:d58e77ebd769 524 * Get the GattClient, which can operate on this characteristic.
Nathan Yonkee 9:d58e77ebd769 525 *
Nathan Yonkee 9:d58e77ebd769 526 * @return The GattClient, which can operate on this characteristic.
Nathan Yonkee 9:d58e77ebd769 527 */
Nathan Yonkee 9:d58e77ebd769 528 const GattClient* getGattClient() const
Nathan Yonkee 9:d58e77ebd769 529 {
Nathan Yonkee 9:d58e77ebd769 530 return gattc;
Nathan Yonkee 9:d58e77ebd769 531 }
Nathan Yonkee 9:d58e77ebd769 532
Nathan Yonkee 9:d58e77ebd769 533 /**
Nathan Yonkee 9:d58e77ebd769 534 * @brief Get the connection handle to the GattServer containing this
Nathan Yonkee 9:d58e77ebd769 535 * characteristic.
Nathan Yonkee 9:d58e77ebd769 536 *
Nathan Yonkee 9:d58e77ebd769 537 * @return Connection handle to the GattServer, which contains this
Nathan Yonkee 9:d58e77ebd769 538 * characteristic.
Nathan Yonkee 9:d58e77ebd769 539 */
Nathan Yonkee 9:d58e77ebd769 540 Gap::Handle_t getConnectionHandle() const
Nathan Yonkee 9:d58e77ebd769 541 {
Nathan Yonkee 9:d58e77ebd769 542 return connHandle;
Nathan Yonkee 9:d58e77ebd769 543 }
Nathan Yonkee 9:d58e77ebd769 544
Nathan Yonkee 9:d58e77ebd769 545 /**
Nathan Yonkee 9:d58e77ebd769 546 * "Equal to" operator for DiscoveredCharacteristic.
Nathan Yonkee 9:d58e77ebd769 547 *
Nathan Yonkee 9:d58e77ebd769 548 * @param[in] lhs The left hand side of the equality expression.
Nathan Yonkee 9:d58e77ebd769 549 * @param[in] rhs The right hand side of the equality expression.
Nathan Yonkee 9:d58e77ebd769 550 *
Nathan Yonkee 9:d58e77ebd769 551 * @return true if operands are equals and false otherwise.
Nathan Yonkee 9:d58e77ebd769 552 */
Nathan Yonkee 9:d58e77ebd769 553 friend bool operator==(
Nathan Yonkee 9:d58e77ebd769 554 const DiscoveredCharacteristic& lhs, const DiscoveredCharacteristic& rhs
Nathan Yonkee 9:d58e77ebd769 555 ) {
Nathan Yonkee 9:d58e77ebd769 556 return lhs.gattc == rhs.gattc &&
Nathan Yonkee 9:d58e77ebd769 557 lhs.uuid == rhs.uuid &&
Nathan Yonkee 9:d58e77ebd769 558 lhs.props == rhs.props &&
Nathan Yonkee 9:d58e77ebd769 559 lhs.declHandle == rhs.declHandle &&
Nathan Yonkee 9:d58e77ebd769 560 lhs.valueHandle == rhs.valueHandle &&
Nathan Yonkee 9:d58e77ebd769 561 lhs.lastHandle == rhs.lastHandle &&
Nathan Yonkee 9:d58e77ebd769 562 lhs.connHandle == rhs.connHandle;
Nathan Yonkee 9:d58e77ebd769 563 }
Nathan Yonkee 9:d58e77ebd769 564
Nathan Yonkee 9:d58e77ebd769 565 /**
Nathan Yonkee 9:d58e77ebd769 566 * "Not equal to" operator for DiscoveredCharacteristic.
Nathan Yonkee 9:d58e77ebd769 567 *
Nathan Yonkee 9:d58e77ebd769 568 * @param[in] lhs The right hand side of the expression.
Nathan Yonkee 9:d58e77ebd769 569 * @param[in] rhs The left hand side of the expression.
Nathan Yonkee 9:d58e77ebd769 570 *
Nathan Yonkee 9:d58e77ebd769 571 * @return true if operands are not equal and false otherwise.
Nathan Yonkee 9:d58e77ebd769 572 */
Nathan Yonkee 9:d58e77ebd769 573 friend bool operator !=(
Nathan Yonkee 9:d58e77ebd769 574 const DiscoveredCharacteristic& lhs, const DiscoveredCharacteristic& rhs
Nathan Yonkee 9:d58e77ebd769 575 ) {
Nathan Yonkee 9:d58e77ebd769 576 return !(lhs == rhs);
Nathan Yonkee 9:d58e77ebd769 577 }
Nathan Yonkee 9:d58e77ebd769 578
Nathan Yonkee 9:d58e77ebd769 579 public:
Nathan Yonkee 9:d58e77ebd769 580 DiscoveredCharacteristic() :
Nathan Yonkee 9:d58e77ebd769 581 gattc(NULL),
Nathan Yonkee 9:d58e77ebd769 582 uuid(UUID::ShortUUIDBytes_t(0)),
Nathan Yonkee 9:d58e77ebd769 583 props(),
Nathan Yonkee 9:d58e77ebd769 584 declHandle(GattAttribute::INVALID_HANDLE),
Nathan Yonkee 9:d58e77ebd769 585 valueHandle(GattAttribute::INVALID_HANDLE),
Nathan Yonkee 9:d58e77ebd769 586 lastHandle(GattAttribute::INVALID_HANDLE),
Nathan Yonkee 9:d58e77ebd769 587 connHandle() {
Nathan Yonkee 9:d58e77ebd769 588 }
Nathan Yonkee 9:d58e77ebd769 589
Nathan Yonkee 9:d58e77ebd769 590 protected:
Nathan Yonkee 9:d58e77ebd769 591 /**
Nathan Yonkee 9:d58e77ebd769 592 * Pointer to the underlying GattClient for this DiscoveredCharacteristic
Nathan Yonkee 9:d58e77ebd769 593 * object.
Nathan Yonkee 9:d58e77ebd769 594 */
Nathan Yonkee 9:d58e77ebd769 595 GattClient *gattc;
Nathan Yonkee 9:d58e77ebd769 596
Nathan Yonkee 9:d58e77ebd769 597 protected:
Nathan Yonkee 9:d58e77ebd769 598 /**
Nathan Yonkee 9:d58e77ebd769 599 * Discovered characteristic's UUID.
Nathan Yonkee 9:d58e77ebd769 600 */
Nathan Yonkee 9:d58e77ebd769 601 UUID uuid;
Nathan Yonkee 9:d58e77ebd769 602
Nathan Yonkee 9:d58e77ebd769 603 /**
Nathan Yonkee 9:d58e77ebd769 604 * Hold the configured properties of the discovered characteristic.
Nathan Yonkee 9:d58e77ebd769 605 *
Nathan Yonkee 9:d58e77ebd769 606 * @see Properties_t.
Nathan Yonkee 9:d58e77ebd769 607 */
Nathan Yonkee 9:d58e77ebd769 608 Properties_t props;
Nathan Yonkee 9:d58e77ebd769 609
Nathan Yonkee 9:d58e77ebd769 610 /**
Nathan Yonkee 9:d58e77ebd769 611 * Value handle of the discovered characteristic's declaration attribute.
Nathan Yonkee 9:d58e77ebd769 612 */
Nathan Yonkee 9:d58e77ebd769 613 GattAttribute::Handle_t declHandle;
Nathan Yonkee 9:d58e77ebd769 614
Nathan Yonkee 9:d58e77ebd769 615 /**
Nathan Yonkee 9:d58e77ebd769 616 * Value handle of the discovered characteristic's value attribute.
Nathan Yonkee 9:d58e77ebd769 617 */
Nathan Yonkee 9:d58e77ebd769 618 GattAttribute::Handle_t valueHandle;
Nathan Yonkee 9:d58e77ebd769 619
Nathan Yonkee 9:d58e77ebd769 620 /**
Nathan Yonkee 9:d58e77ebd769 621 * Value handle of the discovered characteristic's last attribute.
Nathan Yonkee 9:d58e77ebd769 622 */
Nathan Yonkee 9:d58e77ebd769 623 GattAttribute::Handle_t lastHandle;
Nathan Yonkee 9:d58e77ebd769 624
Nathan Yonkee 9:d58e77ebd769 625 /**
Nathan Yonkee 9:d58e77ebd769 626 * Handle of the connection where the characteristic was discovered.
Nathan Yonkee 9:d58e77ebd769 627 */
Nathan Yonkee 9:d58e77ebd769 628 Gap::Handle_t connHandle;
Nathan Yonkee 9:d58e77ebd769 629 };
Nathan Yonkee 9:d58e77ebd769 630
Nathan Yonkee 9:d58e77ebd769 631 /**
Nathan Yonkee 9:d58e77ebd769 632 * @}
Nathan Yonkee 9:d58e77ebd769 633 * @}
Nathan Yonkee 9:d58e77ebd769 634 * @}
Nathan Yonkee 9:d58e77ebd769 635 */
Nathan Yonkee 9:d58e77ebd769 636
Nathan Yonkee 9:d58e77ebd769 637 #endif /*MBED_DISCOVERED_CHARACTERISTIC_H__*/