diff --git a/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h b/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
index 0049eb1..1a17fe9 100755
--- a/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
+++ b/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
@@ -10,9 +10,9 @@
 
 #ifndef __LYNQ_AT__
 #define __LYNQ_AT__
-//#ifdef __cplusplus
-//extern "C" {
-//#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /**
  * @brief
@@ -31,8 +31,8 @@
  */
 int lynq_reg_third_at(const char *ext_at, LYNQ_AT_CALLBACK callback);
 
-//#ifdef __cplusplus
-//}
-//#endif
+#ifdef __cplusplus
+}
+#endif
 
 #endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-at-extension/lynq_at.cpp b/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
index 8785310..80c6588 100755
--- a/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
+++ b/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
@@ -95,7 +95,7 @@
     if (connect(sockfd, (struct sockaddr *) &addr_server, sizeof(struct sockaddr_un)) < 0)
     {
         close(sockfd);
-        LYDBGLOG("Can't connect to server side, path: %s, errno:%d", name, errno);
+        LYDBGLOG("Can't connect to server side, path: %s, %s", name, strerror(errno));
         return -1;
     }
     LYINFLOG("[%d][%s] connect %s success",LINE,FUNC,name);
@@ -120,40 +120,43 @@
         LYDBGLOG("lose data when send to atci service. errno = %d", errno);
         return false;
     }
