[Feature][ZXW-33]merge ZXW 0428 version

Change-Id: I11f167edfea428d9fab198ff00ff1364932d1b0b
diff --git a/cp/ps/driver/inc/misc/drvs_efuse.h b/cp/ps/driver/inc/misc/drvs_efuse.h
index 2cca866..165021e 100644
--- a/cp/ps/driver/inc/misc/drvs_efuse.h
+++ b/cp/ps/driver/inc/misc/drvs_efuse.h
@@ -49,6 +49,8 @@
 	DEVICE_ID,

 	MAX_ENUM

 }E_ZDrvEfuse_SecureMsg;

+#else

+#include <linux/soc/zte/efuse/efuse_zx.h>

 #endif

 

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

@@ -76,8 +78,6 @@
 *******************************************************************************/

 UINT32 zDrvEfuse_IsSpe(VOID);

 

-#ifndef _OS_LINUX

-

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

  * Function: zDrvEfuse_GetSecureMsg

  * Description:¸Ãº¯ÊýÓÃÓÚ»ñÈ¡¹«Ô¿¶Ô¡¢°²È«¿ªÆô±ê¼Ç¡¢¹«Ô¿hashÖµ¡¢É豸ID¡£

@@ -90,8 +90,9 @@
  *

  * Others:

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

-VOID zDrvEfuse_GetSecureMsg(T_ZDrvEfuse_Secure *secure);

+extern VOID zDrvEfuse_GetSecureMsg(T_ZDrvEfuse_Secure *secure);

 

+#ifndef _OS_LINUX

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

 * Function:     zDrvEfuse_SetSecureMsg

 * Description:¸Ãº¯ÊýÓÃÓÚÉèÖð²È«¿ªÆô±ê¼Ç¡¢¹«Ô¿hashÖµ¡¢É豸ID¡£

diff --git a/cp/ps/driver/inc/misc/drvs_voiceprocess.h b/cp/ps/driver/inc/misc/drvs_voiceprocess.h
index a006449..3b6795f 100755
--- a/cp/ps/driver/inc/misc/drvs_voiceprocess.h
+++ b/cp/ps/driver/inc/misc/drvs_voiceprocess.h
@@ -219,32 +219,33 @@
 

 typedef struct

 {

-	UINT8 volteIsWb; //g_volteIsWb

-	UINT8 isUseSlicCodec; //g_isUseSlicCodec

-	UINT8 g_isUseTdm;

+	UINT8 volteIsWb; //1 g_volteIsWb 

+	UINT8 isUseSlicCodec; //2 g_isUseSlicCodec 

+	UINT8 g_isUseTdm; //3

 //for voice data process

-	UINT8 voiceInGsmTdMode; //g_voiceInGsmTdMode

-	UINT8 voiceInVolteMode; //g_voiceInVolteMode

+	UINT8 voiceInGsmTdMode; //4 g_voiceInGsmTdMode 

+	UINT8 voiceInVolteMode; //5 g_voiceInVolteMode 

 

-	BOOL innerI2sIsMaster;//arm i2s2   g_innerI2sIsMaster

-	BOOL innerI2sIsI2sMode; //g_innerI2sIsI2sMode

-	BOOL vpLoopRuning; //g_vpLoopRuning

-	BOOL muteEn; //g_vpMuteEn

-	//BOOL nxpIsNormal; //g_vpNxpIsNormal

-	BOOL vProcIsNormal; //voice processing is normal flag

-	T_Vp_I2sStatus vpI2sStatus; //VpI2sStatus

+	BOOL innerI2sIsMaster;//6 arm i2s2   g_innerI2sIsMaster 

+	BOOL innerI2sIsI2sMode; //7 g_innerI2sIsI2sMode 

+	BOOL vpLoopRuning; //8 g_vpLoopRuning 

+	BOOL muteEn; //9 g_vpMuteEn 

+	//BOOL nxpIsNormal; //10 g_vpNxpIsNormal  

+	BOOL vProcIsNormal; //11 voice processing is normal flag 

+	T_Vp_I2sStatus vpI2sStatus; //12 VpI2sStatus 

 

-	T_ZDrv_VpPath  vpPath;// VP_PATH_HEADSET;//VP_PATH_SPEAKER; //VP_PATH_HANDSET; g_vpPath

-	T_ZDrv_VpPath  vpLoopPath; //g_vpLoopPath

-	T_ZDrv_VpVol vpVol; //g_vpVol

-	T_ZDrvVoice_MODE voiceMode; //g_vpVoiceMode

-	SINT8 vpInitGain; //s_vpInitGain

-	T_Audio_NvFlag	audio_ctrlFlag;//USE 32byte

+	T_ZDrv_VpPath  vpPath;//13 VP_PATH_HEADSET;//VP_PATH_SPEAKER; //VP_PATH_HANDSET; g_vpPath

+	T_ZDrv_VpPath  vpLoopPath; //14 g_vpLoopPath 

+	T_ZDrv_VpVol vpVol; //15 g_vpVol

+	T_ZDrvVoice_MODE voiceMode; //16 g_vpVoiceMode

+	SINT8 vpInitGain; //17 s_vpInitGain

+	T_Audio_NvFlag	audio_ctrlFlag;//18 USE 32byte

 

-    UINT8 dtmfDirSel;

-    UINT32 sample_rate;

-    UINT8 useDtmfLoop;

-    SINT32 muteCount;//mute_count

+    UINT8 dtmfDirSel;//19

+    UINT32 sample_rate;//20

+    UINT8 useDtmfLoop;//21

+    SINT32 muteCount;//22 mute_count

+	BOOL rxMuteEn; //23

 } T_zDrvVoice_GbVar; //T_zDrvVoice_GbVar

 

 typedef struct

diff --git a/cp/ps/driver/src/chipsets/src/audio_base/audio_lib/amr/lib/armv7-a/GCC/amr.a b/cp/ps/driver/src/chipsets/src/audio_base/audio_lib/amr/lib/armv7-a/GCC/amr.a
index 1151f12..7ef398a 100644
--- a/cp/ps/driver/src/chipsets/src/audio_base/audio_lib/amr/lib/armv7-a/GCC/amr.a
+++ b/cp/ps/driver/src/chipsets/src/audio_base/audio_lib/amr/lib/armv7-a/GCC/amr.a
Binary files differ
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c b/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
index 5311c3f..a1899f0 100755
--- a/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
@@ -111,6 +111,9 @@
 

 SINT32 zDrvVp_GetTxVol(VOID);

 SINT32 zDrvVp_SetTxVol(T_ZDrv_VpVol volume);

+SINT32 zDrvVp_SetRxMute(UINT32 enable, UINT32 channel);

+SINT32 zDrvVp_GetRxMute(UINT32 *enable, UINT32 channel);

+extern SINT32 zDrvVp_Soft_Dtmf_Loop(T_ZDrv_VpPath path);

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

 * 	                                          Function Definitions

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

@@ -160,6 +163,15 @@
 {

 	return g_voiceVar.muteEn;

 }

+SINT32 zDrvVp_SetRxMute_Wrap(int enable)

+{

+	return zDrvVp_SetRxMute(enable, VOICE_DOWNLINK);

+}

+

+int zDrvVp_GetRxMute_Wrap(VOID)

+{

+	return g_voiceVar.rxMuteEn;

+}

 

 SINT32 zDrvVp_SetTone_Wrap(T_ZDrvVp_ToneNum toneNum)

 {

@@ -325,6 +337,20 @@
 

 	return DRV_SUCCESS;

 }

+

+SINT32 zDrvVp_GetPath(T_ZDrv_VpPath *path)

+{

+

+	SINT32  ret = DRV_SUCCESS;

+	*path = g_voiceVar.vpPath;

+

+	zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_SetPath begin *path=%d,vpI2sStatus=%d,vProcIsNormal=%d!", *path, g_voiceVar.vpI2sStatus, g_voiceVar.vProcIsNormal);

+

+	return DRV_SUCCESS;

+}

+

+

+

 #ifdef _USE_AUDEXT_CODEC_PATH_INTF

 

 SINT32 zDrvVp_SetRxPath(T_ZDrv_CodecOutputPath path, BOOL isenable)

@@ -465,6 +491,19 @@
 	return DRV_SUCCESS;

 }

 

+SINT32 zDrvVp_GetVol(int *volume)

+{

+	SINT32  ret = DRV_SUCCESS;

+

+	

+

+	*volume = g_voiceVar.vpVol;

+	zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_GetVol  *volume=%d,g_voiceVar.vpI2sStatus=%d!", *volume, g_voiceVar.vpI2sStatus);

+

+	return DRV_SUCCESS;

+}

+

+

 SINT32 zDrvVp_GetTxVol(VOID)

 {

 #ifdef  _USE_WEBRTC_AUD

@@ -559,6 +598,99 @@
 	return DRV_SUCCESS;

 

 }

+

+SINT32 zDrvVp_GetMute(UINT32 *enable, UINT32 channel)

+{

+	SINT32  ret = DRV_SUCCESS;

+

+

+	*enable = g_voiceVar.muteEn;

+	zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_GetMute  Get g_voiceVar.muteEn=%d !\n",g_voiceVar.muteEn);

+

+

+

+	return DRV_SUCCESS;

+

+}

+

+SINT32 zDrvVp_SetRxMute(UINT32 enable, UINT32 channel)

+{

+	SINT32  ret = DRV_SUCCESS;

+#if 0

+	T_ZDrvVoice_MuteInfo muteinfo;

+	muteinfo.enable = enable;

+	muteinfo.channel = channel;

+	ret = voice_SetMute(&muteinfo);

+	zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_SetMute enable=%d,channel=%d,ret=%d!", enable, channel, ret);

+#endif

+

+	if (g_voiceVar.vpI2sStatus == VP_I2S_IDLE)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_SetRxMute g_voiceVar.vpI2sStatus idle not support set mute !\r\n");

+		return DRV_ERROR;

+	}

+	if (g_voiceVar.vpI2sStatus == VP_LOOP_ON)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_SetRxMute vp_loop_on return !\r\n");

+		return DRV_SUCCESS;

+	}

+

+	if (enable == 1)

+	{

+		g_voiceVar.rxMuteEn = TRUE;

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_SetRxMute  set g_voiceVar.rxMuteEn TRUE !\n");

+

+	}

+	else

+	{

+		g_voiceVar.rxMuteEn = FALSE;

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_SetRxMute  set g_voiceVar.rxMuteEn FASLE !\n");

+	}

+

+	if (g_voiceVar.vProcIsNormal == TRUE)

+	{

+#ifdef _USE_NXP_AUD

+

+#elif defined _USE_WEBRTC_AUD

+

+		ret = Webrtc_SetRxMute(enable);

+		if (ret != DRV_SUCCESS)

+		{

+			if (enable == 1)

+			{

+				g_voiceVar.rxMuteEn = FALSE;

+				zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_SetRxMute  set rxMuteEn fail,set g_voiceVar.muteEn FALSE !\n");

+

+			}

+			else

+			{

+				g_voiceVar.rxMuteEn = TRUE;

+				zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_SetRxMute   set rxMuteEn fail,set g_voiceVar.muteEn TRUE !\n");

+

+			}

+			return DRV_ERROR;		

+		}

+

+#endif

+	}

+

+	return DRV_SUCCESS;

+

+}

+SINT32 zDrvVp_GetRxMute(UINT32 *enable, UINT32 channel)

+{

+	SINT32  ret = DRV_SUCCESS;

+

+

+	*enable = g_voiceVar.rxMuteEn;

+	zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_GetRxMute  Get g_voiceVar.rxMuteEn=%d !\n",g_voiceVar.rxMuteEn);

+

+

+

+	return DRV_SUCCESS;

+

+}

+

 #if 0

 //dtmf¼ì²â-»Ø»·²âÊÔÓÃ

 T_DrvDtmf_Detect_Opt dtmf_looptest;

@@ -593,6 +725,8 @@
         zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "vp_LoopProcessThreadEntry zDrvVp_DtmfSoftwareStart end, ret=%d\n", ret);  

         if(ret == 0)

             g_voiceVar.useDtmfLoop = 1;

+        zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "vp_LoopProcessThreadEntry zDrvVp_DtmfSoftwareStart end, ret=%d,useDtmfLoop=%d\n", ret,g_voiceVar.useDtmfLoop);  

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_LoopProcessThreadEntry zDrvVp_DtmfSoftwareStart end, ret=%d,useDtmfLoop=%d\n", ret,g_voiceVar.useDtmfLoop); 

     }

     else if(path == VP_PATH_OFF)

     {

@@ -602,16 +736,19 @@
         zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "vp_LoopProcessThreadEntry zDrvVp_DtmfSoftwareStop end, ret=%d\n", ret);  

         if(ret == 0)

             g_voiceVar.useDtmfLoop = 0;

+        zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "vp_LoopProcessThreadEntry zDrvVp_DtmfSoftwareStop end, ret=%d,useDtmfLoop=%d\n", ret,g_voiceVar.useDtmfLoop);  

+		

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_LoopProcessThreadEntry zDrvVp_DtmfSoftwareStop end, ret=%d,useDtmfLoop=%d\n", ret,g_voiceVar.useDtmfLoop); 

     }

     else 

     {

         zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "zDrvVp_Soft_Dtmf_Loop path is error!\n");

-        //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_Soft_Dtmf_Loop path is error!\n");

+        zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_Soft_Dtmf_Loop path is error,useDtmfLoop=%d!\n",g_voiceVar.useDtmfLoop);

         return DRV_ERR_NOT_SUPPORTED;

     }

     

     ret = zDrvVp_Loop(path);

-    zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "zDrvVp_Soft_Dtmf_Loop leave\n");

+    zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "zDrvVp_Soft_Dtmf_Loop leave ret=%d\n",ret);

 

     return ret;

 }

diff --git a/cp/ps/driver/src/chipsets/src/audio_base/voice/hal_voiceapi.c b/cp/ps/driver/src/chipsets/src/audio_base/voice/hal_voiceapi.c
index 5bb0811..15807af 100644
--- a/cp/ps/driver/src/chipsets/src/audio_base/voice/hal_voiceapi.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/voice/hal_voiceapi.c
@@ -657,3 +657,101 @@
 }

 

 

+/*******************************************************************************

+* Function: halVoice_Open2g3gTeak

+* Description: This function is used to init teak.

+* Parameters: 

+*   Input:None

+*   Output:None

+*

+* Returns: 0:success

+*              DRV_ERR_NOT_SUPPORTED:not support

+*              other:check T_ZDrv_ErrCode or hal error code

+*

+* Others: 

+********************************************************************************/

+int halVoice_Open2g3gTeak(T_HalVoice_Block* pVoiceBlock)

+{  

+    int ret = 0;

+

+	ret = halVoice_Open();

+	if(ret != 0)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:voice_Open fail ret=%d\n",__func__,ret);

+		return ret;

+

+	}

+	ret = halVoice_SetPathIn(pVoiceBlock);

+	if(ret != 0)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:halVoice_SetPathIn fail ret=%d\n",__func__,ret);

+		

+		halVoice_Close();

+		return ret;

+

+	}

+	ret = halVoice_SetPathOut(pVoiceBlock);

+	if(ret != 0)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:halVoice_SetPathOut fail ret=%d\n",__func__,ret);

+		

+		halVoice_Close();

+		return ret;

+

+	}	

+	ret = halVoice_SetVolOut(pVoiceBlock);

+	if(ret != 0)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:halVoice_SetVolOut fail ret=%d\n",__func__,ret);

+		halVoice_Close();

+		return ret;

+

+	}		

+	ret = halVoice_Enable();

+	if(ret != 0)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:halVoice_Enable fail ret=%d\n",__func__,ret);

+		halVoice_Close();

+		return ret;

+

+	}		

+

+	return ret;

+

+	

+}

+

+/*******************************************************************************

+* Function: halVoice_Close2g3gTeak

+* Description: This function is used to exit teak

+* Parameters: 

+*   Input:None

+*   Output:None

+*

+* Returns: 0:success

+*              DRV_ERR_NOT_SUPPORTED:not support

+*              other:check T_ZDrv_ErrCode or hal error code

+*

+* Others: 

+********************************************************************************/

+int halVoice_Close2g3gTeak(VOID)

+{

+    int ret = 0;

+

+	ret = halVoice_Disable();

+	if(ret != 0)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:halVoice_Disable fail ret=%d\n",__func__,ret);

+

+	}		

+	ret = halVoice_Close();

+	if(ret != 0)

+	{

+		zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:halVoice_Close fail ret=%d\n",__func__,ret);

+

+	}

+

+	return ret;	

+}

+

+

diff --git a/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c b/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c
index f2b5463..81e683d 100755
--- a/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c
@@ -82,26 +82,29 @@
 

 T_zDrvVoice_GbVar g_voiceVar =

 {

-	0,

-	0,

-	0,

-	0,

-	0,

-	FALSE,

-	TRUE,

-	FALSE,

-	FALSE,

-	FALSE,

-	VP_I2S_IDLE,

-	VP_PATH_HANDSET,

-	VP_PATH_HANDSET,

-	VP_VOL_3,

-	MAX_VOICE_MODE,

-	-1,

-	{0},

-    DTMF_IDLE,

-    0,

-    0

+	0,//volteIsWb 1

+	0,//isUseSlicCodec 2

+	0,//g_isUseTdm 3

+	0,//voiceInGsmTdMode 4

+	0,//voiceInVolteMode  5

+	FALSE, //innerI2sIsMaster 6

+	TRUE,//innerI2sIsI2sMode 7

+	FALSE,//vpLoopRuning 8

+	FALSE,//muteEn 9

+	FALSE,//vProcIsNormal 10

+	VP_I2S_IDLE,//vpI2sStatus 11

+	VP_PATH_HANDSET,//vpPath 12 

+	VP_PATH_HANDSET,//vpLoopPath 13

+	VP_VOL_3, //vpVol 14

+	MAX_VOICE_MODE,//voiceMode 15 

+	-1,//vpInitGain 16

+	{0},//audio_ctrlFlag 17

+    DTMF_IDLE,// 18

+    0,//dtmfDirSel 19

+    0, //sample_rate 20 

+	0, //useDtmfLoop; 21

+	0, //muteCount;//mute_count 22	

+	FALSE,              //rxMuteEn 23

 };

 

 static T_zDrvVp_State s_vpState =

diff --git a/cp/ps/driver/src/chipsets/src/audio_base/volte/hal_volte.c b/cp/ps/driver/src/chipsets/src/audio_base/volte/hal_volte.c
index e9e148a..2553db0 100644
--- a/cp/ps/driver/src/chipsets/src/audio_base/volte/hal_volte.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/volte/hal_volte.c
Binary files differ
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/webrtc/include/webrtc_intf.h b/cp/ps/driver/src/chipsets/src/audio_base/webrtc/include/webrtc_intf.h
index 05aa67e..39d6cb2 100644
--- a/cp/ps/driver/src/chipsets/src/audio_base/webrtc/include/webrtc_intf.h
+++ b/cp/ps/driver/src/chipsets/src/audio_base/webrtc/include/webrtc_intf.h
@@ -231,6 +231,7 @@
 

 	int open_flag;// 0 close, 1 open

 	int mute_flag;//0 unmute, 1 mute

+	int rx_mute_flag;//0 unmute, 1 mute		

 } T_Webrtc_Para;

 

 

diff --git a/cp/ps/driver/src/chipsets/src/uicc/DD/dd_uicc.c b/cp/ps/driver/src/chipsets/src/uicc/DD/dd_uicc.c
index c35edfd..ac3d1dd 100644
--- a/cp/ps/driver/src/chipsets/src/uicc/DD/dd_uicc.c
+++ b/cp/ps/driver/src/chipsets/src/uicc/DD/dd_uicc.c
@@ -89,8 +89,8 @@
 /****************************************************************************

 * 	                                          Function Definitions

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

-#if 0

-UINT32 zDrvUicc_GetPreCardType(T_ZDrvUicc_CardSelector card_selector)

+

+UINT8 zDrvUicc_GetPreCardType(T_ZDrvUicc_CardSelector card_selector)

 {

 	SINT32  ret = DRV_SUCCESS;

 	UINT8 preSwitchType = 0xFF;

@@ -102,7 +102,7 @@
 		if(ret != DRV_SUCCESS)

 		{

 			zOss_Printf(SUBMDL_FS, PRINT_LEVEL_ABNORMAL, "[UICC%d]zDrvUicc_GetPreCardType failed!!! \n!",card_selector);

-			return DRV_UICC_ACTIVATION_FAILED;

+			return CLOUD_CARD;

 		}

 		pre_card_type_ctrl[card_selector] = preSwitchType;	

 	}

@@ -112,7 +112,7 @@
 		if(ret != DRV_SUCCESS)

 		{

 			zOss_Printf(SUBMDL_FS, PRINT_LEVEL_ABNORMAL, "[UICC%d]zDrvUicc_GetPreCardType failed!!! \n!",card_selector);

-			return DRV_UICC_ACTIVATION_FAILED;

+			return UICC_CARD;

 		}

 		pre_card_type_ctrl[card_selector] = preSwitchType;	

 	}

@@ -127,7 +127,6 @@
   	return pre_card_type_ctrl[card_selector];

 

 }

-#endif

 

 UINT32 zDrvUicc_GetCardType(T_ZDrvUicc_CardSelector card_selector)

 {

@@ -422,8 +421,9 @@
 		UICC_power_thread = zOss_CreateThread("UICC_POWER_THREAD",UICC_PowerThread,0,512,7,1,1);

 	} 

 	

-	zDrvUicc_GetCardType(card_selector);

-

+	zDrvUicc_GetCardType(DRV_UICC_PRIMARY_CARD);

+	zDrvUicc_GetCardType(DRV_UICC_SECONDARY_CARD_1);

+	

 	if((card_type_ctrl[0] == UICC_CARD) && (card_type_ctrl[1] == UICC_CARD))

 	{

 		card_type_ctrl[0] = UICC_CARD;

diff --git a/cp/ps/driver/src/chipsets/src/uicc/infineonIp/uicc_io.c b/cp/ps/driver/src/chipsets/src/uicc/infineonIp/uicc_io.c
index 1eaf315..331e8be 100644
--- a/cp/ps/driver/src/chipsets/src/uicc/infineonIp/uicc_io.c
+++ b/cp/ps/driver/src/chipsets/src/uicc/infineonIp/uicc_io.c
@@ -45,6 +45,7 @@
 

 #include "USIM_reg.h"

 #include "oss_api.h"

+#include "pub_debug_info.h"

 //#include "os_ose.h"

 #include "drvs_pow.h"

 #include "drvs_ramlog.h"

@@ -827,6 +828,7 @@
     case UICC_TRANSFER_FAILED:

     default:

         result = UICC_TRANSFER_FAILED;

+	 	zOss_DebugInfoRecord(MODULE_ID_PS_UICC, "[UICC%d]UICC_transport_APDU.UICC_transport_apdu_result= %d\n!",card_selector, UICC_transport_apdu_result);

         break;

     }

 	

@@ -1156,6 +1158,7 @@
         voltage_control->voltage_settled = UICC_card_profile[UICC_current_reader].voltage_settled;

 

         result = UICC_ACTIVATION_FAILED;

+	    zOss_DebugInfoRecord(MODULE_ID_PS_UICC, "[UICC%d]zDrvUicc_ResetCard.UICC_activation_result= %d\n!",card_selector, UICC_activation_result);

         break;

     }

     }

diff --git a/cp/ps/driver/src/chipsets/src/uicc/infineonIp/uicc_uart.c b/cp/ps/driver/src/chipsets/src/uicc/infineonIp/uicc_uart.c
index 3ae870c..99ae5ab 100644
--- a/cp/ps/driver/src/chipsets/src/uicc/infineonIp/uicc_uart.c
+++ b/cp/ps/driver/src/chipsets/src/uicc/infineonIp/uicc_uart.c
@@ -21,6 +21,8 @@
 /****************************************************************************

 *                                              Include files

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

+#include "oss_api.h"

+#include "pub_debug_info.h"

 #include "uicc_stub.h"

 #include "uicc_ctrl.h"

 #include "uicc_access.h"

@@ -2789,6 +2791,7 @@
     invoke_callback(  CARD_REMOVED, UICC_current_reader);

     uiccDebug_Printf("[%d]remove\n",zOss_GetTickCount());

     uiccramlog_Printf("[%d]remove\n",zOss_GetTickCount());

+    zOss_DebugInfoRecord(MODULE_ID_PS_UICC, "[%d]remove\n",zOss_GetTickCount());

     UICC_release_semaphore(UICC_HOTPLUG_SEM);

 }

 

@@ -2817,6 +2820,7 @@
         invoke_callback(CARD_INSERTED, UICC_current_reader);

         uiccDebug_Printf("[%d]insert\n",zOss_GetTickCount());

 	 uiccramlog_Printf("[%d]insert\n",zOss_GetTickCount());

+ 	 zOss_DebugInfoRecord(MODULE_ID_PS_UICC, "[%d]insert\n",zOss_GetTickCount());

 	UICC_release_semaphore(UICC_HOTPLUG_SEM);

 }

 

diff --git a/cp/ps/modem/com/inc/config/atcfg/sys_func_atcfg.h b/cp/ps/modem/com/inc/config/atcfg/sys_func_atcfg.h
index f27074a..6c25373 100644
--- a/cp/ps/modem/com/inc/config/atcfg/sys_func_atcfg.h
+++ b/cp/ps/modem/com/inc/config/atcfg/sys_func_atcfg.h
@@ -247,7 +247,7 @@
     /*NVÍ·²¿*/

     CHAR    magic[8];  /*ħÊõ×Ö*/

     UINT16    wVersion; /*°æ±¾ºÅ£¬µ±Ç°Èí¼þÔÝδʹÓÃ*/

-    UINT16    wLen;      /*ÐèÒª¿½±´µÄÓÐЧÊý¾ÝµÄ³¤¶È,±¾°æ±¾È¡ÖµÎª780*/

+    UINT16    wLen;      /*ÐèÒª¿½±´µÄÓÐЧÊý¾ÝµÄ³¤¶È,±¾°æ±¾È¡ÖµÎª783*/

 

     UINT8 jtagserver;/* 1:TDÎïÀí²ãµ÷ÊÔ°æ±¾ 0:TDÎïÀí²ã¹Ì»¯°æ±¾£¬ÆäËûÖµÎÞЧ £¬Ä¬ÈÏֵΪ0*/

     UINT8 exceptReset;/* 2:µ¼³öramdumpºóÔÙÖØÆô1:´ò¿ªÒì³£ÖØÆô 0:¹Ø±ÕÒì³£ÖØÆô£¬Ä¬ÈÏֵΪ0 */

@@ -389,6 +389,7 @@
     UINT8 VolteMtNetTestPadding;/*±¾ÒÑ·ÏÆú,µ«¸çÂ×±ÈÑÇVOLTEÒDZí²âÊÔUMMÈÔÐèÒªµ±Ç°×´Ì¬,ÐèÒªÓëVOLTE NV×Ö¶ÎÒ»ÖÂ*/

     UINT8 NsIotTestPadding;/*·ÏÆú²»ÓøijÉÌî³äλ,NS_IOT²âÊÔ¿ª¹Ø£¬0£º¹Ø±Õ£¬1£º´ò¿ª,ĬÈÏ0*/

     UINT8 GsmMeasPrior;/*ÖÐÒÆSRVCCÍⳡ£¬ÊÇ·ñ¿ªÆôGSM²âÁ¿ÓÅÏȹ¦ÄÜ£¬0£º¹Ø±Õ£¬1£º´ò¿ª£¬Ä¬ÈÏÖµ0*/

+

     UINT8 VolteCvmodPadding;/*·ÏÆú²»ÓøijÉÌî³äλ,ÓïÒôºô½ÐµÄģʽ£¬0:CS_ONLY, 1:VOIP_ONLY, 2:CSÓÅÏÈ,3:VOIPÓÅÏÈ,ĬÈÏ3*/

     UINT8 VolteArmWbFlgPadding;/*·ÏÆú²»ÓøijÉÌî³äλ,Volte ARM-WBµÄ¿ª¹Ø£¬0£º¹Ø±Õ£¬1£º´ò¿ª£¬Ä¬ÈÏÖµ1*/

     UINT8 OffsetRssi;/*WÖ÷Ä£ÏÂÊÕµ½2GÉϱ¨µÄ²âÁ¿Ê±£¬¼õÈ¥µÄÆ«ÒÆÁ¿,[0-255],ĬÈÏÖµ0*/

@@ -397,12 +398,14 @@
     UINT8 VolteEmCallSupportPadding;/*·ÏÆú²»ÓøijÉÌî³äλ,VOLTEÊÇ·ñÖ§³Ö½ô¼±ºô½ÐÁ÷³Ì¿ª¹Ø£¬0£º¹Ø±Õ£¬1£º´ò¿ª£¬Ä¬ÈÏÖµ0*/

     UINT8 OosThreshFlg;/*OOSÃÅÏÞÊÇ·ñÆôÓÿª¹Ø£¬0£º¹Ø±Õ£¬1£º´ò¿ª,ĬÈÏ0*/

     UINT8 IslandThreshFlg;/*¹ÂµºÃÅÏÞÊÇ·ñÆôÓÿª¹Ø£¬0£º¹Ø±Õ£¬1£º´ò¿ª,ĬÈÏ1*/

+

     UINT16 OosThresh;/*OOSÃÅÏÞÖµ£¬¿ª¹Ø¿ªÆôʱÓÐЧ£¬·¶Î§0µ½60£¬Ä¬ÈÏ7,µ¥Î»db*/

     UINT16 IslandThresh;/*¹ÂµºÃÅÏÞÖµ£¬¿ª¹Ø¿ªÆôʱÓÐЧ£¬·¶Î§0µ½60£¬Ä¬ÈÏ16,µ¥Î»db*/

     UINT8 RrcCustomBitMap;/*rrc¶¨ÖƵŦÄÜ¿ª¹Ø,bitλ°´´Ó0¿ªÊ¼,bit0:Proc²âÁ¿±¨¸æÓÅ»¯¹¦ÄÜ,0±íʾ¹Ø±Õ,1±íʾ´ò¿ª,ĬÈÏÊÇ0*/

     UINT8 TauPrior;/*¿ØÖÆLTEÖÆÊ½ÏÂûÓÐPDPÉÏÏÂÎÄʱÊÇ·ñÐèÒªÏÈ·¢ÆðTAU¿ª¹Ø£¬0£º¹Ø±Õ£¬1£º´ò¿ª,ĬÈÏ0*/

     UINT8 ReselOffSet;/*ÖØÑ¡ÒÖÖÆÃÅÏÞÖµ£¬·¶Î§0µ½3£¬Ä¬ÈÏ3,µ¥Î»db*/

     UINT8 SoftVersion;/*IMEIºóÃæµÄSoftVersion£¬Ä¬ÈÏÊÇ55*/

+

     UINT8 bRpi;/*ȡֵ·¶Î§[0-2],ÅäÖøøPHYµÄRPI,³ö³§Öµ255*/

     UINT8 bEmmTimerFg;/*ÊÇ·ñ½«EMM´óÓÚ1·ÖÖӵĶ¨Ê±Æ÷Ëõ¶ÌÖÁ1·ÖÖÓ,1:ÊÇ,0:·ñ,³õʼֵ0*/

     UINT8 bNvDelayWriteTm;/*Ïà¹ØNVµÄдÈëʱ¼ä¼ä¸ô,0±íʾ½öÔÚCFUN0дÈë,1-24±íʾNVдÈë¼ä¸ôʱ¼äµ¥Î»Ð¡Ê±,255±íʾÁ¢¼´Ð´Èë,ĬÈÏÖµ0*/

@@ -410,6 +413,7 @@
     UINT8 bAttachCid;/*4G ATTACH¹ý³ÌÖ줻îĬÈϳÐÔØÊ¹ÓõÄCID,ĬÈÏֵΪ0*/

     UINT8 bHarqBufNum;/*ȡֵ12»ò16,ÓÃÓÚ¶¨Òåharq buf¸öÊý,³ö³§Öµ12*/

     UINT16 wSmallTbNum;/*word·¶Î§,ÓÃÓÚ¶¨ÒåСTB¿é¸öÊý,³ö³§Öµ420*/

+

     UINT16 wPsBufNum;/*word·¶Î§,ÓÃÓÚ¶¨Òåpsbuf/pdcp pdu¸öÊý,³ö³§Öµ520*/

     UINT8 bEdcpPollFg;/*EDCPÊÇ·ñ²ÉÓÃÂÖѯ·½Ê½,1ÂÖѯ0ÖжÏ,³ö³§Öµ0*/

     UINT8 bHpplmnReSearchTime;/*hpplmnËÑË÷¼ä¸ô,ȡֵ·¶Î§0-255,µ¥Î»·ÖÖÓ,³õʼֵ0,0±íʾ²»Æô¶¯*/

@@ -417,11 +421,15 @@
     UINT8 bTEnableEutranLen;/*ÖØÊÔ¼¤»îLTEÄÜÁ¦Ê±³¤,µ¥Î»·ÖÖÓ,³õʼֵ0*/

     UINT8 bUsatSCFg;/*USAT SMS SCÊÇ·ñÖ±½Ó²éѯ¿¨»ñÈ¡,0·ñ,1ÊÇ,³õʼֵ0*/

     UINT8 bIdleDrxTm;/*IDLE DRXÖÜÆÚ¿ÉÅäÖÃ,0-²»¿ÉÅäÖÃ,1-4´ú±í4¸öÖÜÆÚ³¤¶È,³ö³§Öµ0*/

+

     UINT32 dwDataMonitorTm;/*Êý¾Ý¼à¿ØÊ±³¤,0-²»Æô¶¯,ÆäËüÖµ±íʾ¼à¿ØÊ±³¤,µ¥Î»ms,³ö³§Öµ0*/

     UINT16 bFreqScanTmin;/*×îСɨƵÖÜÆÚ,³ö³§Öµ0,µ¥Î»S*/

     UINT16 bFreqScanStep;/*ÖÜÆÚÐÔɨƵ²½³¤,³ö³§Öµ0,µ¥Î»s*/

     UINT16 bFreqScanTnum;/*ͬһÖÜÆÚ³¢ÊÔ´ÎÊý,³ö³§Öµ0*/

     UINT16 bFreqScanTmax;/*×î´óɨƵÖÜÆÚ,³ö³§Öµ0,µ¥Î»S*/

+    UINT16 wFastScanTime;/*¿ìËÙɨƵʱ¼ä¼ä¸ô,µ¥Î»s,ȡֵ:1-65535,³ö³§Öµ10*/

+    UINT8 bFastScanFreqFg;/*¿ìËÙɨƵ¹¦ÄÜ¿ª¹Ø,0-¹Ø±Õ,1-´ò¿ª,³ö³§Öµ1*/

+    UINT8 bSpare;

 }CommAtSetting;

 /* atÉèÖýṹÌå ²»´æNV*/

 typedef struct  

@@ -1842,6 +1850,10 @@
 UINT16 zOss_GetFreqScanStep(VOID);

 UINT16 zOss_GetFreqScanTnum(VOID);

 UINT16 zOss_GetFreqScanTmax(VOID);

+UINT32 zOss_SetFastFreqScanInfo(CommAtCfgCmdParam * cmdParm);

+VOID zOss_GetFastFreqScanInfo(CommAtCfgCmdParam * cmdParm);

+UINT8 zOss_GetFastFreqScanFlag(VOID);

+UINT16 zOss_GetFastFreqScanTime(VOID);

 #ifdef _USE_PSM_TEST

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

  *  º¯ÊýÃû      : zSys_SetPsmFlagToIram

diff --git a/cp/ps/modem/com/src/appstart/inc/version_number.h b/cp/ps/modem/com/src/appstart/inc/version_number.h
index 9eebc26..b321f81 100755
--- a/cp/ps/modem/com/src/appstart/inc/version_number.h
+++ b/cp/ps/modem/com/src/appstart/inc/version_number.h
@@ -1,9 +1,9 @@
 #if defined _CHIP_ZX297520
-#define VERSION_NUMBER "7520SCV2.01.01.02P43"
+#define VERSION_NUMBER "7520SCV2.01.01.02P46"
 #endif
 #if defined _CHIP_ZX297520V2
-#define VERSION_NUMBER "7520V2SCV2.01.01.02P43"
+#define VERSION_NUMBER "7520V2SCV2.01.01.02P46"
 #endif
 #if defined _CHIP_ZX297520V3
-#define VERSION_NUMBER "7520V3SCV2.01.01.02P43"
+#define VERSION_NUMBER "7520V3SCV2.01.01.02P46"
 #endif
diff --git a/cp/ps/modem/ps/inc/atipscom.h b/cp/ps/modem/ps/inc/atipscom.h
index a879676..9eef9b1 100644
--- a/cp/ps/modem/ps/inc/atipscom.h
+++ b/cp/ps/modem/ps/inc/atipscom.h
@@ -216,14 +216,16 @@
 #define Z_ATI_NV_MobileInfoCfg                             (BYTE)(Z_ATI_NV_UMTSAMR+1)

 #define Z_ATI_NV_UeCapaCfg                                 (BYTE)(Z_ATI_NV_MobileInfoCfg+1)

 #define Z_ATI_NV_ZLcCfg                                    (BYTE)(Z_ATI_NV_UeCapaCfg+1)

-#define Z_ATI_NV_LteBlkCell                                 (BYTE)(Z_ATI_NV_ZLcCfg + 1)

+#define Z_ATI_NV_LteBlkCell                                (BYTE)(Z_ATI_NV_ZLcCfg + 1)

+#define Z_ATI_NV_CmgfMode                                  (BYTE)(Z_ATI_NV_LteBlkCell + 1)

+#define Z_ATI_NV_CustomMcc                                 (BYTE)(Z_ATI_NV_CmgfMode + 1)

 #ifdef BTRUNK_SUPPORT

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

+#define Z_ATI_NV_PttTruncUser                              (BYTE)(Z_ATI_NV_CustomMcc + 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_LteBlkCell + 0)

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

 #endif

 

 

@@ -1246,6 +1248,19 @@
     T_zAti_NV_CellGlobId          atLteBlackCell[Z_MAX_LTE_BLKCELL_NUM];

 }T_zAti_NV_LteBlkCell;

 

+typedef struct {

+    BYTE                            bCmgfMode;   /*0: pdu,1: txt,³ö³§Öµ0*/ 

+    BYTE                            abPadding[3];   

+}T_zAti_NV_CmgfMode;

+

+typedef struct {

+    BYTE                            bMCC1:4;

+    BYTE                            bMCC2:4;

+    BYTE                            bMCC3:4;

+    BYTE                            :4;

+    BYTE                            abPadding[2];   

+}T_zAti_NV_CustomMcc;

+

 #ifdef BTRUNK_SUPPORT

 typedef struct  

 {

diff --git a/cp/ps/modem/ps/inc/atipsint.h b/cp/ps/modem/ps/inc/atipsint.h
index bdf91df..7985c1b 100644
--- a/cp/ps/modem/ps/inc/atipsint.h
+++ b/cp/ps/modem/ps/inc/atipsint.h
@@ -7820,7 +7820,14 @@
     BYTE            bDesIndex;
     BYTE            abPadding[2];
 }T_zMmiaAs_Rssi_Qry_Req, T_zMmiaAs_Sinr_Qry_Req, 
-T_zMmiaAs_Csq_Qry_Req,T_zMmiaAs_CellInfo_Qry_Req;
+T_zMmiaAs_CellInfo_Qry_Req;
+

+typedef struct {

+    BYTE            bSrcIndex;

+    BYTE            bDesIndex;

+    BYTE            bAtType;

+    BYTE            bPadding;

+}T_zMmiaAs_Csq_Qry_Req;

 
 typedef struct {
     CHAR      cSinrInt;               /*ȡֵ·¶Î§ -20~40*/
@@ -8332,7 +8339,7 @@
 }T_zAtiAs_UlParamInd;

 

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

-Ô­Óï:MMIA_L1E_CARD_SWITCH_REQ_EV

+Ô­Óï:MMIA_AS_CARD_SWITCH_REQ_EV

 ˵Ã÷:APÏ·¢µÄÇп¨ÇëÇó(+ZCARDSWITCHREQ)

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

 typedef struct {

@@ -8341,10 +8348,10 @@
 

     BYTE                        bSim1Act;/*0-È¥»î,1-¼¤»î*/

     BYTE                        bSim2Act;/*0-È¥»î,1-¼¤»î*/

-}T_zAtiL1e_CardSwitch_Req;

+}T_zMmiaAs_CardSwitch_Req;

 

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

-Ô­Óï:MMIA_L1E_CARD_SWITCH_CNF_EV

+Ô­Óï:MMIA_AS_CARD_SWITCH_CNF_EV

 ˵Ã÷:Çп¨ÇëÇóÏìÓ¦

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

 typedef struct {

@@ -8353,7 +8360,7 @@
 

     BYTE                        bResult;/*0-Z_SUCC,1-Z_FAIL*/

     BYTE                        bPadding;

-}T_zAtiL1e_CardSwitch_Cnf;

+}T_zMmiaAs_CardSwitch_Cnf;

 

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

 Ô­Óï:MMIA_AS_CARD_SWITCH_IND_EV

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 c5fbd77..689278f 100644
--- a/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h
+++ b/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h
@@ -109,6 +109,7 @@
     ZAT2_CFG_ZMOBILE,

     ZAT2_CFG_ZUECAPASET,

     ZAT2_CFG_ZULRTIND,

+    ZAT2_CFG_ZCUSTMMCC,

     ZAT2_CFG_END,       

     

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

@@ -126,6 +127,7 @@
     ZAT2_MM_CPOL,

     ZAT2_MM_CREG,

     ZAT2_MM_CSQ,

+    ZAT2_MM_ZSQ,

     ZAT2_MM_MODE,

     ZAT2_MM_SPN,

     ZAT2_MM_SYSINFO,

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 dc4f27a..7781e19 100644
--- a/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h
+++ b/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h
@@ -360,6 +360,7 @@
 T_ZAt_ParseCmd2MsgRslt zAt_PsDecMmCplsSetReq( T_ZAt_DecCmdInfo * pDecCmdInfo );

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecMmCpolSetReq( T_ZAt_DecCmdInfo * pDecCmdInfo );

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecMmCregSetReq( T_ZAt_DecCmdInfo * pDecCmdInfo );

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecMmCsqReq(T_ZAt_DecCmdInfo *pDecCmdInfo);

 #ifdef Z_DUALSTANDBY

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecMmZpsstatSetReq(T_ZAt_DecCmdInfo *pDecCmdInfo);

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecMmZpsstatQueryReq(T_ZAt_DecCmdInfo *pDecCmdInfo);

@@ -1256,6 +1257,8 @@
 T_ZAt_ParseCmd2MsgRslt zAt_PsDecZuecapaSetReq(T_ZAt_DecCmdInfo * pDecCmdInfo);

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecZuecapaSetQry(T_ZAt_DecCmdInfo * pDecCmdInfo);

 T_ZAt_ParseCmd2MsgRslt zAt_PsDecZulrtindSetReq(T_ZAt_DecCmdInfo * pDecCmdInfo);

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecZcustmMccSetReq(T_ZAt_DecCmdInfo *pDecCmdInfo);

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecZcustmMccQryReq(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 a164c08..cbcb2e3 100644
--- a/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h
+++ b/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h
@@ -385,6 +385,9 @@
 

 #define Z_ATI_S1_MODE        (BYTE)0

 #define Z_ATI_IU_MODE        (BYTE)1

+

+#define Z_ATI_CSQ      (BYTE)0

+#define Z_ATI_ZSQ      (BYTE)1

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

 #define Z_ATI_NET_NOTREG                                     (BYTE)0  /*µ±Ç°ÍøÂçδע²á*/       

 #define Z_ATI_NET_REG                                        (BYTE)1  /*µ±Ç°ÍøÂç×¢²á*/

diff --git a/cp/ps/modem/ps/src/nas/ati/src/zat_ext_fnc.c b/cp/ps/modem/ps/src/nas/ati/src/zat_ext_fnc.c
index a98e9c5..bad0881 100644
--- a/cp/ps/modem/ps/src/nas/ati/src/zat_ext_fnc.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zat_ext_fnc.c
@@ -8252,6 +8252,7 @@
 {

     T_zApMmia_SmsCmgf_Req* ptCmgfReq = (T_zApMmia_SmsCmgf_Req*)pBuff;

     T_zDev_AtMem_Mmia_PrivateMem tAtData = {0};

+    T_zAti_NV_CmgfMode tNvCmgfMode = {0};

 

     zAti_MarkIndex(ptCmgfReq, Z_PSMDL_SMS);

 

@@ -8269,6 +8270,15 @@
     tAtData.bCmgfMode = ptCmgfReq->bMsgMode;

     zDev_AtMemWriteItem(Z_AtMem_ID_MmiaPrvtMem, 0 ,(PBYTE)&tAtData, g_zAti_CurInstance);

 

+    /*дÈëNV*/

+    zDev_NV_AtiReadItem(Z_ATI_NV_CmgfMode, (PBYTE)&tNvCmgfMode);

+

+    if(tNvCmgfMode.bCmgfMode != ptCmgfReq->bMsgMode)

+    {

+        tNvCmgfMode.bCmgfMode = ptCmgfReq->bMsgMode;

+        zDev_NV_AtiWriteItem(Z_ATI_NV_CmgfMode, (PBYTE)&tNvCmgfMode);

+    }

+

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

 

     return Z_APMMIA_NOERROR_ERR;

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 421b298..cbad5b7 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
@@ -2612,6 +2612,25 @@
         

     return zAt_PsDecFinishParse(&prsCmd2Msg, pDecCmdStr, &cregSetReq, sizeof(T_zApMmia_CregSet_Req), TRUE); 

 }

+

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecMmCsqReq(T_ZAt_DecCmdInfo *pDecCmdInfo)

+{

+    T_ZAt_ParseCmd2MsgRslt      prsCmd2Msg = {0};

+    T_zMmiaAs_Csq_Qry_Req    tCsq = {0};

+    tCsq.bAtType = Z_ATI_CSQ;

+

+    prsCmd2Msg.pMsgBody = zAti_GetUB(sizeof(T_zMmiaAs_Csq_Qry_Req));

+

+    if(pDecCmdInfo->curCmdId == ZAT2_MM_ZSQ)

+    {

+        tCsq.bAtType = Z_ATI_ZSQ;

+    }

+

+    prsCmd2Msg.iMsgLen = sizeof(T_zMmiaAs_Csq_Qry_Req);

+    zOss_Memcpy(prsCmd2Msg.pMsgBody, &tCsq, sizeof(T_zMmiaAs_Csq_Qry_Req));

+

+    return prsCmd2Msg;

+}

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

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

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

@@ -18288,8 +18307,58 @@
 {    

     T_zApMmia_Rxlev_Cnf *pCsqExeCnf = (T_zApMmia_Rxlev_Cnf*) pEncCmdInfo->pMsgBody;    

 

-    /* +CSQ: <rssi>,<ber> */

-    return (UINT16)sprintf((char *)pEncCmdInfo->pStrCmd, "%s+CSQ: %d,%d,%d%s%s",  g_zAt_CRLF, pCsqExeCnf->bRssi, pCsqExeCnf->bBler, pCsqExeCnf->bAct, g_zAt_CRLF, g_zAt_OK);    

+    if(pEncCmdInfo->cmdId == ZAT2_MM_CSQ)

+    {

+        /* +CSQ: <rssi>,<ber> */

+        return (UINT16)sprintf((char *)pEncCmdInfo->pStrCmd, "%s+CSQ: %d,%d,%d%s%s",  g_zAt_CRLF, 

+            pCsqExeCnf->bRssi, pCsqExeCnf->bBler, pCsqExeCnf->bAct, g_zAt_CRLF, g_zAt_OK);

+    }

+    else

+    {

+        if(pCsqExeCnf->bAct == Z_APMMIA_LTE || pCsqExeCnf->bAct == Z_APMMIA_WCDMA || pCsqExeCnf->bAct == Z_APMMIA_TDSCDMA)

+        {

+            if(pCsqExeCnf->bRssi >= 100)

+            {

+                pCsqExeCnf->bRssi -= 100;

+            }

+

+            if(pCsqExeCnf->bRssi <= 3)

+            {

+                pCsqExeCnf->bRssi = 0;

+            }

+            else

+            {

+                pCsqExeCnf->bRssi = ((pCsqExeCnf->bRssi - 3)/2);

+            }

+

+            if(pCsqExeCnf->bRssi > 31)

+            {

+                pCsqExeCnf->bRssi = 31;

+            }

+        }

+        else if(pCsqExeCnf->bAct == Z_APMMIA_NOSERVE)

+        {

+            if(pCsqExeCnf->bRssi == 199)

+            {

+                pCsqExeCnf->bRssi = 99;

+            }

+            else if(pCsqExeCnf->bRssi == 100)

+            {

+                pCsqExeCnf->bRssi = 0;

+            }

+        }

+        else

+        {

+            if(pCsqExeCnf->bRssi > 31)

+            {

+                pCsqExeCnf->bRssi = 31;

+            }

+        }

+

+        /* +ZSQ: <rssi>,<ber> */

+        return (UINT16)sprintf((char *)pEncCmdInfo->pStrCmd, "%s+ZSQ: %d,%d,%d%s%s",  g_zAt_CRLF, 

+            pCsqExeCnf->bRssi, pCsqExeCnf->bBler, pCsqExeCnf->bAct, g_zAt_CRLF, g_zAt_OK);

+    }

 }

 

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

@@ -22515,10 +22584,10 @@
 {

     CHAR* pDecCmdStr = pDecCmdInfo->strParam;

     CHAR strSubBuf[ZAT2_SUB_PARAM_MAX_LEN] = {0};

-    T_zAtiL1e_CardSwitch_Req       tCardSwitch = {0};

+    T_zMmiaAs_CardSwitch_Req       tCardSwitch = {0};

     T_ZAt_ParseCmd2MsgRslt     prsCmd2Msg = {0};

 

-    zAt_PsDecParamInit(&prsCmd2Msg,sizeof(T_zAtiL1e_CardSwitch_Req));

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

 

     if(g_zAti_ptData->tCardSwitch.bSwitchStat == Z_ATI_CARD_SWITCHING)

     {

@@ -22552,7 +22621,7 @@
     g_zAti_ptData->tCardSwitch.bSwitchStat = Z_ATI_CARD_SWITCHING;

     zAti_PutDualCardStatMutex();

 

-    prsCmd2Msg.iMsgLen= sizeof(T_zAtiL1e_CardSwitch_Req);

+    prsCmd2Msg.iMsgLen= sizeof(T_zMmiaAs_CardSwitch_Req);

     zOss_Memcpy(prsCmd2Msg.pMsgBody, (VOID*)&tCardSwitch, prsCmd2Msg.iMsgLen);

 

     return prsCmd2Msg;

@@ -23409,6 +23478,66 @@
 

     return zAt_GetParseRslt(ZAT2_CMD_REPLY_DIRECT);

 }

+

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecZcustmMccSetReq(T_ZAt_DecCmdInfo *pDecCmdInfo)

+{

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

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

+    T_ZAt_ParseCmd2MsgRslt     prsCmd2Msg = {0};

+    T_zAti_NV_CustomMcc     tCustmMcc = {0};

+    T_zAti_NV_CustomMcc     tTempCustmMcc = {0};

+    SINT16 iSubLen = -1;

+

+    /*+ZCUSTMMCC=MCC*/

+    iSubLen = zAt_GetNextParamStr(strSubBuf, ZAT2_PARAM_HEX_FORMAT, &pDecCmdStr);

+

+    if(iSubLen != 3)

+    {

+        return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);

+    }

+

+    zDev_NV_AtiReadItem(Z_ATI_NV_CustomMcc, (PBYTE)&tCustmMcc);

+    zOss_Memcpy(&tTempCustmMcc, &tCustmMcc, sizeof(T_zAti_NV_CustomMcc));

+

+    if((strSubBuf[0] >= '0' && strSubBuf[0] <= '9') && (strSubBuf[1] >= '0' && strSubBuf[1] <= '9') && (strSubBuf[2] >= '0' && strSubBuf[2] <= '9'))

+    {

+        tCustmMcc.bMCC1 = strSubBuf[0] - '0';

+        tCustmMcc.bMCC2 = strSubBuf[1] - '0';

+        tCustmMcc.bMCC3 = strSubBuf[2] - '0';

+    }

+    else

+    {

+        return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);

+    }

+

+    if (strlen((const char *)pDecCmdStr) != 0)

+    {

+        return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);

+    }

+

+    if (0 != memcmp(&tTempCustmMcc, &tCustmMcc, sizeof(T_zAti_NV_CustomMcc)))

+    {

+        zDev_NV_AtiWriteItem(Z_ATI_NV_CustomMcc, (PBYTE)&tCustmMcc);

+    }

+

+    zOss_Memcpy(g_zAt_EncBuf, g_zAt_OK, strlen((const char *)g_zAt_OK));

+    prsCmd2Msg.decRslt2nd = ZAT2_CMD_REPLY_DIRECT;

+

+    return prsCmd2Msg;

+}

+

+T_ZAt_ParseCmd2MsgRslt zAt_PsDecZcustmMccQryReq(T_ZAt_DecCmdInfo *pDecCmdInfo)

+{

+    BYTE i = 0;

+    CHAR *pStrWalk = g_zAt_EncBuf;

+    T_zAti_NV_CustomMcc     tCustmMcc = {0};

+

+    zDev_NV_AtiReadItem(Z_ATI_NV_CustomMcc, (PBYTE)&tCustmMcc);

+

+    sprintf((char *)pStrWalk, "%s+ZCUSTMMCC: %x%x%x%s%s", g_zAt_CRLF, tCustmMcc.bMCC1, tCustmMcc.bMCC2, tCustmMcc.bMCC3, g_zAt_CRLF, g_zAt_OK);

+

+    return zAt_GetParseRslt(ZAT2_CMD_REPLY_DIRECT);

+}

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

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

 * ¹¦ÄÜÃèÊö£º ¸ù¾ÝµÚ1²½½âÎö½á¹û£¬½âÎö+ZPAIDÇëÇ󣬲¢Ö±½ÓÌîд²éѯ½á¹û

diff --git a/cp/ps/modem/ps/src/nas/ati/src/zat_fnc_sup.c b/cp/ps/modem/ps/src/nas/ati/src/zat_fnc_sup.c
index 01e9bb3..b6d11de 100755
--- a/cp/ps/modem/ps/src/nas/ati/src/zat_fnc_sup.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zat_fnc_sup.c
@@ -12323,7 +12323,7 @@
 #ifdef DSDS_VSIM

 UINT16 zAt_PsEncCardSwitchReqCnf(T_ZAt_EncCmdInfo * pEncCmdInfo)

 {

-    T_zAtiL1e_CardSwitch_Cnf *pCardSwitchCnf = (T_zAtiL1e_CardSwitch_Cnf*) pEncCmdInfo->pMsgBody;

+    T_zMmiaAs_CardSwitch_Cnf *pCardSwitchCnf = (T_zMmiaAs_CardSwitch_Cnf*) pEncCmdInfo->pMsgBody;

 

     return zAt_PsEncCommonResult(pEncCmdInfo, pCardSwitchCnf->bResult, Z_SUCC, Z_FAIL, 100);

 }

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 1f53a46..96b1de0 100644
--- a/cp/ps/modem/ps/src/nas/ati/src/zat_var.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zat_var.c
@@ -117,6 +117,7 @@
     {   "+CPLS",       ZAT2_MM_CPLS,          "+CPLS: (0-2)"                      },

     {   "+CPOL",       ZAT2_MM_CPOL,          ""                                  },

     {   "+CSQ",        ZAT2_MM_CSQ,           "+CSQ: (0-31,99-199),(0-7,99),(0,3,5,15,17)"         },

+    {   "+ZSQ",       ZAT2_MM_ZSQ,          "+ZSQ: (0-31,99),(0-7,99),(0,3,5,15,17)"        },

     {   "^MODE",       ZAT2_MM_MODE,          ""                                  },

     {   "^SPN",        ZAT2_MM_SPN,           "^SPN: (0,1)"                       },   

     {   "^SYSCONFIG",      ZAT2_MM_SYSCONFIG,             ""                                  },

@@ -483,6 +484,7 @@
 #endif

     {   "+ZLTEBLKCELL",    ZAT2_LTE_ZLTEBLKCELL,    "+ZLTEBLKCELL: (0-5)"},

     {   "+ZLTECAT",        ZAT2_LTE_ZLTECAT,           ""},

+    {   "+ZCUSTMMCC",       ZAT2_CFG_ZCUSTMMCC,            ""    },

 

     /********************************* LTE GoTaÄ£¿é *******************************/

 #ifdef BTRUNK_SUPPORT

@@ -757,9 +759,10 @@
     { ZAT2_MM_CREG,    ZAT2_CO_SET_REQ,    AP_MMIA_CREG_SET_REQ_EV,   zAt_PsDecMmCregSetReq    },

     { ZAT2_MM_CREG,    ZAT2_CO_QUERY_REQ,  AP_MMIA_CREG_QUERY_REQ_EV,     zAt_PsDecCommonReq       },

 

-    /******************************************* +CSQ **********************************************/

-    { ZAT2_MM_CSQ,     ZAT2_CO_ACTION_REQ, ATI_DISTRIBUTE_FUNC_RXLEV_REQ_EV,          zAt_PsDecCommonReq       },

-    

+    /******************************************* +CSQ/+ZSQ **********************************************/

+    { ZAT2_MM_CSQ,     ZAT2_CO_ACTION_REQ, ATI_DISTRIBUTE_FUNC_RXLEV_REQ_EV,          zAt_PsDecMmCsqReq       },

+    { ZAT2_MM_ZSQ,     ZAT2_CO_ACTION_REQ, ATI_DISTRIBUTE_FUNC_RXLEV_REQ_EV,          zAt_PsDecMmCsqReq       },

+

     /******************************************* +ZCSQ **********************************************/

     { ZAT2_MM_ZCSQ,     ZAT2_CO_ACTION_REQ, ATI_DISTRIBUTE_FUNC_ZCSQ_REQ_EV,          zAt_PsDecCommonReq       },

 

@@ -1675,6 +1678,10 @@
     { ZAT2_LTE_ZLTEBLKCELL,    ZAT2_CO_SET_REQ,  0,  zAt_PsDecZlteblkcellSetReq  },

     { ZAT2_LTE_ZLTEBLKCELL,    ZAT2_CO_QUERY_REQ,  0,  zAt_PsDecZlteblkcellQryReq  },

 

+    /***************************+ZCUSTMMCC*****************************/

+    { ZAT2_CFG_ZCUSTMMCC,    ZAT2_CO_SET_REQ,  0,  zAt_PsDecZcustmMccSetReq  },

+    { ZAT2_CFG_ZCUSTMMCC,    ZAT2_CO_QUERY_REQ,  0,  zAt_PsDecZcustmMccQryReq  },

+

 #ifdef DSDS_VSIM

     /*******************************************+ZCARDSWITCHREQ**********************************************/

     { ZAT2_LTE_ZCARDSWITCHREQ,    ZAT2_CO_SET_REQ,   ATI_DISTRIBUTE_FUNC_CARDSWITCH_REQ_EV,    zAt_PsDecZcardSwitchReq    },

@@ -2383,7 +2390,7 @@
 #endif

 #ifdef DSDS_VSIM

     /*******************************+ZCARDSWITCHREQ*********************************/

-    {MMIA_L1E_CARD_SWITCH_CNF_EV,    zAt_PsEncCardSwitchReqCnf,    ZAT2_CO_CNF },

+    {MMIA_AS_CARD_SWITCH_CNF_EV,    zAt_PsEncCardSwitchReqCnf,    ZAT2_CO_CNF },

 

     /*******************************+ZCARDSWITCHIND*********************************/

     {MMIA_UMM_CARDSWITCH_REQ_IND_EV,    zAt_PsEncCardSwitchReqInd,    ZAT2_CO_IND },

diff --git a/cp/ps/modem/ps/src/nas/ati/src/zati_com.c b/cp/ps/modem/ps/src/nas/ati/src/zati_com.c
index c4e88bc..52d9758 100755
--- a/cp/ps/modem/ps/src/nas/ati/src/zati_com.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zati_com.c
@@ -2561,11 +2561,12 @@
 {

     BYTE bRegState = Z_APMMIA_REGSTATE_UNKNOWN;

     BYTE bInsNo = Z_ATI_INSNO_1;

+	BYTE bCurAct = 0;

 

     bInsNo = ((g_zAti_CurInstance == Z_ATI_INSNO_1)? Z_ATI_INSNO_1 : Z_ATI_INSNO_2);

 

 #ifdef PS_RAT_LTE

-    BYTE bCurAct = zAti_GetCurAct_ByIndex(bInsNo);

+    bCurAct = zAti_GetCurAct_ByIndex(bInsNo);

     if (bCurAct == Z_LTE_ACT)

     {

         bRegState = g_zAti_atDataEx[bInsNo].bEpsState;

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 b1137c1..2a4cb47 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
@@ -2740,10 +2740,18 @@
 * ·µ »Ø Öµ£º UINT16  ±àÂëËùµÃ×Ö·û´®³¤¶È£¬0Ϊ±àÂëʧ°Ü

 * ÆäËü˵Ã÷£º +CSQÖ´ÐÐÃüÁîÏìÓ¦µÄ±àÂ뺯Êý

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

-VOID zAt_EncCSQCnf(BYTE bRssi, BYTE bBler, BYTE bAct)

-{ 

-    /* +CSQ: <rssi>,<ber> */

-    sprintf((char *)g_zAt_EncBuf, "%s+CSQ: %d,%d,%d%s%s",  g_zAt_CRLF, bRssi,bBler,bAct,g_zAt_CRLF,g_zAt_OK);

+VOID zAt_EncCSQCnf(BYTE bRssi, BYTE bBler, BYTE bAct, BYTE bAtType)

+{

+    if(bAtType == Z_ATI_CSQ)

+    {

+        /* +CSQ: <rssi>,<ber> */

+        sprintf((char *)g_zAt_EncBuf, "%s+CSQ: %d,%d,%d%s%s",  g_zAt_CRLF, bRssi,bBler,bAct,g_zAt_CRLF,g_zAt_OK);

+    }

+    else

+    {

+        /* +ZSQ: <rssi>,<ber> */

+        sprintf((char *)g_zAt_EncBuf, "%s+ZSQ: %d,%d,%d%s%s",  g_zAt_CRLF, bRssi,bBler,bAct,g_zAt_CRLF,g_zAt_OK);

+    }

 }

 

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

@@ -2792,7 +2800,7 @@
     switch(bRegState)

     {

         case Z_APMMIA_REGSTATE_NOREGBUTSEARCH:    /*ËÑÍø*/

-            zAt_EncCSQCnf(99, 99, Z_APMMIA_NOSERVE);

+            zAt_EncCSQCnf(99, 99, Z_APMMIA_NOSERVE, ptCsqQryReq->bAtType);

             return Z_APMMIA_NOERROR_ERR;

 

         case Z_APMMIA_REGSTATE_NOREGNOSEARCH:     /*Õý³£×¤Áô*/

@@ -2840,7 +2848,7 @@
         case Z_APMMIA_REGSTATE_REGDENIED:         /*no cell*/

         case Z_APMMIA_REGSTATE_UNKNOWN:  

         default:

-            zAt_EncCSQCnf(0, 99, Z_APMMIA_NOSERVE);

+            zAt_EncCSQCnf(0, 99, Z_APMMIA_NOSERVE, ptCsqQryReq->bAtType);

             return Z_APMMIA_NOERROR_ERR;

     }

 

@@ -5358,7 +5366,7 @@
 {

     BYTE bIndex = g_zAti_CurInstance;

     T_zMmiaAs_CardSwitch_Ind *ptInd = ZOSS_NULL;

-    T_zAtiL1e_CardSwitch_Cnf *ptCardSwitch = (T_zAtiL1e_CardSwitch_Cnf*)pBuff;

+    T_zMmiaAs_CardSwitch_Cnf *ptCardSwitch = (T_zMmiaAs_CardSwitch_Cnf*)pBuff;

 

     /*±ä»»×´Ì¬*/

     zAti_GetDualCardStatMutex();

@@ -5402,7 +5410,7 @@
 

     g_zAti_CurInstance = bIndex;

 

-    *pdwChangedMsgId = MMIA_L1E_CARD_SWITCH_CNF_EV;

+    *pdwChangedMsgId = MMIA_AS_CARD_SWITCH_CNF_EV;

 

     return Z_APMMIA_NORESULT;

 }

@@ -8326,13 +8334,12 @@
 DWORD zAti_CardSwitchReq(VOID* pBuff)

 {

     BYTE bIndex = g_zAti_CurInstance;

-    T_zMmiaAs_CardSwitch_Ind *ptInd = ZOSS_NULL;

-    T_zAtiL1e_CardSwitch_Req *ptCardSwitch = ZOSS_NULL;

-    T_zAtiL1e_CardSwitch_Req *pAtSwitchCard = (T_zAtiL1e_CardSwitch_Req*)pBuff;

+    T_zMmiaAs_CardSwitch_Req *ptCardSwitch = ZOSS_NULL;

+    T_zMmiaAs_CardSwitch_Req *pAtSwitchCard = (T_zMmiaAs_CardSwitch_Req*)pBuff;

 

-    ptCardSwitch = (T_zAtiL1e_CardSwitch_Req*)zAti_GetUB(sizeof(T_zAtiL1e_CardSwitch_Req));

+    ptCardSwitch = (T_zMmiaAs_CardSwitch_Req*)zAti_GetUB(sizeof(T_zMmiaAs_CardSwitch_Req));

 

-    zOss_Memcpy(ptCardSwitch, pAtSwitchCard, sizeof(T_zAtiL1e_CardSwitch_Req));

+    zOss_Memcpy(ptCardSwitch, pAtSwitchCard, sizeof(T_zMmiaAs_CardSwitch_Req));

 

     if(ptCardSwitch->bSim1Act == Z_ATI_CARD_DEACT)

     {

@@ -8343,16 +8350,7 @@
         g_zAti_CurInstance = Z_ATI_INSNO_2;

     }

 

-    zAti_MsgSend(MMIA_L1E_CARD_SWITCH_REQ_EV, (PBYTE)ptCardSwitch, sizeof(T_zAtiL1e_CardSwitch_Req), Z_ATI_TASKID_L1E);

-

-    /*֪ͨµ±Ç°´ýµÄRRCÒµÎñ¹ÒÆð*/

-    ptInd = (T_zMmiaAs_CardSwitch_Ind*)zAti_GetUB(sizeof(T_zMmiaAs_CardSwitch_Ind));

-    ptInd->bSrcIndex = pAtSwitchCard->bSrcIndex;

-    ptInd->bDesIndex = pAtSwitchCard->bDesIndex;

-    ptInd->bActStat = Z_ATI_CARD_DEACT;

-    ptInd->bIsReEst = Z_ATI_AFTCRDSWH_NONEST;

-

-    zAti_MsgSend(MMIA_AS_CARD_SWITCH_IND_EV, (PBYTE)ptInd, sizeof(T_zMmiaAs_CardSwitch_Ind), Z_ATI_TASKID_EUCER);

+    zAti_MsgSend(MMIA_AS_CARD_SWITCH_REQ_EV, (PBYTE)ptCardSwitch, sizeof(T_zMmiaAs_CardSwitch_Req), Z_ATI_TASKID_EUCER);

 

     g_zAti_CurInstance = bIndex;

 

diff --git a/cp/ps/modem/ps/src/nas/ati/src/zati_fnc.c b/cp/ps/modem/ps/src/nas/ati/src/zati_fnc.c
index e9a3db5..ebb5259 100755
--- a/cp/ps/modem/ps/src/nas/ati/src/zati_fnc.c
+++ b/cp/ps/modem/ps/src/nas/ati/src/zati_fnc.c
@@ -379,7 +379,7 @@
         {MMIA_UMM_PS_CONTEXT_CNF_EV, zAti_UmmPsContextCnf},

 #endif

 #ifdef DSDS_VSIM

-        {MMIA_L1E_CARD_SWITCH_CNF_EV, zAti_CardSwitchCnf},

+        {MMIA_AS_CARD_SWITCH_CNF_EV, zAti_CardSwitchCnf},

 #endif

 };

 

@@ -651,7 +651,7 @@
         iEvId == MMIA_L1T_ZTPCG_CNF_EV||

         iEvId == MMIA_L1W_ZWPCG_CNF_EV||

         iEvId == MMIA_AS_UL_PARAM_IND_EV||

-        iEvId == MMIA_L1E_CARD_SWITCH_CNF_EV)

+        iEvId == MMIA_AS_CARD_SWITCH_CNF_EV)

     {

         return TRUE;

     }

@@ -2181,7 +2181,7 @@
             if(bValidNum > 0)

                 pbStrATCmd[--bValidNum] = ZAT2_NULL_CHAR;

         }

-        else  if(ptBuff->arrData[i] == g_zAti_ptData->bCurS3Value)

+        else  if((ptBuff->arrData[i] == g_zAti_ptData->bCurS3Value) || (ptBuff->arrData[i] == g_zAti_ptData->bCurS4Value))

         {

             ptBuff->iLength = bValidNum;

             zOss_Memcpy(ptBuff->arrData, pbStrATCmd, bValidNum);/* ½«ÊÕµ½µÄarrData±£´æµ½»º´æ */

@@ -6907,10 +6907,11 @@
 º¯ÊýÃû³Æ:zAti_HandleSmDeActAbortedEx

 º¯Êý¹¦ÄÜ:Èç¹û¸¨CID±»ABORTÔò·¢ÆðÖ÷CIDµÄÈ¥»î£¬

                            Èç¹û½öÊǼ¤»îʧ°ÜÔò±£ÁôÖ÷CID

-º¯Êý²ÎÊý:

+º¯Êý²ÎÊý:¸¨CID±»ABORTÔò±£ÁôÖ÷CID---23-03-29

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

 static BOOL zAti_HandleSmActFailedExCid(T_zMmiaSm_PdpAct_Cnf * pSmActDeacCnf, UINT8* pDest)

 {

+#if 0

     BYTE i = 0;

     BYTE bCid = 0;

     T_zApMmia_SmActDeact_Req  smCgactReq = {0};

@@ -6937,6 +6938,7 @@
 

         return zAti_SmCgactReq(&smCgactReq) == Z_APMMIA_NORESULT;

     }

+#endif

     //·ÇABORTʱ½á¹ûÂëµÄÉϱ¨ÐèÒªÓëÖ÷CIDµÄ±£³ÖÒ»ÖÂ

     pSmActDeacCnf->bResult = g_zAti_SmContext[g_zAti_CurInstance].bDualStackActResult;

     g_zAti_SmContext[g_zAti_CurInstance].bDualStackActResult = Z_SUCC;//Çå³ý

@@ -7233,8 +7235,11 @@
     BYTE bCurrReportChnel = zAti_GetAlwaysReportChnel((BYTE)(g_zAti_CurInstance+1));

 

     if ((zAti_IsSingleCardForTwoStandby() && (zAti_IsUiccEv(iEvId) || zAti_IsStmEv(iEvId)))||

-        (iEvId == EV_ZATI2_ZMSRI_IND)||(iEvId == AP_MMIA_PSCFGSTART_IND_EV)||(iEvId ==AP_MMIA_PSCFGEND_IND_EV )||

-        (iEvId == MMIA_UMM_CARDSWITCH_REQ_IND_EV))

+        (iEvId == EV_ZATI2_ZMSRI_IND)||(iEvId == AP_MMIA_PSCFGSTART_IND_EV)||(iEvId ==AP_MMIA_PSCFGEND_IND_EV )

+        #ifdef DSDS_VSIM

+        ||(iEvId == MMIA_UMM_CARDSWITCH_REQ_IND_EV) || (iEvId == MMIA_SM_CGEV_IND_EV)

+        #endif

+        )

     {

         /*ËùÓпÕÏÐͨµÀ¾ùÉϱ¨*/

         bIsAllChnlDeliver = TRUE;

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 719fd95..32f9fe7 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
@@ -126,6 +126,7 @@
         case MMIA_AS_TMGI_DEACTIVATE_CNF_EV:

         case MMIA_AS_EM_LTE_HO_SET_QUERY_CNF_EV:

         case MMIA_AS_EM_LTE_HO_INFO_IND_EV:

+        case MMIA_AS_CARD_SWITCH_CNF_EV:

             ptMsgInfo->bSrcMod = SUBMDL_Z_EUCER;

             break;

         default:

@@ -134,7 +135,7 @@
 }

 BYTE __ps_static_func zAti_SearchForSrcModByMsgInfo (DWORD dwMsgId, BYTE bTaskIndex, T_z_MsgInfo *ptMsgInfo)

 {

-    if(dwMsgId == MMIA_L1E_ZEPCG_CNF || dwMsgId == MMIA_AS_UL_PARAM_IND_EV || dwMsgId == MMIA_L1E_CARD_SWITCH_CNF_EV)

+    if(dwMsgId == MMIA_L1E_ZEPCG_CNF || dwMsgId == MMIA_AS_UL_PARAM_IND_EV)

     {

         ptMsgInfo->bSrcMod = SUBMDL_Z_L1E;/*L1EÊÇÖжÏÖ±½Óµ÷ÓõÄÐèÒªÌØÊâ´¦Àí*/

         ptMsgInfo->tSrcTask = zDev_GetTaskId(Z_ATI_TASKID_L1E, g_zAti_CurInstance);

@@ -236,6 +237,7 @@
                 case MMIA_AS_EM_LTE_HO_INFO_IND_EV:

                 case MMIA_AS_QUERY_ZCSQ_CNF_EV:

                 case MMIA_AS_LBS_CNF_EV:

+                case MMIA_AS_CARD_SWITCH_CNF_EV:

                     zAti_SearchSrcModForAsMsg(dwMsgId, ptMsgInfo);

                     break;

                 default:

diff --git a/cp/ps/modem/tools/inc/commgt_api.h b/cp/ps/modem/tools/inc/commgt_api.h
index a8a8a6f..0e7c01e 100755
--- a/cp/ps/modem/tools/inc/commgt_api.h
+++ b/cp/ps/modem/tools/inc/commgt_api.h
@@ -158,7 +158,7 @@
     ZCAT_MODE_CP_NET,

     ZCAT_MODE_CP_FS,

 #ifdef _USE_VEHICLE_DC

-    ZCAT_MODE_CAP_EMMC

+    ZCAT_MODE_CAP_FS,

 #endif

 

 } E_ZCAT_MODE;

diff --git a/cp/ps/plat/src/oss/psm/src/psm_297520v3.c b/cp/ps/plat/src/oss/psm/src/psm_297520v3.c
index d450dcf..45ce900 100644
--- a/cp/ps/plat/src/oss/psm/src/psm_297520v3.c
+++ b/cp/ps/plat/src/oss/psm/src/psm_297520v3.c
@@ -41,7 +41,7 @@
 #define ZOSS_PSM_THREAD_TOTAL_TIME_MIN          3000

 #define ZOSS_PSM_IGNORE_THREAD_TOTAL_TIME_MIN   1000

 #define ZOSS_PSM_IDLE_CPU_LOAD                  70

-#define ZOSS_PSM_IDLE_FLAG_NR                  7

+#define ZOSS_PSM_IDLE_FLAG_NR                  8

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

 * Íⲿº¯ÊýºÍ±äÁ¿ÉùÃ÷Çø

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

@@ -76,7 +76,7 @@
 extern BOOL   zAti2_PsIsInFlyMode(VOID);

 extern BOOL   zAti2_PsRfNotOpen(VOID);

 extern BYTE   zPS_umm_IsLossOfCoverage(VOID);

-extern UINT32 zL1e_TaskIsIdlePrint(VOID);

+extern UINT32 zL1e_TaskIsIdlePrint(BYTE bStackIns);

 extern UINT32 zL1w_TaskIsIdlePrint(VOID);

 extern UINT32 zL1t_TaskIsIdlePrint(VOID);

 

@@ -340,19 +340,29 @@
 #if defined(_OS_LINUX) && (defined CONFIG_PM)

 extern void pm_psm_flag_print(UINT32 *sleepflag);

 #endif

+

 VOID psm_GetModemSleepFlagStatus(VOID)

 {

-	UINT32 sleepFlagStatus[ZOSS_PSM_IDLE_FLAG_NR] = {0};	

-        sleepFlagStatus[0]  = zL1e_TaskIsIdlePrint();   // 1: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

+	UINT32 sleepFlagStatus[ZOSS_PSM_IDLE_FLAG_NR] = {0};

+	

+#if defined (PS_RAT_LTE)	

+        sleepFlagStatus[0]  = zL1e_TaskIsIdlePrint(0);   // 1: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

+	#ifdef DUAL_CARD_DUAL_STANDBY

+    	sleepFlagStatus[7] = zL1e_TaskIsIdlePrint(1);

+	#else

+        sleepFlagStatus[7] = 0x7f;	

+	#endif      

+#endif

+

 #ifdef PS_RAT_FDD

         sleepFlagStatus[1]  = zL1w_TaskIsIdlePrint();  // 1: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

 #else

-        sleepFlagStatus[1] = 1;

+        sleepFlagStatus[1] = 0x3f;

 #endif

 #ifdef PS_RAT_TDD        

         sleepFlagStatus[2]  = zL1t_TaskIsIdlePrint();    // 1: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

 #else

-        sleepFlagStatus[2] = 1;

+        sleepFlagStatus[2] = 0x3f;

 #endif        

         sleepFlagStatus[3]  = zDrvPow_PsmIdleFlagGet();  //0: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

         sleepFlagStatus[4]  = psm_AppIdleFlagGet();         //0: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

@@ -1688,15 +1698,22 @@
 **************************************************************************/

 VOID zOss_PsmTraceInfo(VOID)

 {

-    UINT32 dwPsL1eFlg = 0;

+    UINT32 dwPsL1eFlg0 = 0;

+    UINT32 dwPsL1eFlg1 = 0;	

     UINT32 dwPsL1wFlg = 0;

     UINT32 dwPsL1tFlg = 1;

     UINT32 dwDrvFlg = 0;

     UINT32 dwAppFlg = 0;

     UINT32 dwGsmFlg = 0;

     UINT32 dwPlatFlg = 0;

-    

-    dwPsL1eFlg = zL1e_TaskIsIdlePrint();   // 1: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

+ #if defined (PS_RAT_LTE)	   

+    dwPsL1eFlg0 = zL1e_TaskIsIdlePrint(0);   // 1: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

+ 	#ifdef DUAL_CARD_DUAL_STANDBY

+    	dwPsL1eFlg1 = zL1e_TaskIsIdlePrint(1);

+	#else

+    	dwPsL1eFlg1 = 0x3f;	

+	#endif

+#endif    

 #ifdef PS_RAT_FDD    

     dwPsL1wFlg = zL1w_TaskIsIdlePrint();  // 1: bitλ¶ÔÓ¦Ìõ¼þÔÊÐí˯Ãß

 #endif

@@ -1711,7 +1728,8 @@
     

     dwGsmFlg = !zGsml1_PsmIdleFlag() ;    //  1:ÔÊÐí˯Ãß

 

-    IRAM_PSPSM_DEBUG_INFO_L1E = dwPsL1eFlg;

+    IRAM_PSPSM_DEBUG_INFO_L1E = dwPsL1eFlg0;

+    IRAM_PSPSM_DEBUG_INFO_L1E1 = dwPsL1eFlg1;

     IRAM_PSPSM_DEBUG_INFO_L1W = dwPsL1wFlg;

     IRAM_PSPSM_DEBUG_INFO_L1T = dwPsL1wFlg;

     IRAM_PSPSM_DEBUG_INFO_L1G = dwGsmFlg;

@@ -1720,8 +1738,8 @@
     IRAM_PSPSM_DEBUG_INFO_APP = dwAppFlg;

     IRAM_PSPSM_DEBUG_INFO_L1W = dwPsL1wFlg;

     

-    zOss_Printf(SUBMDL_SHELL, PRINT_LEVEL_ABNORMAL, "SleepInfo PsL1e=%8x L1w=%8x L1t=%8x Gsm=%d,DrvFlg=%8x AppFlg=%8x PlatFlg=%d SleepCnt=%8d", 

-                    dwPsL1eFlg,dwPsL1wFlg,dwPsL1tFlg,dwGsmFlg,dwDrvFlg,dwAppFlg,dwPlatFlg,zDrvPow_PsmDeepSleepCnt());

+    zOss_Printf(SUBMDL_SHELL, PRINT_LEVEL_ABNORMAL, "SleepInfo PsL1e=%8x PsL1e1=%8x L1w=%8x L1t=%8x Gsm=%d,DrvFlg=%8x AppFlg=%8x PlatFlg=%d SleepCnt=%8d", 

+                    dwPsL1eFlg0,dwPsL1eFlg1,dwPsL1wFlg,dwPsL1tFlg,dwGsmFlg,dwDrvFlg,dwAppFlg,dwPlatFlg,zDrvPow_PsmDeepSleepCnt());

 

     zOss_Printf(SUBMDL_SHELL, PRINT_LEVEL_ABNORMAL,"SleepTicks = %d  CurrentTick = %d", g_zPsm_SleepTicksTime, zOss_GetTickCount());

     zOss_Printf(SUBMDL_SHELL, PRINT_LEVEL_ABNORMAL,"CampON = %d LossOfCoverage = %d FlyMode = %d GsmSleepTime = %d, PsSleepTime = %d",