diff --git a/src/lynq/lib/liblynq-wifi6/include/libwifi6.h b/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
index 0a2771d..dc1751c 100755
--- a/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
+++ b/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
@@ -190,9 +190,13 @@
 typedef enum
 {
     LYNQ_TIME_OUT = 0,
+    LYNQ_UNSPECIFIED_REASON,
+    LYNQ_AUTHENTICATION_NO_LONGER_VALID,
     LYNQ_PSW_ERROR,
     LYNQ_AUTH_ERROR,
+    LYNQ_AP_UNABLE_HANDLE,
     LYNQ_NOT_FIND_AP,
+    LYNQ_WAIT_CONNECT_ACTIVE,
 }error_number_s;
 
 typedef void(*STA_CALLBACK_FUNC_PTR)(void *priv, lynq_wifi_sta_status_s status, error_number_s number);
diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 6c45654..39314d2 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -212,7 +212,7 @@
         if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len))
 	{
             msg_notify[len+1] = '\0';
-            RLOGD("STAWatcherThreadProc ap------> %s\n", msg_notify);
+            RLOGD("APWatcherThreadProc ap------> %s\n", msg_notify);
 //you.chen change for tv-box start
             if (strstr(msg_notify, "AP-STA-DISCONNECTED") != NULL)
 	    {
@@ -250,11 +250,128 @@
     }
 }
 
