[Bugfix][T106BUG-553][AUTOSUSPEND]5 seconds of continuous abnormal current after 30 minutes of sleep

Only Configure: No
Affected branch: master
Affected module: AUTOSUSPEND
Is it affected on both ZXIC and MTK:only zxic
Self-test: Yes
Doc Update:No

Change-Id: Ib897224a1f89c9d1be3b1837289ef1c5e48aa415
diff --git a/allbins/zx297520v3/prj_evb/nv/psPriData_nvrw_0x00002000.bin b/allbins/zx297520v3/prj_evb/nv/psPriData_nvrw_0x00002000.bin
index c022672..04eba65 100755
--- a/allbins/zx297520v3/prj_evb/nv/psPriData_nvrw_0x00002000.bin
+++ b/allbins/zx297520v3/prj_evb/nv/psPriData_nvrw_0x00002000.bin
Binary files differ
diff --git a/allbins/zx297520v3/prj_evb/nv_230a/psPriData_nvrw_0x00002000.bin b/allbins/zx297520v3/prj_evb/nv_230a/psPriData_nvrw_0x00002000.bin
index 4284bf6..c45d319 100755
--- a/allbins/zx297520v3/prj_evb/nv_230a/psPriData_nvrw_0x00002000.bin
+++ b/allbins/zx297520v3/prj_evb/nv_230a/psPriData_nvrw_0x00002000.bin
Binary files differ
diff --git a/allbins/zx297520v3/prj_vehicle/nv/psPriData_nvrw_0x00002000.bin b/allbins/zx297520v3/prj_vehicle/nv/psPriData_nvrw_0x00002000.bin
index c6cd534..73937d4 100755
--- a/allbins/zx297520v3/prj_vehicle/nv/psPriData_nvrw_0x00002000.bin
+++ b/allbins/zx297520v3/prj_vehicle/nv/psPriData_nvrw_0x00002000.bin
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/amt/amt.a b/ap/lib/libps/220A1_vehicle_dc/amt/amt.a
old mode 100755
new mode 100644
index e391950..09efff3
--- a/ap/lib/libps/220A1_vehicle_dc/amt/amt.a
+++ b/ap/lib/libps/220A1_vehicle_dc/amt/amt.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/drv/amr.a b/ap/lib/libps/220A1_vehicle_dc/drv/amr.a
old mode 100755
new mode 100644
index b84b7c5..539290c
--- a/ap/lib/libps/220A1_vehicle_dc/drv/amr.a
+++ b/ap/lib/libps/220A1_vehicle_dc/drv/amr.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/drv/audio_base.a b/ap/lib/libps/220A1_vehicle_dc/drv/audio_base.a
old mode 100755
new mode 100644
index e2ad7f2..9719874
--- a/ap/lib/libps/220A1_vehicle_dc/drv/audio_base.a
+++ b/ap/lib/libps/220A1_vehicle_dc/drv/audio_base.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/drv/chip.a b/ap/lib/libps/220A1_vehicle_dc/drv/chip.a
old mode 100755
new mode 100644
index 07f3eb8..2e8e198
--- a/ap/lib/libps/220A1_vehicle_dc/drv/chip.a
+++ b/ap/lib/libps/220A1_vehicle_dc/drv/chip.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/drv/public.a b/ap/lib/libps/220A1_vehicle_dc/drv/public.a
old mode 100755
new mode 100644
index e26c1e5..65b80f2
--- a/ap/lib/libps/220A1_vehicle_dc/drv/public.a
+++ b/ap/lib/libps/220A1_vehicle_dc/drv/public.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_osa_linux.a b/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_osa_linux.a
old mode 100755
new mode 100644
index 8dcf0f0..ecb98e7
--- a/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_osa_linux.a
+++ b/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_osa_linux.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_psm.a b/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_psm.a
old mode 100755
new mode 100644
index b98e806..f83e43c
--- a/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_psm.a
+++ b/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_psm.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_sup.a b/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_sup.a
old mode 100755
new mode 100644
index 6e5ff53..a876ff9
--- a/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_sup.a
+++ b/ap/lib/libps/220A1_vehicle_dc/plat/armv7-a/GCC/plat_sup.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/plat/plat_osa_linux.a b/ap/lib/libps/220A1_vehicle_dc/plat/plat_osa_linux.a
old mode 100755
new mode 100644
index 8dcf0f0..ecb98e7
--- a/ap/lib/libps/220A1_vehicle_dc/plat/plat_osa_linux.a
+++ b/ap/lib/libps/220A1_vehicle_dc/plat/plat_osa_linux.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/plat/plat_psm.a b/ap/lib/libps/220A1_vehicle_dc/plat/plat_psm.a
old mode 100755
new mode 100644
index b98e806..f83e43c
--- a/ap/lib/libps/220A1_vehicle_dc/plat/plat_psm.a
+++ b/ap/lib/libps/220A1_vehicle_dc/plat/plat_psm.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/plat/plat_sup.a b/ap/lib/libps/220A1_vehicle_dc/plat/plat_sup.a
old mode 100755
new mode 100644
index 6e5ff53..a876ff9
--- a/ap/lib/libps/220A1_vehicle_dc/plat/plat_sup.a
+++ b/ap/lib/libps/220A1_vehicle_dc/plat/plat_sup.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/as_com.a b/ap/lib/libps/220A1_vehicle_dc/ps/as_com.a
index 1f20caf..8ae7d6e 100755
--- a/ap/lib/libps/220A1_vehicle_dc/ps/as_com.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/as_com.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/ati.a b/ap/lib/libps/220A1_vehicle_dc/ps/ati.a
old mode 100755
new mode 100644
index c5feb86..3944e9c
--- a/ap/lib/libps/220A1_vehicle_dc/ps/ati.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/ati.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/com.a b/ap/lib/libps/220A1_vehicle_dc/ps/com.a
index 82a4eba..1f16824 100755
--- a/ap/lib/libps/220A1_vehicle_dc/ps/com.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/com.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/eurrc.a b/ap/lib/libps/220A1_vehicle_dc/ps/eurrc.a
index 6b8c96e..11ffad4 100755
--- a/ap/lib/libps/220A1_vehicle_dc/ps/eurrc.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/eurrc.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/nas.a b/ap/lib/libps/220A1_vehicle_dc/ps/nas.a
index c41b253..0cb5ca6 100755
--- a/ap/lib/libps/220A1_vehicle_dc/ps/nas.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/nas.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/ul1t.a b/ap/lib/libps/220A1_vehicle_dc/ps/ul1t.a
index 469cad0..0a55f6d 100755
--- a/ap/lib/libps/220A1_vehicle_dc/ps/ul1t.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/ul1t.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/ul2_up.a b/ap/lib/libps/220A1_vehicle_dc/ps/ul2_up.a
index 90c749e..6cd74c4 100755
--- a/ap/lib/libps/220A1_vehicle_dc/ps/ul2_up.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/ul2_up.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/urrc.a b/ap/lib/libps/220A1_vehicle_dc/ps/urrc.a
index 39c6c08..7d7b2ee 100755
--- a/ap/lib/libps/220A1_vehicle_dc/ps/urrc.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/urrc.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ps/wl2_up.a b/ap/lib/libps/220A1_vehicle_dc/ps/wl2_up.a
index ff7ff0f..3921260 100755
--- a/ap/lib/libps/220A1_vehicle_dc/ps/wl2_up.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ps/wl2_up.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ref/com.a b/ap/lib/libps/220A1_vehicle_dc/ref/com.a
old mode 100755
new mode 100644
index 824f39f..f8bda9e
--- a/ap/lib/libps/220A1_vehicle_dc/ref/com.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ref/com.a
Binary files differ
diff --git a/ap/lib/libps/220A1_vehicle_dc/ref/ref_drv.a b/ap/lib/libps/220A1_vehicle_dc/ref/ref_drv.a
old mode 100755
new mode 100644
index 6ebede9..34aaca0
--- a/ap/lib/libps/220A1_vehicle_dc/ref/ref_drv.a
+++ b/ap/lib/libps/220A1_vehicle_dc/ref/ref_drv.a
Binary files differ
diff --git a/ap/project/zx297520v3/prj_vehicle_dc_ref/bin/220A1/elfs/normalelfs/zte_volte_main.elf b/ap/project/zx297520v3/prj_vehicle_dc_ref/bin/220A1/elfs/normalelfs/zte_volte_main.elf
index b40128a..e1a62de 100755
--- a/ap/project/zx297520v3/prj_vehicle_dc_ref/bin/220A1/elfs/normalelfs/zte_volte_main.elf
+++ b/ap/project/zx297520v3/prj_vehicle_dc_ref/bin/220A1/elfs/normalelfs/zte_volte_main.elf
Binary files differ
diff --git a/ap/project/zx297520v3/prj_vehicle_dc_ref/fs/normal/rootfs/bin/zte_volte_main b/ap/project/zx297520v3/prj_vehicle_dc_ref/fs/normal/rootfs/bin/zte_volte_main
index ca13289..472ca9b 100755
--- a/ap/project/zx297520v3/prj_vehicle_dc_ref/fs/normal/rootfs/bin/zte_volte_main
+++ b/ap/project/zx297520v3/prj_vehicle_dc_ref/fs/normal/rootfs/bin/zte_volte_main
Binary files differ
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_ref/fs/normal/rootfs/etc_ro/default/default_parameter_sys b/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_ref/fs/normal/rootfs/etc_ro/default/default_parameter_sys
index d3ac78b..8c08eff 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_ref/fs/normal/rootfs/etc_ro/default/default_parameter_sys
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_ref/fs/normal/rootfs/etc_ro/default/default_parameter_sys
@@ -439,6 +439,8 @@
 IMS_PCSCF_PORT=5060
 G_IMS_CMGF=0
 ECALL_MTTEST=0
