diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 682fa6d..d0e8750 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -99,7 +99,7 @@
         printf("to call [%s]\n", cmd_str);  \
         ret = wpa_ctrl_request(lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL); \
         if (ret != 0) { \
-            printf("call ##cmd_str fail %d\n", ret); \
+            printf("call "#cmd_str" fail %d\n", ret); \
             return ret; \
         } \
         cmd_reply[reply_len+1] = '\0'; \
@@ -109,10 +109,10 @@
 #define DO_OK_FAIL_REQUEST(cmd_str) do { \
         DO_REQUEST(cmd_str); \
         if (reply_len >=4 && memcmp(cmd_reply, "FAIL", 4) == 0 ) {\
-            printf("cmd ##cmd_str return FAIL\n"); \
+            printf("cmd "#cmd_str" return FAIL\n"); \
             return -1; \
         } else if (reply_len >=2 && memcmp(cmd_reply, "OK", 2) != 0) { \
-            printf("cmd ##cmd_str return not OK|FAIL\n"); \
+            printf("cmd "#cmd_str" return not OK|FAIL\n"); \
             return -1; \
         } \
     }while (0)
@@ -466,7 +466,7 @@
     const char *lynq_wifi_add_network = "ADD_NETWORK";
 
     DO_REQUEST(lynq_wifi_add_network);
-    if (memcpy(cmd_reply, "FAIL", 4) == 0) {
+    if (memcmp(cmd_reply, "FAIL", 4) == 0) {
         return -1;
     }
 
@@ -478,6 +478,7 @@
     }
     return atoi(cmd_reply);
 }
+
 static int lynq_check_network_number(lynq_wifi_index_e idx, int ap_sta, int net_no)
 {
     int count, index;
@@ -501,6 +502,10 @@
         if (index >= net_no) { // required network no created
             return 0;
         }
+        else if( index < 0) {
+            printf("add network fail\n");
+            return -1;
+        }
     }
 
     if (index < 0)
@@ -638,7 +643,7 @@
             }
 
         } //end else if (state != NULL)
-        if ((p = strstr(split_lines[i], FLAG_ID)) != NULL) {
+        if ((p = strstr(split_lines[i], FLAG_ID)) == split_lines[i]) {
             ret = 0;
             curr_state->net_no = atoi(p);
             printf("net_no %d, -- %s\n", curr_state->net_no, p);
@@ -898,7 +903,7 @@
             }
             else if (auth == LYNQ_WIFI_AUTH_WPA2_PSK) {
                 sprintf(lynq_auth_cmd,"SET_NETWORK %d proto WPA2", AP_NETWORK_0);
-                sprintf(lynq_psk_cmd,"SET_NETWORK %d key_mgmt WPA2-PSK", AP_NETWORK_0);
+                sprintf(lynq_psk_cmd,"SET_NETWORK %d key_mgmt WPA-PSK", AP_NETWORK_0);
             }
 //            sprintf(lynq_auth_cmd,"SET_NETWORK %d proto WPA2", AP_NETWORK_0);
 //            sprintf(lynq_psk_cmd,"SET_NETWORK %d key_mgmt WPA-PSK", AP_NETWORK_0);
@@ -1118,12 +1123,21 @@
 
 static int inner_get_network_auth(int interface, int net_no, lynq_wifi_auth_s *auth) {
     char lynq_auth_str[MAX_RET] = {0};
+    char lynq_proto_str[MAX_RET] = {0};
 
     if (inner_get_param(interface, net_no, "key_mgmt", lynq_auth_str) != 0) {
         return -1;
     }
 
     *auth = convert_auth_from_key_mgmt(lynq_auth_str);
+
+    if (*auth == LYNQ_WIFI_AUTH_WPA_PSK) {
+        if (inner_get_param(interface, net_no, "proto", lynq_proto_str) == 0) {
+            if (strcmp(lynq_proto_str, "RSN") == 0) {
+                *auth = LYNQ_WIFI_AUTH_WPA2_PSK;
+            }
+        }
+    }
     return 0;
 }
 
@@ -1378,7 +1392,7 @@
                 sprintf(lynq_auth_cmd,"SET_NETWORK %d proto WPA", net_no);
             }
             else if (auth == LYNQ_WIFI_AUTH_WPA2_PSK) {
-                sprintf(lynq_auth_cmd,"SET_NETWORK %d proto WPA2", net_no);
+                sprintf(lynq_auth_cmd,"SET_NETWORK %d proto RSN", net_no);
             }
             sprintf(lynq_ket_mgmt_cmd,"SET_NETWORK %d key_mgmt WPA-PSK", net_no);
             sprintf(lynq_pairwise_cmd,"SET_NETWORK %d pairwise CCMP", net_no);
@@ -1504,21 +1518,47 @@
     return inner_sta_start_stop(curr_state.net_no, 0, 0);
 }
 
-int lynq_wifi_sta_start(lynq_wifi_index_e idx) {
+int lynq_wifi_sta_start(lynq_wifi_index_e idx)
+{
+//    const char *lynq_reconfigure_cmd = "RECONFIGURE /data/wifi/wg870/wpa_supplicant.conf";
 
     CHECK_IDX(idx, CTRL_STA);
+    CHECK_WPA_CTRL(CTRL_STA);
+
+    system("connmanctl enable wifi");
+
     if (system("ifconfig | grep wlan0") != 0) {
         return -1;
     }
 
-    return system("connmanctl enable wifi");
+//    DO_OK_FAIL_REQUEST(lynq_reconfigure_cmd);
+
+    return 0;
 }
 
 int lynq_wifi_sta_stop(lynq_wifi_index_e idx)
 {
-    CHECK_IDX(idx, CTRL_STA);
+    char lynq_disable_network_cmd[MAX_CMD];
+    curr_status_info curr_state;
+    ap_info_s ap_info;
 
-    return system("connmanctl disable wifi");
+    CHECK_IDX(idx, CTRL_STA);
+    CHECK_WPA_CTRL(CTRL_STA);
+
+    curr_state.ap = &ap_info;
+    curr_state.state = NULL;
+
+    if (0 != inner_get_status_info(CTRL_STA, &curr_state) || curr_state.net_no < 0) {
+        return 0;
+    }
+
+    sprintf(lynq_disable_network_cmd, "DISABLE_NETWORK %d", curr_state.net_no);
+    DO_OK_FAIL_REQUEST(lynq_disable_network_cmd);
+
+    DO_OK_FAIL_REQUEST(cmd_save_config);
+
+    return 0;
+//    return system("connmanctl disable wifi");
 }
 
 //static int inner_get_sta_info(lynq_wifi_index_e idx, const char * bssid, device_info_s *dev) {
