diff --git a/wifi/services/wifi_standard/wifi_hal/wifi_hal_module/wpa_supplicant_hal/wpa_sta_hal/wifi_supplicant_hal.c b/wifi/services/wifi_standard/wifi_hal/wifi_hal_module/wpa_supplicant_hal/wpa_sta_hal/wifi_supplicant_hal.c index 614a4619ac68ced6cdf7cef4d140af2a6939aa2d..0c837d667ba903fbc41e0de738c2f9e365c6ea99 100644 --- a/wifi/services/wifi_standard/wifi_hal/wifi_hal_module/wpa_supplicant_hal/wpa_sta_hal/wifi_supplicant_hal.c +++ b/wifi/services/wifi_standard/wifi_hal/wifi_hal_module/wpa_supplicant_hal/wpa_sta_hal/wifi_supplicant_hal.c @@ -1200,6 +1200,22 @@ static int WpaCliCmdGetSignalInfo(WifiWpaStaInterface *this, WpaSignalInfo *info return 0; } +static int WpaCliCmdWpaTerminate(WifiWpaStaInterface *this) +{ + LOGI("Enter WpaCliCmdWpaTerminate"); + if (this == NULL) { + LOGE("WpaCliCmdWpaTerminate, this is NULL."); + return -1; + } + char cmd[CMD_BUFFER_SIZE] = {0}; + char buf[REPLY_BUF_SMALL_LENGTH] = {0}; + if (snprintf_s(cmd, sizeof(cmd), sizeof(cmd) - 1, "IFNAME=%s terminate", this->ifname) < 0) { + LOGE("WpaCliCmdWpaTerminate, snprintf err"); + return -1; + } + return WpaCliCmd(cmd, buf, sizeof(buf)); +} + WifiWpaStaInterface *GetWifiStaInterface(int staNo) { char *name; @@ -1245,6 +1261,7 @@ WifiWpaStaInterface *GetWifiStaInterface(int staNo) p->wpaCliCmdScan = WpaCliCmdScan; p->wpaCliCmdScanInfo = WpaCliCmdScanInfo; p->wpaCliCmdGetSignalInfo = WpaCliCmdGetSignalInfo; + p->wpaCliCmdWpaTerminate = WpaCliCmdWpaTerminate; p->next = g_wpaStaInterface; g_wpaStaInterface = p; diff --git a/wifi/services/wifi_standard/wifi_hal/wifi_hal_module/wpa_supplicant_hal/wpa_sta_hal/wifi_supplicant_hal.h b/wifi/services/wifi_standard/wifi_hal/wifi_hal_module/wpa_supplicant_hal/wpa_sta_hal/wifi_supplicant_hal.h index ed96a4a680ffae72a765b0ef8e974d9f66dfe4cd..39a2078ec9ef9968575e41600007353c80a14db0 100644 --- a/wifi/services/wifi_standard/wifi_hal/wifi_hal_module/wpa_supplicant_hal/wpa_sta_hal/wifi_supplicant_hal.h +++ b/wifi/services/wifi_standard/wifi_hal/wifi_hal_module/wpa_supplicant_hal/wpa_sta_hal/wifi_supplicant_hal.h @@ -100,6 +100,7 @@ struct WifiWpaStaInterface { int (*wpaCliCmdScan)(WifiWpaStaInterface *p, const ScanSettings *settings); int (*wpaCliCmdScanInfo)(WifiWpaStaInterface *p, ScanInfo *pcmd, int *size); int (*wpaCliCmdGetSignalInfo)(WifiWpaStaInterface *p, WpaSignalInfo *info); + int (*wpaCliCmdWpaTerminate)(WifiWpaStaInterface *p); }; /** diff --git a/wifi/services/wifi_standard/wifi_hal/wifi_hal_sta_interface.c b/wifi/services/wifi_standard/wifi_hal/wifi_hal_sta_interface.c index 5ee50f99751fc318b6357228f0758586fd615d94..00321d7ba31f65b8981a0405851f15b56d79356f 100644 --- a/wifi/services/wifi_standard/wifi_hal/wifi_hal_sta_interface.c +++ b/wifi/services/wifi_standard/wifi_hal/wifi_hal_sta_interface.c @@ -25,7 +25,7 @@ #define LOG_TAG "WifiHalStaInterface" #define WPA_CMD_STOP_LENG 64 -#define WPA_TRY_CONNECT_SLEEP_TIME (100 * 1000) /* 100ms */ +#define WPA_TERMINATE_SLEEP_TIME (50 * 1000) /* 50ms */ static const char *g_serviceName = "wpa_supplicant"; static const char *g_startCmd = "wpa_supplicant -iglan0 -g/data/misc/wifi/sockets/wpa"; @@ -142,7 +142,7 @@ WifiErrorNo ForceStop(void) WifiErrorNo StartSupplicant(void) { - LOGD("Start supplicant"); + LOGI("Start supplicant"); if (CopyConfigFile("wpa_supplicant.conf") != 0) { return WIFI_HAL_FAILED; } @@ -156,7 +156,18 @@ WifiErrorNo StartSupplicant(void) WifiErrorNo StopSupplicant(void) { - LOGD("Stop supplicant"); + LOGI("Stop supplicant"); + WifiWpaStaInterface *pStaIfc = GetWifiStaInterface(0); + if (pStaIfc == NULL) { + LOGE("Supplicant is NOT inited!"); + return WIFI_HAL_SUPPLICANT_NOT_INIT; + } + int res = pStaIfc->wpaCliCmdWpaTerminate(pStaIfc); + if (res < 0) { + LOGE("wpaCliCmdWpaTerminate failed! ret=%{public}d", res); + return WIFI_HAL_FAILED; + } + usleep(WPA_TERMINATE_SLEEP_TIME); ModuleManageRetCode ret = StopModule(g_serviceName); if (ret == MM_FAILED) { LOGE("stop wpa_supplicant failed!");