Merge "[Bugfix][T106BUG-381]fix  qser_sim_unblockpin error"
diff --git a/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyGgeAmtUser_nvrwo_0x00038400.bin b/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyGgeAmtUser_nvrwo_0x00038400.bin
index 48a44e2..4c6dd9f 100755
--- a/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyGgeAmtUser_nvrwo_0x00038400.bin
+++ b/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyGgeAmtUser_nvrwo_0x00038400.bin
Binary files differ
diff --git a/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyLteaAmtUser_nvrwo_0x0003C800.bin b/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyLteaAmtUser_nvrwo_0x0003C800.bin
index 1d21a9a..ae19b25 100755
--- a/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyLteaAmtUser_nvrwo_0x0003C800.bin
+++ b/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyLteaAmtUser_nvrwo_0x0003C800.bin
Binary files differ
diff --git a/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyWcdmaAmtUser_nvrwo_0x0003A000.bin b/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyWcdmaAmtUser_nvrwo_0x0003A000.bin
index 1c458bf..854310c 100755
--- a/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyWcdmaAmtUser_nvrwo_0x0003A000.bin
+++ b/allbins/zx297520v3/prj_vehicle/nv_dc_ref/phyWcdmaAmtUser_nvrwo_0x0003A000.bin
Binary files differ
diff --git a/ap/app/zte_comm/at_ctl/src/atconfig/ps_sms.c b/ap/app/zte_comm/at_ctl/src/atconfig/ps_sms.c
index 55bd76b..f71c254 100755
--- a/ap/app/zte_comm/at_ctl/src/atconfig/ps_sms.c
+++ b/ap/app/zte_comm/at_ctl/src/atconfig/ps_sms.c
@@ -700,14 +700,19 @@
 }

 

 #endif

-/*Öն˲àÖ§³Ö¶ÌÐÅʱ²ÅÐèÒª½âÎö£¬Öն˲àÖ»Ö§³Öpdu¸ñʽ¶ÌÐÅ*/

+

+extern int g_modem_model;//jb.qi add for it will be awakened by sms after setting  up the whiltelist on 20231218

