sa

Fork of nRF51822 by Nordic Semiconductor

Files at this revision

API Documentation at this revision

Comitter:
vcoubard
Date:
Mon Jan 11 10:19:06 2016 +0000
Parent:
547:8550af084edc
Child:
549:3f782c64d014
Commit message:
Synchronized with git rev b795c291
Author: Vincent Coubard
Terminate pending discoveries when a connection end.

Add accessor for ServiceDiscovery and CharacteristicDescriptorDiscover in
GattClient.

Remove friend relationship with bleGattcEventHandler

Changed in this revision

source/btle/btle.cpp Show annotated file Show diff for this revision Revisions of this file
source/btle/btle_discovery.cpp Show annotated file Show diff for this revision Revisions of this file
source/nRF5xGattClient.cpp Show annotated file Show diff for this revision Revisions of this file
source/nRF5xGattClient.h Show annotated file Show diff for this revision Revisions of this file
source/nRF5xServiceDiscovery.h Show annotated file Show diff for this revision Revisions of this file
--- a/source/btle/btle.cpp	Mon Jan 11 10:19:05 2016 +0000
+++ b/source/btle/btle.cpp	Mon Jan 11 10:19:06 2016 +0000
@@ -40,6 +40,10 @@
 #include "ble_hci.h"
 #include "btle_discovery.h"
 
+#include "nRF5xGattClient.h"
+#include "nRF5xServiceDiscovery.h"
+#include "nRF5xCharacteristicDescriptorDiscoverer.h"
+
 extern "C" void assert_nrf_callback(uint16_t line_num, const uint8_t *p_file_name);
 void            app_error_handler(uint32_t error_code, uint32_t line_num, const uint8_t *p_file_name);
 
@@ -182,8 +186,13 @@
                     reason = static_cast<Gap::DisconnectionReason_t>(p_ble_evt->evt.gap_evt.params.disconnected.reason);
                     break;
             }
+
+            // Close all pending discoveries for this connection
+            nRF5xGattClient& gattClient = nRF5xGattClient::getInstance();
+            gattClient.characteristicDescriptorDiscoverer().terminate(handle, BLE_ERROR_INVALID_STATE);
+            gattClient.discovery().terminate(handle);
+
             nRF5xGap::getInstance().processDisconnectionEvent(handle, reason);
-            // TODO: close pending discoveries
             break;
         }
 