+void get_state_error(const char* modify, lynq_wifi_sta_status_s* state, error_number_s* error)
+{
+    char *pReason;
+    *error = LYNQ_WAIT_CONNECT_ACTIVE;
+    if (strstr(modify, "CTRL-EVENT-SCAN-RESULTS") != NULL)
+    {
+        *state = LYNQ_WIFI_STA_STATUS_SCAN_RESULT;
+        RLOGD("CTRL-EVENT-SCAN-RESULTS state:%d,error:%d\n",*state,*error);
+        return;
+    }
+
+    if (strstr(modify, "CTRL-EVENT-CONNECTED") != NULL)
+    {
+        *state = LYNQ_WIFI_STA_STATUS_CONNECT;
+        RLOGD("CTRL-EVENT-CONNECTED state:%d,error:%d\n",*state,*error);
+        return;
+    }
+
+    if (strstr(modify, "CTRL-EVENT-SSID-TEMP-DISABLED") != NULL)
+    {
+        pReason = strstr(modify, "reason=");
+        if (pReason != NULL)
+        {
+            pReason += strlen("reason=");
+            if (memcmp(pReason, "CONN_FAILED", 11) == 0)
+            {
+                *error = LYNQ_TIME_OUT;
+            }
+            else if (memcmp(pReason, "WRONG_KEY", 9) == 0)
+            {
+                *error = LYNQ_PSW_ERROR;
+            }
+            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;
+        }
+
+    }
+
+    if (strstr(modify, "CTRL-EVENT-NETWORK-NOT-FOUND") != NULL)
+    {
+        *error = LYNQ_NOT_FIND_AP;
+        *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+        RLOGD("CTRL-EVENT-NETWORK-NOT-FOUND state:%d,error:%d\n",*state,*error);
+        return;
+    }
+
+
+    if (strstr(modify, "CTRL-EVENT-ASSOC-REJECT") != NULL)
+    {
+        RLOGD("FIND CTRL EVENT : CTRL-EVENT-ASSOC-REJECT\n");
+        pReason = strstr(modify, "status_code=");
+        if (pReason != NULL)
+        {
+            pReason += strlen("status_code=");
+            if (memcmp(pReason, "17", 2) == 0)
+            {
+                *error = LYNQ_AP_UNABLE_HANDLE;
+            }
+            else if (memcmp(pReason, "1",1) == 0)
+            {
+                *error = LYNQ_UNSPECIFIED_REASON;
+            }
+            else
+            {
+                *error = LYNQ_UNSPECIFIED_REASON;
+            }
+
+             *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+             RLOGD("CTRL-EVENT-ASSOC-REJECT BUT NOT STATUS_CODE NOT 1 or 17 state:%d,error:%d\n",*state,*error);
+             return;
+        }
+        else
+        {
+            RLOGD("FIND CTRL EVENT : CTRL-EVENT-ASSOC-REJECT BUT NOT FOUND STATUS_CODE\n");
+            *error = LYNQ_UNSPECIFIED_REASON;
+            *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+            RLOGD("CTRL-EVENT-ASSOC-REJECT state:%d,error:%d\n",*state,*error);
+            return;
+        }
+    }
+
+    if (strstr(modify, "CTRL-EVENT-SAE-UNKNOWN-PASSWORD-IDENTIFIER") != NULL)
+    {
+        RLOGD("FIND CTRL EVENT : CTRL-EVENT-SAE-UNKNOWN-PASSWORD-IDENTIFIER\n");
+        *error = LYNQ_AUTHENTICATION_NO_LONGER_VALID;
+        *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+        RLOGD("CTRL-EVENT-SAE-UNKNOWN-PASSWORD-IDENTIFIER state:%d,error:%d\n",*state,*error);
+        return;
+    }
+
+    if (strstr(modify, "CTRL-EVENT-DISCONNECTED") != NULL)
+    {
+        RLOGD("FIND CTRL EVENT : CTRL-EVENT-DISCONNECTED\n");
+        *error = LYNQ_WAIT_CONNECT_ACTIVE;
+        *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+        RLOGD("CTRL-EVENT-DISCONNECTED state:%d,error:%d\n",*state,*error);
+        return;
+    }
+
+    *error = LYNQ_UNSPECIFIED_REASON;
+    *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+    RLOGD("LAST : STA state:%d,error:%d\n",*state,*error);
+    return;
+
+}
+
 static void STAWatcherThreadProc() {
     size_t len = MAX_RET;
     char msg_notify[MAX_RET];
-    char *pReason;
     error_number_s error;
+    lynq_wifi_sta_status_s state;
 
     struct wpa_ctrl *lynq_wpa_ctrl = NULL;
     g_sta_watcher_stop_flag = 0;
@@ -262,10 +379,10 @@
     while (g_sta_watcher_stop_flag == 0)
     {
         if (lynq_wpa_ctrl == NULL)
-	{
+        {
             lynq_wpa_ctrl = wpa_ctrl_open(CTRL_PATH[CTRL_STA]);
             if (lynq_wpa_ctrl == NULL)
-	    {
+            {
                 usleep(100*1000);
                 continue;
             }
@@ -275,59 +392,28 @@
         }
 
         if ( 0 == wpa_ctrl_pending(lynq_wpa_ctrl))
-	{
+        {
             usleep(100*1000);
             continue;
         }
         memset(msg_notify, 0, MAX_RET);
         len = MAX_RET;
         if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len))
-	{
+        {
             msg_notify[len+1] = '\0';
             RLOGD("STAWatcherThreadProc sta ------> %s\n", msg_notify);
             if (strstr(msg_notify, state_scan_result) != NULL)
-	    {
+            {
                 g_sta_scan_finish_flag = 1;
             }
 
             if (g_sta_callback_func == NULL)
-	    {
+            {
                 continue;
             }
-            error = -1;
-            if (strstr(msg_notify, "CTRL-EVENT-SCAN-RESULTS") != NULL)
-	    {
-                g_sta_callback_func(g_ap_callback_priv, LYNQ_WIFI_STA_STATUS_SCAN_RESULT, error);
-            }
-            else if (strstr(msg_notify, "CTRL-EVENT-CONNECTED") != NULL)
-	    {
-                g_sta_callback_func(g_ap_callback_priv, LYNQ_WIFI_STA_STATUS_CONNECT, error);
-            }
-            else if (strstr(msg_notify, "CTRL-EVENT-SSID-TEMP-DISABLED") != NULL)
-	    {
-                pReason = strstr(msg_notify, "reason=");
-                if (pReason != NULL)
-		{
-                    pReason += strlen("reason=");
-                    if (memcmp(pReason, "CONN_FAILED", 11) == 0)
-		    {
-                        error = LYNQ_TIME_OUT;
-                    }
-                    else if (memcmp(pReason, "WRONG_KEY", 9) == 0)
-		    {
-                        error = LYNQ_PSW_ERROR;
-                    }
-                    g_sta_callback_func(g_ap_callback_priv, LYNQ_WIFI_STA_STATUS_DISCONNECT, error);
-                }
-            }
-            else if (strstr(msg_notify, "CTRL-EVENT-DISCONNECTED") != NULL)
-	    {
-                g_sta_callback_func(g_ap_callback_priv, LYNQ_WIFI_STA_STATUS_DISCONNECT, error);
-            }
-            else if (strstr(msg_notify, "CTRL-EVENT-NETWORK-NOT-FOUND") != NULL)
-	    {
-                g_sta_callback_func(g_ap_callback_priv, LYNQ_WIFI_STA_STATUS_DISCONNECT, LYNQ_NOT_FIND_AP);
-            }
+            get_state_error(msg_notify,&state,&error);
+            g_sta_callback_func(g_sta_callback_priv, state, error);
+
         }
     }
     if (lynq_wpa_ctrl != NULL)
@@ -2219,7 +2305,9 @@
             sprintf(lynq_psk_cmd, "SET_NETWORK %d psk \"%s\"", net_no, password);
             
 	    DO_OK_FAIL_REQUEST(lynq_auth_cmd);
+	    RLOGD("inner_set_sta_auth_psw before set SAE CMD");
             DO_OK_FAIL_REQUEST(lynq_ket_mgmt_cmd);
+	    RLOGD("inner_set_sta_auth_psw after set SAE CMD");
             DO_OK_FAIL_REQUEST(lynq_pairwise_cmd);
             DO_OK_FAIL_REQUEST(lynq_psk_cmd);
 
