Merge "[feature][ZK-33] add nfs function" into MR3.0-merge
diff --git a/env.sh b/env.sh
old mode 100644
new mode 100755
index d240b3a..e102c33
--- a/env.sh
+++ b/env.sh
@@ -1,4 +1,10 @@
 #!/bin/bash
+
+LYNQ_CPU_NUM="CORE_NUM = \"4\""
+eval sed -i 's/^.*CORE_NUM.*$/"${LYNQ_CPU_NUM}"/' $(pwd)/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
+eval sed -i 's/^.*CORE_NUM.*$/"${LYNQ_CPU_NUM}"/' $(pwd)/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
+
 source $(pwd)/update_version.sh
 export TEMPLATECONF=${PWD}/meta/meta-mediatek-mt2735/conf/base/auto2735evb-ivt-main
 source meta/poky/oe-init-build-env
+
diff --git a/env_2core.sh b/env_2core.sh
new file mode 100644
index 0000000..e514c84
--- /dev/null
+++ b/env_2core.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+LYNQ_CPU_NUM="CORE_NUM = \"2\""
+eval sed -i 's/^.*CORE_NUM.*$/"${LYNQ_CPU_NUM}"/' $(pwd)/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
+eval sed -i 's/^.*CORE_NUM.*$/"${LYNQ_CPU_NUM}"/' $(pwd)/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
+
+source $(pwd)/update_version.sh
+export TEMPLATECONF=${PWD}/meta/meta-mediatek-mt2735/conf/base/auto2735evb-ivt-main
+source meta/poky/oe-init-build-env
diff --git a/meta-sdk/env-SDK-2CORE.sh b/meta-sdk/env-SDK-2CORE.sh
new file mode 100644
index 0000000..c9efab0
--- /dev/null
+++ b/meta-sdk/env-SDK-2CORE.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+LYNQ_CPU_NUM="CORE_NUM = \"2\""
+eval sed -i 's/^.*CORE_NUM.*$/"${LYNQ_CPU_NUM}"/' $(pwd)/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
+
+export TEMPLATECONF=${PWD}/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main
+source meta/poky/oe-init-build-env
+
diff --git a/meta-sdk/env-SDK.sh b/meta-sdk/env-SDK.sh
index ceb5c01..891fb41 100755
--- a/meta-sdk/env-SDK.sh
+++ b/meta-sdk/env-SDK.sh
@@ -1,4 +1,9 @@
 #!/bin/bash
 
+LYNQ_CPU_NUM="CORE_NUM = \"4\""
+eval sed -i 's/^.*CORE_NUM.*$/"${LYNQ_CPU_NUM}"/' $(pwd)/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
+
 export TEMPLATECONF=${PWD}/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main
 source meta/poky/oe-init-build-env
+
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
index e14d83b..bf92204 100644
--- a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
@@ -226,6 +226,9 @@
 SGMII_SNPS_INTERFACE = "no"
 SGMII_NETSYS_INTERFACE = "yes"
 
+#cpu_core
+CORE_NUM = "4"
+
 #Typethree@2023.2.03 modify for TCXO hw version start
 #TCXO support
 #TCXO_SUPPORT = "no"
@@ -234,4 +237,5 @@
 #xf.li@20230207 modiry for version number start
 LYNQ_CONFIG_VERSION = "T800_UNSET_v02.MP1_MR3.02b06.00.01"
 LYNQ_CONFIG_SW_VERSION = "T800_UNSET_v02.MP1_MR1.01b06.00"
+LYNQ_CONFIG_COMMITID = "1f9f15454"
 #xf.li@20230207 modiry for version number end
diff --git a/meta-sdk/meta/poky/meta/classes/kernel.bbclass b/meta-sdk/meta/poky/meta/classes/kernel.bbclass
index e9fd5cd..83ddf1d 100644
--- a/meta-sdk/meta/poky/meta/classes/kernel.bbclass
+++ b/meta-sdk/meta/poky/meta/classes/kernel.bbclass
@@ -161,6 +161,8 @@
 #export KBUILD_BUILD_USER ?= "oe-user"
 #export KBUILD_BUILD_HOST ?= "oe-host"
 export LYNQ_VERSION ?= "${LYNQ_CONFIG_VERSION}"
+export COMMITID ?= "${LYNQ_CONFIG_COMMITID}"
+export CORE_NUM ?= "${CORE_NUM}"
 #LXF 2022.10.12 modify for T8TSK-91 in sdk end
 KERNEL_RELEASE ?= "${KERNEL_VERSION}"
 
diff --git a/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf b/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
index 17ea920..8a347cb 100755
--- a/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
+++ b/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
@@ -201,6 +201,9 @@
 SGMII_SNPS_INTERFACE = "no"
 SGMII_NETSYS_INTERFACE = "yes"
 
+#cpu_core
+CORE_NUM = "4"
+
 #Typethree@2023.2.01 modify for TCXO hw version start
 #TCXO support
 #TCXO_SUPPORT = "no"
@@ -210,4 +213,5 @@
 #xf.li@20230207 modiry for version number start
 LYNQ_CONFIG_VERSION = "T800_UNSET_v02.MP1_MR3.02b06.00.01"
 LYNQ_CONFIG_SW_VERSION = "T800_UNSET_v02.MP1_MR1.01b06.00"
+LYNQ_CONFIG_COMMITID = "1f9f15454"
 #xf.li@20230207 modiry for version number end
