No changes

Fork of nRF51822 by Nordic Semiconductor

Committer:
vcoubard
Date:
Mon Jan 11 10:19:16 2016 +0000
Revision:
563:9c4b96f7be8d
Parent:
561:613dbbdeed27
Child:
565:cf03471a4ec4
Synchronized with git rev 7e784e0e
Author: Vincent Coubard
Merge branch 'develop' of https://github.com/ARMmbed/ble-nrf51822 into characteristicDescriptorDiscovery

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vcoubard 544:9e3d053ad4ec 1 /* mbed Microcontroller Library
vcoubard 544:9e3d053ad4ec 2 * Copyright (c) 2006-2013 ARM Limited
vcoubard 544:9e3d053ad4ec 3 *
vcoubard 544:9e3d053ad4ec 4 * Licensed under the Apache License, Version 2.0 (the "License");
vcoubard 544:9e3d053ad4ec 5 * you may not use this file except in compliance with the License.
vcoubard 544:9e3d053ad4ec 6 * You may obtain a copy of the License at
vcoubard 544:9e3d053ad4ec 7 *
vcoubard 544:9e3d053ad4ec 8 * http://www.apache.org/licenses/LICENSE-2.0
vcoubard 544:9e3d053ad4ec 9 *
vcoubard 544:9e3d053ad4ec 10 * Unless required by applicable law or agreed to in writing, software
vcoubard 544:9e3d053ad4ec 11 * distributed under the License is distributed on an "AS IS" BASIS,
vcoubard 544:9e3d053ad4ec 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vcoubard 544:9e3d053ad4ec 13 * See the License for the specific language governing permissions and
vcoubard 544:9e3d053ad4ec 14 * limitations under the License.
vcoubard 544:9e3d053ad4ec 15 */
vcoubard 544:9e3d053ad4ec 16
vcoubard 544:9e3d053ad4ec 17 #ifndef __NRF_SERVICE_DISCOVERY_H__
vcoubard 544:9e3d053ad4ec 18 #define __NRF_SERVICE_DISCOVERY_H__
vcoubard 544:9e3d053ad4ec 19
vcoubard 544:9e3d053ad4ec 20 #include "ble/ServiceDiscovery.h"
vcoubard 544:9e3d053ad4ec 21 #include "ble/DiscoveredService.h"
vcoubard 544:9e3d053ad4ec 22 #include "nRF5xDiscoveredCharacteristic.h"
vcoubard 544:9e3d053ad4ec 23
vcoubard 544:9e3d053ad4ec 24 #include "ble.h"
vcoubard 544:9e3d053ad4ec 25 #include "ble_gattc.h"
vcoubard 544:9e3d053ad4ec 26
vcoubard 544:9e3d053ad4ec 27 class nRF5xGattClient; /* forward declaration */
vcoubard 544:9e3d053ad4ec 28
vcoubard 544:9e3d053ad4ec 29 class nRF5xServiceDiscovery : public ServiceDiscovery
vcoubard 544:9e3d053ad4ec 30 {
vcoubard 544:9e3d053ad4ec 31 public:
vcoubard 544:9e3d053ad4ec 32 static const uint16_t SRV_DISC_START_HANDLE = 0x0001; /**< The start handle value used during service discovery. */
vcoubard 544:9e3d053ad4ec 33 static const uint16_t SRV_DISC_END_HANDLE = 0xFFFF; /**< The end handle value used during service discovery. */
vcoubard 544:9e3d053ad4ec 34
vcoubard 544:9e3d053ad4ec 35 public:
vcoubard 544:9e3d053ad4ec 36 static const unsigned BLE_DB_DISCOVERY_MAX_SRV = 4; /**< Maximum number of services we can retain information for after a single discovery. */
vcoubard 544:9e3d053ad4ec 37 static const unsigned BLE_DB_DISCOVERY_MAX_CHAR_PER_SRV = 4; /**< Maximum number of characteristics per service we can retain information for. */
vcoubard 544:9e3d053ad4ec 38
vcoubard 544:9e3d053ad4ec 39 public:
vcoubard 544:9e3d053ad4ec 40 nRF5xServiceDiscovery(nRF5xGattClient *gattcIn) :
vcoubard 544:9e3d053ad4ec 41 gattc(gattcIn),
vcoubard 544:9e3d053ad4ec 42 serviceIndex(0),
vcoubard 544:9e3d053ad4ec 43 numServices(0),
vcoubard 544:9e3d053ad4ec 44 numCharacteristics(0),
vcoubard 544:9e3d053ad4ec 45 state(INACTIVE),
vcoubard 544:9e3d053ad4ec 46 services(),
vcoubard 544:9e3d053ad4ec 47 characteristics(),
vcoubard 544:9e3d053ad4ec 48 serviceUUIDDiscoveryQueue(this),
vcoubard 544:9e3d053ad4ec 49 charUUIDDiscoveryQueue(this),
vcoubard 544:9e3d053ad4ec 50 onTerminationCallback(NULL) {
vcoubard 544:9e3d053ad4ec 51 /* empty */
vcoubard 544:9e3d053ad4ec 52 }
vcoubard 544:9e3d053ad4ec 53
vcoubard 544:9e3d053ad4ec 54 virtual ble_error_t launch(Gap::Handle_t connectionHandle,
vcoubard 544:9e3d053ad4ec 55 ServiceDiscovery::ServiceCallback_t sc,
vcoubard 544:9e3d053ad4ec 56 ServiceDiscovery::CharacteristicCallback_t cc,
vcoubard 544:9e3d053ad4ec 57 const UUID &matchingServiceUUIDIn,
vcoubard 544:9e3d053ad4ec 58 const UUID &matchingCharacteristicUUIDIn)
vcoubard 544:9e3d053ad4ec 59 {
vcoubard 544:9e3d053ad4ec 60 if (isActive()) {
vcoubard 544:9e3d053ad4ec 61 return BLE_ERROR_INVALID_STATE;
vcoubard 544:9e3d053ad4ec 62 }
vcoubard 544:9e3d053ad4ec 63
vcoubard 544:9e3d053ad4ec 64 serviceCallback = sc;
vcoubard 544:9e3d053ad4ec 65 characteristicCallback = cc;
vcoubard 544:9e3d053ad4ec 66 matchingServiceUUID = matchingServiceUUIDIn;
vcoubard 544:9e3d053ad4ec 67 matchingCharacteristicUUID = matchingCharacteristicUUIDIn;
vcoubard 544:9e3d053ad4ec 68
vcoubard 544:9e3d053ad4ec 69 serviceDiscoveryStarted(connectionHandle);
vcoubard 544:9e3d053ad4ec 70
vcoubard 544:9e3d053ad4ec 71 uint32_t rc;
vcoubard 544:9e3d053ad4ec 72 if ((rc = sd_ble_gattc_primary_services_discover(connectionHandle, SRV_DISC_START_HANDLE, NULL)) != NRF_SUCCESS) {
vcoubard 544:9e3d053ad4ec 73 terminate();
vcoubard 544:9e3d053ad4ec 74 switch (rc) {
vcoubard 544:9e3d053ad4ec 75 case NRF_ERROR_INVALID_PARAM:
vcoubard 544:9e3d053ad4ec 76 case BLE_ERROR_INVALID_CONN_HANDLE:
vcoubard 544:9e3d053ad4ec 77 return BLE_ERROR_INVALID_PARAM;
vcoubard 544:9e3d053ad4ec 78 case NRF_ERROR_BUSY:
vcoubard 544:9e3d053ad4ec 79 return BLE_STACK_BUSY;
vcoubard 544:9e3d053ad4ec 80 default:
vcoubard 544:9e3d053ad4ec 81 case NRF_ERROR_INVALID_STATE:
vcoubard 544:9e3d053ad4ec 82 return BLE_ERROR_INVALID_STATE;
vcoubard 544:9e3d053ad4ec 83 }
vcoubard 544:9e3d053ad4ec 84 }
vcoubard 544:9e3d053ad4ec 85
vcoubard 544:9e3d053ad4ec 86 return BLE_ERROR_NONE;
vcoubard 544:9e3d053ad4ec 87 }
vcoubard 544:9e3d053ad4ec 88
vcoubard 544:9e3d053ad4ec 89 virtual bool isActive(void) const {
vcoubard 544:9e3d053ad4ec 90 return state != INACTIVE;
vcoubard 544:9e3d053ad4ec 91 }
vcoubard 544:9e3d053ad4ec 92
vcoubard 544:9e3d053ad4ec 93 virtual void terminate(void) {
vcoubard 544:9e3d053ad4ec 94 terminateServiceDiscovery();
vcoubard 544:9e3d053ad4ec 95 }
vcoubard 544:9e3d053ad4ec 96
vcoubard 563:9c4b96f7be8d 97 void terminate(Gap::Handle_t connectionHandle) {
vcoubard 563:9c4b96f7be8d 98 if(connHandle == connectionHandle) {
vcoubard 563:9c4b96f7be8d 99 terminate();
vcoubard 563:9c4b96f7be8d 100 }
vcoubard 544:9e3d053ad4ec 101 }
vcoubard 544:9e3d053ad4ec 102
vcoubard 563:9c4b96f7be8d 103 virtual void onTermination(ServiceDiscovery::TerminationCallback_t callback) {
vcoubard 563:9c4b96f7be8d 104 onTerminationCallback = callback;
vcoubard 561:613dbbdeed27 105 }
vcoubard 561:613dbbdeed27 106
vcoubard 544:9e3d053ad4ec 107 private:
vcoubard 544:9e3d053ad4ec 108 ble_error_t launchCharacteristicDiscovery(Gap::Handle_t connectionHandle, Gap::Handle_t startHandle, Gap::Handle_t endHandle);
vcoubard 544:9e3d053ad4ec 109
vcoubard 544:9e3d053ad4ec 110 private:
vcoubard 544:9e3d053ad4ec 111 void setupDiscoveredServices(const ble_gattc_evt_prim_srvc_disc_rsp_t *response);
vcoubard 544:9e3d053ad4ec 112 void setupDiscoveredCharacteristics(const ble_gattc_evt_char_disc_rsp_t *response);
vcoubard 544:9e3d053ad4ec 113
vcoubard 544:9e3d053ad4ec 114 void triggerServiceUUIDDiscovery(void);
vcoubard 544:9e3d053ad4ec 115 void processDiscoverUUIDResponse(const ble_gattc_evt_char_val_by_uuid_read_rsp_t *response);
vcoubard 544:9e3d053ad4ec 116 void removeFirstServiceNeedingUUIDDiscovery(void);
vcoubard 544:9e3d053ad4ec 117
vcoubard 544:9e3d053ad4ec 118 void terminateServiceDiscovery(void) {
vcoubard 563:9c4b96f7be8d 119 remainingCharacteristic = nRF5xDiscoveredCharacteristic();
vcoubard 563:9c4b96f7be8d 120
vcoubard 544:9e3d053ad4ec 121 bool wasActive = isActive();
vcoubard 544:9e3d053ad4ec 122 state = INACTIVE;
vcoubard 544:9e3d053ad4ec 123
vcoubard 544:9e3d053ad4ec 124 if (wasActive && onTerminationCallback) {
vcoubard 544:9e3d053ad4ec 125 onTerminationCallback(connHandle);
vcoubard 544:9e3d053ad4ec 126 }
vcoubard 544:9e3d053ad4ec 127 }
vcoubard 544:9e3d053ad4ec 128
vcoubard 563:9c4b96f7be8d 129 void terminateCharacteristicDiscovery(ble_error_t err) {
vcoubard 544:9e3d053ad4ec 130 if (state == CHARACTERISTIC_DISCOVERY_ACTIVE) {
vcoubard 563:9c4b96f7be8d 131 if(remainingCharacteristic != nRF5xDiscoveredCharacteristic()) {
vcoubard 563:9c4b96f7be8d 132 if(err == BLE_ERROR_NONE) {
vcoubard 563:9c4b96f7be8d 133 // fullfill the last characteristic
vcoubard 563:9c4b96f7be8d 134 remainingCharacteristic.setLastHandle(services[serviceIndex].getEndHandle());
vcoubard 563:9c4b96f7be8d 135
vcoubard 563:9c4b96f7be8d 136 if ((matchingCharacteristicUUID == UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN)) ||
vcoubard 563:9c4b96f7be8d 137 ((matchingCharacteristicUUID == remainingCharacteristic.getUUID()) &&
vcoubard 563:9c4b96f7be8d 138 (matchingServiceUUID != UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN)))) {
vcoubard 563:9c4b96f7be8d 139 if (characteristicCallback) {
vcoubard 563:9c4b96f7be8d 140 characteristicCallback(&remainingCharacteristic);
vcoubard 563:9c4b96f7be8d 141 }
vcoubard 563:9c4b96f7be8d 142 }
vcoubard 563:9c4b96f7be8d 143 }
vcoubard 563:9c4b96f7be8d 144 remainingCharacteristic = nRF5xDiscoveredCharacteristic();
vcoubard 563:9c4b96f7be8d 145 }
vcoubard 563:9c4b96f7be8d 146
vcoubard 544:9e3d053ad4ec 147 state = SERVICE_DISCOVERY_ACTIVE;
vcoubard 544:9e3d053ad4ec 148 }
vcoubard 544:9e3d053ad4ec 149 serviceIndex++; /* Progress service index to keep discovery alive. */
vcoubard 544:9e3d053ad4ec 150 }
vcoubard 544:9e3d053ad4ec 151
vcoubard 544:9e3d053ad4ec 152 private:
vcoubard 544:9e3d053ad4ec 153 void resetDiscoveredServices(void) {
vcoubard 544:9e3d053ad4ec 154 numServices = 0;
vcoubard 544:9e3d053ad4ec 155 serviceIndex = 0;
vcoubard 544:9e3d053ad4ec 156 }
vcoubard 544:9e3d053ad4ec 157
vcoubard 544:9e3d053ad4ec 158 void resetDiscoveredCharacteristics(void) {
vcoubard 544:9e3d053ad4ec 159 numCharacteristics = 0;
vcoubard 544:9e3d053ad4ec 160 }
vcoubard 544:9e3d053ad4ec 161
vcoubard 544:9e3d053ad4ec 162 private:
vcoubard 544:9e3d053ad4ec 163 void serviceDiscoveryStarted(Gap::Handle_t connectionHandle) {
vcoubard 544:9e3d053ad4ec 164 connHandle = connectionHandle;
vcoubard 544:9e3d053ad4ec 165 resetDiscoveredServices();
vcoubard 544:9e3d053ad4ec 166 state = SERVICE_DISCOVERY_ACTIVE;
vcoubard 544:9e3d053ad4ec 167 }
vcoubard 544:9e3d053ad4ec 168
vcoubard 544:9e3d053ad4ec 169 private:
vcoubard 544:9e3d053ad4ec 170 void characteristicDiscoveryStarted(Gap::Handle_t connectionHandle) {
vcoubard 544:9e3d053ad4ec 171 connHandle = connectionHandle;
vcoubard 544:9e3d053ad4ec 172 resetDiscoveredCharacteristics();
vcoubard 544:9e3d053ad4ec 173 state = CHARACTERISTIC_DISCOVERY_ACTIVE;
vcoubard 544:9e3d053ad4ec 174 }
vcoubard 544:9e3d053ad4ec 175
vcoubard 544:9e3d053ad4ec 176 private:
vcoubard 544:9e3d053ad4ec 177 /**
vcoubard 544:9e3d053ad4ec 178 * A datatype to contain service-indices for which long UUIDs need to be
vcoubard 544:9e3d053ad4ec 179 * discovered using read_val_by_uuid().
vcoubard 544:9e3d053ad4ec 180 */
vcoubard 544:9e3d053ad4ec 181 class ServiceUUIDDiscoveryQueue {
vcoubard 544:9e3d053ad4ec 182 public:
vcoubard 544:9e3d053ad4ec 183 ServiceUUIDDiscoveryQueue(nRF5xServiceDiscovery *parent) :
vcoubard 544:9e3d053ad4ec 184 numIndices(0),
vcoubard 544:9e3d053ad4ec 185 serviceIndices(),
vcoubard 544:9e3d053ad4ec 186 parentDiscoveryObject(parent) {
vcoubard 544:9e3d053ad4ec 187 /* empty */
vcoubard 544:9e3d053ad4ec 188 }
vcoubard 544:9e3d053ad4ec 189
vcoubard 544:9e3d053ad4ec 190 public:
vcoubard 544:9e3d053ad4ec 191 void reset(void) {
vcoubard 544:9e3d053ad4ec 192 numIndices = 0;
vcoubard 544:9e3d053ad4ec 193 for (unsigned i = 0; i < BLE_DB_DISCOVERY_MAX_SRV; i++) {
vcoubard 544:9e3d053ad4ec 194 serviceIndices[i] = INVALID_INDEX;
vcoubard 544:9e3d053ad4ec 195 }
vcoubard 544:9e3d053ad4ec 196 }
vcoubard 544:9e3d053ad4ec 197 void enqueue(int serviceIndex) {
vcoubard 544:9e3d053ad4ec 198 serviceIndices[numIndices++] = serviceIndex;
vcoubard 544:9e3d053ad4ec 199 }
vcoubard 544:9e3d053ad4ec 200 int dequeue(void) {
vcoubard 544:9e3d053ad4ec 201 if (numIndices == 0) {
vcoubard 544:9e3d053ad4ec 202 return INVALID_INDEX;
vcoubard 544:9e3d053ad4ec 203 }
vcoubard 544:9e3d053ad4ec 204
vcoubard 544:9e3d053ad4ec 205 unsigned valueToReturn = serviceIndices[0];
vcoubard 544:9e3d053ad4ec 206 numIndices--;
vcoubard 544:9e3d053ad4ec 207 for (unsigned i = 0; i < numIndices; i++) {
vcoubard 544:9e3d053ad4ec 208 serviceIndices[i] = serviceIndices[i + 1];
vcoubard 544:9e3d053ad4ec 209 }
vcoubard 544:9e3d053ad4ec 210
vcoubard 544:9e3d053ad4ec 211 return valueToReturn;
vcoubard 544:9e3d053ad4ec 212 }
vcoubard 544:9e3d053ad4ec 213 unsigned getFirst(void) const {
vcoubard 544:9e3d053ad4ec 214 return serviceIndices[0];
vcoubard 544:9e3d053ad4ec 215 }
vcoubard 544:9e3d053ad4ec 216 size_t getCount(void) const {
vcoubard 544:9e3d053ad4ec 217 return numIndices;
vcoubard 544:9e3d053ad4ec 218 }
vcoubard 544:9e3d053ad4ec 219
vcoubard 544:9e3d053ad4ec 220 /**
vcoubard 544:9e3d053ad4ec 221 * Trigger UUID discovery for the first of the enqueued ServiceIndices.
vcoubard 544:9e3d053ad4ec 222 */
vcoubard 544:9e3d053ad4ec 223 void triggerFirst(void);
vcoubard 544:9e3d053ad4ec 224
vcoubard 544:9e3d053ad4ec 225 private:
vcoubard 544:9e3d053ad4ec 226 static const int INVALID_INDEX = -1;
vcoubard 544:9e3d053ad4ec 227
vcoubard 544:9e3d053ad4ec 228 private:
vcoubard 544:9e3d053ad4ec 229 size_t numIndices;
vcoubard 544:9e3d053ad4ec 230 int serviceIndices[BLE_DB_DISCOVERY_MAX_SRV];
vcoubard 544:9e3d053ad4ec 231
vcoubard 544:9e3d053ad4ec 232 nRF5xServiceDiscovery *parentDiscoveryObject;
vcoubard 544:9e3d053ad4ec 233 };
vcoubard 544:9e3d053ad4ec 234 friend class ServiceUUIDDiscoveryQueue;
vcoubard 544:9e3d053ad4ec 235
vcoubard 544:9e3d053ad4ec 236 /**
vcoubard 544:9e3d053ad4ec 237 * A datatype to contain characteristic-indices for which long UUIDs need to
vcoubard 544:9e3d053ad4ec 238 * be discovered using read_val_by_uuid().
vcoubard 544:9e3d053ad4ec 239 */
vcoubard 544:9e3d053ad4ec 240 class CharUUIDDiscoveryQueue {
vcoubard 544:9e3d053ad4ec 241 public:
vcoubard 544:9e3d053ad4ec 242 CharUUIDDiscoveryQueue(nRF5xServiceDiscovery *parent) :
vcoubard 544:9e3d053ad4ec 243 numIndices(0),
vcoubard 544:9e3d053ad4ec 244 charIndices(),
vcoubard 544:9e3d053ad4ec 245 parentDiscoveryObject(parent) {
vcoubard 544:9e3d053ad4ec 246 /* empty */
vcoubard 544:9e3d053ad4ec 247 }
vcoubard 544:9e3d053ad4ec 248
vcoubard 544:9e3d053ad4ec 249 public:
vcoubard 544:9e3d053ad4ec 250 void reset(void) {
vcoubard 544:9e3d053ad4ec 251 numIndices = 0;
vcoubard 544:9e3d053ad4ec 252 for (unsigned i = 0; i < BLE_DB_DISCOVERY_MAX_SRV; i++) {
vcoubard 544:9e3d053ad4ec 253 charIndices[i] = INVALID_INDEX;
vcoubard 544:9e3d053ad4ec 254 }
vcoubard 544:9e3d053ad4ec 255 }
vcoubard 544:9e3d053ad4ec 256 void enqueue(int serviceIndex) {
vcoubard 544:9e3d053ad4ec 257 charIndices[numIndices++] = serviceIndex;
vcoubard 544:9e3d053ad4ec 258 }
vcoubard 544:9e3d053ad4ec 259 int dequeue(void) {
vcoubard 544:9e3d053ad4ec 260 if (numIndices == 0) {
vcoubard 544:9e3d053ad4ec 261 return INVALID_INDEX;
vcoubard 544:9e3d053ad4ec 262 }
vcoubard 544:9e3d053ad4ec 263
vcoubard 544:9e3d053ad4ec 264 unsigned valueToReturn = charIndices[0];
vcoubard 544:9e3d053ad4ec 265 numIndices--;
vcoubard 544:9e3d053ad4ec 266 for (unsigned i = 0; i < numIndices; i++) {
vcoubard 544:9e3d053ad4ec 267 charIndices[i] = charIndices[i + 1];
vcoubard 544:9e3d053ad4ec 268 }
vcoubard 544:9e3d053ad4ec 269
vcoubard 544:9e3d053ad4ec 270 return valueToReturn;
vcoubard 544:9e3d053ad4ec 271 }
vcoubard 544:9e3d053ad4ec 272 unsigned getFirst(void) const {
vcoubard 544:9e3d053ad4ec 273 return charIndices[0];
vcoubard 544:9e3d053ad4ec 274 }
vcoubard 544:9e3d053ad4ec 275 size_t getCount(void) const {
vcoubard 544:9e3d053ad4ec 276 return numIndices;
vcoubard 544:9e3d053ad4ec 277 }
vcoubard 544:9e3d053ad4ec 278
vcoubard 544:9e3d053ad4ec 279 /**
vcoubard 544:9e3d053ad4ec 280 * Trigger UUID discovery for the first of the enqueued charIndices.
vcoubard 544:9e3d053ad4ec 281 */
vcoubard 544:9e3d053ad4ec 282 void triggerFirst(void);
vcoubard 544:9e3d053ad4ec 283
vcoubard 544:9e3d053ad4ec 284 private:
vcoubard 544:9e3d053ad4ec 285 static const int INVALID_INDEX = -1;
vcoubard 544:9e3d053ad4ec 286
vcoubard 544:9e3d053ad4ec 287 private:
vcoubard 544:9e3d053ad4ec 288 size_t numIndices;
vcoubard 544:9e3d053ad4ec 289 int charIndices[BLE_DB_DISCOVERY_MAX_CHAR_PER_SRV];
vcoubard 544:9e3d053ad4ec 290
vcoubard 544:9e3d053ad4ec 291 nRF5xServiceDiscovery *parentDiscoveryObject;
vcoubard 544:9e3d053ad4ec 292 };
vcoubard 544:9e3d053ad4ec 293 friend class CharUUIDDiscoveryQueue;
vcoubard 544:9e3d053ad4ec 294
vcoubard 544:9e3d053ad4ec 295 private:
vcoubard 544:9e3d053ad4ec 296 friend void bleGattcEventHandler(const ble_evt_t *p_ble_evt);
vcoubard 544:9e3d053ad4ec 297 void progressCharacteristicDiscovery(void);
vcoubard 544:9e3d053ad4ec 298 void progressServiceDiscovery(void);
vcoubard 544:9e3d053ad4ec 299
vcoubard 544:9e3d053ad4ec 300 private:
vcoubard 544:9e3d053ad4ec 301 nRF5xGattClient *gattc;
vcoubard 544:9e3d053ad4ec 302
vcoubard 544:9e3d053ad4ec 303 private:
vcoubard 544:9e3d053ad4ec 304 uint8_t serviceIndex; /**< Index of the current service being discovered. This is intended for internal use during service discovery.*/
vcoubard 544:9e3d053ad4ec 305 uint8_t numServices; /**< Number of services at the peers GATT database.*/
vcoubard 544:9e3d053ad4ec 306 uint8_t numCharacteristics; /**< Number of characteristics within the service.*/
vcoubard 544:9e3d053ad4ec 307
vcoubard 544:9e3d053ad4ec 308 enum State_t {
vcoubard 544:9e3d053ad4ec 309 INACTIVE,
vcoubard 544:9e3d053ad4ec 310 SERVICE_DISCOVERY_ACTIVE,
vcoubard 544:9e3d053ad4ec 311 CHARACTERISTIC_DISCOVERY_ACTIVE,
vcoubard 544:9e3d053ad4ec 312 DISCOVER_SERVICE_UUIDS,
vcoubard 544:9e3d053ad4ec 313 DISCOVER_CHARACTERISTIC_UUIDS,
vcoubard 544:9e3d053ad4ec 314 } state;
vcoubard 544:9e3d053ad4ec 315
vcoubard 544:9e3d053ad4ec 316 DiscoveredService services[BLE_DB_DISCOVERY_MAX_SRV]; /**< Information related to the current service being discovered.
vcoubard 544:9e3d053ad4ec 317 * This is intended for internal use during service discovery. */
vcoubard 544:9e3d053ad4ec 318 nRF5xDiscoveredCharacteristic characteristics[BLE_DB_DISCOVERY_MAX_CHAR_PER_SRV];
vcoubard 544:9e3d053ad4ec 319
vcoubard 544:9e3d053ad4ec 320 ServiceUUIDDiscoveryQueue serviceUUIDDiscoveryQueue;
vcoubard 544:9e3d053ad4ec 321 CharUUIDDiscoveryQueue charUUIDDiscoveryQueue;
vcoubard 544:9e3d053ad4ec 322
vcoubard 544:9e3d053ad4ec 323 TerminationCallback_t onTerminationCallback;
vcoubard 563:9c4b96f7be8d 324
vcoubard 563:9c4b96f7be8d 325 nRF5xDiscoveredCharacteristic remainingCharacteristic;
vcoubard 544:9e3d053ad4ec 326 };
vcoubard 544:9e3d053ad4ec 327
rgrover1 388:db85a09c27ef 328 #endif /*__NRF_SERVICE_DISCOVERY_H__*/