+POWER_CONTROL=1
+NOT_KEEP_TCP_CONN=1
 #for volte end
 DEBUG_INFO_DISABLE=0
 DEBUG_INFO_FILE_PATH=/mnt/userdata
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_systemd/fs/normal/rootfs/etc_ro/default/default_parameter_sys b/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_systemd/fs/normal/rootfs/etc_ro/default/default_parameter_sys
index 4b4d8aa..0f851ee 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_systemd/fs/normal/rootfs/etc_ro/default/default_parameter_sys
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_systemd/fs/normal/rootfs/etc_ro/default/default_parameter_sys
@@ -429,6 +429,8 @@
 IMS_PCSCF_PORT=5060
 G_IMS_CMGF=0
 ECALL_MTTEST=0
+POWER_CONTROL=0
+NOT_KEEP_TCP_CONN=0
 #for volte end
 DEBUG_INFO_DISABLE=0
 DEBUG_INFO_FILE_PATH=/mnt/userdata
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-autosuspend/files/autosuspend_wakeup_count.c b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-autosuspend/files/autosuspend_wakeup_count.c
index 6d724ef..ca823c2 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-autosuspend/files/autosuspend_wakeup_count.c
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-autosuspend/files/autosuspend_wakeup_count.c
@@ -658,6 +658,8 @@
     char buf[80];
     char timeout_str[100]="100000";
     pid = getpid();
