diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index cf8bf72..128a913 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -1845,44 +1845,52 @@
 
 int lynq_wifi_sta_start(lynq_wifi_index_e idx)
 {
-    const char *lynq_reconfigure_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 RECONFIGURE /data/wifi/wg870/wpa_supplicant.conf";
-    const char *lynq_reconnect_cmd = "RECONNECT";
+//    const char *lynq_reconfigure_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 RECONFIGURE /data/wifi/wg870/wpa_supplicant.conf";
+//    const char *lynq_reconnect_cmd = "RECONNECT";
+    const char *lynq_enable_sta_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 enable_net all";
+    const char *lynq_reconnect_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 reconnect";
+//    const char *lynq_first_sta_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 remove_net all";
 
     CHECK_IDX(idx, CTRL_STA);
     CHECK_WPA_CTRL(CTRL_STA);
 
     system("connmanctl enable wifi");
 
-    if (system("ifconfig | grep -q wlan0") != 0) {
+    if (system("ifconfig | grep -q wlan0") != 0)
+    {
         return -1;
     }
 
-    DO_OK_FAIL_REQUEST(cmd_remove_all);
-    system(lynq_reconfigure_cmd);
-    DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
-
+//    DO_OK_FAIL_REQUEST(cmd_remove_all);
+//    system(lynq_first_sta_cmd);
+//    system(lynq_reconfigure_cmd);
+//    DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
+    system(lynq_enable_sta_cmd);
+    system(lynq_reconnect_cmd);
+//    DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
     return 0;
 }
 
 int lynq_wifi_sta_stop(lynq_wifi_index_e idx)
 {
-    char lynq_disable_network_cmd[MAX_CMD];
-    curr_status_info curr_state;
-    ap_info_s ap_info;
+//    char lynq_disable_network_cmd[MAX_CMD];
+//    curr_status_info curr_state;
+//    ap_info_s ap_info;
 
+    const char * lynq_disable_sta_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 disable_net all";
     CHECK_IDX(idx, CTRL_STA);
     CHECK_WPA_CTRL(CTRL_STA);
 
-    curr_state.ap = &ap_info;
-    curr_state.state = NULL;
+//    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;
-    }
+//    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);
-
+//    sprintf(lynq_disable_network_cmd, "DISABLE_NETWORK %d", curr_state.net_no);
+//    DO_OK_FAIL_REQUEST(lynq_disable_network_cmd);
+    system(lynq_disable_sta_cmd);
     DO_OK_FAIL_REQUEST(cmd_save_config);
 
     return 0;
