nordic

Fork of nRF51822 by Nordic Semiconductor

Committer:
vcoubard
Date:
Mon Jan 11 10:19:04 2016 +0000
Revision:
545:9e3d053ad4ec
Parent:
389:db85a09c27ef
Child:
549:920e941cbe1e
Synchronized with git rev dc2dfb0a
Author: Vincent Coubard
Add status parameter in terminateCharacteristicDiscovery function.
Fix terminate discovery (the replacement of the discovery was done after
the call to terminate).
When searching for a running discovery, dismiss results where the
characteristic is equal to the default characteristic value
Add Discovery::operator!=
Add support of DiscoveredCharacteristic last handle in the characteristic
discovery process

Who changed what in which revision?

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