mbed os with nrf51 internal bandgap enabled to read battery level

Dependents:   BLE_file_test BLE_Blink ExternalEncoder

Committer:
elessair
Date:
Sun Oct 23 15:10:02 2016 +0000
Revision:
0:f269e3021894
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elessair 0:f269e3021894 1 /* mbed Microcontroller Library
elessair 0:f269e3021894 2 * Copyright (c) 2006-2013 ARM Limited
elessair 0:f269e3021894 3 *
elessair 0:f269e3021894 4 * Licensed under the Apache License, Version 2.0 (the "License");
elessair 0:f269e3021894 5 * you may not use this file except in compliance with the License.
elessair 0:f269e3021894 6 * You may obtain a copy of the License at
elessair 0:f269e3021894 7 *
elessair 0:f269e3021894 8 * http://www.apache.org/licenses/LICENSE-2.0
elessair 0:f269e3021894 9 *
elessair 0:f269e3021894 10 * Unless required by applicable law or agreed to in writing, software
elessair 0:f269e3021894 11 * distributed under the License is distributed on an "AS IS" BASIS,
elessair 0:f269e3021894 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
elessair 0:f269e3021894 13 * See the License for the specific language governing permissions and
elessair 0:f269e3021894 14 * limitations under the License.
elessair 0:f269e3021894 15 */
elessair 0:f269e3021894 16
elessair 0:f269e3021894 17 #ifndef __DISCOVERED_CHARACTERISTIC_H__
elessair 0:f269e3021894 18 #define __DISCOVERED_CHARACTERISTIC_H__
elessair 0:f269e3021894 19
elessair 0:f269e3021894 20 #include "UUID.h"
elessair 0:f269e3021894 21 #include "Gap.h"
elessair 0:f269e3021894 22 #include "GattAttribute.h"
elessair 0:f269e3021894 23 #include "GattClient.h"
elessair 0:f269e3021894 24 #include "CharacteristicDescriptorDiscovery.h"
elessair 0:f269e3021894 25 #include "ble/DiscoveredCharacteristicDescriptor.h"
elessair 0:f269e3021894 26
elessair 0:f269e3021894 27 /**
elessair 0:f269e3021894 28 * @brief Representation of a characteristic discovered during a GattClient
elessair 0:f269e3021894 29 * discovery procedure (see GattClient::launchServiceDiscovery ).
elessair 0:f269e3021894 30 *
elessair 0:f269e3021894 31 * @details Provide detailed informations about a discovered characteristic like:
elessair 0:f269e3021894 32 * - Its UUID (see getUUID()).
elessair 0:f269e3021894 33 * - The most important handles of the characteristic definition
elessair 0:f269e3021894 34 * (see getDeclHandle(), getValueHandle(), getLastHandle())
elessair 0:f269e3021894 35 * - Its properties (see getProperties()).
elessair 0:f269e3021894 36 * This class also provide functions to operate on the characteristic:
elessair 0:f269e3021894 37 * - Read the characteristic value (see read())
elessair 0:f269e3021894 38 * - Writing a characteristic value (see write() or writeWoResponse())
elessair 0:f269e3021894 39 * - Discover descriptors inside the characteristic definition. These descriptors
elessair 0:f269e3021894 40 * extends the characteristic. More information about descriptor usage is
elessair 0:f269e3021894 41 * available in DiscoveredCharacteristicDescriptor class.
elessair 0:f269e3021894 42 */
elessair 0:f269e3021894 43 class DiscoveredCharacteristic {
elessair 0:f269e3021894 44 public:
elessair 0:f269e3021894 45 /**
elessair 0:f269e3021894 46 * Structure that encapsulates the properties of a discovered
elessair 0:f269e3021894 47 * characteristic.
elessair 0:f269e3021894 48 */
elessair 0:f269e3021894 49 struct Properties_t {
elessair 0:f269e3021894 50 uint8_t _broadcast :1; /**< Broadcasting the value permitted. */
elessair 0:f269e3021894 51 uint8_t _read :1; /**< Reading the value permitted. */
elessair 0:f269e3021894 52 uint8_t _writeWoResp :1; /**< Writing the value with Write Command permitted. */
elessair 0:f269e3021894 53 uint8_t _write :1; /**< Writing the value with Write Request permitted. */
elessair 0:f269e3021894 54 uint8_t _notify :1; /**< Notifications of the value permitted. */
elessair 0:f269e3021894 55 uint8_t _indicate :1; /**< Indications of the value permitted. */
elessair 0:f269e3021894 56 uint8_t _authSignedWrite :1; /**< Writing the value with Signed Write Command permitted. */
elessair 0:f269e3021894 57
elessair 0:f269e3021894 58 public:
elessair 0:f269e3021894 59 /**
elessair 0:f269e3021894 60 * @brief Check if broadcasting is permitted.
elessair 0:f269e3021894 61 *
elessair 0:f269e3021894 62 * @return true if broadcasting the value is permitted, and false
elessair 0:f269e3021894 63 * otherwise.
elessair 0:f269e3021894 64 */
elessair 0:f269e3021894 65 bool broadcast(void) const {
elessair 0:f269e3021894 66 return _broadcast;
elessair 0:f269e3021894 67 }
elessair 0:f269e3021894 68
elessair 0:f269e3021894 69 /**
elessair 0:f269e3021894 70 * @brief Check reading is permitted.
elessair 0:f269e3021894 71 *
elessair 0:f269e3021894 72 * @return true if reading the value is permitted, and false
elessair 0:f269e3021894 73 * otherwise.
elessair 0:f269e3021894 74 */
elessair 0:f269e3021894 75 bool read(void) const {
elessair 0:f269e3021894 76 return _read;
elessair 0:f269e3021894 77 }
elessair 0:f269e3021894 78
elessair 0:f269e3021894 79 /**
elessair 0:f269e3021894 80 * @brief Check if writing with Write Command is permitted.
elessair 0:f269e3021894 81 *
elessair 0:f269e3021894 82 * @return true if writing the value with Write Command is permitted,
elessair 0:f269e3021894 83 * false otherwise.
elessair 0:f269e3021894 84 */
elessair 0:f269e3021894 85 bool writeWoResp(void) const {
elessair 0:f269e3021894 86 return _writeWoResp;
elessair 0:f269e3021894 87 }
elessair 0:f269e3021894 88
elessair 0:f269e3021894 89 /**
elessair 0:f269e3021894 90 * @brief Check if writing with Write Request is permitted.
elessair 0:f269e3021894 91 *
elessair 0:f269e3021894 92 * @return true if writing the value with Write Request is permitted,
elessair 0:f269e3021894 93 * false otherwise.
elessair 0:f269e3021894 94 */
elessair 0:f269e3021894 95 bool write(void) const {
elessair 0:f269e3021894 96 return _write;
elessair 0:f269e3021894 97 }
elessair 0:f269e3021894 98
elessair 0:f269e3021894 99 /**
elessair 0:f269e3021894 100 * @brief Check notifications are permitted.
elessair 0:f269e3021894 101 *
elessair 0:f269e3021894 102 * @return true if notifications of the value are permitted, false
elessair 0:f269e3021894 103 * otherwise.
elessair 0:f269e3021894 104 */
elessair 0:f269e3021894 105 bool notify(void) const {
elessair 0:f269e3021894 106 return _notify;
elessair 0:f269e3021894 107 }
elessair 0:f269e3021894 108
elessair 0:f269e3021894 109 /**
elessair 0:f269e3021894 110 * @brief Check if indications are permitted.
elessair 0:f269e3021894 111 *
elessair 0:f269e3021894 112 * @return true if indications of the value are permitted, false
elessair 0:f269e3021894 113 * otherwise.
elessair 0:f269e3021894 114 */
elessair 0:f269e3021894 115 bool indicate(void) const {
elessair 0:f269e3021894 116 return _indicate;
elessair 0:f269e3021894 117 }
elessair 0:f269e3021894 118
elessair 0:f269e3021894 119 /**
elessair 0:f269e3021894 120 * @brief Check if writing with Signed Write Command is permitted.
elessair 0:f269e3021894 121 *
elessair 0:f269e3021894 122 * @return true if writing the value with Signed Write Command is
elessair 0:f269e3021894 123 * permitted, false otherwise.
elessair 0:f269e3021894 124 */
elessair 0:f269e3021894 125 bool authSignedWrite(void) const {
elessair 0:f269e3021894 126 return _authSignedWrite;
elessair 0:f269e3021894 127 }
elessair 0:f269e3021894 128
elessair 0:f269e3021894 129 /**
elessair 0:f269e3021894 130 * @brief "Equal to" operator for DiscoveredCharacteristic::Properties_t
elessair 0:f269e3021894 131 *
elessair 0:f269e3021894 132 * @param[in] lhs The left hand side of the equality expression
elessair 0:f269e3021894 133 * @param[in] rhs The right hand side of the equality expression
elessair 0:f269e3021894 134 *
elessair 0:f269e3021894 135 * @return true if operands are equals, false otherwise.
elessair 0:f269e3021894 136 */
elessair 0:f269e3021894 137 friend bool operator==(Properties_t lhs, Properties_t rhs) {
elessair 0:f269e3021894 138 return lhs._broadcast == rhs._broadcast &&
elessair 0:f269e3021894 139 lhs._read == rhs._read &&
elessair 0:f269e3021894 140 lhs._writeWoResp == rhs._writeWoResp &&
elessair 0:f269e3021894 141 lhs._write == rhs._write &&
elessair 0:f269e3021894 142 lhs._notify == rhs._notify &&
elessair 0:f269e3021894 143 lhs._indicate == rhs._indicate &&
elessair 0:f269e3021894 144 lhs._authSignedWrite == rhs._authSignedWrite;
elessair 0:f269e3021894 145 }
elessair 0:f269e3021894 146
elessair 0:f269e3021894 147 /**
elessair 0:f269e3021894 148 * @brief "Not equal to" operator for DiscoveredCharacteristic::Properties_t
elessair 0:f269e3021894 149 *
elessair 0:f269e3021894 150 * @param lhs The right hand side of the expression
elessair 0:f269e3021894 151 * @param rhs The left hand side of the expression
elessair 0:f269e3021894 152 *
elessair 0:f269e3021894 153 * @return true if operands are not equals, false otherwise.
elessair 0:f269e3021894 154 */
elessair 0:f269e3021894 155 friend bool operator!=(Properties_t lhs, Properties_t rhs) {
elessair 0:f269e3021894 156 return !(lhs == rhs);
elessair 0:f269e3021894 157 }
elessair 0:f269e3021894 158
elessair 0:f269e3021894 159 private:
elessair 0:f269e3021894 160 operator uint8_t() const; /* Disallow implicit conversion into an integer. */
elessair 0:f269e3021894 161 operator unsigned() const; /* Disallow implicit conversion into an integer. */
elessair 0:f269e3021894 162 };
elessair 0:f269e3021894 163
elessair 0:f269e3021894 164 /**
elessair 0:f269e3021894 165 * Initiate (or continue) a read for the value attribute, optionally at a
elessair 0:f269e3021894 166 * given offset. If the characteristic or descriptor to be read is longer
elessair 0:f269e3021894 167 * than ATT_MTU - 1, this function must be called multiple times with
elessair 0:f269e3021894 168 * appropriate offset to read the complete value.
elessair 0:f269e3021894 169 *
elessair 0:f269e3021894 170 * @param[in] offset
elessair 0:f269e3021894 171 * The position - in the characteristic value bytes stream - where
elessair 0:f269e3021894 172 * the read operation begin.
elessair 0:f269e3021894 173 *
elessair 0:f269e3021894 174 * @return BLE_ERROR_NONE if a read has been initiated, or
elessair 0:f269e3021894 175 * BLE_ERROR_INVALID_STATE if some internal state about the connection is invalid, or
elessair 0:f269e3021894 176 * BLE_STACK_BUSY if some client procedure is already in progress, or
elessair 0:f269e3021894 177 * BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's properties.
elessair 0:f269e3021894 178 */
elessair 0:f269e3021894 179 ble_error_t read(uint16_t offset = 0) const;
elessair 0:f269e3021894 180
elessair 0:f269e3021894 181 /**
elessair 0:f269e3021894 182 * @brief Same as #read(uint16_t) const but allow the user to register a callback
elessair 0:f269e3021894 183 * which will be fired once the read is done.
elessair 0:f269e3021894 184 *
elessair 0:f269e3021894 185 * @param[in] offset
elessair 0:f269e3021894 186 * The position - in the characteristic value bytes stream - where
elessair 0:f269e3021894 187 * the read operation begin.
elessair 0:f269e3021894 188 * @param[in] onRead
elessair 0:f269e3021894 189 * Continuation of the read operation
elessair 0:f269e3021894 190 */
elessair 0:f269e3021894 191 ble_error_t read(uint16_t offset, const GattClient::ReadCallback_t& onRead) const;
elessair 0:f269e3021894 192
elessair 0:f269e3021894 193 /**
elessair 0:f269e3021894 194 * Perform a write without response procedure.
elessair 0:f269e3021894 195 *
elessair 0:f269e3021894 196 * @param[in] length
elessair 0:f269e3021894 197 * The amount of data being written.
elessair 0:f269e3021894 198 * @param[in] value
elessair 0:f269e3021894 199 * The bytes being written.
elessair 0:f269e3021894 200 *
elessair 0:f269e3021894 201 * @note It is important to note that a write without response will generate
elessair 0:f269e3021894 202 * an onDataSent() callback when the packet has been transmitted. There
elessair 0:f269e3021894 203 * will be a BLE-stack specific limit to the number of pending
elessair 0:f269e3021894 204 * writeWoResponse operations; the user may want to use the onDataSent()
elessair 0:f269e3021894 205 * callback for flow-control.
elessair 0:f269e3021894 206 *
elessair 0:f269e3021894 207 * @retval BLE_ERROR_NONE Successfully started the Write procedure, or
elessair 0:f269e3021894 208 * BLE_ERROR_INVALID_STATE if some internal state about the connection is invalid, or
elessair 0:f269e3021894 209 * BLE_STACK_BUSY if some client procedure is already in progress, or
elessair 0:f269e3021894 210 * BLE_ERROR_NO_MEM if there are no available buffers left to process the request, or
elessair 0:f269e3021894 211 * BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's properties.
elessair 0:f269e3021894 212 */
elessair 0:f269e3021894 213 ble_error_t writeWoResponse(uint16_t length, const uint8_t *value) const;
elessair 0:f269e3021894 214
elessair 0:f269e3021894 215 /**
elessair 0:f269e3021894 216 * Initiate a GATT Characteristic Descriptor Discovery procedure for descriptors within this characteristic.
elessair 0:f269e3021894 217 *
elessair 0:f269e3021894 218 * @param[in] onDescriptorDiscovered This callback will be called every time a descriptor is discovered
elessair 0:f269e3021894 219 * @param[in] onTermination This callback will be called when the discovery process is over.
elessair 0:f269e3021894 220 *
elessair 0:f269e3021894 221 * @return BLE_ERROR_NONE if descriptor discovery is launched successfully; else an appropriate error.
elessair 0:f269e3021894 222 */
elessair 0:f269e3021894 223 ble_error_t discoverDescriptors(const CharacteristicDescriptorDiscovery::DiscoveryCallback_t& onDescriptorDiscovered,
elessair 0:f269e3021894 224 const CharacteristicDescriptorDiscovery::TerminationCallback_t& onTermination) const;
elessair 0:f269e3021894 225
elessair 0:f269e3021894 226 /**
elessair 0:f269e3021894 227 * Perform a write procedure.
elessair 0:f269e3021894 228 *
elessair 0:f269e3021894 229 * @param[in] length
elessair 0:f269e3021894 230 * The amount of data being written.
elessair 0:f269e3021894 231 * @param[in] value
elessair 0:f269e3021894 232 * The bytes being written.
elessair 0:f269e3021894 233 *
elessair 0:f269e3021894 234 * @note It is important to note that a write will generate
elessair 0:f269e3021894 235 * an onDataWritten() callback when the peer acknowledges the request.
elessair 0:f269e3021894 236 *
elessair 0:f269e3021894 237 * @retval BLE_ERROR_NONE Successfully started the Write procedure, or
elessair 0:f269e3021894 238 * BLE_ERROR_INVALID_STATE if some internal state about the connection is invalid, or
elessair 0:f269e3021894 239 * BLE_STACK_BUSY if some client procedure is already in progress, or
elessair 0:f269e3021894 240 * BLE_ERROR_NO_MEM if there are no available buffers left to process the request, or
elessair 0:f269e3021894 241 * BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's properties.
elessair 0:f269e3021894 242 */
elessair 0:f269e3021894 243 ble_error_t write(uint16_t length, const uint8_t *value) const;
elessair 0:f269e3021894 244
elessair 0:f269e3021894 245 /**
elessair 0:f269e3021894 246 * Same as write(uint16_t, const uint8_t *) const but register a callback
elessair 0:f269e3021894 247 * which will be called once the data has been written.
elessair 0:f269e3021894 248 *
elessair 0:f269e3021894 249 * @param[in] length
elessair 0:f269e3021894 250 * The amount of bytes to write.
elessair 0:f269e3021894 251 * @param[in] value
elessair 0:f269e3021894 252 * The bytes to write.
elessair 0:f269e3021894 253 * @param[in] onWrite
elessair 0:f269e3021894 254 * Continuation callback for the write operation
elessair 0:f269e3021894 255 *
elessair 0:f269e3021894 256 * @retval BLE_ERROR_NONE Successfully started the Write procedure, or
elessair 0:f269e3021894 257 * BLE_ERROR_INVALID_STATE if some internal state about the connection is invalid, or
elessair 0:f269e3021894 258 * BLE_STACK_BUSY if some client procedure is already in progress, or
elessair 0:f269e3021894 259 * BLE_ERROR_NO_MEM if there are no available buffers left to process the request, or
elessair 0:f269e3021894 260 * BLE_ERROR_OPERATION_NOT_PERMITTED due to the characteristic's properties.
elessair 0:f269e3021894 261 */
elessair 0:f269e3021894 262 ble_error_t write(uint16_t length, const uint8_t *value, const GattClient::WriteCallback_t& onWrite) const;
elessair 0:f269e3021894 263
elessair 0:f269e3021894 264 void setupLongUUID(UUID::LongUUIDBytes_t longUUID, UUID::ByteOrder_t order = UUID::MSB) {
elessair 0:f269e3021894 265 uuid.setupLong(longUUID, order);
elessair 0:f269e3021894 266 }
elessair 0:f269e3021894 267
elessair 0:f269e3021894 268 public:
elessair 0:f269e3021894 269 /**
elessair 0:f269e3021894 270 * @brief Get the UUID of the discovered characteristic
elessair 0:f269e3021894 271 * @return the UUID of this characteristic
elessair 0:f269e3021894 272 */
elessair 0:f269e3021894 273 const UUID& getUUID(void) const {
elessair 0:f269e3021894 274 return uuid;
elessair 0:f269e3021894 275 }
elessair 0:f269e3021894 276
elessair 0:f269e3021894 277 /**
elessair 0:f269e3021894 278 * @brief Get the properties of this characteristic
elessair 0:f269e3021894 279 * @return the set of properties of this characteristic
elessair 0:f269e3021894 280 */
elessair 0:f269e3021894 281 const Properties_t& getProperties(void) const {
elessair 0:f269e3021894 282 return props;
elessair 0:f269e3021894 283 }
elessair 0:f269e3021894 284
elessair 0:f269e3021894 285 /**
elessair 0:f269e3021894 286 * @brief Get the declaration handle of this characteristic.
elessair 0:f269e3021894 287 * @details The declaration handle is the first handle of a characteristic
elessair 0:f269e3021894 288 * definition. The value accessible at this handle contains the following
elessair 0:f269e3021894 289 * informations:
elessair 0:f269e3021894 290 * - The characteristics properties (see Properties_t). This value can
elessair 0:f269e3021894 291 * be accessed by using #getProperties .
elessair 0:f269e3021894 292 * - The characteristic value attribute handle. This field can be accessed
elessair 0:f269e3021894 293 * by using #getValueHandle .
elessair 0:f269e3021894 294 * - The characteristic UUID, this value can be accessed by using the
elessair 0:f269e3021894 295 * function #getUUID .
elessair 0:f269e3021894 296 * @return the declaration handle of this characteristic.
elessair 0:f269e3021894 297 */
elessair 0:f269e3021894 298 GattAttribute::Handle_t getDeclHandle(void) const {
elessair 0:f269e3021894 299 return declHandle;
elessair 0:f269e3021894 300 }
elessair 0:f269e3021894 301
elessair 0:f269e3021894 302 /**
elessair 0:f269e3021894 303 * @brief Return the handle used to access the value of this characteristic.
elessair 0:f269e3021894 304 * @details This handle is the one provided in the characteristic declaration
elessair 0:f269e3021894 305 * value. Usually, it is equal to #getDeclHandle() + 1. But it is not always
elessair 0:f269e3021894 306 * the case. Anyway, users are allowed to use #getDeclHandle() + 1 to access
elessair 0:f269e3021894 307 * the value of a characteristic.
elessair 0:f269e3021894 308 * @return The handle to access the value of this characteristic.
elessair 0:f269e3021894 309 */
elessair 0:f269e3021894 310 GattAttribute::Handle_t getValueHandle(void) const {
elessair 0:f269e3021894 311 return valueHandle;
elessair 0:f269e3021894 312 }
elessair 0:f269e3021894 313
elessair 0:f269e3021894 314 /**
elessair 0:f269e3021894 315 * @brief Return the last handle of the characteristic definition.
elessair 0:f269e3021894 316 * @details A Characteristic definition can contain a lot of handles:
elessair 0:f269e3021894 317 * - one for the declaration (see #getDeclHandle)
elessair 0:f269e3021894 318 * - one for the value (see #getValueHandle)
elessair 0:f269e3021894 319 * - zero of more for the characteristic descriptors.
elessair 0:f269e3021894 320 * This handle is the last handle of the characteristic definition.
elessair 0:f269e3021894 321 * @return The last handle of this characteristic definition.
elessair 0:f269e3021894 322 */
elessair 0:f269e3021894 323 GattAttribute::Handle_t getLastHandle(void) const {
elessair 0:f269e3021894 324 return lastHandle;
elessair 0:f269e3021894 325 }
elessair 0:f269e3021894 326
elessair 0:f269e3021894 327 /**
elessair 0:f269e3021894 328 * @brief Return the GattClient which can operate on this characteristic.
elessair 0:f269e3021894 329 * @return The GattClient which can operate on this characteristic.
elessair 0:f269e3021894 330 */
elessair 0:f269e3021894 331 GattClient* getGattClient() {
elessair 0:f269e3021894 332 return gattc;
elessair 0:f269e3021894 333 }
elessair 0:f269e3021894 334
elessair 0:f269e3021894 335 /**
elessair 0:f269e3021894 336 * @brief Return the GattClient which can operate on this characteristic.
elessair 0:f269e3021894 337 * @return The GattClient which can operate on this characteristic.
elessair 0:f269e3021894 338 */
elessair 0:f269e3021894 339 const GattClient* getGattClient() const {
elessair 0:f269e3021894 340 return gattc;
elessair 0:f269e3021894 341 }
elessair 0:f269e3021894 342
elessair 0:f269e3021894 343 /**
elessair 0:f269e3021894 344 * @brief Return the connection handle to the GattServer which contain
elessair 0:f269e3021894 345 * this characteristic.
elessair 0:f269e3021894 346 * @return the connection handle to the GattServer which contain
elessair 0:f269e3021894 347 * this characteristic.
elessair 0:f269e3021894 348 */
elessair 0:f269e3021894 349 Gap::Handle_t getConnectionHandle() const {
elessair 0:f269e3021894 350 return connHandle;
elessair 0:f269e3021894 351 }
elessair 0:f269e3021894 352
elessair 0:f269e3021894 353 /**
elessair 0:f269e3021894 354 * @brief "Equal to" operator for DiscoveredCharacteristic
elessair 0:f269e3021894 355 *
elessair 0:f269e3021894 356 * @param[in] lhs
elessair 0:f269e3021894 357 * The left hand side of the equality expression
elessair 0:f269e3021894 358 * @param[in] rhs
elessair 0:f269e3021894 359 * The right hand side of the equality expression
elessair 0:f269e3021894 360 *
elessair 0:f269e3021894 361 * @return true if operands are equals, false otherwise.
elessair 0:f269e3021894 362 */
elessair 0:f269e3021894 363 friend bool operator==(const DiscoveredCharacteristic& lhs, const DiscoveredCharacteristic& rhs) {
elessair 0:f269e3021894 364 return lhs.gattc == rhs.gattc &&
elessair 0:f269e3021894 365 lhs.uuid == rhs.uuid &&
elessair 0:f269e3021894 366 lhs.props == rhs.props &&
elessair 0:f269e3021894 367 lhs.declHandle == rhs.declHandle &&
elessair 0:f269e3021894 368 lhs.valueHandle == rhs.valueHandle &&
elessair 0:f269e3021894 369 lhs.lastHandle == rhs.lastHandle &&
elessair 0:f269e3021894 370 lhs.connHandle == rhs.connHandle;
elessair 0:f269e3021894 371 }
elessair 0:f269e3021894 372
elessair 0:f269e3021894 373 /**
elessair 0:f269e3021894 374 * @brief "Not equal to" operator for DiscoveredCharacteristic
elessair 0:f269e3021894 375 *
elessair 0:f269e3021894 376 * @param[in] lhs
elessair 0:f269e3021894 377 * The right hand side of the expression
elessair 0:f269e3021894 378 * @param[in] rhs
elessair 0:f269e3021894 379 * The left hand side of the expression
elessair 0:f269e3021894 380 *
elessair 0:f269e3021894 381 * @return true if operands are not equal, false otherwise.
elessair 0:f269e3021894 382 */
elessair 0:f269e3021894 383 friend bool operator !=(const DiscoveredCharacteristic& lhs, const DiscoveredCharacteristic& rhs) {
elessair 0:f269e3021894 384 return !(lhs == rhs);
elessair 0:f269e3021894 385 }
elessair 0:f269e3021894 386
elessair 0:f269e3021894 387 public:
elessair 0:f269e3021894 388 DiscoveredCharacteristic() : gattc(NULL),
elessair 0:f269e3021894 389 uuid(UUID::ShortUUIDBytes_t(0)),
elessair 0:f269e3021894 390 props(),
elessair 0:f269e3021894 391 declHandle(GattAttribute::INVALID_HANDLE),
elessair 0:f269e3021894 392 valueHandle(GattAttribute::INVALID_HANDLE),
elessair 0:f269e3021894 393 lastHandle(GattAttribute::INVALID_HANDLE),
elessair 0:f269e3021894 394 connHandle() {
elessair 0:f269e3021894 395 /* empty */
elessair 0:f269e3021894 396 }
elessair 0:f269e3021894 397
elessair 0:f269e3021894 398 protected:
elessair 0:f269e3021894 399 /**
elessair 0:f269e3021894 400 * Pointer to the underlying GattClient for this DiscoveredCharacteristic object.
elessair 0:f269e3021894 401 */
elessair 0:f269e3021894 402 GattClient *gattc;
elessair 0:f269e3021894 403
elessair 0:f269e3021894 404 protected:
elessair 0:f269e3021894 405 /**
elessair 0:f269e3021894 406 * Discovered characteristic's UUID.
elessair 0:f269e3021894 407 */
elessair 0:f269e3021894 408 UUID uuid;
elessair 0:f269e3021894 409 /**
elessair 0:f269e3021894 410 * Hold the configured properties of the discovered characteristic.
elessair 0:f269e3021894 411 * For more information refer to Properties_t.
elessair 0:f269e3021894 412 */
elessair 0:f269e3021894 413 Properties_t props;
elessair 0:f269e3021894 414 /**
elessair 0:f269e3021894 415 * Value handle of the discovered characteristic's declaration attribute.
elessair 0:f269e3021894 416 */
elessair 0:f269e3021894 417 GattAttribute::Handle_t declHandle;
elessair 0:f269e3021894 418 /**
elessair 0:f269e3021894 419 * Value handle of the discovered characteristic's value attribute.
elessair 0:f269e3021894 420 */
elessair 0:f269e3021894 421 GattAttribute::Handle_t valueHandle;
elessair 0:f269e3021894 422 /**
elessair 0:f269e3021894 423 * Value handle of the discovered characteristic's last attribute.
elessair 0:f269e3021894 424 */
elessair 0:f269e3021894 425 GattAttribute::Handle_t lastHandle;
elessair 0:f269e3021894 426
elessair 0:f269e3021894 427 /**
elessair 0:f269e3021894 428 * Handle for the connection where the characteristic was discovered.
elessair 0:f269e3021894 429 */
elessair 0:f269e3021894 430 Gap::Handle_t connHandle;
elessair 0:f269e3021894 431 };
elessair 0:f269e3021894 432
elessair 0:f269e3021894 433 #endif /*__DISCOVERED_CHARACTERISTIC_H__*/