[BugFix][API-1596]add mutex && disconenct current device before conenct
Affected branch:MR3.0-xx && GSW3.0
Affected module:wifi
Is it addected on both ZXIC and MTK: only MTK
Self-test: YES
Doc Update: No
Change-Id: Ib1e7d5e323e73b2055b60e4271720b9b56281864
diff --git a/IC_src/mtk/lib/liblynq-wifi6/libwifi6.c b/IC_src/mtk/lib/liblynq-wifi6/libwifi6.c
index 2f462e3..5323831 100755
--- a/IC_src/mtk/lib/liblynq-wifi6/libwifi6.c
+++ b/IC_src/mtk/lib/liblynq-wifi6/libwifi6.c
@@ -105,6 +105,7 @@
static pthread_mutex_t s_sta_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t s_ap_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t s_run_cmd_func_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t s_func_run_mutex = PTHREAD_MUTEX_INITIALIZER;
// add for auto connect
static pthread_mutex_t s_sta_auto_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -2314,7 +2315,6 @@
int check;
char lynq_wifi_frequency_cmd[128]={0};
char lynq_cmd_mode[128]={0};
- char lynq_cmd_slect[128]={0};
RLOGD("enter %s %d input frequency:%d",__func__,__LINE__,lynq_wifi_frequency);
//@do check input frequency
check = lynq_check_set_frequency(lynq_wifi_frequency);
@@ -2342,7 +2342,6 @@
sprintf(lynq_wifi_frequency_cmd,"SET_NETWORK %d frequency %d", AP_NETWORK_0, lynq_wifi_frequency);
sprintf(lynq_cmd_mode, "SET_NETWORK %d mode 2", AP_NETWORK_0);
- sprintf(lynq_cmd_slect, "SELECT_NETWORK %d", AP_NETWORK_0);
DO_OK_FAIL_REQUEST(cmd_disconnect);
DO_OK_FAIL_REQUEST(lynq_wifi_frequency_cmd);
@@ -3698,7 +3697,9 @@
*/
int lynq_wifi_sta_connect_common(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw, int timeout,int ap_type)
{
- int count, net_no, index;
+ RLOGD("enter %s %d",__func__,__LINE__);
+ pthread_mutex_lock(&s_func_run_mutex);
+ int count, net_no, index,res;
int net_no_list[128];
char rm_net_cmd[128];
lynq_wifi_auth_s net_auth;
@@ -3706,10 +3707,11 @@
ap_info_s ap_info;
char status[64];
+ res = -1;
if (ssid == NULL || *ssid == '\0')
{
RLOGE("bad ssid\n");
- return -1;
+ goto CONNECT_END;
}
if (LYNQ_WIFI_AUTH_OPEN != auth)
@@ -3717,7 +3719,7 @@
if (psw == NULL || strlen(psw) < 8 || strlen(psw) >= 64)
{
RLOGE("bad password\n");
- return -1;
+ goto CONNECT_END;
}
}
@@ -3748,14 +3750,14 @@
if (0 == lynq_sta_ssid_password_get(idx, &ap_info, ap_info.psw)
&& strcmp(ap_info.psw, psw) == 0)
{
- RLOGD("already connected\n");
-
+ RLOGD("already connected %s %d\n",__func__,__LINE__);
pthread_mutex_lock(&s_global_check_mutex);
s_sta_status = INNER_STA_STATUS_CONNECTED;
lynq_sta_removeElement(net_no);
pthread_cond_signal(&s_global_check_cond);
pthread_mutex_unlock(&s_global_check_mutex);
- return 0;
+ res = 0;
+ goto CONNECT_END;
}
}
}
@@ -3786,20 +3788,23 @@
net_no = lynq_add_network(CTRL_STA);
if (net_no == -1)
{
- return -1;
+ RLOGE("add network id failed %s %d\n",__func__,__LINE__);
+ goto CONNECT_END;
}
RLOGD("net no is %d\n", net_no);
if (0 != inner_set_sta_ssid(net_no, ssid))
{
- return -1;
+ RLOGE("set network %d ssid failed %s %d\n",net_no,__func__,__LINE__);
+ goto CONNECT_END;
}
}
}
if (0 != inner_set_sta_auth_psw(net_no, auth, psw))
{
- return -1;
+ RLOGE("set inner_set_sta_auth_psw %d ssid failed %s %d\n",net_no,__func__,__LINE__);
+ goto CONNECT_END;
}
//begain 20240328 change for support sta connect hide ap by qs.xiong API-1569
@@ -3819,7 +3824,7 @@
lynq_sta_removeElement(net_no);
pthread_mutex_unlock(&s_global_check_mutex);
- ret = inner_sta_start_stop(net_no, 1, 1);
+ res = inner_sta_start_stop(net_no, 1, 1);
pthread_mutex_lock(&s_global_check_mutex);
s_sta_status = INNER_STA_STATUS_CONNECTING;
@@ -3831,7 +3836,12 @@
s_sta_connect_timeout.tv_nsec = now.tv_usec*1000;
pthread_cond_signal(&s_global_check_cond);
pthread_mutex_unlock(&s_global_check_mutex);
- return ret;
+
+CONNECT_END:
+ pthread_mutex_unlock(&s_func_run_mutex);
+ RLOGD("end %s %d and return is %d \n",__func__,__LINE__,res);
+ return res;
+
}
int lynq_wifi_sta_connect_timeout(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw, int timeout)
@@ -4990,7 +5000,6 @@
char lynq_wifi_acs_cmd[128]={0};
char lynq_cmd_mode[128]={0};
- char lynq_cmd_slect[128]={0};
if((acs_mode != 2) && (acs_mode != 5))
{
@@ -5008,13 +5017,11 @@
sprintf(lynq_wifi_acs_cmd,"SET_NETWORK %d frequency %d", AP_NETWORK_0, acs_mode);
sprintf(lynq_cmd_mode, "SET_NETWORK %d mode 2", AP_NETWORK_0);
- sprintf(lynq_cmd_slect, "SELECT_NETWORK %d", AP_NETWORK_0);
DO_OK_FAIL_REQUEST(cmd_disconnect);
DO_OK_FAIL_REQUEST(lynq_wifi_acs_cmd);
DO_OK_FAIL_REQUEST(lynq_cmd_mode);
DO_OK_FAIL_REQUEST(cmd_save_config);
- DO_OK_FAIL_REQUEST(lynq_cmd_slect);
return 0;
}