Shuta Nakamae / nRF51822

Fork of nRF51822 by Nordic Semiconductor

Revision:
227:7a0bb8545c75
Parent:
226:416f90600fbe
Child:
228:0c14d4e5207b
diff -r 416f90600fbe -r 7a0bb8545c75 btle/btle_gattc.cpp
--- a/btle/btle_gattc.cpp	Fri Jun 19 15:55:19 2015 +0100
+++ b/btle/btle_gattc.cpp	Fri Jun 19 15:55:19 2015 +0100
@@ -72,21 +72,27 @@
     }
 
     void resetDiscoveredServices(void) {
+        srvCount   = 0;
+        currSrvInd = 0;
         memset(services, 0, sizeof(DiscoveredService) * BLE_DB_DISCOVERY_MAX_SRV);
     }
 
+    void resetDiscoveredCharacteristics(void) {
+        charCount   = 0;
+        currCharInd = 0;
+        memset(characteristics, 0, sizeof(DiscoveredCharacteristic) * BLE_DB_DISCOVERY_MAX_CHAR_PER_SRV);
+    }
+
     void serviceDiscoveryStarted(Gap::Handle_t connectionHandle) {
         connHandle                        = connectionHandle;
-        srvCount                          = 0;
-        currSrvInd                        = 0;
+        resetDiscoveredServices();
         serviceDiscoveryInProgress        = true;
         characteristicDiscoveryInProgress = false;
     }
 
     void characteristicDiscoveryStarted(Gap::Handle_t connectionHandle) {
         connHandle                        = connectionHandle;
-        charCount                         = 0;
-        currCharInd                       = 0;
+        resetDiscoveredCharacteristics();
         characteristicDiscoveryInProgress = true;
         serviceDiscoveryInProgress        = false;
     }
@@ -125,6 +131,7 @@
         if (characteristicDiscoveryInProgress) {
             Gap::Handle_t startHandle = characteristics[currCharInd - 1].valueHandle + 1;
             Gap::Handle_t endHandle   = services[currSrvInd].endHandle;
+            resetDiscoveredCharacteristics();
 
             if (startHandle < endHandle) {
                 ble_gattc_handle_range_t handleRange = {
@@ -150,6 +157,7 @@
         if (serviceDiscoveryInProgress && (srvCount > 0) && (currSrvInd > 0)) {
             Gap::Handle_t endHandle = services[currSrvInd - 1].endHandle;
             resetDiscoveredServices();
+
             printf("services discover returned %u\r\n",
                 sd_ble_gattc_primary_services_discover(connHandle, endHandle, NULL));
         }