[Feature][T8TSK-81]Merge MR3.0 New changes to commit ID:2b1db87cbf754219ab0e1cb48c663067ed55b7b3;GSW commit ID:4b1cf725e8037c2d878c85388384a0f5c8129274
Change-Id: Icbf9845e92b3564ad7f1d127c13c896b93a42c5b
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);