+extern int g_support_sms;//jb.qi add for it will be awakened by sms after setting  up the whiltelist on 20231218

 int atSms_RecvPdu( char *at_str, struct at_context *context)

 {

-    char needModemInit[10] = {0};

+    /*jb.qi add for it will be awakened by sms after setting  up the whiltelist on 20231218 start*/

+    /*char needModemInit[10] = {0};

     char needSmsInit[10] = {0};

     sc_cfg_get(NV_NEED_SUPPORT_SMS,needSmsInit,sizeof(needSmsInit));

     sc_cfg_get("need_init_modem",needModemInit,sizeof(needModemInit));

-    if(0 == strcmp(needModemInit, "yes") && 0 != strcmp(needSmsInit, "no"))

+    if(0 == strcmp(needModemInit, "yes") && 0 != strcmp(needSmsInit, "no"))*/

+    if((g_modem_model == 1) && (g_support_sms == 1))

+    /*jb.qi add for it will be awakened by sms after setting  up the whiltelist on 20231218 end*/

     {    

         //at_print(AT_DEBUG,"atSms_RecvPdu atstr:%s, bNewCmt:%d, bNewCds:%d!\n", at_str, bNewCmt, bNewCds);		

         if(context != NULL)

diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-autosuspend-demo/files/lynq-qser-autosuspend-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-autosuspend-demo/files/lynq-qser-autosuspend-demo.cpp
index fdeb548..9fa09c2 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-autosuspend-demo/files/lynq-qser-autosuspend-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-autosuspend-demo/files/lynq-qser-autosuspend-demo.cpp
@@ -13,6 +13,31 @@
 
 #define MAX_LOCK_NUM 128
 
+static void qser_lpm_handler(qser_lpm_edge_t edge_state)
+{
+    printf("this is qser_lpm_handler\n");
+
+}
+
+static void printUsage(void)
+{
+    printf("-i                  --qser_lpm_init\n");
+    printf("-d                  --qser_lpm_deinit\n");
+    printf("-q                  --quit\n");
+    printf("-e                  --qser_autosuspend_enable\n");
+    printf("-cl [wakelock name] --qser_wakelock_create \n");
+    printf("-al [wakelock num]  --qser_wakelock_lock \n");
+    printf("-rl [wakelock num]  --qser_wakelock_unlock \n");
+    printf("-dl [wakelock num]  --qser_wakelock_destroy\n");
+    printf("-ccl                --check created locks\n");
+    printf("-cll                --check lockup locks\n");
+    printf("-wla [id]           --qser_whitelist_add\n");
+    printf("-wld [id]           --qser_whitelist_del\n");
+    printf("-wlg                --qser_whitelist_get\n");
+    printf("-wlc                --qser_whitelist_clear\n");
+    printf("Please input an cmd:");
+}
+
 
 int check_lock(void)
 {
@@ -50,200 +75,212 @@
 
 }
 
+
+void delete_enter(char *data)
+{
+    char *find = strchr(data, '\n');
+    if(find)
+        *find = '\0';
+    return ;
+}
+
 int main(int argc,char** argv)
 {
 
     int num;
     int ret;
     int len;
+    char cmd[16];
+    char *cmd2;
+    char *cmd1;
+    qser_pm_cfg_t *qser_lpm_cfg = NULL;
+    qser_lpm_cfg = (qser_pm_cfg_t *)malloc(sizeof(qser_pm_cfg_t));
+    qser_lpm_cfg->wakeupin.wakeupin_pin = 50;
+    qser_lpm_cfg->wakeupin.wakeupin_edge = E_QL_LPM_FALLING;
+    while(1)
+    {
+        printUsage();
+        memset(cmd,0,sizeof(cmd));
+        fgets(cmd, sizeof(cmd), stdin);
+        cmd1 = strtok(cmd, " ");
+        cmd2 = strtok(NULL, " ");
+        delete_enter(cmd1);
+        printf("cmd1:%s\n", cmd1);
+        if(strcmp(cmd1,"-i") == 0)
+        {
+            ret = qser_lpm_init( qser_lpm_handler, qser_lpm_cfg);
+            if(ret != 0)
+            {
+                printf("lpm init fail\n");
+                break;
+            }
+            else
+            {
+                printf("lpm init success\n");
+            }
+        }
+        else if(strcmp(cmd1,"-e") == 0)
+        {
+            char num='1';
+            ret = qser_autosuspend_enable(num);
+            if(ret != 0)
+            {
+                printf("qser_autosuspend_enable fail\n");
+            }
+            else
+            {
+                printf("qser_autosuspend_enable success\n");
+            }
+        }
+        else if(strcmp(cmd1,"-cl") == 0)
+        {
+            if(cmd2 == NULL)
+            {
+                printf("name is null\n");
+            }
+            len = strlen(cmd2);
+            printf("len =%d\n", len);
+            ret = qser_wakelock_create(cmd2, len);
+            if(ret < 0)
+            {
+                printf("wakelock create fail\n");
+                printf("ret=%d\n", ret);
+            }
+            else
+            {
+                printf("wakelock create success\n");
+                printf("fd=%d\n", ret);
+            }
+        }
+        else if (strcmp(cmd1,"-al") == 0)
+        {
+             if(cmd2 == NULL)
+            {
+                printf("fd is null\n");
+            }
+            num = atoi(cmd2);
+            ret = qser_wakelock_lock(num);
+            if(ret != 0)
+            {
+                printf("wakelock lock fail\n");
+                printf("ret=%d\n", ret);
+            }
+            else
+            {
+                printf("wakelock lock success\n");
+            }
+        }
 
-    if(argc < 2)
-    {
-        printf("wrong input format, please -h \n");
-        return -1;
-    }
-    if(strcmp(argv[1],"-h") == 0)
-    {
-        printf("        -h                  --help\n");
-        printf("        -i                  --qseq_lpm_init\n");
-        printf("        -d                  --qser_lpm_deinit\n");
-        printf("        -e                  --qser_autosuspend_enable\n");
-        printf("        -cl [wakelock name] --qser_wakelock_create \n");
-        printf("        -al [wakelock num]  --qser_wakelock_lock \n");
-        printf("        -rl [wakelock num]  --qser_wakelock_unlock \n");
-        printf("        -dl [wakelock num]  --qser_wakelock_destroy\n");
-        printf("        -ccl                --check created locks\n");
-        printf("        -cll                --check lockup locks\n");
-        printf("        -wla [id]           --qser_whitelist_add\n");
-        printf("        -wld [id]           --qser_whitelist_del\n");
-        printf("        -wlg                --qser_whitelist_get\n");
-        printf("        -wlc                --qser_whitelist_clear\n");
-    }
-    else if(strcmp(argv[1],"-d") == 0)
-    {
-        ret = qser_lpm_deinit();
-        if(ret != 0)
+        else if (strcmp(cmd1,"-rl") == 0)
         {
-            printf("lpm deinit fail\n");
+            if(cmd2 == NULL)
+            {
+                printf("fd is null\n");
+            }
+            num = atoi(cmd2);
+            ret = qser_wakelock_unlock(num);
+            if(ret != 0)
+            {
+                printf("wakelock unlock fail\n");
+                printf("ret=%d\n", ret);
+            }
+            else
+            {
+                printf("wakelock unlock success\n");
+            }
         }
-        else
+        else if(strcmp(cmd1,"-dl") == 0)
         {
-            printf("lpm deinit success\n");
+            if(cmd2 == NULL)
+            {
+                printf("fd is null\n");
+            }
+            num = atoi(cmd2);
+            ret = qser_wakelock_destroy(num);
+            if(ret != 0)
+            {
+                printf("wakelock destroy fail\n");
+                printf("ret=%d\n", ret);
+            }
+            else
+            {
+                printf("wakelock destroy success\n");
+            }
         }
-    }
-    else if(strcmp(argv[1],"-e") == 0)
-    {
-        char num='1';
-        ret = qser_autosuspend_enable(num);
-        if(ret != 0)
+        else if(strcmp(cmd1,"-ccl") == 0)
         {
-            printf("qser_autosuspend_enable fail\n");
+            int ret;
+            ret = check_lock();
+            if(ret != 0)
+            {
+                printf("check lock fail\n");
+                printf("ret=%d\n", ret);
+            }
+            else
+            {
+                printf("check lock success\n");
+            }
         }
-        else
+        else if(strcmp(cmd1,"-cll") == 0)
         {
-            printf("qser_autosuspend_enable success\n");
+            int ret;
+            ret = system("cat /sys/power/wake_lock");
+            if(ret != 0)
+            {
+                printf("check created lock fail\n");
+            }
         }
-    }
-    else if(strcmp(argv[1],"-cl") == 0)
-    {
-        if(argv[2] == NULL)
+        else if(strcmp(cmd1,"-wla") == 0)
         {
-            printf("name is null\n");
-            return -1;
+            num = atoi(cmd2);
+            ret = qser_whitelist_add(num);
+            if(ret != 0)
+            {
+                printf("mnet_whitelist_add ret %d.\n", ret);
+            }
+
         }
-        len = strlen(argv[2]);
-        printf("len =%d\n", len);
-        ret = qser_wakelock_create(argv[2], len);
-        if(ret < 0)
+        else if(strcmp(cmd1,"-wld") == 0)
         {
-            printf("wakelock create fail\n");
-            printf("ret=%d\n", ret);
+            num = atoi(cmd2);
+            ret = qser_whitelist_del(num);
+            if(ret != 0)
+            {
+                printf("mnet_whitelist_del ret %d.\n", ret);
+            }
         }
-        else
+        else if(strcmp(cmd1,"-wlg") == 0)
         {
-            printf("wakelock create success\n");
-            printf("fd=%d\n", ret);
+            char* whitelist;
+            qser_whitelist_get(whitelist);
+            printf("mnet_whitelist_get :%s\n",whitelist);
         }
-    }
-    else if (strcmp(argv[1],"-al") == 0)
-    {
-        if(argv[2] == NULL)
+        else if(strcmp(cmd1,"-wlc") == 0)
         {
-            printf("fd is null\n");
-            return -1;
+            ret = qser_whitelist_clear();
+            if(ret != 0)
+            {
+                printf("mnet_whitelist_clear ret %d.\n", ret);
+            }
         }
-        num = atoi(argv[2]);
-        ret = qser_wakelock_lock(num);
-        if(ret != 0)
+        else if(strcmp(cmd1, "-d") == 0)
         {
-            printf("wakelock lock fail\n");
-            printf("ret=%d\n", ret);
+            ret = qser_lpm_deinit();
+            if(ret != 0)
+            {
+                printf("lpm deinit fail\n");
+            }
+            else
+            {
+                printf("lpm deinit success\n");
+            }
         }
-        else
+        else if(strcmp(cmd1,"-q") == 0)
         {
-            printf("wakelock lock success\n");
+            break;
         }
     }
 
-    else if (strcmp(argv[1],"-rl") == 0)
-    {
-        if(argv[2] == NULL)
-        {
-            printf("fd is null\n");
-            return -1;
-        }
-        num = atoi(argv[2]);
-        ret = qser_wakelock_unlock(num);
-        if(ret != 0)
-        {
-            printf("wakelock unlock fail\n");
-            printf("ret=%d\n", ret);
-        }
-        else
-        {
-            printf("wakelock unlock success\n");
-        }
-    }
-    else if(strcmp(argv[1],"-dl") == 0)
-    {
-        if(argv[2] == NULL)
-        {
-            printf("fd is null\n");
-            return -1;
-        }
-        num = atoi(argv[2]);
-        ret = qser_wakelock_destroy(num);
-        if(ret != 0)
-        {
-            printf("wakelock destroy fail\n");
-            printf("ret=%d\n", ret);
-        }
-        else
-        {
-            printf("wakelock destroy success\n");
-        }
-    }
-    else if(strcmp(argv[1],"-ccl") == 0)
-    {
-        int ret;
-        ret = check_lock();
-        if(ret != 0)
-        {
-            printf("check lock fail\n");
-            printf("ret=%d\n", ret);
-        }
-        else
-        {
-            printf("check lock success\n");
-        }
-    }
-    else if(strcmp(argv[1],"-cll") == 0)
-    {
-        int ret;
-        ret = system("cat /sys/power/wake_lock");
-        if(ret != 0)
-        {
-            printf("check created lock fail\n");
-        }
-    }
-    else if(strcmp(argv[1],"-wla") == 0)
-    {
-        num = atoi(argv[2]);
-        ret = qser_whitelist_add(num);
-        if(ret != 0)
-        {
-            printf("mnet_whitelist_add ret %d.\n", ret);
-        }
-
-    }
-    else if(strcmp(argv[1],"-wld") == 0)
-    {
-        num = atoi(argv[2]);
-        ret = qser_whitelist_del(num);
-        if(ret != 0)
-        {
-            printf("mnet_whitelist_del ret %d.\n", ret);
-        }
-    }
-    else if(strcmp(argv[1],"-wlg") == 0)
-    {
-        char* whitelist;
-        qser_whitelist_get(whitelist);
-        printf("mnet_whitelist_get :%s\n",whitelist);
-    }
-    else if(strcmp(argv[1],"-wlc") == 0)
-    {
-        ret = qser_whitelist_clear();
-        if(ret != 0)
-        {
-            printf("mnet_whitelist_clear ret %d.\n", ret);
-        }
-    }
-    else
-    {
-        printf("wrong input format, please -h \n");
-        return -1;
-    }
     return 0;
 
 }
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
index 75da1e1..2e0f71f 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
@@ -6,12 +6,16 @@
 #include <dlfcn.h>

 #include <stdint.h>

 

+

+#define INIT_SUCCESS    0

+

 typedef struct

 {

     int  cmdIdx;

     char *funcName;

 } st_api_test_case;

-    

+

+

 //for server test

 st_api_test_case at_api_testcases[] = 

 {

@@ -26,7 +30,10 @@
     {-1,    NULL}

 };

 

-int src_id = -1;

+ int init_flag = -1;

+ int src_id = -1;

+ void *dlHandle_poweralarm = NULL;

+ 

 typedef int (*lynq_wakealarm_add_cb)(unsigned int src_id, int rtc_id);

 

 int (*lynq_rtc_service_init)(void);

@@ -37,7 +44,6 @@
 int (*lynq_set_poweralarm)(unsigned long time_sec,int src_id);

 int (*lynq_set_wakealarm)(unsigned long time_sec,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify);

 

-void *dlHandle_poweralarm = NULL;

 

 

 void print_help(void)

@@ -125,6 +131,7 @@
     print_help();

     while(1)

     {

+        

         printf("\nplease input cmd index(-1 exit): ");

         scanf("%d", &cmdIdx);

         if(cmdIdx == -1)

@@ -139,92 +146,145 @@
             case 1:

                 {

                     src_id = lynq_rtc_service_init();

+                    if(src_id <= 0)

+                    {

+

+                        printf("RTC service init failed ");

+                        return -1;

+                    }

+                    else

+                    {

+                        init_flag = INIT_SUCCESS;

+                    }

+                    

                     break;

                 }

             case 2:

                 {

-                    int ret = 0;

-                    char tmp_time[32] = {0};

-                    printf("Set poweralarm time,e.g: 60 (seconds)\n");

-                    scanf("%s",tmp_time);

-                    ret = poweralarm(tmp_time,src_id);

-                    if(ret != 0)

+                    

+                    if(init_flag != INIT_SUCCESS)

                     {

-                        printf("set poweralarm failed\n");

-                        return -1;

+                        printf("*****ERROR must init rtc service ,Please reselect *******\n ");

+                    }

+                    else

+                    {

+                        int ret = 0;

+                        char tmp_time[32] = {0};

+                        printf("Set poweralarm time,e.g: 60 (seconds)\n");

+                        scanf("%s",tmp_time);

+                        ret = poweralarm(tmp_time,src_id);

+                        if(ret != 0)

+                        {

+                            printf("set poweralarm failed\n");

+                            return -1;

+                        }

                     }

                 break;

                 }

             case 3:

                 {

-                    int ret = 0;

-                    char tmp_time[32]={0};

-                    int rtc_id = 0;

-                    printf("Set wakealarm time ,e.g: 60  1 (seconds)\n");

-                    scanf("%s%d",tmp_time,&rtc_id);

-                   

-                    ret = wakealarm(tmp_time,src_id,rtc_id,lynq_wakealarm_add_callback);

-                    if(ret != 0)

+                    if(init_flag != INIT_SUCCESS)

                     {

-                        printf("set wakealarm failed\n");

-                        return -1;

+                        printf("*****ERROR must init rtc service ,Please reselect *******\n ");

+                    }

+                    else

+                    {

+                        int ret = 0;

+                        char tmp_time[32]={0};

+                        int rtc_id = 0;

+                        printf("Set wakealarm time ,e.g: 60  1 (seconds)\n");

+                        scanf("%s%d",tmp_time,&rtc_id);

+                   

+                        ret = wakealarm(tmp_time,src_id,rtc_id,lynq_wakealarm_add_callback);

+                        if(ret != 0)

+                        {

+                            printf("set wakealarm failed\n");

+                            return -1;

+                        }

                     }

                     break;

                 }

              case 4:

                 {

-                    int ret = 0;

-                    int rtc_id = 0;

-                    printf("Please input you want cancel rtc timer rtc id\n");

-                    scanf("%d",&rtc_id);

-                    ret = cancel_wakealarm(src_id,rtc_id);

-                    if(ret != 0)

+                    if(init_flag != INIT_SUCCESS)

                     {

-                        printf("Cancel_wakealarm failed!!!");

-                        return -1;

+                        printf("*****ERROR must init rtc service ,Please reselect *******\n ");

+                    }

+                    else

+                    {

+                        int ret = 0;

+                        int rtc_id = 0;

+                        printf("Please input you want cancel rtc timer rtc id\n");

+                        scanf("%d",&rtc_id);

+                        ret = cancel_wakealarm(src_id,rtc_id);

+                        if(ret != 0)

+                        {

+                            printf("Cancel_wakealarm failed!!!");

+                            return -1;

+                        }

                     }

                     break;

                 }

              case 5:

                 { 

-                   int ret = 0; 

-                   unsigned long time_sec = 0;

-                   printf("Input time_sec you want poweralarm,e.g: 60 (seconds)\n");

-                   scanf("%lu",&time_sec);

-                   ret =lynq_set_poweralarm(time_sec,src_id);

-                   printf("ret is %d\n",ret);

-                   if(ret != 0)

-                   {

-                        printf("lynq_set_poweralarm failed\n");

-                        return -1;

-                   }

+                    if(init_flag != INIT_SUCCESS)

+                    {

+                        printf("*****ERROR must init rtc service ,Please reselect *******\n ");

+                    }

+                    else

+                    {

+                        int ret = 0; 

+                        unsigned long time_sec = 0;

+                        printf("Input time_sec you want poweralarm,e.g: 60 (seconds)\n");

+                        scanf("%lu",&time_sec);

+                        ret =lynq_set_poweralarm(time_sec,src_id);

+                        printf("ret is %d\n",ret);

+                        if(ret != 0)

+                        {

+                            printf("lynq_set_poweralarm failed\n");

+                            return -1;

+                        }

+                    }

                    break;

                 }

             case 6:

-                 { 

-                   int ret = 0; 

-                   unsigned long time_sec = 0;

-                   int rtc_id;

-                   printf("Input time_sec you want wakealarm,e.g:60  1(seconds)\n");

-                   scanf("%lu%d",&time_sec,&rtc_id);

-                   ret =lynq_set_wakealarm(time_sec,src_id,rtc_id,lynq_wakealarm_add_callback);

-                   if(ret != 0)

-                   {

-                        printf("lynq_set_wakealarm failed\n");

-                        return -1;

+                { 

+                    if(init_flag != INIT_SUCCESS)

+                    {

+                        printf("*****ERROR must init rtc service ,Please reselect *******\n ");

                    }

+                   else

+                   {

+                        int ret = 0; 

+                        unsigned long time_sec = 0;

+                        int rtc_id;

+                        printf("Input time_sec you want wakealarm,e.g:60  1(seconds)\n");

+                        scanf("%lu%d",&time_sec,&rtc_id);

+                        ret =lynq_set_wakealarm(time_sec,src_id,rtc_id,lynq_wakealarm_add_callback);

+                        if(ret != 0)

+                        {

+                            printf("lynq_set_wakealarm failed\n");

+                            return -1;

+                        }

+                    }

                    break;

                 }

             case 7:

                 {

-                    int ret  = -1;

-                    printf("rtc servce deinit !!!!!!!!!!!!");

-                    ret = lynq_rtc_service_deinit();

-                    if(ret != 0)

+                    if(init_flag != INIT_SUCCESS)

                     {

-                        printf("lynq rtc service deinit failed \n");

-                        return -1;

-

+                        printf("*****ERROR must init rtc service ,Please reselect *******\n ");

+                    }

+                    else

+                    {

+                        int ret  = -1;

+                        printf("rtc servce deinit !!!!!!!!!!!!");

+                        ret = lynq_rtc_service_deinit();

+                        if(ret != 0)

+                        {

+                            printf("lynq rtc service deinit failed \n");

+                            return -1;

+                        }

                     }

                     break;

                 }

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
index 612d968..cc26db6 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
@@ -229,7 +229,7 @@
     int greep = input[0] - '0';

     ALOGD(res,"the greep:%d\n",greep);//The first digit represents grouping

 

-    for (int i = 1; input[i] != '\0'; i++)

+    for (int i = 1; i < strlen(input); i++)

     {

         int num = 0;

         for (; input[i] != ',' && input[i] != '\0'; i++)

@@ -422,6 +422,7 @@
     if((valid_length = lynq_gpio_analysis(input, lynq_gpio_arr, lynq_gpio_total_arr, total_length)) < 0)

     {

         lynq_response_error(100);

+        all_gpio_uninit(total_length, lynq_gpio_total_arr);

         return;

     }

     ALOGE("The Valid count:%d\n",valid_length);

@@ -451,6 +452,7 @@
                 {

                     ALOGE("gpio init or uninit fail\n");

                     lynq_response_error(100);

+                    all_gpio_uninit(total_length, lynq_gpio_total_arr);

                     return;

                 }

                 ALOGD("finsh configure function\n");  

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/lynq-qser-autosuspend.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/lynq-qser-autosuspend.cpp
index e82e2c0..5a88ef7 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/lynq-qser-autosuspend.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/lynq-qser-autosuspend.cpp
@@ -7,6 +7,7 @@
 #include <errno.h>
 #include <pthread.h>
 #include<unistd.h>
+#include <cutils/uevent.h>
 
 #include <lynq_autosuspend.h>
 #include "lynq-qser-autosuspend.h"
@@ -25,6 +26,20 @@
 
 #define USER_LOG_TAG "LYNQ_QSER_AUTOSUSPEND"
 #define FILE_LOCK_TABLE "/tmp/.lock_table"
+#define UEVENT_MSG_LEN 128
+
+
+struct dtr_uevent {
+    const char *action;
+    const char *path;
+    const char *subsystem;
+    const char *usbevent;
+};
+
+static void parse_event(const char *msg, struct dtr_uevent *dtr_uevent);
+
+
+qser_lpm_Handler_t g_lpm_handler = NULL;
 
 
 LOCK_TABLE lock_status;
@@ -32,6 +47,7 @@
 
 int file_fd;
 int first_run = 0;
+pthread_t thid;
 
 
 int lock_table_init(void)
@@ -218,19 +234,84 @@
     return ret;
 }
 
+static void parse_event(const char *msg, struct dtr_uevent *dtr_uevent)
+{
+    dtr_uevent->action = "";
+    dtr_uevent->path = "";
+    dtr_uevent->subsystem = "";
+    dtr_uevent->usbevent = "";
+
+    while (*msg) {
+        if (!strncmp(msg, "ACTION=", 7))
+        {
+            msg += 7;
+            dtr_uevent->action = msg;
+        }
+        else if (!strncmp(msg, "DEVPATH=", 8))
+        {
+            msg += 8;
+            dtr_uevent->path = msg;
+        }
+        else if (!strncmp(msg, "SUBSYSTEM=", 10))
+        {
+            msg += 10;
+            dtr_uevent->subsystem = msg;
+        }
+        else if (!strncmp(msg, "USBEVENT=", 9)) {
+            msg += 9;
+            dtr_uevent->usbevent = msg;
+        }
+
+        while(*msg++);
+    }
+
+    LYINFLOG("event { '%s', '%s', '%s', '%s'}\n",
+                    dtr_uevent->action, dtr_uevent->path, dtr_uevent->subsystem,dtr_uevent->usbevent);
+}
+
+
+
+void *check_dtr(void * arg)
+{
+    int device_fd;
+    qser_lpm_edge_t lpm_edge;
+    char msg[UEVENT_MSG_LEN+2];
+    struct dtr_uevent dtr_uevent;
+    int n;
+    int i;
+ 
+    device_fd = uevent_open_socket(4*UEVENT_MSG_LEN, true);
+    if(device_fd < 0)
+    {
+        LYERRLOG("uevent_open_socket fail\n");
+        return -1;
+    }
+    while(1) 
+    {
+        n = uevent_kernel_multicast_recv(device_fd, msg, UEVENT_MSG_LEN);
+        msg[n] = '\0';
+        msg[n+1] = '\0';
+        parse_event(msg, &dtr_uevent);
+        if((!strcmp(dtr_uevent.subsystem, "xp2xp")) && (!strcmp(dtr_uevent.action, "online")))
+        {
+            g_lpm_handler(lpm_edge);
+        }
+    }
+ 
+    return 0;
+}
+
+
 int qser_lpm_init(qser_lpm_Handler_t qser_lpm_handler, qser_pm_cfg_t *qser_lpm_cfg)
 {
     int ret;
-    ret = system("uci set lynq_uci.lynq_autosuspend.init='1'");
-    system("uci commit");
+    int num;
+
+    g_lpm_handler = qser_lpm_handler;
+    ret = pthread_create(&thid,NULL,check_dtr,NULL);
     if(ret != 0)
     {
-        LYINFLOG("uci set fail");
-    }
-    ret = system("./etc/init.d/lynq-autosuspend.sh restart");
-    if(ret != 0)
-    {
-        LYINFLOG("restart service fail");
+        LYERRLOG("restart service fail");
     }
     return ret;
 }
@@ -239,18 +320,17 @@
 int qser_lpm_deinit(void)
 {
     int ret;
-    system("uci set lynq_uci.lynq_autosuspend.init='0'");
-    system("uci commit");
-    if(ret != 0)
+    ret = pthread_cancel(thid);
+    if(!ret)
     {
-        LYINFLOG("uci set fail");
+        LYERRLOG("pthread cancel success, lpm deinit success\n");
     }
-    system("./etc/init.d/lynq-autosuspend.sh restarts");
-    if(ret != 0)
+    else
     {
-        LYINFLOG("restart service fail");
+        LYERRLOG("pthread cancel fail, lpm deinit fail\n");
     }
-    return 0;
+    return ret;
+
 }
 
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config
index 6d46661..569b224 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config
@@ -32,5 +32,5 @@
         option status '0'

         

 config  lynq_led_rw  'lynq_led'

-        option lynq_statusled_on '1'

-        option lynq_netled_on '1'
\ No newline at end of file
+        option lynq_statusled_on '0'

+        option lynq_netled_on '0'
\ No newline at end of file
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/ethernet/zte/zx29_gmac.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/ethernet/zte/zx29_gmac.c
index 7bc3ed0..650be94 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/ethernet/zte/zx29_gmac.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/ethernet/zte/zx29_gmac.c
@@ -1447,7 +1447,7 @@
     

     prv->gpio_power[0] = of_get_gpio_flags(pdev->dev.of_node, 0, &flags);

 	ret = gpio_request(prv->gpio_power[0], "gmac_power"); /* gpio 83/124 */

-	gpio_direction_output(prv->gpio_power[0], 1);

+	//gpio_direction_output(prv->gpio_power[0], 1);jb.qi add for gmac power off defaultly

 	mdelay(15);

 #ifdef _USE_VEHICLE_DC_REF

 	prv->gpio_power[1] = of_get_gpio_flags(pdev->dev.of_node, 1, &flags);

diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/soc/sc/power_4line/hal_xp2xp.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/soc/sc/power_4line/hal_xp2xp.c
index 5e14b7d..7d75efc 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/soc/sc/power_4line/hal_xp2xp.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/soc/sc/power_4line/hal_xp2xp.c
@@ -333,6 +333,8 @@
 *

 * Others:

 ********************************************************************************/

+

+/*jb.qi add for dtr uevent on 20231218 start*/

 static int xp2xp_wkcp_thread(void *ptr)

 {

 	int call_state = 0;

@@ -340,11 +342,7 @@
 	int ret = 0;

 	unsigned long flags;

 	struct hal_xp2xp_dev *xp2xp_dev = (struct hal_xp2xp_dev *)ptr;

-#if 0

-	struct sched_param sch_param = { .sched_priority = 1 };

-	sch_param.sched_priority = 40;

-	sched_setscheduler(current, SCHED_FIFO, &sch_param);

-#endif

+

 	while(!kthread_should_stop()){

 		ret = down_interruptible(&xp2xp_dev->wk_sem);

 		

@@ -358,43 +356,32 @@
 			}

 			

 		}

-		spin_lock_irqsave(&xp2xp_dev->wk_lock, flags);	

-			if(xp2xp_dev->wake_state){

+		spin_lock_irqsave(&xp2xp_dev->wk_lock, flags);

+		if(xp2xp_dev->wake_state){

 			spin_unlock_irqrestore(&xp2xp_dev->wk_lock, flags);

-				//now wakeup 

 			xp2xp_notify_up(WAKEUP_NOTIFY);

-			

-			xp2xp_dev->wake_cnt++;	

-#ifdef CONFIG_KERNEL_CONTROL_WAKEUP		

-		 	xp2xp_wakeup_notifier_call_chain(WAKEUP_NOTIFY, &call_state);

-		 	if(call_state == 0){//check device wakeup result

-				xp2xp_SetSleepState(TRUE);

-		 	}

-#endif			

+			xp2xp_dev->wake_cnt++;

+#ifdef CONFIG_KERNEL_CONTROL_WAKEUP

+			xp2xp_wakeup_notifier_call_chain(WAKEUP_NOTIFY, &call_state);

+#endif

 		}else{

-			//now sleep 

 			spin_unlock_irqrestore(&xp2xp_dev->wk_lock, flags);

 			xp2xp_notify_up(SLEEP_NOTIFY);

 			xp2xp_dev->sleep_cnt++;

-#ifdef CONFIG_KERNEL_CONTROL_WAKEUP		

-			xp2xp_SetSleepState(FALSE);

+#ifdef CONFIG_KERNEL_CONTROL_WAKEUP

 		 	xp2xp_wakeup_notifier_call_chain(SLEEP_NOTIFY, &call_state);

-		 	if(call_state){//check device sleep result

-		 	//to do

-		 	}

-#endif		

+#endif

 		}

-			

 

 		enable_irq(xp2xp_dev->eint_irq);

 		xp2xp_dev->xp2xp_irq_state = 1;

-		//pm_relax(xp2xp_dev->dev);				

-		

+

 	}

 	

 	return 0;

 }

-	

+/*jb.qi add for dtr uevent on 20231218 end*/

+

 /*******************************************************************************

 * Function:	ApWakeCp int

 * Description:	ap2cp wake up int isr

@@ -407,7 +394,7 @@
 *

 * Others:

 ********************************************************************************/

-/*jb.qi add for dtr on 20231304 start*/

+/*jb.qi add for dtr uevent on 20231218 start*/

 irqreturn_t xp2xp_wkcp_handler(int irq, void *priv)

 {

 	unsigned long flags;

@@ -436,10 +423,12 @@
 	if(1 == gpio_value){

         irq_type = IRQF_TRIGGER_LOW;

         printk("gpio_value is 1 , release wakelock\n");

+        xp2xp_dev->wake_state = 0;

         pm_relax(g_xp2xp.dev);

 	}else{

         irq_type = IRQF_TRIGGER_HIGH;

         printk("gpio_value is 0 , lock wakelock\n");

+        xp2xp_dev->wake_state = 1;

         pm_stay_awake(g_xp2xp.dev);

 	}

 

@@ -450,7 +439,7 @@
 	up(&xp2xp_dev->wk_sem);

 	return IRQ_HANDLED;

 }

-/*jb.qi add for dtr on 20231304 end*/

+/*jb.qi add for dtr uevent on 20231218 end*/

 

 /*******************************************************************************

 * Function:

diff --git a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/nv-rpc-daemon/main.c b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/nv-rpc-daemon/main.c
index ed602a0..451abfd 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/nv-rpc-daemon/main.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/nv-rpc-daemon/main.c
@@ -68,7 +68,7 @@
  *******************************************************************************/
 static long g_pid;
 static long g_ap_pid_backup;
-static int  nv_debug_switch = false;
+static int  nv_debug_switch = true;//jb.qi add for nv wakeup debug on 20231220
 
 /*******************************************************************************
  *                                ¾Ö²¿º¯ÊýʵÏÖ                                  *
@@ -171,7 +171,7 @@
     msgSnd.msgType = MSG_TYPE_NV;
     msgSnd.pid     = g_pid;
     //printf("apnv_cap msgsnd to nvserver pid:%d\n", msgSnd.pid);
-    if (strcmp(msgSnd.key, "zcat_mode"))
+    //if (strcmp(msgSnd.key, "zcat_mode")) jb.qi add for nv wakeup debug on 20231220
         print_nv_info(&msgSnd);
 
 retry1:
diff --git a/update_version.sh b/update_version.sh
index 37aea04..0882ff2 100755
--- a/update_version.sh
+++ b/update_version.sh
@@ -1,8 +1,8 @@
 #!/bin/bash
 #export LYNQ_VERSION="T106_lynq_version_ap_build_sh"
-LYNQ_AP_VERSION="T106CN-ZS03.V2.01.01.02P52U02.AP.09.07"
-LYNQ_CAP_INSIDE_VERSION="CAP.09.07"
-LYNQ_CAP_VERSION="CAP.09.07"
+LYNQ_AP_VERSION="T106CN-ZS03.V2.01.01.02P52U02.AP.09.10"
+LYNQ_CAP_INSIDE_VERSION="CAP.09.10"
+LYNQ_CAP_VERSION="CAP.09.10"
 COMMIT_ID="$(git rev-parse HEAD)"
 
 LYNQ_SW_INSIDE_VERSION="LYNQ_CONFIG_VERSION = \"${LYNQ_AP_VERSION}_${LYNQ_CAP_INSIDE_VERSION}\""