+    char cmdstr[32];
+    char rsp[128];
     //if (property_get("sys.autosuspend.timeout", timeout_str, NULL))
     {
         possible_max_sleep_time = atoi(timeout_str);
@@ -691,15 +693,25 @@
         ALOGI("Error creating semaphore: %s\n", buf);
         goto err_sem_init;
     }
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
     if(sc_at_init(1)){
         ALOGD("sc_at_init failed.\n");
         return NULL;
     }
+    else
+    {
+        strcpy(cmdstr, "AT+ZPOWSTAT=1\r\n");
+        printf("AUTOSUSPEND: cmd:%s\n",cmdstr);
+        ret = sc_at_send(1,cmdstr,rsp,sizeof(rsp));
+        printf("AUTOSUSPEND: sc_at_send result:%d %s\n",ret,rsp);
+        
+    }
     if(sc_mnet_whitelist_init() != 0)
     {
         ALOGD("sc_mnet_whitelist_init failed.\n");
         return NULL;
     }
+#endif
     ret = lynq_sim_init((int)pid);
     if(ret == 0)
     {
diff --git a/cp/ps/modem/ps/inc/atipscom.h b/cp/ps/modem/ps/inc/atipscom.h
index d8e8aca..72560ba 100755
--- a/cp/ps/modem/ps/inc/atipscom.h
+++ b/cp/ps/modem/ps/inc/atipscom.h
@@ -232,13 +232,14 @@
 #define Z_ATI_NV_EcallCapa                                 (BYTE)(Z_ATI_NV_Msisdn2 + 1)

 #define Z_ATI_NV_EcallNum                                  (BYTE)(Z_ATI_NV_EcallCapa + 1)

 #define Z_ATI_NV_EcallTime                                 (BYTE)(Z_ATI_NV_EcallNum + 1)

+#define Z_ATI_NV_RrcStatus                                 (BYTE)(Z_ATI_NV_EcallTime + 1)

 #ifdef BTRUNK_SUPPORT

-#define Z_ATI_NV_PttTruncUser                              (BYTE)(Z_ATI_NV_EcallTime + 1)

+#define Z_ATI_NV_PttTruncUser                              (BYTE)(Z_ATI_NV_RrcStatus + 1)

 #define Z_ATI_NV_PttIOTFlag                                (BYTE)(Z_ATI_NV_PttTruncUser + 1)

 #define Z_ATI_NV_PttSubWayFlag                             (BYTE)(Z_ATI_NV_PttIOTFlag + 1)

 #define Z_ATI_NV_PrvEnd                                    (BYTE)(Z_ATI_NV_PttSubWayFlag + 0)

 #else

-#define Z_ATI_NV_PrvEnd                                    (BYTE)(Z_ATI_NV_EcallTime + 0)

+#define Z_ATI_NV_PrvEnd                                    (BYTE)(Z_ATI_NV_RrcStatus + 0)

 #endif

 

 

@@ -1319,6 +1320,11 @@
     BYTE                          abPadding[2];

 }T_zAti_NV_EcallTime;

 

