nordic
Fork of nRF51822 by
Diff: source/nRF5xServiceDiscovery.h
- Revision:
- 566:cf03471a4ec4
- Parent:
- 564:9c4b96f7be8d
- Child:
- 567:e425ad9e5d6e
--- a/source/nRF5xServiceDiscovery.h Mon Jan 11 10:19:17 2016 +0000 +++ b/source/nRF5xServiceDiscovery.h Mon Jan 11 10:19:18 2016 +0000 @@ -41,6 +41,7 @@ gattc(gattcIn), serviceIndex(0), numServices(0), + characteristicIndex(0), numCharacteristics(0), state(INACTIVE), services(), @@ -94,14 +95,36 @@ terminateServiceDiscovery(); } - void terminate(Gap::Handle_t connectionHandle) { - if(connHandle == connectionHandle) { - terminate(); - } + virtual void onTermination(ServiceDiscovery::TerminationCallback_t callback) { + onTerminationCallback = callback; } - virtual void onTermination(ServiceDiscovery::TerminationCallback_t callback) { - onTerminationCallback = callback; + /** + * @brief Clear nRF5xServiceDiscovery's state. + * + * @return + * BLE_ERROR_NONE if successful. + */ + virtual ble_error_t reset(void) { + /* Clear all state that is from the parent, including private members */ + if (ServiceDiscovery::reset() != BLE_ERROR_NONE) { + return BLE_ERROR_INVALID_STATE; + } + + /* Clear derived class members */ + serviceIndex = 0; + numServices = 0; + characteristicIndex = 0; + numCharacteristics = 0; + + state = INACTIVE; + + serviceUUIDDiscoveryQueue.reset(); + charUUIDDiscoveryQueue.reset(); + + onTerminationCallback = NULL; + + return BLE_ERROR_NONE; } private: @@ -116,8 +139,6 @@ void removeFirstServiceNeedingUUIDDiscovery(void); void terminateServiceDiscovery(void) { - remainingCharacteristic = nRF5xDiscoveredCharacteristic(); - bool wasActive = isActive(); state = INACTIVE; @@ -126,24 +147,8 @@ } } - void terminateCharacteristicDiscovery(ble_error_t err) { + void terminateCharacteristicDiscovery(void) { if (state == CHARACTERISTIC_DISCOVERY_ACTIVE) { - if(remainingCharacteristic != nRF5xDiscoveredCharacteristic()) { - if(err == BLE_ERROR_NONE) { - // fullfill the last characteristic - remainingCharacteristic.setLastHandle(services[serviceIndex].getEndHandle()); - - if ((matchingCharacteristicUUID == UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN)) || - ((matchingCharacteristicUUID == remainingCharacteristic.getUUID()) && - (matchingServiceUUID != UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN)))) { - if (characteristicCallback) { - characteristicCallback(&remainingCharacteristic); - } - } - } - remainingCharacteristic = nRF5xDiscoveredCharacteristic(); - } - state = SERVICE_DISCOVERY_ACTIVE; } serviceIndex++; /* Progress service index to keep discovery alive. */ @@ -157,6 +162,7 @@ void resetDiscoveredCharacteristics(void) { numCharacteristics = 0; + characteristicIndex = 0; } private: @@ -303,6 +309,7 @@ private: uint8_t serviceIndex; /**< Index of the current service being discovered. This is intended for internal use during service discovery.*/ uint8_t numServices; /**< Number of services at the peers GATT database.*/ + uint8_t characteristicIndex; /**< Index of the current characteristic being discovered. This is intended for internal use during service discovery.*/ uint8_t numCharacteristics; /**< Number of characteristics within the service.*/ enum State_t { @@ -321,8 +328,6 @@ CharUUIDDiscoveryQueue charUUIDDiscoveryQueue; TerminationCallback_t onTerminationCallback; - - nRF5xDiscoveredCharacteristic remainingCharacteristic; }; #endif /*__NRF_SERVICE_DISCOVERY_H__*/ \ No newline at end of file