diff --git a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/config_pcie.trxse b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/config_pcie.trxse
index dfc7f6a..e1ed89b 100755
--- a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/config_pcie.trxse
+++ b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/config_pcie.trxse
Binary files differ
diff --git a/meta/poky/meta/classes/kernel.bbclass b/meta/poky/meta/classes/kernel.bbclass
index f85849f..235be45 100644
--- a/meta/poky/meta/classes/kernel.bbclass
+++ b/meta/poky/meta/classes/kernel.bbclass
@@ -161,6 +161,8 @@
 #export KBUILD_BUILD_USER ?= "oe-user"
 #export KBUILD_BUILD_HOST ?= "oe-host"
 export LYNQ_VERSION ?= "${LYNQ_CONFIG_VERSION}"
+export COMMITID ?= "${LYNQ_CONFIG_COMMITID}"
+export CORE_NUM ?= "${CORE_NUM}"
 #LXF 2022.10.10 modify for T8TSK-91 end
 KERNEL_RELEASE ?= "${KERNEL_VERSION}"
 
diff --git a/mk_sdk_2core.sh b/mk_sdk_2core.sh
new file mode 100755
index 0000000..78c8420
--- /dev/null
+++ b/mk_sdk_2core.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+rm -rf ./build/tmp/deploy/images/sdk/downloads
+rm -rf ./build/tmp/deploy/images/sdk/meta
+TOPDIR=$(pwd)
+ln -s ${TOPDIR}/downloads ./build/tmp/deploy/images/sdk/downloads
+cp -r ${TOPDIR}/meta-sdk/* ./build/tmp/deploy/images/sdk/
+cd  ${TOPDIR}/build/tmp/deploy/images/sdk/
+sleep 2s
+chmod 777 env-SDK-2CORE.sh
+.  ./env-SDK-2CORE.sh
+cd ../
+chmod 777 make.sh
+./make.sh
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/wl_cfg80211.c
index 19021bf..5735440 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/wl_cfg80211.c
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/wl_cfg80211.c
@@ -12099,7 +12099,7 @@
 		WL_ERR(("SET INFRA error %d\n", err));
 		goto exit;
 	}
-
+	
 	/* Do abort scan before creating GO */
 	wl_cfg80211_scan_abort(cfg);
 
@@ -12945,7 +12945,14 @@
 		err = -EINVAL;
 		goto fail;
 	}
-
+	
+	/* Turn off mpc for AP/GO */
+	WL_ERR(("set mpc 0 \n"));
+	err = wldev_iovar_setint_bsscfg(dev, "mpc", 0, bssidx);
+	if (err < 0) {
+		WL_ERR(("MPC setting failed, ret=%d\n", err));
+		goto fail;
+	}
 #if ((LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)) && !defined(WL_COMPAT_WIRELESS))
 	if ((err = wl_cfg80211_set_channel(wiphy, dev,
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2)) || \
diff --git a/src/kernel/linux/v4.19/scripts/mkcompile_h b/src/kernel/linux/v4.19/scripts/mkcompile_h
index 4aaaa32..69887f6 100755
--- a/src/kernel/linux/v4.19/scripts/mkcompile_h
+++ b/src/kernel/linux/v4.19/scripts/mkcompile_h
@@ -51,9 +51,6 @@
 	LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST
 fi
 #LXF 2022.10.10 modify for T8TSK-91 start
-COMMITID=$(git rev-parse --short HEAD)
-#LYNQ_VERSION="T800_UNSET_v02.MP1_MR3.02b06.00.01"
-
 UTS_VERSION="#$VERSION"
 CONFIG_FLAGS=""
 if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
@@ -75,7 +72,7 @@
   echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
 #LXF 2022.10.10 modify for T8TSK-91 start
   printf '#define LINUX_COMPILE_BY "%s"\n' "$LINUX_COMPILE_BY"
-  printf '#define LYNQ_VERSION "%s"\n' "$LYNQ_VERSION"
+  printf '#define LYNQ_VERSION "%s"\n' "$LYNQ_VERSION core_num=$CORE_NUM"
   #echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
 #LXF 2022.10.10 modify for T8TSK-91 end
   echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
diff --git a/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp b/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp
index c4b0375..fc4d4ec 100755
--- a/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp
+++ b/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp
@@ -83,38 +83,111 @@
     pclose(fp);

 }

 

+int set_campare(char dev_buf[][40],char *buf_str[3])