+typedef struct{

+    BYTE    bSoftPowStat;/*0-disable, 1-sleep, 2-wakeup,³ö³§Öµ0*/

+    BYTE    abPadding[3];

+}T_zAti_NV_RrcStatus;

+

 #ifdef BTRUNK_SUPPORT

 typedef struct  

 {

diff --git a/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h b/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h
index 6da8e4b..67a34a4 100755
--- a/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h
+++ b/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h
@@ -112,6 +112,7 @@
     ZAT2_CFG_ZCUSTMMCC,

     ZAT2_CFG_ZCAUSE,

     ZAT2_CFG_ZVREG,

+    ZAT2_CFG_ZPOWSTAT,

     ZAT2_CFG_END,

     

     /*-----------MMÄ£¿é-------------*/

@@ -157,6 +158,7 @@
     ZAT2_MM_ZSRVING,

     ZAT2_MM_ZPSSTAT,

     ZAT2_MM_ZIMSSTATE,

+    ZAT2_MM_ZIMSAIRREL,

     ZAT2_MM_CIREP,

     ZAT2_MM_CNEM,

     ZAT2_MM_CEN,

diff --git a/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h b/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h
index 96b21ad..4791734 100755
--- a/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h
+++ b/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h
@@ -1287,6 +1287,8 @@
 T_ZAt_ParseCmd2MsgRslt zAt_PsDecZcustmMccSetReq(T_ZAt_DecCmdInfo *pDecCmdInfo);

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecZcustmMccQryReq(T_ZAt_DecCmdInfo *pDecCmdInfo);

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecZvregSetReq(T_ZAt_DecCmdInfo * pDecCmdInfo);

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecZpowstatSet(T_ZAt_DecCmdInfo * pDecCmdInfo);

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecZpowstatQry(T_ZAt_DecCmdInfo * pDecCmdInfo);

 #ifdef DSDS_VSIM

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecZcardSwitchReq(T_ZAt_DecCmdInfo *pDecCmdInfo);

 UINT16 zAt_PsEncCardSwitchReqCnf(T_ZAt_EncCmdInfo * pEncCmdInfo);

diff --git a/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h b/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h
index 3547aa4..c7fc40d 100755
--- a/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h
+++ b/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h
@@ -565,6 +565,11 @@
 #define Z_ATI_ECALL_MAXT7_TIME        (BYTE)200

 #define Z_ATI_ECALL_MAXT9_TIME        (WORD)36000

 

+/*********************ZPOWSTAT************************/

+#define Z_ATI_SOFTPOWER_DIABLE         (BYTE)0

+#define Z_ATI_SOFTPOWER_SLEEP          (BYTE)1

+#define Z_ATI_SOFTPOWER_WAKEUP         (BYTE)2

+

 #ifdef DSDS_VSIM

 /**********************´ý»ú²à״̬***************************/

 #define Z_ATI_CARD_DEACT           (BYTE)0

@@ -1435,6 +1440,7 @@
 VOID zAti_Cereg0InitGlobalVar(BYTE bInstance);

 VOID zAti_Randomize(VOID);

 BYTE zAti_MsgFromATI(DWORD dwMsgId);

+VOID zAti_DisablePowerStatus(VOID);

 

 VOID zAti_WordtoBytes(BYTE* bDestBytes,WORD wSrcWord);

 VOID zAti_DWordtoBytes(BYTE* bDestBytes,DWORD dwSrcWord);

@@ -1514,6 +1520,8 @@
 #ifdef DSDS_VSIM

 DWORD zAti_CardSwitchReq(VOID* pBuff);

 #endif

+DWORD zAti_ImsAirRelReq(VOID* pBuff);

+DWORD zAti_SoftPowerReq(VOID* pBuff);

 DWORD zAti_Cbs_DataInd(VOID* pBuff, DWORD * pdwChangedMsgId, T_ZAti_ChannelInfo  *pChnelNode);

 DWORD zAti_SmMtCgevInd(VOID* pBuff, DWORD *pdwChangedMsgId, T_ZAti_ChannelInfo  *pChnelNode);

 //DWORD zAti_SmMtActivateInd(VOID* pBuff, DWORD *pdwChangedMsgId, T_ZAti_ChannelInfo  *pChnelNode);

diff --git a/cp/ps/modem/ps/src/nas/ati/inc/zati_int.h b/cp/ps/modem/ps/src/nas/ati/inc/zati_int.h
index fefb59b..029479f 100755
--- a/cp/ps/modem/ps/src/nas/ati/inc/zati_int.h
+++ b/cp/ps/modem/ps/src/nas/ati/inc/zati_int.h
@@ -2031,6 +2031,13 @@
     BYTE                                         bPadding;

 }T_zApMmia_CfunQuery_Cnf; 

 

