diff --git a/recipes-openharmony/openharmony/openharmony-standard-3.0/wifi-napi-networkmanager-integration.patch b/recipes-openharmony/openharmony/openharmony-standard-3.0/wifi-napi-networkmanager-integration.patch index 72f9f3f3783f58b97f21924b793d486bb00a8742..de5105f4e08c5920b62c8b15eaab9dd924a485de 100644 --- a/recipes-openharmony/openharmony/openharmony-standard-3.0/wifi-napi-networkmanager-integration.patch +++ b/recipes-openharmony/openharmony/openharmony-standard-3.0/wifi-napi-networkmanager-integration.patch @@ -26,10 +26,10 @@ index ea63e51..5b6f90d 100755 relative_install_dir = "module" diff --git a/interfaces/innerkits/native_cpp/napi/wifi_napi_device.cpp b/interfaces/innerkits/native_cpp/napi/wifi_napi_device.cpp -index 3afaf93..9c00654 100755 +index 3afaf93..05ecca3 100755 --- a/interfaces/innerkits/native_cpp/napi/wifi_napi_device.cpp +++ b/interfaces/innerkits/native_cpp/napi/wifi_napi_device.cpp -@@ -18,13 +18,44 @@ +@@ -18,28 +18,74 @@ #include "wifi_device.h" #include "wifi_scan.h" #include <vector> @@ -42,10 +42,32 @@ index 3afaf93..9c00654 100755 -std::unique_ptr<WifiDevice> wifiDevicePtr = WifiDevice::GetInstance(WIFI_DEVICE_ABILITY_ID); -std::unique_ptr<WifiScan> wifiScanPtr = WifiScan::GetInstance(WIFI_SCAN_ABILITY_ID); -+bool enableWifi() { -+ NMClient *client = NULL; ++struct WifiStatus ++{ ++ bool wifi_enabled; ++ NMClient *client; ++ GMainLoop *loop; ++ int attempts; ++}; + ++static gboolean check_wifi_status(gpointer user_data) ++{ ++ const int ENABLE_WIFI_MAX_ATTEMPTS = 10; ++ WifiStatus *wifi_status = (WifiStatus *)user_data; ++ wifi_status->wifi_enabled = nm_client_wireless_get_enabled(wifi_status->client); ++ wifi_status->attempts++; ++ if (wifi_status->wifi_enabled || wifi_status->attempts >= ENABLE_WIFI_MAX_ATTEMPTS) ++ { ++ g_main_loop_quit(wifi_status->loop); ++ } ++ return !wifi_status->wifi_enabled && wifi_status->attempts < ENABLE_WIFI_MAX_ATTEMPTS; ++} ++ ++bool enable_wifi_with_attempts() ++{ + GError *error = NULL; -+ // Initialize the NMClient ++ NMClient *client; ++ GMainLoop *loop = g_main_loop_new(NULL, FALSE); + client = nm_client_new(NULL, &error); + if (!client) + { @@ -53,30 +75,18 @@ index 3afaf93..9c00654 100755 + g_error_free(error); + return false; + } -+ if (nm_client_wireless_get_enabled(client)) -+ { -+ WIFI_LOGI("Wi-Fi is already enabled.\n"); -+ g_object_unref(client); -+ return true; -+ } ++ WifiStatus wifi_status = {false, client, loop, 0}; + nm_client_wireless_set_enabled(client, TRUE); -+ if (nm_client_wireless_get_enabled(client)) -+ { -+ WIFI_LOGI("Wi-Fi has been enabled.\n"); -+ g_object_unref(client); -+ return true; -+ } -+ else -+ { -+ WIFI_LOGE("Failed to enable Wi-Fi.\n"); -+ g_object_unref(client); -+ return false; -+ } ++ g_timeout_add_seconds(1, check_wifi_status, &wifi_status); ++ g_main_loop_run(loop); ++ bool result = wifi_status.wifi_enabled; ++ g_object_unref(client); ++ g_main_loop_unref(loop); ++ return result; +} - napi_value EnableWifi(napi_env env, napi_callback_info info) { -@@ -32,11 +63,15 @@ napi_value EnableWifi(napi_env env, napi_callback_info info) + size_t argc = 1; napi_value argv[1]; napi_value thisVar; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); @@ -85,18 +95,23 @@ index 3afaf93..9c00654 100755 - ErrCode ret = wifiDevicePtr->EnableWifi(); napi_value result; - napi_get_boolean(env, ret == WIFI_OPT_SUCCESS, &result); -+ if (enableWifi()) ++ if (enable_wifi_with_attempts()) + { ++ WIFI_LOGI("Wi-Fi has been enabled.\n"); + napi_get_boolean(env, true, &result); + } + else + { ++ WIFI_LOGI("Failed to enable Wi-Fi.\n"); + napi_get_boolean(env, false, &result); + } return result; } - -@@ -47,29 +82,52 @@ napi_value DisableWifi(napi_env env, napi_callback_info info) +- + napi_value DisableWifi(napi_env env, napi_callback_info info) + { + size_t argc = 1; +@@ -47,13 +93,33 @@ napi_value DisableWifi(napi_env env, napi_callback_info info) napi_value thisVar; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); @@ -108,38 +123,34 @@ index 3afaf93..9c00654 100755 return result; } -+bool isWifiActive() ++bool isWifiActive() +{ -+ NMClient *client = NULL; -+ GError *error = NULL; -+ client = nm_client_new(NULL, &error); -+ if (!client) -+ { -+ WIFI_LOGE("Error: %s\n", error->message); -+ g_error_free(error); -+ return false; -+ } -+ if (nm_client_wireless_get_enabled(client)) -+ { -+ WIFI_LOGI("Wi-Fi is enabled.\n"); -+ g_object_unref(client); -+ return true; -+ } -+ else -+ { -+ WIFI_LOGI("Wi-Fi is not enabled.\n"); -+ g_object_unref(client); -+ return false; -+ } ++ NMClient * client = NULL; ++ GError * error = NULL; ++ client = nm_client_new(NULL, & error); ++ if(!client) { ++ WIFI_LOGE("Error: %s\n", error -> message); ++ g_error_free(error); ++ return false; ++ } ++ if(nm_client_wireless_get_enabled(client)) { ++ WIFI_LOGI("Wi-Fi is active.\n"); ++ g_object_unref(client); ++ return true; ++ } else { ++ WIFI_LOGI("Wi-Fi is not active.\n"); ++ g_object_unref(client); ++ return false; ++ } +} + napi_value IsWifiActive(napi_env env, napi_callback_info info) { size_t argc = 1; - napi_value argv[1]; +@@ -61,15 +127,13 @@ napi_value IsWifiActive(napi_env env, napi_callback_info info) napi_value thisVar; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); -- + - NAPI_ASSERT(env, wifiDevicePtr != nullptr, "[NAPI] Wifi device instance is null."); - bool activeStatus = true; - ErrCode ret = wifiDevicePtr->IsWifiActive(activeStatus); @@ -149,18 +160,16 @@ index 3afaf93..9c00654 100755 - napi_value result; - napi_get_boolean(env, activeStatus, &result); -+ if (isWifiActive()) -+ { -+ napi_get_boolean(env, true, &result); ++ if(isWifiActive()) { ++ napi_get_boolean(env,true, &result); + } -+ else -+ { -+ napi_get_boolean(env, false, &result); ++ else { ++ napi_get_boolean(env,false, &result); + } return result; } -@@ -80,9 +138,7 @@ napi_value Scan(napi_env env, napi_callback_info info) +@@ -80,9 +144,7 @@ napi_value Scan(napi_env env, napi_callback_info info) napi_value thisVar; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); @@ -171,7 +180,7 @@ index 3afaf93..9c00654 100755 napi_value result; napi_get_boolean(env, ret == WIFI_OPT_SUCCESS, &result); return result; -@@ -143,10 +199,7 @@ static bool NativeScanInfosToJsObj(const napi_env& env, napi_value& arrayResult, +@@ -143,10 +205,6 @@ static bool NativeScanInfosToJsObj(const napi_env& env, napi_value& arrayResult, static bool GetWifiScanInfoList(const napi_env& env, napi_value& arrayResult) { std::vector<WifiScanInfo> vecCppScanInfos; @@ -179,11 +188,10 @@ index 3afaf93..9c00654 100755 - WIFI_LOGE("[Napi Device] Get Scaninf list error"); - return false; - } -+ WIFI_LOGI("[Napi Device] GetScanInfoList, size: %{public}zu", vecCppScanInfos.size()); napi_create_array_with_length(env, vecCppScanInfos.size(), &arrayResult); -@@ -293,10 +346,9 @@ static void JsObjToDeviceConfig(const napi_env& env, const napi_value& object, W +@@ -293,10 +351,9 @@ static void JsObjToDeviceConfig(const napi_env& env, const napi_value& object, W static napi_value AddDeviceConfigImpl(const napi_env& env, AsyncCallbackInfo *asCallbackInfo) { @@ -195,17 +203,18 @@ index 3afaf93..9c00654 100755 if (addResult < 0 || ret != WIFI_OPT_SUCCESS) { retValue = -1; } else { -@@ -441,8 +493,7 @@ napi_value ConnectToNetwork(napi_env env, napi_callback_info info) +@@ -440,9 +497,7 @@ napi_value ConnectToNetwork(napi_env env, napi_callback_info info) + int networkId = -1; napi_get_value_int32(env, argv[0], &networkId); - +- - NAPI_ASSERT(env, wifiDevicePtr != nullptr, "[NAPI] Wifi device instance is null."); - ErrCode ret = wifiDevicePtr->ConnectToNetwork(networkId); -+ ErrCode ret = WIFI_OPT_SUCCESS; ++ ErrCode ret = WIFI_OPT_SUCCESS; napi_value result; napi_get_boolean(env, ret == WIFI_OPT_SUCCESS, &result); return result; -@@ -459,11 +510,9 @@ napi_value ConnectToDevice(napi_env env, napi_callback_info info) +@@ -459,11 +514,9 @@ napi_value ConnectToDevice(napi_env env, napi_callback_info info) napi_typeof(env, argv[0], &valueType); NAPI_ASSERT(env, valueType == napi_object, "Wrong argument type. Object expected."); @@ -218,17 +227,17 @@ index 3afaf93..9c00654 100755 napi_value result; napi_get_boolean(env, ret == WIFI_OPT_SUCCESS, &result); return result; -@@ -476,8 +525,7 @@ napi_value Disconnect(napi_env env, napi_callback_info info) +@@ -476,8 +529,7 @@ napi_value Disconnect(napi_env env, napi_callback_info info) napi_value thisVar; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); - NAPI_ASSERT(env, wifiDevicePtr != nullptr, "[NAPI] Wifi device instance is null."); - ErrCode ret = wifiDevicePtr->Disconnect(); -+ ErrCode ret = WIFI_OPT_SUCCESS; ++ ErrCode ret = WIFI_OPT_SUCCESS; napi_value result; napi_get_boolean(env, ret == WIFI_OPT_SUCCESS, &result); return result; -@@ -503,9 +551,8 @@ napi_value GetSignalLevel(napi_env env, napi_callback_info info) +@@ -503,11 +555,10 @@ napi_value GetSignalLevel(napi_env env, napi_callback_info info) napi_get_value_int32(env, argv[0], &rssi); napi_get_value_int32(env, argv[1], &band); @@ -237,5 +246,8 @@ index 3afaf93..9c00654 100755 - ErrCode ret = wifiDevicePtr->GetSignalLevel(rssi, band, level); + ErrCode ret = WIFI_OPT_SUCCESS; if (ret != WIFI_OPT_SUCCESS) { - WIFI_LOGW("[Napi Device] Get wifi signal level fail: %{public}d", ret); +- WIFI_LOGW("[Napi Device] Get wifi signal level fail: %{public}d", ret); ++ WIFI_LOGE("[Napi Device] Get wifi signal level fail: %{public}d", ret); } + + napi_value result;