OSDN Git Service

wifi(vts): Add retry for HAL start
authorRoshan Pius <rpius@google.com>
Mon, 22 May 2017 21:16:06 +0000 (14:16 -0700)
committerRoshan Pius <rpius@google.com>
Mon, 22 May 2017 22:29:03 +0000 (15:29 -0700)
Port of the retry logic added in HalDeviceManager for temporary IWifi.start()
failures when invoked immediately after IWifi.stop().

Bug: 38342536
Test: Run VTS tests
Change-Id: Ie58a08c45979bafa0c61fa1c8536a2c0a0cd8ed9

wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp

index fefbd79..e4382bc 100644 (file)
@@ -36,6 +36,9 @@ using ::android::hardware::hidl_string;
 using ::android::hardware::hidl_vec;
 
 namespace {
+constexpr uint32_t kHalStartRetryMaxCount = 5;
+constexpr uint32_t kHalStartRetryIntervalInMs = 2;
+
 bool findAnyModeSupportingIfaceType(
     IfaceType desired_type, const std::vector<IWifiChip::ChipMode>& modes,
     ChipModeId* mode_id) {
@@ -92,7 +95,15 @@ sp<IWifiChip> getWifiChip() {
     if (!wifi.get()) {
         return nullptr;
     }
-    if (HIDL_INVOKE(wifi, start).code != WifiStatusCode::SUCCESS) {
+    uint32_t retry_count = 0;
+    auto status = HIDL_INVOKE(wifi, start);
+    while (retry_count < kHalStartRetryMaxCount &&
+           status.code == WifiStatusCode::ERROR_NOT_AVAILABLE) {
+        retry_count++;
+        usleep(kHalStartRetryIntervalInMs * 1000);
+        status = HIDL_INVOKE(wifi, start);
+    }
+    if (status.code != WifiStatusCode::SUCCESS) {
         return nullptr;
     }
     const auto& status_and_chip_ids = HIDL_INVOKE(wifi, getChipIds);