+typedef struct {

+    BYTE                                         bSrcIndex;

+    BYTE                                         bDesIndex;

+    BYTE                                         bMode;

+    BYTE                                         bPadding;

+}T_zApMmia_PowerStat_Req;   

+

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

   Ô­Óï:Z_APMMIA_CplsSetReq_Ev(ATI->MMIA),Z_APMMIA_CplsQueryCnf_Ev(MMIA->ATI)

   ¹¦ÄÜ:Ñ¡Ôñpreferred plmn selector 

diff --git a/cp/ps/modem/ps/src/nas/ati/inc/zati_typ.h b/cp/ps/modem/ps/src/nas/ati/inc/zati_typ.h
old mode 100644
new mode 100755
index 670f753..f229e11
--- a/cp/ps/modem/ps/src/nas/ati/inc/zati_typ.h
+++ b/cp/ps/modem/ps/src/nas/ati/inc/zati_typ.h
@@ -195,18 +195,20 @@
 #define ATI_DISTRIBUTE_FUNC_ZIMSDATDEL_REQ_EV      (BYTE)(ATI_DISTRIBUTE_FUNC_ZTPMR_REQ_EV + 1)

 #ifdef DSDS_VSIM

 #define ATI_DISTRIBUTE_FUNC_CARDSWITCH_REQ_EV      (BYTE)(ATI_DISTRIBUTE_FUNC_ZIMSDATDEL_REQ_EV + 1)

-#define ATI_DISTRIBUTE_FUNC_EVENT_END              (BYTE)(ATI_DISTRIBUTE_FUNC_CARDSWITCH_REQ_EV)

+#define ATI_DISTRIBUTE_FUNC_IMSAIRREL_REQ_EV       (BYTE)(ATI_DISTRIBUTE_FUNC_CARDSWITCH_REQ_EV + 1)

 #else

-#define ATI_DISTRIBUTE_FUNC_EVENT_END              (BYTE)(ATI_DISTRIBUTE_FUNC_ZIMSDATDEL_REQ_EV)

+#define ATI_DISTRIBUTE_FUNC_IMSAIRREL_REQ_EV       (BYTE)(ATI_DISTRIBUTE_FUNC_ZIMSDATDEL_REQ_EV + 1)

 #endif

 #else

 #ifdef DSDS_VSIM

 #define ATI_DISTRIBUTE_FUNC_CARDSWITCH_REQ_EV      (BYTE)(ATI_DISTRIBUTE_FUNC_ZTPMR_REQ_EV + 1)

-#define ATI_DISTRIBUTE_FUNC_EVENT_END              (BYTE)(ATI_DISTRIBUTE_FUNC_CARDSWITCH_REQ_EV)

+#define ATI_DISTRIBUTE_FUNC_IMSAIRREL_REQ_EV       (BYTE)(ATI_DISTRIBUTE_FUNC_CARDSWITCH_REQ_EV + 1)

 #else

-#define ATI_DISTRIBUTE_FUNC_EVENT_END              (BYTE)(ATI_DISTRIBUTE_FUNC_ZTPMR_REQ_EV)

+#define ATI_DISTRIBUTE_FUNC_IMSAIRREL_REQ_EV       (BYTE)(ATI_DISTRIBUTE_FUNC_ZTPMR_REQ_EV + 1)

 #endif

 #endif

+#define ATI_DISTRIBUTE_FUNC_SOFTPOWER_REQ_EV       (BYTE)(ATI_DISTRIBUTE_FUNC_IMSAIRREL_REQ_EV + 1)

+#define ATI_DISTRIBUTE_FUNC_EVENT_END              (BYTE)(ATI_DISTRIBUTE_FUNC_SOFTPOWER_REQ_EV)

 

 #define ATI_ATMEM_EVENT_BASE                       (BYTE) (ATI_DISTRIBUTE_FUNC_EVENT_END+1)

 #define ATI_ATMEM_ZACL_SET_REQ_EV                  (BYTE) (ATI_ATMEM_EVENT_BASE+0)

diff --git a/cp/ps/modem/ps/src/nas/ati/src/zat_fnc.c b/cp/ps/modem/ps/src/nas/ati/src/zat_fnc.c
index 0b9ebf3..fcd10bf 100755
--- a/cp/ps/modem/ps/src/nas/ati/src/zat_fnc.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zat_fnc.c
@@ -25771,6 +25771,40 @@
 

     return zAt_GetParseRslt(ZAT2_CMD_REPLY_DIRECT);

 }

+

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecZpowstatSet(T_ZAt_DecCmdInfo * pDecCmdInfo)

+{

+    CHAR* pDecCmdStr = pDecCmdInfo->strParam;   /* ¼Ç¼²ÎÊý×ֶεÄÓÎ×ßÖ¸Õë */

+    CHAR strSubBuf[ZAT2_SUB_PARAM_MAX_LEN] = {0};    /* ´æ·ÅÁÙʱ½ØÈ¡µÄ×Ö·û´® */

+    T_ZAt_ParseCmd2MsgRslt    prsCmd2Msg = {0};

+    T_zApMmia_PowerStat_Req    tPowStatus = {0};

+

+    zAt_PsDecParamInit(&prsCmd2Msg, sizeof(T_zApMmia_PowerStat_Req));

+

+    /*+ZPOWSTAT=<n>*/

+    if(!zAt_PsDecNextParamDecimalNumByteNeed(&prsCmd2Msg, strSubBuf, &pDecCmdStr, &tPowStatus.bMode, NULL)

+        || (tPowStatus.bMode > Z_ATI_SOFTPOWER_WAKEUP))

+    {

+        return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);

+    }

+

+    return zAt_PsDecFinishParse(&prsCmd2Msg, pDecCmdStr, &tPowStatus, sizeof(T_zApMmia_PowerStat_Req), TRUE); 

+}

+

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecZpowstatQry(T_ZAt_DecCmdInfo * pDecCmdInfo)

+{

+    T_ZAt_ParseCmd2MsgRslt    prsCmd2Msg = {0};

+    T_zAti_NV_RrcStatus    tRrcStat = {0};

+    CHAR * pStrWalk = g_zAt_EncBuf;

+

+    /*¶ÁÈ¡NV*/

+    zDev_NV_AtiReadItem(Z_ATI_NV_RrcStatus, (PBYTE)&tRrcStat);

+

+    sprintf((char *)pStrWalk ,"%s+ZPOWSTAT: %d%s%s", g_zAt_CRLF, tRrcStat.bSoftPowStat, g_zAt_CRLF, g_zAt_OK);

+

+    prsCmd2Msg.decRslt2nd = ZAT2_CMD_REPLY_DIRECT;

+    return prsCmd2Msg;

+}

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

 * º¯ÊýÃû³Æ£º zAt_PsDecZtpmrReq

 * ¹¦ÄÜÃèÊö£º ¸ù¾ÝµÚ1²½½âÎö½á¹û£¬ÌîдÏûÏ¢¶ÔÓ¦µÄ½á¹¹Ìå

diff --git a/cp/ps/modem/ps/src/nas/ati/src/zat_var.c b/cp/ps/modem/ps/src/nas/ati/src/zat_var.c
index 759cb8a..3ab794e 100755
--- a/cp/ps/modem/ps/src/nas/ati/src/zat_var.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zat_var.c
@@ -99,6 +99,7 @@
     {   "+ZMOBILE",         ZAT2_CFG_ZMOBILE,        ""        },

     {   "+ZUECAPASET",        ZAT2_CFG_ZUECAPASET,       ""        },

     {   "+ZULRTIND",       ZAT2_CFG_ZULRTIND,      ""       },

+    {   "+ZPOWSTAT",       ZAT2_CFG_ZPOWSTAT,       "+ZPOWSTAT: (0-2)"        },

 

     /********************************* MMÄ£¿é ************************************/

     {   "+CREG",       ZAT2_MM_CREG,          "+CREG: (0-2)"                      },

@@ -469,6 +470,7 @@
     {   "+ZGACT",      ZAT2_LTE_ZGACT,       ""                                  },

     {   "+ZCONSTAT",     ZAT2_LTE_ZCONSTAT,       ""                                  },

     {   "+ZIMSSTATE",    ZAT2_MM_ZIMSSTATE,    ""         },

+    {   "+ZIMSAIRREL",    ZAT2_MM_ZIMSAIRREL,    ""        },

     {   "+CIREP",    ZAT2_MM_CIREP,    "+CIREP: (0,1)"     },

     {   "+CNEM",    ZAT2_MM_CNEM,    ""    },

     {   "+CEN",    ZAT2_MM_CEN,    "+CEN: (0,1)"     },

@@ -711,6 +713,9 @@
     /**********************************+ZCAUSE***********************/

     { ZAT2_CFG_ZCAUSE,     ZAT2_CO_SET_REQ,    0,    zAt_PsDecZcauseSetReq  },

     { ZAT2_CFG_ZCAUSE,     ZAT2_CO_QUERY_REQ,    0,    zAt_PsDecZcauseQryReq  },

+    /***********************************+ZPOWSTAT*************************************/

+    { ZAT2_CFG_ZPOWSTAT,   ZAT2_CO_SET_REQ,     ATI_DISTRIBUTE_FUNC_SOFTPOWER_REQ_EV,     zAt_PsDecZpowstatSet },

+    { ZAT2_CFG_ZPOWSTAT,   ZAT2_CO_QUERY_REQ,     0,     zAt_PsDecZpowstatQry },

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

     MMÄ£¿é

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

@@ -1576,6 +1581,9 @@
     {ZAT2_MM_ZIMSSTATE,    ZAT2_CO_SET_REQ, MMIA_UMM_IMS_REGISTER_STATES_EV,    zAt_PsDecZimsstateSetReq},

     {ZAT2_MM_ZIMSSTATE,    ZAT2_CO_QUERY_REQ,    0,    zAt_PsDecZimsstateQueryReq},

 

+    /********************************************+ZIMSAIRREL**********************************/

+    {ZAT2_MM_ZIMSAIRREL,    ZAT2_CO_SET_REQ, ATI_DISTRIBUTE_FUNC_IMSAIRREL_REQ_EV,  zAt_PsDecCommonReq},

+

     /********************************************+CIREP**************************/

     {ZAT2_MM_CIREP,    ZAT2_CO_SET_REQ,  0,   zAt_PsDecCirepSetReq},

     {ZAT2_MM_CIREP,    ZAT2_CO_QUERY_REQ,  0,    zAt_PsDecCirepQueryReq},

diff --git a/cp/ps/modem/ps/src/nas/ati/src/zati_distribute_fnc.c b/cp/ps/modem/ps/src/nas/ati/src/zati_distribute_fnc.c
index d0b3f6e..89a4676 100755
--- a/cp/ps/modem/ps/src/nas/ati/src/zati_distribute_fnc.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zati_distribute_fnc.c
@@ -101,6 +101,8 @@
 #ifdef DSDS_VSIM

     {ATI_DISTRIBUTE_FUNC_CARDSWITCH_REQ_EV, zAti_CardSwitchReq},

 #endif

+    {ATI_DISTRIBUTE_FUNC_IMSAIRREL_REQ_EV, zAti_ImsAirRelReq},

+    {ATI_DISTRIBUTE_FUNC_SOFTPOWER_REQ_EV, zAti_SoftPowerReq},

 

     //  Stm º¯Êý

     {EV_ZATI2_CpbrExeReq_Ev,zAti_ProcCpbr},

@@ -4900,6 +4902,7 @@
                 }

                 zAti_RetUbCardPlmnInfo();

                 zAti_MiniFunModeInitGlobalVarByInstNo(g_zAti_CurInstance);

+                zAti_DisablePowerStatus();

 

                 g_zAti_atDataEx[g_zAti_CurInstance].bCcoCount = bCcoCount;

                 g_zAti_atDataEx[g_zAti_CurInstance].bTraceCellInfSet = bTraceCellInfSet;

@@ -8352,6 +8355,47 @@
     return Z_APMMIA_NOERROR_ERR;

 }

 #endif

+

+DWORD zAti_ImsAirRelReq(VOID* pBuff)

+{

+    zAti_MsgSend(MMIA_UMM_IMSAIRREL_REQ_EV, ZOSS_NULL, 0, Z_ATI_TASKID_UMM);

+

+    sprintf((char *)g_zAt_EncBuf, "%s",  g_zAt_OK);

+    return Z_APMMIA_NOERROR_ERR;

+}

+

+DWORD zAti_SoftPowerReq(VOID* pBuff)

+{

+    BYTE IsSend = Z_INVALID; 

+    T_zApMmia_PowerStat_Req *ptStatus = (T_zApMmia_PowerStat_Req*)pBuff;

+    T_zAti_NV_RrcStatus  tNvStatus = {0};

+    T_zAti_NV_RrcStatus  tTempStatus = {0};

+

+    zDev_NV_AtiReadItem(Z_ATI_NV_RrcStatus, (PBYTE)&tNvStatus);

+

+    zOss_Memcpy(&tTempStatus, &tNvStatus, sizeof(T_zAti_NV_RrcStatus));

+

+    tNvStatus.bSoftPowStat = ptStatus->bMode;

+

+    if(tNvStatus.bSoftPowStat != tTempStatus.bSoftPowStat)

+    {

+        zDev_NV_AtiWriteItem(Z_ATI_NV_RrcStatus, (PBYTE)&tNvStatus);

+

+        if(tNvStatus.bSoftPowStat == Z_ATI_SOFTPOWER_SLEEP || tTempStatus.bSoftPowStat == Z_ATI_SOFTPOWER_SLEEP)

+        {

+            IsSend = Z_VALID;

+        }

+    }

+

+    if(IsSend == Z_VALID)

+    { 

+        zAti_MsgSend(MMIA_UMM_SOFTPOWER_STATUS_IND_EV, ZOSS_NULL, 0, Z_ATI_TASKID_UMM);

+    }

+

+    sprintf((char *)g_zAt_EncBuf, "%s",  g_zAt_OK);

+    return Z_APMMIA_NOERROR_ERR;

+}

+

 DWORD zAti_SmsTpmrReq(VOID* pBuff)

 {

     T_zApMmia_TpmrSet_Req *ptTpmrReq = (T_zApMmia_TpmrSet_Req*)pBuff;

diff --git a/cp/ps/modem/ps/src/nas/ati/src/zati_main.c b/cp/ps/modem/ps/src/nas/ati/src/zati_main.c
index 32f9fe7..aafa90a 100755
--- a/cp/ps/modem/ps/src/nas/ati/src/zati_main.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zati_main.c
@@ -714,6 +714,23 @@
     #endif

 }

 

+VOID zAti_DisablePowerStatus(VOID)

+{

+    T_zAti_NV_RrcStatus  tNvStatus = {0};

+    T_zAti_NV_RrcStatus  tTempStatus = {0};

+

+    zDev_NV_AtiReadItem(Z_ATI_NV_RrcStatus, (PBYTE)&tNvStatus);

+

+    zOss_Memcpy(&tTempStatus, &tNvStatus, sizeof(T_zAti_NV_RrcStatus));

+

+    tNvStatus.bSoftPowStat = Z_ATI_SOFTPOWER_DIABLE;

+

+    if(tNvStatus.bSoftPowStat != tTempStatus.bSoftPowStat)

+    {

+        zDev_NV_AtiWriteItem(Z_ATI_NV_RrcStatus, (PBYTE)&tNvStatus);

+    }

+}

+

 /* ==================================================================

 º¯ÊýÃû³Æ: zAti_Randomize

 º¯Êý¹¦ÄÜ: ²úÉúËæ»úÊýÖÖ×Ó

diff --git a/pub/include/ps_phy/atipsevent.h b/pub/include/ps_phy/atipsevent.h
index 7ac2437..35b9d4e 100755
--- a/pub/include/ps_phy/atipsevent.h
+++ b/pub/include/ps_phy/atipsevent.h
@@ -948,6 +948,8 @@
 #define MMIA_UMM_ECALLONLY_QUERY_REQ_EV          (DWORD)(MMIA_UMM_EVENT_BASE + 33)

 #define MMIA_UMM_FREQ_SCAN_REQ_EV                (DWORD)(MMIA_UMM_EVENT_BASE + 34)

 #define MMIA_UMM_FAST_FREQ_SCAN_REQ_EV           (DWORD)(MMIA_UMM_EVENT_BASE + 35)

+#define MMIA_UMM_IMSAIRREL_REQ_EV                (DWORD)(MMIA_UMM_EVENT_BASE + 36)

+#define MMIA_UMM_SOFTPOWER_STATUS_IND_EV         (DWORD)(MMIA_UMM_EVENT_BASE + 37)

 

 

 #define MMIA_UMM_PLMN_INFO_IND_EV                (DWORD)(MMIA_UMM_RSP_EVENT + 0)

diff --git a/pub/include/ps_phy/psevent.h b/pub/include/ps_phy/psevent.h
index 62cace6..a615c21 100755
--- a/pub/include/ps_phy/psevent.h
+++ b/pub/include/ps_phy/psevent.h
@@ -3124,6 +3124,7 @@
 #define UMM_TSEARCHECALLCELL_EXPIRY_EV           (DWORD)(UMM_TIMER_EVENT_BASE + 31)

 #define UMM_TECALL_INACT_EXPIRY_EV               (DWORD)(UMM_TIMER_EVENT_BASE + 32)

 #define UMM_TTESTECALL_INACT_EXPIRY_EV           (DWORD)(UMM_TIMER_EVENT_BASE + 33)

+#define UMM_T_IMSREL_EXPIRY_EV                   (DWORD)(UMM_TIMER_EVENT_BASE + 34)

 /* ========================================================================

    CC¶¨Ê±Æ÷ÏûÏ¢ºÅ¶¨Òå

 ======================================================================== */