None

Dependencies:   nrf51-sdk

Dependents:   microbit-dal

Fork of nRF51822 by Lancaster University

Committer:
LancasterUniversity
Date:
Wed Apr 06 22:38:43 2016 +0100
Revision:
615:65ea2acfc6a2
Parent:
592:f9574772b816
Child:
616:a8f9b022d8fd
Synchronized with git rev 60a7c0c0
Author: Rohit Grover
bring in the latest changes for BLE::init() where we allow <object, member> tuples for init callback.

Who changed what in which revision?

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