+{

+    FILE *fp;

+    int k = 15;

+    int j;

+    char lynq_usb_buf[256] = {0};

+    char buf[256] = {0};

+    for(j=0;j++;j<3)

+    {

+        sprintf(lynq_usb_buf,"cat /sys/class/leds/led95%d:%s",k++, dev_buf[j]);

+        fp=popen(lynq_usb_buf, "r");

+        fgets(buf, sizeof(buf), fp);

+        if(strcmp(buf,buf_str[j]))

+        {

+            pclose(fp);

+            return -1;

+        }

+        pclose(fp);

+    }

+    return 0;

+}

 void lynq_handle_sink(char *input)

 {

     FILE *fp;

-    char lynq_usb_dev[512] = {0};

-    char lynq_usb_buf[512] = {0};

-    char buf[512] = {0};

-    int sink[3][3] = {{255,0,0},{0,255,0},{0,0,255}};

-    char dev_buf[][40]={{"green:cellular-radio/brightness"},{"green:cellular-quality/brightness"},{"red:system/brightness"}};

-    int i;

-    int j;

-    int k = 15;

+    time_t start,end;

+    char lynq_usb_dev[256] = {0};

+    char lynq[256] = {0};

+    char char_buf[16] = {0};

     char flag_buf[64] = {0};

-    for(i = 0;i < 3;i++){

+    int sink[3][3] = {{255,0,0},{0,255,0},{0,0,255}};

+    char dev_buf[][40] = {{"green:cellular-radio/brightness"},{"green:cellular-quality/brightness"},{"red:system/brightness"}};

+    char *str_buf[3] = {"0","0","0"};

+    int i,j,ret;

+    int state = 0;

+    int k = 15;

+

+    for(i = 0;i < 3;i++)

+    {

         bzero(flag_buf, 64);

-        bzero(lynq_usb_buf, 512);

-        bzero(buf, 512);

         k = 15;

-        for(j = 0;j < 3;j++){

-            bzero(lynq_usb_dev, 512);

-            sprintf(lynq_usb_dev,"echo %d >  /sys/class/leds/led95%d:%s  2>&1", sink[i][j], k++, dev_buf[j]);

-            fp=popen(lynq_usb_dev, "r");

+

+        switch(i)

+        {

+        case 0:

+        {

+            str_buf[0]="255";

+            str_buf[1]="0";

+            str_buf[2]="0";

+            break;

         }

-        usleep(10000);

-        sprintf(lynq_usb_buf,"cat /sys/bus/iio/devices/iio:device1/in_voltage4_input  2>&1");

-        fp=popen(lynq_usb_buf, "r");

-        

-        fgets(buf, sizeof(buf), fp);

-        sprintf(flag_buf, "%s%d%s%s%s", "SINK[", i+1, "]: ", buf, "\n");

-        handle_output(flag_buf, strlen(flag_buf), Response);

+

+        case 1:

+        {

+            str_buf[0]="0";

+            str_buf[1]="255";

+            str_buf[2]="0";

+            break;

+        }

+

+        case 2:

+        {

+            str_buf[0]="0";

+            str_buf[1]="0";

+            str_buf[2]="255";

+            break;

+        }

+        }

+        for(int h=0;h<20;h++)

+        {

+            for(j = 0;j < 3;j++)

+            {

+                bzero(lynq_usb_dev, 256);

+                sprintf(lynq_usb_dev,"echo %d >  /sys/class/leds/led95%d:%s  2>&1", sink[i][j], k++, dev_buf[j]);

+                fp=popen(lynq_usb_dev, "r");

+                pclose(fp);

+            }

+            bzero(char_buf,16);

+            if(set_campare(dev_buf,str_buf))

+            {

+                RLOGD("pre_campare fail %s line %d input %s\n", __FUNCTION__, __LINE__, input);

+                continue;

+            }

+            sprintf(lynq,"cat /sys/bus/iio/devices/iio:device1/in_voltage4_input  2>&1");

+            fp=popen(lynq, "r");

+            fgets(char_buf, sizeof(char_buf), fp);

+

+            if(set_campare(dev_buf,str_buf))

+            {

+                RLOGD("behand_campare fail %s line %d input %s\n", __FUNCTION__, __LINE__, input);

+                continue;

+            }

+            sprintf(flag_buf, "%s%d%s%s%s", "SINK[", i+1, "]: ", char_buf, "\n");

+            handle_output(flag_buf, strlen(flag_buf), Response);

+            state =1;

+            break;

+        }

+        if(state == 0)

+        {

+            sprintf(flag_buf, "%s%d%s%s%s", "SINK[", i+1, "]: ", char_buf, "\n");

+            handle_output(flag_buf, strlen(flag_buf), Response);

+        }

     }

-    lynq_response_ok();

     pclose(fp);

+    lynq_response_ok();

+    return;

 }

 

 void lynq_handle_emmc(char *input)

diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index 98dad03..5e551a5 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -784,6 +784,8 @@
     return 0;
 }
 int get_imsi();
+int check_apn_status();
+int radio_switch(int status);
 int lynq_init_data(int uToken)
 {
     if (g_lynq_data_init_flag == 1)
@@ -817,7 +819,28 @@
         return -1;
     }
     memset(lynq_apn_table,0,sizeof(lynq_apn_table));
+    LYINFLOG("[%s] radio on/off solution 20230724",__FUNCTION__);
     int count = 0;
+    while(count < 2)//try recover the network within 10s.
+    {
+        result =  check_apn_status();
+        if(result==0)
+        {
+            break;
+        }
+        radio_switch(0);
+        sleep(1);
+        radio_switch(1);
+        sleep(3);
+        count++;
+    }
+    LYINFLOG("[%s] count is %d",__FUNCTION__,count);
+    if(result!=0)
+    {
+        LYDBGLOG("lynq init call fail!!!");
+        return LYNQ_E_MD_NOT_READY;//
+    }
+    /* old
     while(count < 10)
     {
         result =  get_imsi();
@@ -834,6 +857,7 @@
         LYDBGLOG("lynq init call fail!!!");
         return LYNQ_E_MD_NOT_READY;//
     }
+    */
     LYDBGLOG("lynq init call success!!!");
     return 0;
 
@@ -1716,18 +1740,6 @@
     lynq_client_t client;
     char argc[512];
     int res = -1;
-    int count = 0;
-    while(count < 10)
-    {
-        res =  get_imsi();
-        if(res==0)
-        {
-            break;
-        }
-        sleep(1);
-        count++;
-    }
-    LYINFLOG("[%s] count is %d",__FUNCTION__,count);
     if (cmd == 0) // insert apn db
     {
         res = insert_apn_char(argc, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
@@ -1842,3 +1854,96 @@
     return 0;
 }
 /*Typethree add for T800 platform 2022/04/21 end*/
+static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len) {
+    FILE *fp;
+    //printf("to exec cmd:%s\n", str_cmd);
+    if((fp=popen(str_cmd,"r"))==NULL)
+    {
+        perror("popen error!");
+        return -1;
+    }
+    if((fread(str_cmd_ret,max_len,1,fp))<0)
+    {
+        perror("fread fail!");
+        fclose(fp);
+        return -1;
+    }
+    fclose(fp);
+    return 0;
+}
+int check_apn_status()
+{
+    LYINFLOG("check_apn_status enter");
+    int ret = -1;
+    char cmd_ret[8] ={0};//get mccmnc
+    const char *cmd = "uci get radio_property.property.vendor_ril_data_gsm_mcc_mnc0";
+    const char *empty_str = ":empty";
+    ret = exec_cmd(cmd,cmd_ret,8);
+    if(ret==0)
+    {
+        if(strlen(cmd_ret)==0)
+        {
+            LYERRLOG("not have mccmnc config in uci ram");
+            return 1;
+        }
+        if(strncmp(cmd_ret,empty_str,strlen(empty_str))==0)
+        {
+            LYERRLOG("mccmnc is empty");
+            return 2;
+        }
+        LYINFLOG("mccmnc is %s",cmd_ret);
+        return 0;
+    }
+    else
+    {
+        LYERRLOG("exec cmd fail");
+        return -1;
+    }
+    return 0;
+}
+int radio_switch(int status)
+{
+    Parcel *p =NULL;
+    lynq_client_t client;
+    int resp_type = -1;
+    int token;
+    int request = -1;
+    int slot_id = -1;
+    int error = -1;
+    int version =0;
+    int num = 0;
+    char *temp_char = NULL;
+    char mccmnc[32] = {0};
+    char mccmnckey[64] = {0};
+    client.uToken = get_utoken();
+    client.request = 59;//RIL_REQUEST_OEM_HOOK_RAW 59
+    client.paramLen = 1;
+    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+    sprintf(client.param,"AT+CFUN=%d",status);
+    LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+    pthread_mutex_lock(&g_lynq_data_sendto_mutex);
+    if(send_request(lynq_client_sockfd,&client)==-1)
+    {
+        LYERRLOG("send request fail");
+        perror("[LYNQ_DATA] send request fail:");
+        pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
+        return -1;
+    }
+    //get_response(lynq_client_sockfd,p);
+    error = wait_response(lynq_client_sockfd,p,client.uToken);
+    if(error!=0)
+    {
+        LYERRLOG("wait_response fail,ret:%d",error);
+        pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
+        return error;
+    }
+    pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
+    if(JumpHeader(p,&resp_type,&client.uToken,&request,&slot_id,&error)!=0)
+    {
+        LYERRLOG("JumpHeader fail");
+        return -1;
+    }
+    LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,client.uToken,request,slot_id,error);
+    free_parcel(p);
+    return error;
+}
diff --git a/src/lynq/lib/liblynq-wifi6/include/libwifi6.h b/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
index 34a6ec8..8caf003 100755
--- a/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
+++ b/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
@@ -173,6 +173,8 @@
 //start scan availbale ap active
 int lynq_wifi_sta_start_scan(lynq_wifi_index_e idx);
 