-    LYDBGLOG("send to app demo: %s", msg);
+    LYDBGLOG("client send to app demo: %s", msg);
     return true;
 }
 
 int atsvc_cmd_recv(int fd, char *buf, int len)
 {
+    LYINFLOG("[%d][%s] enter",LINE,FUNC);
     int ret = 0;
-    fd_set rfds;
-    //FD_CLR(fd, &rfds);
-    FD_SET(fd, &rfds);
-    ret = select(fd + 1, &rfds, NULL, NULL, NULL);
-    if (ret <= 0)
-    {
-        LYDBGLOG("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
-        return SOCKET_FAIL;
-    }
-    if (FD_ISSET(fd, &rfds))
-    {
+    // fd_set rfds;
+    // //FD_CLR(fd, &rfds);
+    // FD_SET(fd, &rfds);
+    // ret = select(fd + 1, &rfds, NULL, NULL, NULL);
+    // if (ret <= 0)
+    // {
+    //     LYDBGLOG("acti_cmd_recv client select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+    //     return SOCKET_FAIL;
+    // }
+    // if (FD_ISSET(fd, &rfds))
+    // {
+        LYDBGLOG("[%d][%s] recv before",LINE,FUNC);
         ret = recv(fd, buf, len, 0);
+        LYDBGLOG("[%d][%s] recv after",LINE,FUNC);
         if (ret < 0)
         {
-            LYDBGLOG("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+            LYDBGLOG("acti_cmd_recv client select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
             return SOCKET_FAIL;
         }
         else if(ret == 0)
         {
-            LYDBGLOG("acti_cmd_recv recv error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+            LYDBGLOG("acti_cmd_recv client recv error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
             return SOCKET_ZERO;
     }
-    else
-    {
-      //buf[ret] = '\0';
-    }
-  }
+    // else
+    // {
+    //   //buf[ret] = '\0';
+    // }
+//   }
   return SOCKET_SUCC;
 }
 /**
@@ -179,6 +182,7 @@
     fd = socket_local_client(AT_EXTERSION_SOCKET_NAME);
     if(fd <= 0)
     {
+        LYDBGLOG("socket_local_client  fail\n");
         connect_state = false;
         pthread_mutex_unlock(&s_startupMutex);
         return NULL;
@@ -186,6 +190,7 @@
     int len_buf = strlen(buffer_at);
     if(!send_msg_to_service(fd,buffer_at,len_buf))
     {
+        LYDBGLOG("send_msg_to_service  fail\n");
         connect_state = false;
         pthread_mutex_unlock(&s_startupMutex);
         return NULL;
diff --git a/src/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index d1e2293..741220e 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -422,12 +422,12 @@
     {
         update=0;       
         pthread_cond_wait(&s_notice_get_call_list_cond, &s_notice_get_call_list_mutex);
-        LYDBGLOG("triggerGetCallList event!!!");
+        LYINFLOG("triggerGetCallList event %p!!!", pthread_self());
         memset(call_list,0,sizeof(call_list));
         ret = lynq_get_current_call_list(call_list);
         if(ret != RESULT_OK)
         {
-            LYDBGLOG("get current call list failure!!!");          
+            LYERRLOG("get current call list failure!!!");
             continue;
         }
         LYINFLOG("++++++++++++++triggerGetCallList++++++++++++++");
@@ -595,10 +595,11 @@
 
 void lynqNoticeGetModuleCallList()
 {
+    LYINFLOG("RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED send start");
     pthread_mutex_lock(&s_notice_get_call_list_mutex);
     pthread_cond_signal(&s_notice_get_call_list_cond);
     pthread_mutex_unlock(&s_notice_get_call_list_mutex);
-    
+    LYINFLOG("RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED send end");
 }
 
 #if 0
diff --git a/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp b/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
index 4b6f020..8d012da 100755
--- a/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
+++ b/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
@@ -24,7 +24,7 @@
 #define LYNQ_REQUEST_PARAM_BUF 8192
 #define LYNQ_REC_BUF 8192
 
-#define USER_LOG_TAG "LYNQ_NETWORK"
+#define USER_LOG_TAG "LYNQ_SMS"
 
 typedef struct{
     int uToken;
@@ -319,7 +319,7 @@
     char urc_data[LYNQ_REC_BUF];
     int res = 0;
     lynq_head_t* phead;
-   
+    int level,index,size;
     LYINFLOG("urc recv thread is running");
     while(module_urc_status)
     {
@@ -330,7 +330,7 @@
             LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
             continue;
         }
-        LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+        LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
         phead=(lynq_head_t*) urc_data;
         if(is_support_urc(phead->urcid)==false)
         {
@@ -342,8 +342,8 @@
             LYERRLOG("new parcel failure!!!");
             continue;
         }
-        LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
-        int level,index,size;
+        LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+        
         if(urc_data_is_in_shm_data(phead->resp_type,level,index,size))
         {
             LYINFLOG("__FUNCTION__ %s __LINE__ %d,use share memory\n", __FUNCTION__, __LINE__);
@@ -367,14 +367,14 @@
             s_recv_urc_parcel_list.push_back(urc_p);            
             BLOCK_WAKEUP_PROCESS_URC_MSG();
             BLOCK_PROCESS_URC_MSG_UNLOCK();
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
         }
         else 
         {
             delete urc_p;
             urc_p = NULL;
         }
-        LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);        
+        LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);        
     }
     LYINFLOG("urc recv thread ended");
     return NULL;
@@ -397,9 +397,9 @@
         BLOCK_PROCESS_URC_MSG_LOCK();
         while(s_recv_urc_parcel_list.empty())
         {
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
             BLOCK_WAIT_PROCESS_URC_MSG();
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
         }  
         iter=s_recv_urc_parcel_list.begin();
         urc_p=(*iter);
@@ -408,11 +408,11 @@
         urc_p->setDataPosition(0);
         if(urc_p->dataAvail()>0)
         {
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
             pthread_mutex_lock(&s_urc_mutex);
             urc_msg_process(urc_p);            
             pthread_mutex_unlock(&s_urc_mutex);
-            LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+            LYDBGLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
         }
         delete urc_p;
         urc_p = NULL;
diff --git a/src/lynq/lib/liblynq-sms/lynq_sms.cpp b/src/lynq/lib/liblynq-sms/lynq_sms.cpp
index 46f2119..ddf12b9 100755
--- a/src/lynq/lib/liblynq-sms/lynq_sms.cpp
+++ b/src/lynq/lib/liblynq-sms/lynq_sms.cpp
@@ -87,7 +87,7 @@
     }
     g_module_init_flag = MODULE_SWITCHING;
 
-    LYLOGSET(LOG_DEBUG);
+    LYLOGSET(LOG_INFO);
     LYLOGEINIT(USER_LOG_TAG);   
 
     g_module_Global_uToken = uToken;
diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index d0c3c32..25e429b 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -370,7 +370,11 @@
         usleep(300*1000);
         system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=ap0 disconnect");
     }
-
+    ret = system("wl -i wlan0 PM 0");
+    if( ret != 0)
+    {
+        printf("Set sta PM work mode to 0 fail,ret is%d",ret);
+    }
     if (g_ap_watcher_pid == 0 ) {
         ret=pthread_create(&g_ap_watcher_pid,NULL,APWatcherThreadProc,NULL);
         if(ret<0){
@@ -593,7 +597,7 @@
     if (NULL == mac || NULL == ip)
         return -1;
     memset(ip, 0, ip_len);
-    sprintf(cmd, "ip neigh | grep \"lladdr\" | grep \"tether\" | grep \"%s\" | head -1 | awk '{print $1}'", mac);
+    sprintf(cmd, "ip n s | grep \"lladdr\" | grep \"%s\" | head -1 | awk '{print $1}'", mac);
     ret = exec_cmd(cmd, ip, ip_len);
     p = strchr(ip, '\n');
     if (NULL != p)
@@ -758,7 +762,7 @@
         else if (strstr( flag, "NONE") != NULL) {
             return LYNQ_WIFI_AUTH_OPEN;
         }
-        else if (strcmp( flag, "[ESS]") == 0) {
+        else if (strcmp( flag, "[ESS]") == 0 || strcmp( flag,"[WPS][ESS]") == 0) {
             return LYNQ_WIFI_AUTH_OPEN;
         }
     }
@@ -930,6 +934,27 @@
 
     return 0;
 }
+
+static int lynq_check_frequencyby_country_code(int input_frequency)
+{
+    char str_cnc[]="CN";
+    char str_dest[20]="";
+
+    if( lynq_get_country_code(1,str_dest) != 0 )
+    {
+        printf("get country_code error\n");
+	return -1;
+    }
+    if( strncmp(str_dest,str_cnc,2) != 0 )
+    {
+        return 0;
+    }else if( 2473 < input_frequency && input_frequency < 5744)
+    {
+        printf("input frequency is bad\n");
+	return -1;
+    } 
+    return 0;
+}
 int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
 {
     int check;
@@ -944,6 +969,13 @@
         printf("do check frequency error\n");
         return -1;
     }
+    check = lynq_check_frequencyby_country_code(lynq_wifi_frequency);
+    if(check != 0)
+    {
+        printf("do check frequency error\n");
+        return -1;
+    }
+
     if (lynq_check_network_number(idx, CTRL_AP, AP_NETWORK_0) != 0)
     {
         return -1;
@@ -1000,7 +1032,7 @@
         }
         case LYNQ_WIFI_BANDWIDTH_HT40:
 		{
-            char lynq_cmd_bandwith[MAX_CMD]="wl chanspec 153u";
+            char lynq_cmd_bandwith[MAX_CMD]="wl chanspec 149/40";
             sprintf(lynq_cmd_bandwith, "wl chanspec ");
             system("wl down");
             if (system(lynq_cmd_bandwith) != 0 ){
@@ -1011,7 +1043,7 @@
 		}
         case LYNQ_WIFI_BANDWIDTH_HT80:
 		{
-            char lynq_cmd_bandwith[MAX_CMD]="wl chanspec 36/80";
+            char lynq_cmd_bandwith[MAX_CMD]="wl chanspec 149/80";
             system("wl down");
             if (system(lynq_cmd_bandwith) != 0 ){
                 return -1;
@@ -1555,6 +1587,9 @@
              break;
         }
 
+        if (p == NULL)
+            return -1;
+
         ssid = strstr(p, "ssid=");
         if (ssid != NULL) {
             ssid += strlen("ssid=");
@@ -1604,9 +1639,12 @@
             continue;
         }
 
-        strcpy(password, p);
+        if (*p == '\"')
+            p++;
+        strncpy(password, p, 64);
 
-        while(*password != '\0') {
+        p = password;
+        while(password - p < 64 && *password != '\0') {
             if (*password == '\"') {
                 *password = '\0';
                 break;
@@ -2243,8 +2281,14 @@
 
     CHECK_WPA_CTRL(CTRL_STA);
 
-    DO_OK_FAIL_REQUEST(lynq_scan_cmd);
     g_sta_scan_finish_flag = 0;
+    DO_REQUEST(lynq_scan_cmd);
+    if (reply_len >=9 && memcmp(cmd_reply, "FAIL-BUSY", 9) == 0 ) {
+        return 0;
+    } else if (reply_len >=2 && memcmp(cmd_reply, "OK", 2) != 0) {
+        g_sta_scan_finish_flag = 1;
+        return -1;
+    }
 
     return 0;
 }
diff --git a/src/lynq/lib/libpoweralarm/libpoweralarm.c b/src/lynq/lib/libpoweralarm/libpoweralarm.c
index 0cc3eb8..162484e 100644
--- a/src/lynq/lib/libpoweralarm/libpoweralarm.c
+++ b/src/lynq/lib/libpoweralarm/libpoweralarm.c
@@ -42,7 +42,7 @@
     
     time_buff = (char*)malloc(100);
     bzero(time_buff,100);
-
+    system("hwclock -w -f /dev/rtc0");
     sprintf(time_buff,"echo +%ld > %s",sec,RTCFILE_POWERALARM); //write formatted data into time_buff
     system(time_buff);
     ALOGI(time_buff);
@@ -75,7 +75,7 @@
     
     time_buff = (char*)malloc(100);
     bzero(time_buff,100);
-
+    system("hwclock -w -f /dev/rtc0");
     sprintf(time_buff,"echo +%ld > %s",sec,RTCFILE_WAKEALARM); //write formatted data into time_buff
     system(time_buff);
     ALOGI(time_buff);
