[Bugfix][API-1121] fix sta disconnect ap,try connect other ap until conneted,when cmmd scan done
Change-Id: Ia448f85addec214601a2cd409b6bd451b00c38fb
diff --git a/lib/liblynq-wifi6/libwifi6.c b/lib/liblynq-wifi6/libwifi6.c
index b9658b9..ed4024c 100755
--- a/lib/liblynq-wifi6/libwifi6.c
+++ b/lib/liblynq-wifi6/libwifi6.c
@@ -514,9 +514,28 @@
pthread_mutex_unlock(&s_global_check_mutex);
}
+static int lynq_wifi_sta_stop_network(lynq_wifi_index_e idx,int networkid)
+{
+ char LYNQ_DISABLE_CMD[128]={0};
+
+ CHECK_IDX(idx, CTRL_STA);
+ CHECK_WPA_CTRL(CTRL_STA);
+
+ sprintf(LYNQ_DISABLE_CMD,"DISABLE_NETWORK %d",networkid);
+ RLOGD("LYNQ_DISABLE_CMD is:%d\n",LYNQ_DISABLE_CMD);
+ DO_OK_FAIL_REQUEST(LYNQ_DISABLE_CMD);
+
+ return 0;
+
+}
+
+
void get_state_error(const char* modify, lynq_wifi_sta_status_s* state, error_number_s* error)
{
char *pReason;
+ char *wpanetid;
+ char destid[3] = {0};
+ int tmpdisid = -1;
*error = LYNQ_WAIT_CONNECT_ACTIVE;
if (strstr(modify, "CTRL-EVENT-SCAN-RESULTS") != NULL)
{
@@ -534,6 +553,15 @@
if (strstr(modify, "CTRL-EVENT-SSID-TEMP-DISABLED") != NULL)
{
+ *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+ wpanetid = strstr(modify,"id=");
+ if ( wpanetid != NULL )
+ {
+ wpanetid +=strlen("id=");
+ memcpy(destid,wpanetid,2);
+ tmpdisid = atoi(destid);
+
+ }
pReason = strstr(modify, "reason=");
if (pReason != NULL)
{
@@ -545,21 +573,23 @@
else if (memcmp(pReason, "WRONG_KEY", 9) == 0)
{
*error = LYNQ_PSW_ERROR;
+ // tmp fix sta autoconnect connect and disconnect
+ if(tmpdisid != -1 && lynq_wifi_sta_stop_network(0,tmpdisid) != 0)
+ {
+ RLOGE("stop wlan0 network %d fail",tmpdisid);
+ }
}
else
{
*error = LYNQ_UNSPECIFIED_REASON;
}
- *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
- RLOGD("CTRL-EVENT-SSID-TEMP-DISABLED state:%d,error:%d\n",*state,*error);
- return;
}
else
{
*error = LYNQ_UNSPECIFIED_REASON;
- *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
- return;
}
+ RLOGD("CTRL-EVENT-SSID-TEMP-DISABLED state:%d,error:%d,tmpnetid:%d",*state,*error,tmpdisid);
+ return;
}
@@ -2994,7 +3024,6 @@
curr_state.state = state;
return inner_get_status_info(interface, &curr_state);
}
-
int lynq_wifi_sta_stop(lynq_wifi_index_e idx)
{
// char lynq_disable_network_cmd[MAX_CMD];