--- a/source/btle/btle_discovery.cpp	Mon Jan 11 10:19:05 2016 +0000
+++ b/source/btle/btle_discovery.cpp	Mon Jan 11 10:19:06 2016 +0000
@@ -21,9 +21,9 @@
 #if !defined(TARGET_MCU_NRF51_16K_S110) && !defined(TARGET_MCU_NRF51_32K_S110)
 void bleGattcEventHandler(const ble_evt_t *p_ble_evt)
 {
-    nRF5xServiceDiscovery &sdSingleton = nRF5xGattClient::getInstance().discovery;
+    nRF5xServiceDiscovery &sdSingleton = nRF5xGattClient::getInstance().discovery();
     nRF5xCharacteristicDescriptorDiscoverer &characteristicDescriptorDiscoverer = 
-        nRF5xGattClient::getInstance().characteristicDescriptorDiscoverer;
+        nRF5xGattClient::getInstance().characteristicDescriptorDiscoverer();
 
     switch (p_ble_evt->header.evt_id) {
         case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP:
--- a/source/nRF5xGattClient.cpp	Mon Jan 11 10:19:05 2016 +0000
+++ b/source/nRF5xGattClient.cpp	Mon Jan 11 10:19:06 2016 +0000
@@ -33,7 +33,7 @@
                                         const UUID                                 &matchingServiceUUIDIn,
                                         const UUID                                 &matchingCharacteristicUUIDIn)
 {
-    return discovery.launch(connectionHandle, sc, cc, matchingServiceUUIDIn, matchingCharacteristicUUIDIn);
+    return _discovery.launch(connectionHandle, sc, cc, matchingServiceUUIDIn, matchingCharacteristicUUIDIn);
 }
 
 ble_error_t nRF5xGattClient::discoverCharacteristicDescriptors(
@@ -41,7 +41,7 @@
     const CharacteristicDescriptorDiscovery::DiscoveryCallback_t& discoveryCallback,
     const CharacteristicDescriptorDiscovery::TerminationCallback_t& terminationCallback)
 {
-    return characteristicDescriptorDiscoverer.launch(
+    return _characteristicDescriptorDiscoverer.launch(
         characteristic, 
         discoveryCallback, 
         terminationCallback
@@ -49,11 +49,11 @@
 }
 
 bool nRF5xGattClient::isCharacteristicDescriptorsDiscoveryActive(const DiscoveredCharacteristic& characteristic) const {
-    return characteristicDescriptorDiscoverer.isActive(characteristic);   
+    return _characteristicDescriptorDiscoverer.isActive(characteristic);   
 }
 
 void nRF5xGattClient::terminateCharacteristicDescriptorsDiscovery(const DiscoveredCharacteristic& characteristic) { 
-    return characteristicDescriptorDiscoverer.requestTerminate(characteristic);
+    return _characteristicDescriptorDiscoverer.requestTerminate(characteristic);
 }
 
 #endif
\ No newline at end of file
--- a/source/nRF5xGattClient.h	Mon Jan 11 10:19:05 2016 +0000
+++ b/source/nRF5xGattClient.h	Mon Jan 11 10:19:06 2016 +0000
@@ -88,14 +88,14 @@
                                                const UUID                                 &matchingCharacteristicUUIDIn = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN));
 
     virtual void onServiceDiscoveryTermination(ServiceDiscovery::TerminationCallback_t callback) {
-        discovery.onTermination(callback);
+        _discovery.onTermination(callback);
     }
 
     /**
      * Is service-discovery currently active?
      */
     virtual bool isServiceDiscoveryActive(void) const {
-        return discovery.isActive();
+        return _discovery.isActive();
     }
 
     /**
@@ -103,7 +103,7 @@
      * invocation of the TerminationCallback if service-discovery is active.
      */
     virtual void terminateServiceDiscovery(void) {
-        discovery.terminate();
+        _discovery.terminate();
     }
 
     /**
@@ -171,19 +171,25 @@
     }
 
 public:
-    nRF5xGattClient() : discovery(this) {
+    nRF5xGattClient() : _discovery(this) {
         /* empty */
     }
 
-    friend void bleGattcEventHandler(const ble_evt_t *p_ble_evt);
+    nRF5xServiceDiscovery& discovery() { 
+        return _discovery;
+    }
+
+    nRF5xCharacteristicDescriptorDiscoverer& characteristicDescriptorDiscoverer() { 
+        return _characteristicDescriptorDiscoverer;
+    }
 
 private:
     nRF5xGattClient(const nRF5xGattClient &);
     const nRF5xGattClient& operator=(const nRF5xGattClient &);
 
 private:
-    nRF5xServiceDiscovery discovery;
-    nRF5xCharacteristicDescriptorDiscoverer characteristicDescriptorDiscoverer;
+    nRF5xServiceDiscovery _discovery;
+    nRF5xCharacteristicDescriptorDiscoverer _characteristicDescriptorDiscoverer;
 
 #endif // if !S110
 };
--- a/source/nRF5xServiceDiscovery.h	Mon Jan 11 10:19:05 2016 +0000
+++ b/source/nRF5xServiceDiscovery.h	Mon Jan 11 10:19:06 2016 +0000
@@ -94,6 +94,12 @@
         terminateServiceDiscovery();
     }
 
+    void terminate(Gap::Handle_t connectionHandle) { 
+        if(connHandle == connectionHandle) { 
+            terminate();
+        }
+    }
+
     virtual void onTermination(ServiceDiscovery::TerminationCallback_t callback) {
         onTerminationCallback = callback;
     }