+//add for STA auto connect
+int lynq_wifi_sta_stop_net(lynq_wifi_index_e idx,int networkid);
 /*
  * event usage:
  * first declare a funcion like AP_CALLBACK_FUNC_PTR to recv messge from wifi lib
@@ -207,6 +209,9 @@
 typedef void(*STA_CALLBACK_FUNC_PTR)(void *priv, lynq_wifi_sta_status_s status, error_number_s number);
 int lynq_reg_sta_event_callback(void * priv, STA_CALLBACK_FUNC_PTR cb);
 int lynq_unreg_sta_event_callback(void * priv);
+typedef void(*STA_AUTO_CALLBACK_FUNC_PTR)(void *priv, lynq_wifi_sta_status_s status, error_number_s number,int networkid);
+int lynq_reg_sta_auto_event_callback(void * priv, STA_AUTO_CALLBACK_FUNC_PTR cb);
+int lynq_unreg_sta_auto_event_callback(void * priv);
 
 //get current ap status
 int lynq_get_ap_status(lynq_wifi_index_e idx, lynq_wifi_ap_run_status_s * ap_status);
diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index b9658b9..c9efeb6 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -51,10 +51,16 @@
 volatile int g_sta_scan_finish_flag = 1;
 volatile int g_sta_watcher_started_flag = 0;
 
+pthread_t g_sta_auto_watcher_pid = 0;
+volatile int g_sta_auto_watcher_stop_flag = 0;
+volatile int g_sta_auto_scan_finish_flag = 1;
+volatile int g_sta_auto_watcher_started_flag = 0;
 void * g_ap_callback_priv = NULL;
 AP_CALLBACK_FUNC_PTR g_ap_callback_func = NULL;
 void * g_sta_callback_priv = NULL;
 STA_CALLBACK_FUNC_PTR g_sta_callback_func = NULL;
+void * g_sta_auto_callback_priv = NULL;
+STA_AUTO_CALLBACK_FUNC_PTR g_sta_auto_callback_func = NULL;
 
 //const char * CTRL_PATH="/var/run/wpa_supplicant";
 const char * CTRL_PATH[2] = {"/var/run/wpa_supplicant/wlan0", "/var/run/wpa_supplicant/ap0"};
@@ -89,6 +95,8 @@
 static pthread_mutex_t s_check_wpa_ctrl_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t s_sta_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t s_ap_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
+// add for auto connect
+static pthread_mutex_t s_sta_auto_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static struct local_wpa_ctrl * g_lynq_wpa_ctrl[2] = {0};
 
@@ -463,6 +471,15 @@
                     }
                 }
             }
+            else if (strstr(msg_notify, "WoWLAN is enabled") != NULL || strstr(msg_notify, "Failed to start AP functionality") != NULL || strstr(msg_notify, "Could not connect to kernel driver") != NULL )
+            {
+                RLOGD("APWatcherThreadProc ap------> service error");
+                inner_notify_ap_msg(LYNQ_WIFI_SERVICE_ABNORMAL);
+            }
+            else
+            {
+                RLOGD("APWatcherThreadProc ap------> going on check next msg");
+            }
             //you.chen add for tv-box end
         } // end if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len))
     } // end while (g_ap_watcher_stop_flag == 0)
@@ -514,9 +531,28 @@
     pthread_mutex_unlock(&s_global_check_mutex);
 }
 
+static int lynq_wifi_sta_stop_network(lynq_wifi_index_e idx,int networkid)
+{
+    char LYNQ_DISABLE_CMD[128]={0};
+    
+    CHECK_IDX(idx, CTRL_STA);
+    CHECK_WPA_CTRL(CTRL_STA);
+    
+    sprintf(LYNQ_DISABLE_CMD,"DISABLE_NETWORK %d",networkid);
+    RLOGD("LYNQ_DISABLE_CMD is:%d\n",LYNQ_DISABLE_CMD);
+    DO_OK_FAIL_REQUEST(LYNQ_DISABLE_CMD);
+    
+    return 0;
+    
+}
+
+
 void get_state_error(const char* modify, lynq_wifi_sta_status_s* state, error_number_s* error)
 {
     char *pReason;
+    char *wpanetid;
+    char destid[3] = {0};
+    int tmpdisid = -1;
     *error = LYNQ_WAIT_CONNECT_ACTIVE;
     if (strstr(modify, "CTRL-EVENT-SCAN-RESULTS") != NULL)
     {
@@ -534,6 +570,15 @@
 
     if (strstr(modify, "CTRL-EVENT-SSID-TEMP-DISABLED") != NULL)
     {
+        *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+        wpanetid = strstr(modify,"id=");
+        if ( wpanetid != NULL )
+        {
+            wpanetid +=strlen("id=");
+            memcpy(destid,wpanetid,2);
+            tmpdisid = atoi(destid);
+
+        }
         pReason = strstr(modify, "reason=");
         if (pReason != NULL)
         {
@@ -545,21 +590,23 @@
             else if (memcmp(pReason, "WRONG_KEY", 9) == 0)
             {
                 *error = LYNQ_PSW_ERROR;
+                // tmp fix sta autoconnect connect and disconnect
+                if(tmpdisid != -1 && lynq_wifi_sta_stop_network(0,tmpdisid) != 0)
+                {
+                    RLOGE("stop wlan0 network %d fail",tmpdisid);
+                }
             }
             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;
         }
+        RLOGD("CTRL-EVENT-SSID-TEMP-DISABLED state:%d,error:%d,tmpnetid:%d",*state,*error,tmpdisid);
+        return;
 
     }
 
@@ -632,6 +679,142 @@
 
 }
 
+void get_state_error_networkid(const char* modify, lynq_wifi_sta_status_s* state, error_number_s* error,int *networkid)
+{
+    char *pReason;
+    char *wpanetid;
+    char destid[3];
+    *error = LYNQ_WAIT_CONNECT_ACTIVE;
+    *networkid = -1;
+    if (strstr(modify, "CTRL-EVENT-SCAN-RESULTS") != NULL)
+    {
+        *state = LYNQ_WIFI_STA_STATUS_SCAN_RESULT;
+        RLOGD("CTRL-EVENT-SCAN-RESULTS state:%d,error:%d,,networkid:%d\n",*state,*error,*networkid);
+        return;
+    }
+    if (strstr(modify, "CTRL-EVENT-CONNECTED") != NULL)
+    {
+        RLOGD("[xiong]:wpanetid = strstrmodify;\n");
+        wpanetid = strstr(modify,"id=");
+        if ( wpanetid != NULL )
+        {
+            wpanetid +=strlen("id=");
+            RLOGD("[xiong]:memcpy(destid,wpanetid,0\n");
+            if (memcpy(destid,wpanetid,2) != NULL)
+            {
+                 RLOGD("[xiong]:memcpy(destid,wpanetid,1\n");
+                *networkid = atoi(destid);
+                RLOGD("get networkid is %d\n",*networkid);
+            }
+             RLOGD("[xiong]:memcpy(destid,wpanetid,2\n");
+        }
+        *state = LYNQ_WIFI_STA_STATUS_CONNECT;
+        RLOGD("CTRL-EVENT-CONNECTED state:%d,error:%d,networkid:%d\n",*state,*error,*networkid);
+        return;
+    }
+    if (strstr(modify, "CTRL-EVENT-SSID-TEMP-DISABLED") != NULL)
+    {
+        wpanetid = strstr(modify,"id=");
+        if ( wpanetid != NULL )
+        {
+            wpanetid +=strlen("id=");
+            if (memcpy(destid,wpanetid,2) != NULL)
+            {
+                *networkid = atoi(destid);
+                RLOGD("get networkid is %d\n",*networkid);
+            }
+        }
+        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_CONNECT_FAIL;
+            RLOGD("CTRL-EVENT-SSID-TEMP-DISABLED state:%d,error:%d,networkid:%d\n",*state,*error,*networkid);
+            return;
+        }
+        else
+        {
+            *error = LYNQ_UNSPECIFIED_REASON;
+            *state = LYNQ_WIFI_STA_STATUS_CONNECT_FAIL;
+            return;
+        }
+    }
+    if (strstr(modify, "CTRL-EVENT-ASSOC-REJECT") != NULL)
+    {
+        wpanetid = strstr(modify,"id=");
+        if ( wpanetid != NULL )
+        {
+            wpanetid +=strlen("id=");
+            if (memcpy(destid,wpanetid,2) != NULL)
+            {
+                *networkid = atoi(destid);
+                RLOGD("get networkid is %d\n",*networkid);
+            }
+        }
+        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,networkid:%d\n",*state,*error,*networkid);
+             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£¬networkid:%d\n",*state,*error,*networkid);
+            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,networkid:%d\n",*state,*error,*networkid);
+        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,networkid:%d\n",*state,*error,*networkid);
+        return;
+    }
+    RLOGD("EVENT : %s\n", modify);
+    *error = LYNQ_UNSPECIFIED_REASON;
+    *state = LYNQ_WIFI_STATUS_EGNORE;
+    RLOGD("LAST : STA state:%d,error:%d,network:%d\n",*state,*error,*networkid);
+    return;
+}
 static void notify_connect_status(lynq_wifi_sta_status_s state, error_number_s error)
 {
     pthread_mutex_lock(&s_sta_callback_mutex);
@@ -643,6 +826,17 @@
     }
     pthread_mutex_unlock(&s_sta_callback_mutex);
 }
+static void notify_auto_connect_status(lynq_wifi_sta_status_s state, error_number_s error,int networkid)
+{
+    pthread_mutex_lock(&s_sta_callback_mutex);
+    if (g_sta_callback_func != NULL && state != LYNQ_WIFI_STATUS_EGNORE)
+    {
+        RLOGD("STAWatcherThreadProc callback begin ------> %d %d %d\n", state, error,networkid);
+        g_sta_auto_callback_func(g_sta_auto_callback_priv, state, error,networkid);
+        RLOGD("STAAutoWatcherThreadProc callback end ------> %d %d %d\n", state, error,networkid);
+    }
+    pthread_mutex_unlock(&s_sta_callback_mutex);
+}
 
 static void STAWatcherThreadProc() {
     size_t len = MAX_RET;
@@ -705,6 +899,62 @@
         wpa_ctrl_close(lynq_wpa_ctrl);
     }
 }
+static void STAAutoWatcherThreadProc() {
+    size_t len = MAX_RET;
+    char msg_notify[MAX_RET];
+    error_number_s error;
+    lynq_wifi_sta_status_s state, last_state = -1;
+    int idle_count = 0;
+    int networkid;
+    struct wpa_ctrl *lynq_wpa_ctrl = NULL;
+    g_sta_auto_watcher_stop_flag = 0;
+    RLOGD("STAAutoWatcherThreadProc thread started ------");
+    while (g_sta_auto_watcher_stop_flag == 0)
+    {
+        if (check_pending_msg(&lynq_wpa_ctrl, CTRL_STA, &idle_count, &g_sta_auto_watcher_started_flag) != 1)
+        {
+            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("STAAutoWatcherThreadProc sta ------> %s\n", msg_notify);
+            if (strstr(msg_notify, state_scan_result) != NULL)
+            {
+                g_sta_auto_scan_finish_flag = 1;
+            }
+            if (g_sta_auto_callback_func == NULL)
+            {
+                continue;
+            }
+            get_state_error_networkid(msg_notify,&state,&error,&networkid); // add net state error network function
+            notify_auto_connect_status(state, error,networkid);
+            if (state != LYNQ_WIFI_STA_STATUS_SCAN_RESULT)
+            {
+                inner_check_connect_error(msg_notify, state, error);
+                if (last_state != state)
+                {
+                    if (state == LYNQ_WIFI_STA_STATUS_CONNECT)
+                    {
+                        system_call_v("%s %s", sta_status_change_script, "connect");
+                    }
+                    else if (state == LYNQ_WIFI_STA_STATUS_DISCONNECT)
+                    {
+                        system_call_v("%s %s", sta_status_change_script, "disconnect");
+                    }
+                }
+                last_state = state;
+            }
+        }
+    }
+    if (lynq_wpa_ctrl != NULL)
+    {
+        wpa_ctrl_detach(lynq_wpa_ctrl);
+        wpa_ctrl_close(lynq_wpa_ctrl);
+    }
+}
 
 // this thread will not exit when lynq_wifi_disable called,to avoid dead lock,take care
 static void GlobalWatcherThreadProc()
@@ -874,16 +1124,20 @@
     pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
     g_ap_watcher_stop_flag = 1;
     g_sta_watcher_stop_flag = 1;
+    g_sta_auto_watcher_stop_flag = 1;
     if (g_ap_watcher_pid != 0)
         pthread_join(g_ap_watcher_pid, NULL);
     if (g_sta_watcher_pid != 0)
         pthread_join(g_sta_watcher_pid, NULL);
+    if (g_sta_auto_watcher_pid != 0)
+        pthread_join(g_sta_auto_watcher_pid, NULL);
     if (g_lynq_wpa_ctrl[0] != NULL)
         wpa_ctrl_close(g_lynq_wpa_ctrl[0]);
     if (g_lynq_wpa_ctrl[1] != NULL)
         wpa_ctrl_close(g_lynq_wpa_ctrl[1]);
     g_ap_watcher_pid = 0;
     g_sta_watcher_pid = 0;
+    g_sta_auto_watcher_pid = 0;
     g_lynq_wpa_ctrl[0] = NULL;
     g_lynq_wpa_ctrl[1] = NULL;
     system("systemctl stop wg870_drv_insmod.service");
@@ -1117,6 +1371,18 @@
                 *p = '\0';
             }
             return 0;
+        }else{
+            usleep( 10 * 1000);
+            ret = exec_cmd(cmd, hostname, 32);
+            if( ret == 0)
+            {
+                p= strchr(hostname, '\n');
+                if(p != NULL )
+                {
+                   *p = '\0';
+                }
+                return 0;
+            }
         }
         hostname[0] = '\0';
         RLOGE("---gethostbyaddr fail\n");
@@ -1270,10 +1536,10 @@
 static lynq_wifi_auth_s convert_max_auth_from_flag(char * flag) {
     if (flag != NULL)
     {
-        if ( strstr(flag, "SHA256") != NULL || strstr(flag,"WPA2-SAE") != NULL || strstr(flag,"SAE-H2E") != NULL)
+        if ( strstr(flag, "SHA256") != NULL || strstr(flag,"WPA2-SAE") != NULL || ( strstr(flag,"SAE-H2E") != NULL &&  strstr(flag,"WPS") == NULL ) )
         {
             return LYNQ_WIFI_AUTH_WPA3_PSK;
-        }else if ( strstr( flag,"SAE-CCMP") != NULL )
+        }else if ( strstr( flag,"SAE-CCMP") != NULL || strstr(flag,"SAE-H2E") != NULL )
         {
             return LYNQ_WIFI_AUTH_WPA2_WPA3_PSK;
         }else if (strstr( flag, "WPA2-PSK") != NULL)
@@ -1296,6 +1562,10 @@
         {
             return LYNQ_WIFI_AUTH_OPEN;
         }
+        else
+        {
+            RLOGD("convert_max_auth_from_flag not-found auth mode");
+        }
     }
 
     return -1;
@@ -2994,7 +3264,6 @@
     curr_state.state = state;
     return inner_get_status_info(interface, &curr_state);
 }
-
 int lynq_wifi_sta_stop(lynq_wifi_index_e idx)
 {
 //    char lynq_disable_network_cmd[MAX_CMD];
@@ -3036,6 +3305,16 @@
     return 0;
 //    return system("connmanctl disable wifi");
 }
+int lynq_wifi_sta_stop_net(lynq_wifi_index_e idx,int networkid)
+{
+    char LYNQ_DISABLE_CMD[128]={0};
+    CHECK_IDX(idx, CTRL_STA);
+    CHECK_WPA_CTRL(CTRL_STA);
+    sprintf(LYNQ_DISABLE_CMD,"DISABLE_NETWORK %d",networkid);
+    RLOGD("LYNQ_DISABLE_CMD is:%d\n",LYNQ_DISABLE_CMD);
+    DO_OK_FAIL_REQUEST(LYNQ_DISABLE_CMD);
+    return 0;
+}
 
 //static int inner_get_sta_info(lynq_wifi_index_e idx, const char * bssid, device_info_s *dev) {
 //    int i, count;
@@ -3423,6 +3702,48 @@
     return -1;
 }
 
+int lynq_reg_sta_auto_event_callback(void * priv, STA_AUTO_CALLBACK_FUNC_PTR cb){
+    if (cb == NULL) 
+    {
+        RLOGE("lynq_reg_sta_auto_event_callback ptr is NULL,plese check!\n");
+        return -1;
+    }
+    pthread_mutex_lock(&s_sta_auto_callback_mutex);
+    g_sta_auto_callback_priv = priv;
+    g_sta_auto_callback_func = cb;
+    pthread_mutex_unlock(&s_sta_auto_callback_mutex);
+    pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+    if (g_sta_auto_watcher_pid == 0 ) {
+        if(pthread_create(&g_sta_auto_watcher_pid,NULL,STAAutoWatcherThreadProc,NULL) < 0)  //create STAAutoWatcherThreadProc
+        {
+            g_sta_auto_watcher_pid = 0;
+            pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+            RLOGE("[wifi error]creat STAWatcherThreadProc fail");
+            return -1;
+        }
+    }
+    pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+    RLOGD("creat STAWatcherTheradProc susccs");
+    return 0;
+}
+int lynq_unreg_sta_auto_event_callback(void * priv) {
+    pthread_mutex_lock(&s_sta_auto_callback_mutex);
+    if (g_sta_auto_callback_priv == priv)
+    {  
+        g_sta_auto_watcher_stop_flag = 1;
+        if (g_sta_auto_watcher_pid != 0)
+        {
+            pthread_join(g_sta_auto_watcher_pid, NULL);
+        }
+    g_sta_auto_watcher_pid = 0;
+        g_sta_auto_callback_func = NULL;
+        g_sta_auto_callback_priv = NULL;
+        pthread_mutex_unlock(&s_sta_auto_callback_mutex);
+        return 0;
+    }
+    pthread_mutex_unlock(&s_sta_auto_callback_mutex);
+    return -1;
+}
 int lynq_get_ap_status(lynq_wifi_index_e idx, lynq_wifi_ap_run_status_s * ap_status)
 {
     char state[MAX_CMD];
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
index afb93ef..49704a1 100755
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
@@ -6663,6 +6663,8 @@
 
     for (int i = 0; i < RIL_SOCKET_NUM; i++) {
         pthread_mutex_init(&s_state_mutex[i], NULL);
+        pthread_mutex_init(&s_pendingUrcMutex[i], NULL);
+        s_fdCommand[i] = -1;
     }
 
     // New rild impl calls RIL_startEventLoop() first
@@ -6691,10 +6693,10 @@
     }
 
     // initialize mutex
-    for (int i = 0; i < RIL_SOCKET_NUM; i++) {
-        pthread_mutex_init(&s_pendingUrcMutex[i], NULL);
-        s_fdCommand[i] = -1;
-    }
+    //for (int i = 0; i < RIL_SOCKET_NUM; i++) {
+    //    pthread_mutex_init(&s_pendingUrcMutex[i], NULL);
+    //    s_fdCommand[i] = -1;
+    //}
     /// @}
     RILJ_register();
 
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
index 137292e..31c801d 100755
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
@@ -327,13 +327,14 @@
         RpApnController *apnController = (RpApnController *)findController(i,
                                     RFX_OBJ_CLASS_INFO(RpApnController));
 
-        char mccmncvalue[32]={0};
+/*        char mccmncvalue[32]={0};
         String8 mccMncKey("");
         mccMncKey.append("vendor.ril.data.gsm_mcc_mnc");
-        mccMncKey.append(String8::format("%d", m_slot_id));
+        mccMncKey.append(String8::format("%d", i));
         property_get(mccMncKey, mccmncvalue,"");
-        getStatusManager()->setString8Value(RFX_STATUS_KEY_GSM_OPERATOR_NUMERIC, String8(mccmncvalue));
+        getStatusManager(i)->setString8Value(RFX_STATUS_KEY_GSM_OPERATOR_NUMERIC, String8(mccmncvalue));
         logD(RFX_LOG_TAG, "[reloadApnDB]mccmnc: %s",mccmncvalue);
+*/
         mccmnc = getStatusManager(i)->getString8Value(RFX_STATUS_KEY_GSM_OPERATOR_NUMERIC, String8(""));
         if (!mccmnc.isEmpty()) {
             logD(RFX_LOG_TAG, "[reloadApnDB]start: %d, dataController->getApnReady() =%d", i, dataController->getApnReady());
@@ -840,7 +841,7 @@
 #endif
     //notify datacontroller
     apnController->apn_ready_singal.postEmit();
-
+    RLOGD("RpApnController::ApnInitThread::threadLoop done!!!");
     return false;
 }
 
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
index 49281fd..6444d4b 100755
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
@@ -230,7 +230,6 @@
 void RpDataController::handleSetupDataRequest(const sp<RfxMessage>& request) {
     logD(RFX_LOG_TAG, "handleSetupDataRequest with clientId: %d, with token: %d",
             request->getClientId(), request->getToken());
-
     if (request->getClientId() > 0) {
         RpDataController::mDcTracker.requestNetwork(request);
     } else {
diff --git a/update_version.sh b/update_version.sh
index 8790303..e3b425f 100644
--- a/update_version.sh
+++ b/update_version.sh
@@ -2,9 +2,14 @@
 
 LYNQ_SW_INSIDE_VERSION="LYNQ_CONFIG_VERSION = \"T800_UNSET_v02.MP1_MR3.02b06.00.01\""
 LYNQ_SW_VERSION="LYNQ_CONFIG_SW_VERSION = \"T800_UNSET_v02.MP1_MR1.01b06.00\""
+COMMIT_ID="$(git rev-parse --short HEAD)"
+LYNQ_COMMITID="LYNQ_CONFIG_COMMITID = \"${COMMIT_ID}\""
 
 eval sed -i 's/^.*LYNQ_CONFIG_VERSION.*$/"${LYNQ_SW_INSIDE_VERSION}"/' $(pwd)/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
 eval sed -i 's/^.*LYNQ_CONFIG_SW_VERSION.*$/"${LYNQ_SW_VERSION}"/' $(pwd)/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
+eval sed -i 's/^.*LYNQ_CONFIG_COMMITID.*$/"${LYNQ_COMMITID}"/' $(pwd)/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
+
 eval sed -i 's/^.*LYNQ_CONFIG_VERSION.*$/"${LYNQ_SW_INSIDE_VERSION}"/' $(pwd)/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
 eval sed -i 's/^.*LYNQ_CONFIG_SW_VERSION.*$/"${LYNQ_SW_VERSION}"/' $(pwd)/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
+eval sed -i 's/^.*LYNQ_CONFIG_COMMITID.*$/"${LYNQ_COMMITID}"/' $(pwd)/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf