Shuta Nakamae / nRF51822

Fork of nRF51822 by Nordic Semiconductor

Revision:
223:cfa98ce48348
Parent:
222:0ba395e1303d
Child:
224:2f769d79a1b8
--- 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
@@ -105,6 +105,47 @@
         serviceDiscoveryInProgress        = false;
     }
 
+    void progressCharacteristicDiscovery() {
+        while (characteristicDiscoveryInProgress && (currCharInd < charCount)) {
+            printf("%x [%u]\r\n",
+                characteristics[currCharInd].uuid,
+                characteristics[currCharInd].valueHandle);
+            currCharInd++;
+        }
+
+        if (characteristicDiscoveryInProgress) {
+            Gap::Handle_t startHandle = characteristics[currCharInd - 1].valueHandle + 1;
+            Gap::Handle_t endHandle   = services[currSrvInd].endHandle;
+
+            if (startHandle < endHandle) {
+                ble_gattc_handle_range_t handleRange = {
+                    .start_handle = startHandle,
+                    .end_handle   = endHandle
+                };
+                printf("char discovery returned %u\r\n", sd_ble_gattc_characteristics_discover(connHandle, &handleRange));
+            } else {
+               terminateCharacteristicDiscovery();
+            }
+        }
+    }
+
+    void progressServiceDiscovery() {
+        while (serviceDiscoveryInProgress && (currSrvInd < srvCount)) {
+            printf("%x [%u %u]\r\n",
+                services[currSrvInd].uuid,
+                services[currSrvInd].startHandle,
+                services[currSrvInd].endHandle);
+
+            launchCharacteristicDiscovery(connHandle, services[currSrvInd].startHandle, services[currSrvInd].endHandle);
+        }
+        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));
+        }
+    }
+
     DiscoveredService        services[BLE_DB_DISCOVERY_MAX_SRV];  /**< Information related to the current service being discovered.
                                                                    *  This is intended for internal use during service discovery. */
     DiscoveredCharacteristic characteristics[BLE_DB_DISCOVERY_MAX_CHAR_PER_SRV];
@@ -201,42 +242,6 @@
         }
     }
 
-    while (discoveryStatus.characteristicDiscoveryInProgress && (discoveryStatus.currCharInd < discoveryStatus.charCount)) {
-        printf("%x [%u]\r\n",
-            discoveryStatus.characteristics[discoveryStatus.currCharInd].uuid,
-            discoveryStatus.characteristics[discoveryStatus.currCharInd].valueHandle);
-        discoveryStatus.currCharInd++;
-    }
-
-    if (discoveryStatus.characteristicDiscoveryInProgress) {
-        Gap::Handle_t startHandle = discoveryStatus.characteristics[discoveryStatus.currCharInd - 1].valueHandle + 1;
-        Gap::Handle_t endHandle   = discoveryStatus.services[discoveryStatus.currSrvInd].endHandle;
-
-        if (startHandle < endHandle) {
-            ble_gattc_handle_range_t handleRange = {
-                .start_handle = startHandle,
-                .end_handle   = endHandle
-            };
-            printf("char discovery returned %u\r\n", sd_ble_gattc_characteristics_discover(discoveryStatus.connHandle, &handleRange));
-        } else {
-           discoveryStatus.terminateCharacteristicDiscovery();
-        }
-    }
-
-    while (discoveryStatus.serviceDiscoveryInProgress && (discoveryStatus.currSrvInd < discoveryStatus.srvCount)) {
-        printf("%x [%u %u]\r\n",
-            discoveryStatus.services[discoveryStatus.currSrvInd].uuid,
-            discoveryStatus.services[discoveryStatus.currSrvInd].startHandle,
-            discoveryStatus.services[discoveryStatus.currSrvInd].endHandle);
-
-        launchCharacteristicDiscovery(discoveryStatus.connHandle,
-            discoveryStatus.services[discoveryStatus.currSrvInd].startHandle,
-            discoveryStatus.services[discoveryStatus.currSrvInd].endHandle);
-    }
-    if (discoveryStatus.serviceDiscoveryInProgress && (discoveryStatus.srvCount > 0) && (discoveryStatus.currSrvInd > 0)) {
-        Gap::Handle_t endHandle = discoveryStatus.services[discoveryStatus.currSrvInd - 1].endHandle;
-        discoveryStatus.resetDiscoveredServices();
-        printf("services discover returned %u\r\n",
-            sd_ble_gattc_primary_services_discover(discoveryStatus.connHandle, endHandle, NULL));
-    }
+    discoveryStatus.progressCharacteristicDiscovery();
+    discoveryStatus.progressServiceDiscovery();
 }
\ No newline at end of file