[Feature][ZXW-452]merge P54U02 version
Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No
Change-Id: I17e6795ab66e2b9d1cbbfec4b7c0028d666e177d
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/audio_config/audioRef_cfg.c b/cp/ps/driver/src/chipsets/src/audio_base/audio_config/audioRef_cfg.c
index 1c21e8b..7489d52 100755
--- a/cp/ps/driver/src/chipsets/src/audio_base/audio_config/audioRef_cfg.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/audio_config/audioRef_cfg.c
@@ -807,6 +807,39 @@
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " zDrvVoiceConfig_Init start END!\n");
//zDrvVolte_LoopStart();
//zDrvVp_LoopStart(VP_PATH_SPEAKER);
+
+#if 1
+ if (audionvflag.isCloseVpBufferBak != 1)
+ {
+ ret = zCatAgt_Audio_Reg(10,VP_INOUT_BAK_BUFFER_SIZE,(UINT32)vpInOutBuffer.p_voiceRxInBuffer);
+ if(ret != DRV_SUCCESS){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVoiceConfig_Init RXIN register zCatAgt_Audio_Reg err\n");
+ }
+
+ ret = zCatAgt_Audio_Reg(12,VP_INOUT_BAK_BUFFER_SIZE,(UINT32)vpInOutBuffer.p_voiceTxInBuffer);
+ if(ret != DRV_SUCCESS){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVoiceConfig_Init TXIN register zCatAgt_Audio_Reg err\n");
+ }
+
+ ret = zCatAgt_Audio_Reg(13,VP_INOUT_BAK_BUFFER_SIZE,(UINT32)vpInOutBuffer.p_voiceTxOutPutBuffer);
+ if(ret != DRV_SUCCESS){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVoiceConfig_Init TXOUT register zCatAgt_Audio_Reg err\n");
+ }
+
+#ifdef _USE_VP_OUTPUT_RXOUT_DATA
+ ret = zCatAgt_Audio_Reg(11, VP_INOUT_BAK_BUFFER_SIZE, (UINT32)vpInOutBuffer.p_voiceRxOutPutBuffer);
+ if(ret != DRV_SUCCESS){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVoiceConfig_Init RXOUT register zCatAgt_Audio_Reg err\n");
+ }
+
+#else
+ ret = zCatAgt_Audio_Reg(11,VP_INOUT_NOBAK_BUFSIZE,(UINT32)vpInOutBuffer.p_voiceRxOutPutBuffer);
+ if(ret != DRV_SUCCESS){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVoiceConfig_Init RXOUT register zCatAgt_Audio_Reg err\n");
+ }
+#endif
+#endif
+ }
return DRV_SUCCESS;
}
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 f84072c..e0cef6a 100755
--- 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/voiceprocess/hal_voiceprocess.c b/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c
index 8193de0..efec067 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
@@ -36,6 +36,7 @@
#include "hal_audio_data.h"
//#define TEST_WHITE_NOISE
+//#define VB_DATA_LOSS_TEST
#ifdef TEST_WHITE_NOISE
#include "Fs8000_WhiteNoise_Mon.h"
//#include "Fs8000_Sine_440Hz_Mon.h"
@@ -57,6 +58,10 @@
#define VP_INOUT_BAK_BUFFER_SIZE 0x30000 // 0x60000
#define VP_INOUT_NOBAK_BUFSIZE 640
+#define VB_MAX_INT 0x7fffffff
+#define VB_MIN_INT 0 //(0-2<<31)//0x80000000
+
+#define VB_INT_OVERFLOW(x) if((x < VB_MIN_INT)||(x > VB_MAX_INT)) x = 0;
/****************************************************************************
* Local Types
****************************************************************************/
@@ -129,7 +134,7 @@
FALSE, //24 rxMuteEn
FALSE, //25 firstRegZCATFlag
#ifdef ECALL_SUPPORT
- 0 //26 ecallData
+ {0} //26 ecallData
#endif
};
@@ -260,6 +265,192 @@
* Function Definitions
****************************************************************************/
#ifdef CONFIG_VOICE_BUFFER_DRV
+#ifdef _VBUFF_IN_MULTI_CORE
+#define RPMSG_CAP_ID 1
+
+ZOSS_TIMER_ID s_voiceTimerId ;
+ZOSS_SEMAPHORE_ID s_voiceRdSema;
+ZOSS_SEMAPHORE_ID s_voiceWrSema;
+
+int timer_cb_count = 0;
+int first_full_flag = 0;
+int first_empty_flag = 0;
+
+int vb_read_count = 0;
+int vb_write_count = 0;
+
+
+void voiceTimerCallBack(SINT32 para)
+{
+ T_ZDrvRpMsg_Msg icp_pMsg = {0};
+
+ UINT8 s = 1;
+ icp_pMsg.actorID = RPMSG_CAP_ID;
+
+ icp_pMsg.chID = channel_41;
+ icp_pMsg.flag |= RPMSG_WRITE_INT;
+ icp_pMsg.buf = (void *)&s;
+ icp_pMsg.len = 1;
+
+
+ zOss_PutSemaphore(s_voiceWrSema);
+ zOss_PutSemaphore(s_voiceRdSema);
+ //zDrvRpMsg_Write(&icp_pMsg);
+ zDrvRpMsg_Write_Cap(&icp_pMsg);
+ timer_cb_count++;
+ VB_INT_OVERFLOW(timer_cb_count);
+#ifdef VB_DATA_LOSS_TEST
+
+ if((timer_cb_count%1000 ) == 0){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:timer_cb_count(%d)\n",__func__,timer_cb_count);
+ if(timer_cb_count> 10000000)
+ timer_cb_count=0;
+ }
+
+#endif
+
+// zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voiceTimerCallBack timer=%u\n", cpu_clock(0)>>10);
+}
+#define MAX_BUF_SIZE 640
+#define MAX_BUF_NUM 3
+
+
+enum{
+ UP_LINK,
+ DOWN_LINK
+};
+
+struct voice_ring_buffer {
+ volatile uint read_pos;
+ volatile uint write_pos;
+ volatile char data[];
+
+};
+struct voice_ring_buffer *voice_buff[2] = {NULL,NULL};
+
+
+
+static bool voice_buff_is_full(int read_pos, int write_pos)
+{
+
+
+ if ((write_pos - read_pos) >= 20000000) {
+ write_pos = write_pos - 20000000;
+ //voice_buff[UP_LINK]->write_pos = write_pos;
+ voice_buff[DOWN_LINK]->write_pos = write_pos;
+ }
+ return ((write_pos - read_pos) == MAX_BUF_NUM);
+}
+static bool voice_buff_is_empty(int read_pos, int write_pos)
+{
+
+ return (write_pos == read_pos);
+}
+static int voice_buffer_write( char *buf, int count)
+{
+ int read_pos, write_pos;
+
+
+ read_pos = voice_buff[DOWN_LINK]->read_pos;
+ write_pos = voice_buff[DOWN_LINK]->write_pos;
+ if(vb_write_count == 0){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: first read_pos=%d write_pos=%d \n",__func__,read_pos,write_pos);
+ }
+
+
+ if(voice_buff_is_full(read_pos, write_pos)){
+ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice_buffer_read readbuffer is full \n");
+ first_full_flag++;
+ VB_INT_OVERFLOW(first_full_flag);
+ if(first_full_flag == 1)
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: writebuffer is full read_pos %d,write_pos %d,vb_write_count %d,count %d\n",__func__,read_pos,write_pos,vb_write_count,count);
+ return DRV_ERROR_FULL;
+ }
+ else {
+ vb_write_count++;
+
+ VB_INT_OVERFLOW(vb_write_count);
+ first_full_flag = 0;
+ zOss_Memcpy(&(voice_buff[DOWN_LINK]->data[(write_pos%MAX_BUF_NUM)*MAX_BUF_SIZE]), buf, count);
+
+ write_pos++;
+
+ voice_buff[DOWN_LINK]->write_pos = write_pos;
+
+ }
+
+ return DRV_SUCCESS;
+}
+static int voice_buffer_read(char *buf, size_t count)
+{
+ int read_pos, write_pos;
+ int* buf_int;
+ int i;
+
+ read_pos = voice_buff[UP_LINK]->read_pos;
+ write_pos = voice_buff[UP_LINK]->write_pos;
+ if(vb_read_count == 0){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: first read_pos=%d write_pos=%d \n",__func__,read_pos,write_pos);
+ }
+
+ if ((count > 0) && (count <= MAX_BUF_SIZE)) {
+ if(voice_buff_is_empty(read_pos, write_pos)){
+ first_empty_flag++;
+ VB_INT_OVERFLOW(first_empty_flag);
+ if(first_empty_flag ==1)
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: readbuffer is empty,read_pos %d,write_pos %d,vb_read_count %d,count %d\n",__func__,read_pos,write_pos,vb_read_count,count);
+ //add memset,del return . edit for far end hear near end repreat voice pcm, FROM MBB TEST
+
+ #ifndef VB_DATA_LOSS_TEST
+ zOss_Memset(&(voice_buff[UP_LINK]->data[(read_pos%MAX_BUF_NUM)*MAX_BUF_SIZE]),0, count);
+ zOss_Memset(buf,0, count);
+ #endif
+ //return DRV_ERROR_EMPTY;
+
+
+ }
+ else {
+
+ vb_read_count++;
+ VB_INT_OVERFLOW(vb_read_count);
+ first_empty_flag = 0;
+
+ zOss_Memcpy(buf, &(voice_buff[UP_LINK]->data[(read_pos%MAX_BUF_NUM)*MAX_BUF_SIZE]), count);
+ //zOss_Memset(&(voice_buff[UP_LINK]->data[(read_pos%MAX_BUF_NUM)*MAX_BUF_SIZE]),0, count);
+
+#ifdef VB_DATA_LOSS_TEST
+
+
+ if(vb_read_count < 5){
+ pr_info("ps :count=%d vb_read_count=%d,read_pos=%d,write_pos=%d\n",count,vb_read_count,read_pos,write_pos);
+
+
+ buf_int =( int*) &voice_buff[UP_LINK]->data[(write_pos%MAX_BUF_NUM)*MAX_BUF_SIZE];
+
+ for(i=0;i<(count/4);i++){
+ //*(buf_int+i) = i;
+ //buf_int[i] = i;
+ if(i>0x1f)
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"ps: *(buf_int+%d)=%d\n",i,*(buf_int+i));
+ }
+
+ }
+#endif
+ read_pos++;
+ if(read_pos == 20000000)
+ read_pos = 0;
+ voice_buff[UP_LINK]->read_pos = read_pos;
+ }
+
+
+ }
+
+
+ return DRV_SUCCESS;
+}
+
+
+#else
extern int voicebuffer_ulqueue_read(void *buf, unsigned int size);
extern int voicebuffer_dlqueue_write(void *buf, unsigned int size);
extern void voice_inform_to_app(void);
@@ -276,6 +467,10 @@
// zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voiceTimerCallBack timer=%u\n", cpu_clock(0)>>10);
}
+
+
+#endif
+
SINT32 vp_rxsem_count_Init(void)
{
UINT32 i = 0;
@@ -561,6 +756,7 @@
if(g_voiceVar.ecallData.opt.drv_Get_Ecall_State == NULL)
{
+ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "update_ecall_state get__ecall_state fun not register!\n");
return DRV_ERR_NOT_SUPPORTED;
}
@@ -570,7 +766,7 @@
{
wrsem_count_Init(ECALL_SEM);
g_voiceVar.ecallData.ecallRxSta = ECALL_ST_RX_INUSE;
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "update_ecall_state rx state change old ecallRxSta = %d\n", g_voiceVar.ecallData.ecallRxSta);
+ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "update_ecall_state rx state change old ecallRxSta = %d\n", g_voiceVar.ecallData.ecallRxSta);
}
else if((dir == DIR_TX)&&(g_voiceVar.ecallData.ecallTxSta != ECALL_ST_TX_INUSE))
@@ -578,13 +774,21 @@
rdsem_count_Init(ECALL_SEM);
g_voiceVar.ecallData.ecallTxSta = ECALL_ST_TX_INUSE;
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "update_ecall_state tx state change old ecallTxSta = %d\n", g_voiceVar.ecallData.ecallTxSta);
+ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "update_ecall_state tx state change old ecallTxSta = %d\n", g_voiceVar.ecallData.ecallTxSta);
}
+ else if(dir == DIR_RX)
+ {
+ g_voiceVar.ecallData.ecallRxSta = ECALL_ST_RX_INUSE;
+ }
+ else if(dir == DIR_TX)
+ {
+ g_voiceVar.ecallData.ecallTxSta = ECALL_ST_TX_INUSE;
+ }
else
{
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "update_ecall_state return 1,but dir not support dir = %d\n",dir);
- ret = DRV_ERR_NOT_SUPPORTED;
+ ret = DRV_ERR_INVALID_PARAM;
}
@@ -604,7 +808,7 @@
else
{
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "update_ecall_state return 0,but dir not support dir = %d\n",dir);
- ret = DRV_ERR_NOT_SUPPORTED;
+ ret = DRV_ERR_INVALID_PARAM;
}
@@ -1222,10 +1426,25 @@
slic_tw_dtmf_detect_open();
#endif
#ifdef CONFIG_VOICE_BUFFER_DRV
+#ifdef _VBUFF_IN_MULTI_CORE
+
+
+ vp_rxsem_count_Init();
+ vp_txsem_count_Init();
+ voice_buff[UP_LINK]->read_pos = 0;
+ voice_buff[UP_LINK]->write_pos = 0;
+ voice_buff[DOWN_LINK]->read_pos = 0;
+ voice_buff[DOWN_LINK]->write_pos = 0;
+ zOss_Memset(&(voice_buff[DOWN_LINK]->data[0]),0, MAX_BUF_NUM*MAX_BUF_SIZE);
+ zOss_Memset(&(voice_buff[UP_LINK]->data[0]),0, MAX_BUF_NUM*MAX_BUF_SIZE);
+
+#else
// INIT_COMPLETION(s_voice_copletion);
vp_rxsem_count_Init();
vp_txsem_count_Init();
#endif
+#endif
+
#ifdef ECALL_SUPPORT
if(g_voiceVar.audio_ctrlFlag.isUseEcall == 1)
{
@@ -1289,6 +1508,16 @@
dtmf_test.drv_dtmftx_report_cb = drv_dtmftx_report;
zDrvDtmf_Detect_RegCallbacks(dtmf_test);
#endif
+#if defined(CONFIG_VOICE_BUFFER_DRV) && defined(_VBUFF_IN_MULTI_CORE)
+
+ timer_cb_count = 0;
+ first_full_flag = 0;
+ first_empty_flag = 0;
+
+ vb_read_count = 0;
+ vb_write_count = 0;
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open init voice buffer val!\n");
+#endif
return DRV_SUCCESS;
}
@@ -1355,8 +1584,11 @@
VOID zDrvVp_Status(UINT32 *sample_rate, UINT32 *voice_status)
{
- *sample_rate = g_voiceVar.sample_rate;
- *voice_status = g_voiceVar.vpI2sStatus;
+ if(NULL != sample_rate)
+ *sample_rate = g_voiceVar.sample_rate;
+
+ if(NULL != voice_status)
+ *voice_status = g_voiceVar.vpI2sStatus;
}
SINT32 vp_TdmCfgParam(T_ZDrvVp_Cfg *cfgParam)
@@ -1960,6 +2192,10 @@
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Close,s_vpState.pVpRxOutPutBuffer=%p\n", s_vpState.pVpRxOutPutBuffer);
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Close,s_vpState.pVpTxOutPutBuffer=%p\n", s_vpState.pVpTxOutPutBuffer);
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Close,s_vpState.inOutBufSize=%x\n", s_vpState.inOutBufSize);
+#if defined(CONFIG_VOICE_BUFFER_DRV) && defined(_VBUFF_IN_MULTI_CORE)
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: timer_cb_count %d,first_full_flag %d,first_empty_flag %d,vb_read_count %d,vb_write_count %d!\n",__func__,timer_cb_count,first_full_flag,first_empty_flag,vb_read_count,vb_write_count);
+#endif
return DRV_SUCCESS;
}
@@ -2027,8 +2263,12 @@
{
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error14:zDrvI2S_Write I2S_2 ret=%d", ret);
}
+#ifdef _VBUFF_IN_MULTI_CORE
+ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+#else
voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+#endif
#else
if (g_voiceVar.isUseSlicCodec == 1)
{
@@ -2492,7 +2732,12 @@
g_voiceVar.vpI2sStatus = VP_I2S_INUSE;
#ifdef CONFIG_VOICE_BUFFER_DRV
+#ifdef _VBUFF_IN_MULTI_CORE
+ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+
+#else
voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+#endif
#else
ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
if (ret != DRV_SUCCESS)
@@ -2685,8 +2930,12 @@
}
//wait_for_completion_timeout(&s_voice_completion, 60);
zOss_GetSemaphore(s_voiceWrSema, 60);
- voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+#ifdef _VBUFF_IN_MULTI_CORE
+ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+#else
+ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+#endif
if (g_voiceVar.voiceInVolteMode == 1)
{
s_speechState.rxSaveLen += s_speechState.totalFrameBufSize;
@@ -2695,10 +2944,14 @@
s_speechState.rxSaveLen = 0;
}
s_speechState.pVpTempRxInBuffer = s_vpState.pVpRxInBuffer + s_speechState.rxSaveLen;
+#ifdef _USE_VP_OUTPUT_RXOUT_DATA
+ s_speechState.pVpTempRxOutPutBuffer = s_vpState.pVpRxOutPutBuffer + s_speechState.rxSaveLen;
+#else
s_speechState.pVpTempRxOutPutBuffer = s_vpState.pVpRxOutPutBuffer;
+#endif
}
-#else
+#else //not defined CONFIG_VOICE_BUFFER_DRV
if (e_reg_flag == 1)
{
#ifdef ECALL_SUPPORT
@@ -2961,7 +3214,12 @@
// wait_for_completion_timeout(&s_voice_completion, 60);
zOss_GetSemaphore(s_voiceRdSema, 60);
+#ifdef _VBUFF_IN_MULTI_CORE
+ voice_buffer_read(s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
+
+#else
voicebuffer_ulqueue_read(s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
+#endif
if (g_voiceVar.vProcIsNormal == TRUE)
{
VoiceProc_TxProcess(&s_speechState.pVpTempTxInBuffer, NULL, &s_speechState.pVpTempTxOutPutBuffer, s_speechState.frameCount);
@@ -3299,205 +3557,204 @@
break;
}
//zOss_Memcpy((VOID *)( s_speechState.pVpTempRxOutPutBuffer), (VOID *) s_speechState.pVpTempRxInBuffer, VP_I2S_BUFFER_SIZE);
- }
- else
- {
- zOss_Memcpy((VOID *)(s_speechState.pVpTempRxOutPutBuffer), (VOID *) s_speechState.pVpTempRxInBuffer, 320);
- }
+ else
+ {
+ zOss_Memcpy((VOID *)(s_speechState.pVpTempRxOutPutBuffer), (VOID *) s_speechState.pVpTempRxInBuffer, 320);
+ }
- if (g_voiceVar.vpI2sStatus != VP_I2S_INUSE)
- {
- break;
- }
+ if (g_voiceVar.vpI2sStatus != VP_I2S_INUSE)
+ {
+ break;
+ }
#if 1
- //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "downlink:i2s1 write to codec\n");
- /*downlink:write to codec*/
- ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
+ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "downlink:i2s1 write to codec\n");
+ /*downlink:write to codec*/
+ ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
- //zOss_ASSERT(write_buf != NULL);
- //zOss_ASSERT(write_len != 0);
+ //zOss_ASSERT(write_buf != NULL);
+ //zOss_ASSERT(write_len != 0);
#if 0
- if (s_speechState.saveLen == 3200)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_GetBuf:I2S1:ret=%d,write_buf = %x,write_len = %d.\n", ret, write_buf, write_len);
- }
+ if (s_speechState.saveLen == 3200)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_GetBuf:I2S1:ret=%d,write_buf = %x,write_len = %d.\n", ret, write_buf, write_len);
+ }
#endif
- //if(ret == DRV_SUCCESS)
- if ((ret == DRV_SUCCESS) && (write_buf != NULL) && (write_len != 0))
- {
+ //if(ret == DRV_SUCCESS)
+ if ((ret == DRV_SUCCESS) && (write_buf != NULL) && (write_len != 0))
+ {
- if ((s_vpState.pVpExtI2sCfg->tClkMode == PCM_TIME_MODE) && (s_vpState.pVpExtI2sCfg->tPcmSlotNum != PCM_1TIME_SLOT))
- {
- //It is used for xinke to set teak voice gain when open lvwenhua 20150709
- zOss_Memset(write_buf, 0, write_len);
- for (i = 0; i < VP_I2S_BUFFER_SIZE;)
- {
- * (write_buf + i * (s_vpState.pVpExtI2sCfg->tPcmSlotNum + 1)) = * (s_speechState.pVpTempRxOutPutBuffer + i);
- * (write_buf + i * (s_vpState.pVpExtI2sCfg->tPcmSlotNum + 1) + 1) = * (s_speechState.pVpTempRxOutPutBuffer + i + 1);
- i += 2;
- }
- }
- else
+ if ((s_vpState.pVpExtI2sCfg->tClkMode == PCM_TIME_MODE) && (s_vpState.pVpExtI2sCfg->tPcmSlotNum != PCM_1TIME_SLOT))
+ {
+ //It is used for xinke to set teak voice gain when open lvwenhua 20150709
+ zOss_Memset(write_buf, 0, write_len);
+ for (i = 0; i < VP_I2S_BUFFER_SIZE;)
+ {
+ * (write_buf + i * (s_vpState.pVpExtI2sCfg->tPcmSlotNum + 1)) = * (s_speechState.pVpTempRxOutPutBuffer + i);
+ * (write_buf + i * (s_vpState.pVpExtI2sCfg->tPcmSlotNum + 1) + 1) = * (s_speechState.pVpTempRxOutPutBuffer + i + 1);
+ i += 2;
+ }
+ }
+ else
- {
- zOss_Memcpy(write_buf, s_speechState.pVpTempRxOutPutBuffer, VP_I2S_BUFFER_SIZE);
- //zOss_Memcpy(write_buf, s_speechState.pVpTempRxInBuffer,320);
- }
- }
- else
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "write else zDrvI2S_GetBuf:I2S1:ret=%d,write_buf = %x,write_len = %d.\n", ret, write_buf, write_len);
- break;
- }
- ret = zDrvExtAudio_Write(write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_Write:I2S_1:ret=%d,write_buf = %x,write_len = %d.\n", ret, write_buf, write_len);
- break;
- }
+ {
+ zOss_Memcpy(write_buf, s_speechState.pVpTempRxOutPutBuffer, VP_I2S_BUFFER_SIZE);
+ //zOss_Memcpy(write_buf, s_speechState.pVpTempRxInBuffer,320);
+ }
+ }
+ else
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "write else zDrvI2S_GetBuf:I2S1:ret=%d,write_buf = %x,write_len = %d.\n", ret, write_buf, write_len);
+ break;
+ }
+ ret = zDrvExtAudio_Write(write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_Write:I2S_1:ret=%d,write_buf = %x,write_len = %d.\n", ret, write_buf, write_len);
+ break;
+ }
#endif
#endif
- if (g_voiceVar.vpI2sStatus != VP_I2S_INUSE)
- {
- break;
- }
+ if (g_voiceVar.vpI2sStatus != VP_I2S_INUSE)
+ {
+ break;
+ }
- /*uplink:read from codec*/
- // zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "downlink:i2s1 read from codec\n");
- vp_ReadDataFromCodec(s_speechState.pVpTempTxOutPutBuffer, s_speechState.i2sReadParam.buffersize);
+ /*uplink:read from codec*/
+ // zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "downlink:i2s1 read from codec\n");
+ vp_ReadDataFromCodec(s_speechState.pVpTempTxOutPutBuffer, s_speechState.i2sReadParam.buffersize);
#if 0
- ret = zDrvExtAudio_Read(&read_buf, &read_len);
+ ret = zDrvExtAudio_Read(&read_buf, &read_len);
- //zOss_ASSERT(read_buf != NULL);
- //zOss_ASSERT(read_len != 0);
+ //zOss_ASSERT(read_buf != NULL);
+ //zOss_ASSERT(read_len != 0);
#if 0
- if (s_speechState.saveLen == 3200)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_GetBuf:I2S1:ret=%d,read_buf = %x,read_len = %d.\n", ret, read_buf, read_len);
- }
+ if (s_speechState.saveLen == 3200)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_GetBuf:I2S1:ret=%d,read_buf = %x,read_len = %d.\n", ret, read_buf, read_len);
+ }
#endif
- //if(ret == DRV_SUCCESS)
- if ((ret == DRV_SUCCESS) && (read_buf != NULL) && (read_len != 0))
- {
- if ((s_vpState.pVpExtI2sCfg->tClkMode == PCM_TIME_MODE) && (s_vpState.pVpExtI2sCfg->tPcmSlotNum != PCM_1TIME_SLOT))
- {
- //It is used for xinke to set teak voice gain when open lvwenhua 20150709
- for (i = 0; i < VP_I2S_BUFFER_SIZE;)
- {
- * (s_speechState.pVpTempTxInBuffer + i) = * (read_buf + i * (s_vpState.pVpExtI2sCfg->tPcmSlotNum + 1));
- * (s_speechState.pVpTempTxInBuffer + i + 1) = * (read_buf + i * (s_vpState.pVpExtI2sCfg->tPcmSlotNum + 1) + 1);
- i += 2;
- }
- }
- else
- {
- zOss_Memcpy(s_speechState.pVpTempTxInBuffer, read_buf, VP_I2S_BUFFER_SIZE);
- }
- }
- else
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_Read:I2S1:ret=%d,read_buf = %p,read_len = %d.\n", ret, read_buf, read_len);
- break;
- }
- ret = zDrvExtAudio_FreeBuf(read_buf);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_FreeBuf:I2S1:ret=%d,read_buf = %x.\n", ret, read_buf);
- break;
- }
+ //if(ret == DRV_SUCCESS)
+ if ((ret == DRV_SUCCESS) && (read_buf != NULL) && (read_len != 0))
+ {
+ if ((s_vpState.pVpExtI2sCfg->tClkMode == PCM_TIME_MODE) && (s_vpState.pVpExtI2sCfg->tPcmSlotNum != PCM_1TIME_SLOT))
+ {
+ //It is used for xinke to set teak voice gain when open lvwenhua 20150709
+ for (i = 0; i < VP_I2S_BUFFER_SIZE;)
+ {
+ * (s_speechState.pVpTempTxInBuffer + i) = * (read_buf + i * (s_vpState.pVpExtI2sCfg->tPcmSlotNum + 1));
+ * (s_speechState.pVpTempTxInBuffer + i + 1) = * (read_buf + i * (s_vpState.pVpExtI2sCfg->tPcmSlotNum + 1) + 1);
+ i += 2;
+ }
+ }
+ else
+ {
+ zOss_Memcpy(s_speechState.pVpTempTxInBuffer, read_buf, VP_I2S_BUFFER_SIZE);
+ }
+ }
+ else
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_Read:I2S1:ret=%d,read_buf = %p,read_len = %d.\n", ret, read_buf, read_len);
+ break;
+ }
+ ret = zDrvExtAudio_FreeBuf(read_buf);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_FreeBuf:I2S1:ret=%d,read_buf = %x.\n", ret, read_buf);
+ break;
+ }
- if (g_voiceVar.vpI2sStatus != VP_I2S_INUSE)
- {
- break;
- }
+ if (g_voiceVar.vpI2sStatus != VP_I2S_INUSE)
+ {
+ break;
+ }
- /*uplink:voice process*/
- if (g_voiceVar.vProcIsNormal == TRUE)
- ret = VoiceProc_TxProcess(& s_speechState.pVpTempTxInBuffer, NULL, & s_speechState.pVpTempTxOutPutBuffer);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_DataProcessThreadEntry error:VoiceProc_TxProcess :ret=%d.\n", ret);
- break;
- }
- //zOss_Memcpy((VOID *)( s_speechState.pVpTempTxOutPutBuffer), (VOID *) s_speechState.pVpTempTxInBuffer, VP_I2S_BUFFER_SIZE);
- }
- else
- {
+ /*uplink:voice process*/
+ if (g_voiceVar.vProcIsNormal == TRUE)
+ ret = VoiceProc_TxProcess(& s_speechState.pVpTempTxInBuffer, NULL, & s_speechState.pVpTempTxOutPutBuffer);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_DataProcessThreadEntry error:VoiceProc_TxProcess :ret=%d.\n", ret);
+ break;
+ }
+ //zOss_Memcpy((VOID *)( s_speechState.pVpTempTxOutPutBuffer), (VOID *) s_speechState.pVpTempTxInBuffer, VP_I2S_BUFFER_SIZE);
+ else
+ {
- //no nxp lib lwenhua 20150317
- //VoiceProc_TxProcess(& s_speechState.pVpTempTxInBuffer, NULL, & s_speechState.pVpTempTxOutPutBuffer);
- zOss_Memcpy((VOID *)(s_speechState.pVpTempTxOutPutBuffer), (VOID *) s_speechState.pVpTempTxInBuffer, 320);
- }
+ //no nxp lib lwenhua 20150317
+ //VoiceProc_TxProcess(& s_speechState.pVpTempTxInBuffer, NULL, & s_speechState.pVpTempTxOutPutBuffer);
+ zOss_Memcpy((VOID *)(s_speechState.pVpTempTxOutPutBuffer), (VOID *) s_speechState.pVpTempTxInBuffer, 320);
+ }
#endif
- if (g_voiceVar.vpI2sStatus != VP_I2S_INUSE)
- {
- break;
- }
+ if (g_voiceVar.vpI2sStatus != VP_I2S_INUSE)
+ {
+ break;
+ }
- /*uplink:write to teak*/
- //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "downlink:i2s2 write to teak\n");
- ret = zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+ /*uplink:write to teak*/
+ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "downlink:i2s2 write to teak\n");
+ ret = zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
- //zOss_ASSERT(write_buf != NULL);
- //zOss_ASSERT(write_len != 0);
+ //zOss_ASSERT(write_buf != NULL);
+ //zOss_ASSERT(write_len != 0);
#if 0
- if (s_speechState.saveLen == 3200)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_GetBuf:I2S2:ret=%d,write_buf = %x,write_len = %d.\n", ret, write_buf, write_len);
- }
+ if (s_speechState.saveLen == 3200)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_GetBuf:I2S2:ret=%d,write_buf = %x,write_len = %d.\n", ret, write_buf, write_len);
+ }
#endif
- //if(ret == DRV_SUCCESS)
- if ((ret == DRV_SUCCESS) && (write_buf != NULL) && (write_len != 0))
- {
- zOss_Memcpy(write_buf, s_speechState.pVpTempTxOutPutBuffer, s_speechState.totalFrameBufSize);
- //zOss_Memcpy(write_buf, s_speechState.pVpTempTxInBuffer,320);
- }
- else
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_GetBuf:I2S2:ret=%d,write_buf = %p,write_len = %d.\n", ret, write_buf, write_len);
- break;
- }
- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_Write:I2S2:ret=%d,write_buf = %p,write_len = %d.\n", ret, write_buf, write_len);
- break;
- }
+ //if(ret == DRV_SUCCESS)
+ if ((ret == DRV_SUCCESS) && (write_buf != NULL) && (write_len != 0))
+ {
+ zOss_Memcpy(write_buf, s_speechState.pVpTempTxOutPutBuffer, s_speechState.totalFrameBufSize);
+ //zOss_Memcpy(write_buf, s_speechState.pVpTempTxInBuffer,320);
+ }
+ else
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_GetBuf:I2S2:ret=%d,write_buf = %p,write_len = %d.\n", ret, write_buf, write_len);
+ break;
+ }
+ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S_Write:I2S2:ret=%d,write_buf = %p,write_len = %d.\n", ret, write_buf, write_len);
+ break;
+ }
#if 0
- if (s_speechState.saveLen == 3200)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_DataProcessThreadEntry: s_speechState.saveLen = %d.\n", s_speechState.saveLen);
- }
+ if (s_speechState.saveLen == 3200)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_DataProcessThreadEntry: s_speechState.saveLen = %d.\n", s_speechState.saveLen);
+ }
#endif
- //if( s_speechState.saveLen < VP_BUF_LENGTH)
- {
- s_speechState.saveLen += s_speechState.totalFrameBufSize;
- if (s_speechState.saveLen >= s_speechState.inOutBufUseSize)
- {
- s_speechState.saveLen = 0;
- }
- s_speechState.pVpTempRxInBuffer = s_vpState.pVpRxInBuffer + s_speechState.saveLen;
- s_speechState.pVpTempTxInBuffer = s_vpState.pVpTxInBuffer + s_speechState.saveLen;
- s_speechState.pVpTempTxOutPutBuffer = s_vpState.pVpTxOutPutBuffer + s_speechState.saveLen;
+ //if( s_speechState.saveLen < VP_BUF_LENGTH)
+ {
+ s_speechState.saveLen += s_speechState.totalFrameBufSize;
+ if (s_speechState.saveLen >= s_speechState.inOutBufUseSize)
+ {
+ s_speechState.saveLen = 0;
+ }
+ s_speechState.pVpTempRxInBuffer = s_vpState.pVpRxInBuffer + s_speechState.saveLen;
+ s_speechState.pVpTempTxInBuffer = s_vpState.pVpTxInBuffer + s_speechState.saveLen;
+ s_speechState.pVpTempTxOutPutBuffer = s_vpState.pVpTxOutPutBuffer + s_speechState.saveLen;
#ifdef _USE_VP_OUTPUT_RXOUT_DATA
- s_speechState.pVpTempRxOutPutBuffer = s_vpState.pVpRxOutPutBuffer + s_speechState.saveLen;
+ s_speechState.pVpTempRxOutPutBuffer = s_vpState.pVpRxOutPutBuffer + s_speechState.saveLen;
#else
- s_speechState.pVpTempRxOutPutBuffer = s_vpState.pVpRxOutPutBuffer;
+ s_speechState.pVpTempRxOutPutBuffer = s_vpState.pVpRxOutPutBuffer;
#endif
- }
-}
+ }
+ }
-vp_VoiceI2sStop();
-zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_DataProcessThreadEntry work end.\n");
-zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "voice vp_DataProcessThreadEntry work end!\n");
+ vp_VoiceI2sStop();
-}
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_DataProcessThreadEntry work end.\n");
+ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "voice vp_DataProcessThreadEntry work end!\n");
+
+ }
}
#ifdef _OS_TOS
@@ -3586,6 +3843,49 @@
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice_frameTimer failed\n");
return DRV_ERROR;
}
+#ifdef _VBUFF_IN_MULTI_CORE
+ SINT32 ret = 0;
+
+ //ret = zDrvRpMsg_CreateChannel(IPC_MSG_ACTOR_A9,channel_41,0x10);
+ ret = zDrvRpMsg_CreateChannel_Cap(RPMSG_CAP_ID,channel_41,0x10);
+
+ if(DRV_SUCCESS != ret) {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create rpmsg err(%d) \n",ret);
+ return DRV_ERROR;
+ }
+
+ volatile T_ZDrvRpMsg_Msg icp_pMsg = {0};
+ volatile unsigned int rpMsgBuf[2] = {0,0};
+ //printk( "vir_buf1:0x%x, vir_buf2:0x%x, phy_buf1:0x%x, phy_buf2:0x%x,\n",voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1]);
+ icp_pMsg.actorID = RPMSG_CAP_ID;
+ icp_pMsg.chID = channel_41;
+ icp_pMsg.flag &= ~RPMSG_READ_POLL;
+ icp_pMsg.buf = rpMsgBuf;
+ icp_pMsg.len = 8;
+ ret = zDrvRpMsg_Read_Cap(&icp_pMsg);
+ if(ret <= 0){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer rpmsg addr read fail,ret=%d \n",ret);
+ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps voice buffer rpmsg addr read fail,ret=%d \n",ret);
+
+
+ }
+ else{
+ #if 0
+
+ voice_buff[UP_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[0]);
+ voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[1]);
+ #else
+
+ voice_buff[UP_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[0], (sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
+ voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
+ #endif
+
+ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps rpmsg voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
+ ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
+ ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
+ }
+#endif
#endif
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_CreateThreadSemaph success. \r\n");
@@ -4032,39 +4332,39 @@
// pVoiceLoopInSaveBuffer = s_speechState.pVpTempTxOutPutBuffer;
// pVoiceLoopOutSaveBuffer = s_speechState.pVpTempRxInBuffer;
#endif
-
+#if 0
if (FALSE == g_voiceVar.firstRegZCATFlag) {
ret = zCatAgt_Audio_Reg(10,VP_INOUT_BAK_BUFFER_SIZE,(UINT32)vpInOutBuffer.p_voiceRxInBuffer);
if(ret != DRV_SUCCESS){
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open RXIN register zCatAgt_Audio_Reg err\n");
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_LoopProcessThreadEntry RXIN register zCatAgt_Audio_Reg err\n");
}
ret = zCatAgt_Audio_Reg(12,VP_INOUT_BAK_BUFFER_SIZE,(UINT32)vpInOutBuffer.p_voiceTxInBuffer);
if(ret != DRV_SUCCESS){
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open TXIN register zCatAgt_Audio_Reg err\n");
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_LoopProcessThreadEntry TXIN register zCatAgt_Audio_Reg err\n");
}
ret = zCatAgt_Audio_Reg(13,VP_INOUT_BAK_BUFFER_SIZE,(UINT32)vpInOutBuffer.p_voiceTxOutPutBuffer);
if(ret != DRV_SUCCESS){
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open TXOUT register zCatAgt_Audio_Reg err\n");
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_LoopProcessThreadEntry TXOUT register zCatAgt_Audio_Reg err\n");
}
#ifdef _USE_VP_OUTPUT_RXOUT_DATA
ret = zCatAgt_Audio_Reg(11, VP_INOUT_BAK_BUFFER_SIZE, (UINT32)vpInOutBuffer.p_voiceRxOutPutBuffer);
if(ret != DRV_SUCCESS){
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open RXOUT register zCatAgt_Audio_Reg err\n");
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_LoopProcessThreadEntry RXOUT register zCatAgt_Audio_Reg err\n");
}
#else
ret = zCatAgt_Audio_Reg(11,VP_INOUT_NOBAK_BUFSIZE,(UINT32)vpInOutBuffer.p_voiceRxOutPutBuffer);
if(ret != DRV_SUCCESS){
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open RXOUT register zCatAgt_Audio_Reg err\n");
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_LoopProcessThreadEntry RXOUT register zCatAgt_Audio_Reg err\n");
}
#endif
g_voiceVar.firstRegZCATFlag = TRUE;
}
-
+#endif
zOss_Sleep(500);
ret = zDrvVp_LoopStartDo();
if (ret != DRV_SUCCESS)
diff --git a/cp/ps/driver/ws/drv_cfg.mk b/cp/ps/driver/ws/drv_cfg.mk
old mode 100644
new mode 100755
index 4c5834b..4934471
--- a/cp/ps/driver/ws/drv_cfg.mk
+++ b/cp/ps/driver/ws/drv_cfg.mk
@@ -176,7 +176,10 @@
#USE_NXP_AUD = yes
USE_AUDIENCE = no
-
+ifeq ($(USE_VOICE_BUFFER_IN_CAP),yes)
+DEFINE += -DCONFIG_VOICE_BUFFER_DRV
+DEFINE += -D_VBUFF_IN_MULTI_CORE
+endif
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 6b502ad..14ef26d 100755
--- 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; /*ÐèÒª¿½±´µÄÓÐЧÊý¾ÝµÄ³¤¶È,±¾°æ±¾È¡ÖµÎª793*/
+ UINT16 wLen; /*ÐèÒª¿½±´µÄÓÐЧÊý¾ÝµÄ³¤¶È,±¾°æ±¾È¡ÖµÎª796*/
UINT8 jtagserver;/* 1:TDÎïÀí²ãµ÷ÊÔ°æ±¾ 0:TDÎïÀí²ã¹Ì»¯°æ±¾£¬ÆäËûÖµÎÞЧ £¬Ä¬ÈÏֵΪ0*/
UINT8 exceptReset;/* 2:µ¼³öramdumpºóÔÙÖØÆô1:´ò¿ªÒì³£ÖØÆô 0:¹Ø±ÕÒì³£ÖØÆô£¬Ä¬ÈÏֵΪ0 */
@@ -439,7 +439,10 @@
UINT8 bRrcRelCountM;/*RRCÊÍ·Å·¢Æð¼ÆÊýãÐÖµ,ȡֵ0-255,³ö³§Öµ0*/
UINT8 bOosScanThreshFlg;/*OOSËÑÍøÃÅÏÞ¿ª¹Ø,0-¹Ø±Õ,1-´ò¿ª,³ö³§Öµ0*/
UINT8 bOosScanThresh;/*OOSËÑÍøÃÅÏÞ,ȡֵ100-120,¶ÔÓ¦-110dBmµ½-120dBm,³ö³§Öµ0*/
- UINT8 abSpare[3];
+ UINT8 bEcallFlg;/*0-ʹÓÿ¨ÖеÄECALL,1-ʹÓÃNVÖеÄECALL,³ö³§Öµ0*/
+ /*bit0:0-οؽµÎ»ָ´Ê±,µÈ»Ø¿ÕÏÐÔÙ´ò¿ªNRÄÜÁ¦,1-οؽµÎÂʱÁ¢¿Ì´ò¿ªNRÄÜÁ¦,³ö³§Öµ0
+ bit1:1-ÎÞÂÛ¿¨ÖÐRPLMNÊÇ·ñÓëNVÖеÄÏàͬ,´ÓRPLMN¿ªÊ¼Ñ¡Íø,1-¿¨ÖÐRPLMNÓëNVÖеIJ»Í¬Ê±,²»Ñ¡RPLMN,Ö±½Ó´ÓHPLMN¿ªÊ¼Ñ¡Íø,³ö³§Öµ0*/
+ UINT16 wNasBitmap;
}CommAtSetting;
/* atÉèÖýṹÌå ²»´æNV*/
typedef struct
@@ -1880,6 +1883,10 @@
VOID zOss_GetOosScanThresh(CommAtCfgCmdParam * cmdParm);
UINT8 zOss_GetOosScanThreshFlg(VOID);
UINT8 zOss_GetOosScanThreshValue(VOID);
+UINT32 zOss_SetEcallFlag(CommAtCfgCmdParam * cmdParm);
+UINT8 zOss_GetEcallFlag(VOID);
+UINT32 zOss_SetNasCfg(CommAtCfgCmdParam * cmdParm);
+UINT16 zOss_GetNasCfg(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 5e2a2fc..a100b7f 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.02P52U02"
+#define VERSION_NUMBER "7520SCV2.01.01.02P54U02"
#endif
#if defined _CHIP_ZX297520V2
-#define VERSION_NUMBER "7520V2SCV2.01.01.02P52U02"
+#define VERSION_NUMBER "7520V2SCV2.01.01.02P54U02"
#endif
#if defined _CHIP_ZX297520V3
-#define VERSION_NUMBER "7520V3SCV2.01.01.02P52U02"
+#define VERSION_NUMBER "7520V3SCV2.01.01.02P54U02"
#endif
diff --git a/cp/ps/modem/ps/inc/atipscom.h b/cp/ps/modem/ps/inc/atipscom.h
index a64ec13..a1a8d07 100755
--- a/cp/ps/modem/ps/inc/atipscom.h
+++ b/cp/ps/modem/ps/inc/atipscom.h
@@ -122,6 +122,8 @@
#define Z_DEV_MAX_BEEPCALL_NUM (BYTE)11
#define Z_DEV_MAX_BEEPCALL_GROUP (BYTE)3
+#define Z_DEV_MAX_ECALL_NUM (BYTE)11
+
#define Z_DEV_MAX_MSISDN_NUM (BYTE)15
#ifdef _USE_LPP_ECID
@@ -228,13 +230,14 @@
#define Z_ATI_NV_Msisdn1 (BYTE)(Z_ATI_NV_BeepCall + 1)
#define Z_ATI_NV_Msisdn2 (BYTE)(Z_ATI_NV_Msisdn1 + 1)
#define Z_ATI_NV_EcallCapa (BYTE)(Z_ATI_NV_Msisdn2 + 1)
+#define Z_ATI_NV_EcallNum (BYTE)(Z_ATI_NV_EcallCapa + 1)
#ifdef BTRUNK_SUPPORT
-#define Z_ATI_NV_PttTruncUser (BYTE)(Z_ATI_NV_EcallCapa + 1)
+#define Z_ATI_NV_PttTruncUser (BYTE)(Z_ATI_NV_EcallNum + 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_EcallCapa + 0)
+#define Z_ATI_NV_PrvEnd (BYTE)(Z_ATI_NV_EcallNum + 0)
#endif
@@ -1299,6 +1302,14 @@
BYTE abPadding[3];
}T_zAti_NV_EcallCapa;
+typedef struct {
+ BYTE bTestNumLen;/*³ö³§Öµ0*/
+ BYTE bReCfgNumLen;/*³ö³§Öµ0*/
+
+ BYTE abTestNum[Z_DEV_MAX_ECALL_NUM];
+ BYTE abReCfgNum[Z_DEV_MAX_ECALL_NUM];
+}T_zAti_NV_EcallNum;
+
#ifdef BTRUNK_SUPPORT
typedef struct
{
diff --git a/cp/ps/modem/ps/inc/atipsint.h b/cp/ps/modem/ps/inc/atipsint.h
index 2fa876b..0272e78 100755
--- a/cp/ps/modem/ps/inc/atipsint.h
+++ b/cp/ps/modem/ps/inc/atipsint.h
@@ -1239,6 +1239,7 @@
/*ZCCSTATEºê¶¨Òå*/
#define Z_MAXCALLNM (BYTE)7
+#define Z_CC_STATE_NAME_MAX_LEN (BYTE)40
#define Z_MMIASM_ATCMD_ATD (BYTE)0 // for VoLTE
#define Z_MMIASM_ATCMD_REDIAL (BYTE)1 // for VoLTE
@@ -5381,12 +5382,14 @@
BYTE bMptystate; /* 1:mptyºô½Ð£¬0: ·Çmptyºô½Ð */
BYTE bCallPriFg;
BYTE bCallPriority; /* ºô½ÐÓÅÏȼ¶£¬¼ûºê¶¨Òå */
-
+
BYTE bNumFg;
BYTE bAlphaFg;
- BYTE abPadding[2]; /* alpha ÒÔºóÐèÒªÔÙ¼Ó */
+ BYTE bNameFg;
+ BYTE bNameLen;
- T_z_CallNum tNum; /* ¶Ô·½ºÅÂëÉÏÏÞ40*/
+ T_z_CallNum tNum; /* ¶Ô·½ºÅÂëÉÏÏÞ40*/
+ BYTE abName[Z_CC_STATE_NAME_MAX_LEN];
}T_zMmiaCc_State_Info;
typedef struct {
@@ -5958,6 +5961,21 @@
BYTE abMSD[MSD_MAX_LENGTH];
}T_zMmiaCc_ZECALL_Ind;
+/*==============================================================================
+ ÔÓMMIA_CC_ECALL_WORKSTATE_IND_EV(CC->ATI)
+ ˵Ã÷: Éϱ¨+ZECALLSTATE: <CallId>,<Dir>,<ecallState>
+==============================================================================*/
+typedef struct
+{
+ BYTE bSrcIndex;
+ BYTE bDesIndex;
+ BYTE bCallId;
+ BYTE bDir;
+
+ BYTE bECallState;
+ BYTE abpadding[3];
+}T_zMmiaCc_ECallWorkStateInd;
+
typedef struct
{
BYTE bStatus; /* ²Î¼ûºê¶¨Òå */
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 8d0a863..3e906c4 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
@@ -221,6 +221,7 @@
ZAT2_CC_ZNECALLNUM,
ZAT2_CC_ZECALL,
ZAT2_CC_ZECALLCAPA,
+ ZAT2_CC_ZECALLNUM,
ZAT2_CC_END,
/*-----------SMSÄ£¿é-------------*/
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 95c6f07..92c3829 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
@@ -404,6 +404,8 @@
T_ZAt_ParseCmd2MsgRslt zAt_PsDecZnecallnumReq(T_ZAt_DecCmdInfo * pDecCmdInfo);
T_ZAt_ParseCmd2MsgRslt zAt_PsDecEcallCapaSetReq(T_ZAt_DecCmdInfo * pDecCmdInfo);
T_ZAt_ParseCmd2MsgRslt zAt_PsDecEcallCapaQryReq(T_ZAt_DecCmdInfo * pDecCmdInfo);
+T_ZAt_ParseCmd2MsgRslt zAt_PsDecEcallNumSetReq(T_ZAt_DecCmdInfo * pDecCmdInfo);
+T_ZAt_ParseCmd2MsgRslt zAt_PsDecEcallNumQryReq(T_ZAt_DecCmdInfo * pDecCmdInfo);
#endif
T_ZAt_ParseCmd2MsgRslt zAt_PsDecCcCrReq( T_ZAt_DecCmdInfo * pDecCmdInfo );
T_ZAt_ParseCmd2MsgRslt zAt_PsDecCcCrcReq( T_ZAt_DecCmdInfo * pDecCmdInfo );
@@ -824,6 +826,7 @@
#ifdef ECALL_SUPPORT
UINT16 zAt_EncCcCecnInd(T_ZAt_EncCmdInfo * pEncCmdInfo);
UINT16 zAt_EncCcZEcallInd(T_ZAt_EncCmdInfo * pEncCmdInfo);
+UINT16 zAt_EncCcZecallStateInd(T_ZAt_EncCmdInfo * pEncCmdInfo);
#endif
#endif
UINT16 zAt_PsEncCeerSmActionCnf( 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 68d7fe9..29f118d 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
@@ -559,10 +559,6 @@
/*********************num type*************************/
#define Z_ATI_TEST_NUM (BYTE)0/*test num*/
#define Z_ATI_RECFG_NUM (BYTE)1/*reconfiguration number num*/
-/**********************ECALL CAPA**********************/
-#define Z_ATI_ECALL_NOT_SUP (BYTE)0/*NOT SUP ECALL*/
-#define Z_ATI_ECALL_ONLY (BYTE)1/*ECALL ONLY*/
-#define Z_ATI_ECALL_NORMALCALL (BYTE)2/*NORMAL & ECALL*/
#ifdef DSDS_VSIM
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 a297034..09035a2 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
@@ -3708,6 +3708,9 @@
BYTE IsSupUri = Z_ATI_ECALL_URI_NOT_SUP;
T_z_CallNum testNum = {0};
T_z_CallNum ReCfgNum = {0};
+ T_z_CallNum *ptUicctestNum = ZOSS_NULL;
+ T_z_CallNum *ptUiccReCfgNum = ZOSS_NULL;
+ T_zAti_NV_EcallNum tEcallNum = {0};
T_zMmiaCc_Moc_Req *ptMocReq = (T_zMmiaCc_Moc_Req*)zAti_GetUB(sizeof(T_zMmiaCc_Moc_Req));
prsCmd2Msg.pMsgBody = (VOID*)ptMocReq;
@@ -3766,22 +3769,52 @@
if(ptMocReq->bECallType == Z_MMIACC_ECALL_TESTCALL || ptMocReq->bECallType == Z_MMIACC_ECALL_RECONFIGCALL)
{
- if((Z_FAIL == zAt_GetEcallSupStat(&bCardEcallType, &IsSupNum, &IsSupUri)) ||
- (bCardEcallType == Z_ATI_NOTSUP_ECALL) || (IsSupNum == Z_ATI_ECALL_NUM_NOT_SUP))
+ if(Z_FAIL == zAt_GetEcallSupStat(&bCardEcallType, &IsSupNum, &IsSupUri))
{
zAti_SendExpt2TraceAgt(ERR_InvalidMsg, TRACE_ERR_LEVEL_NORMAL,"");
- return zAt_GetParseRslt2(&prsCmd2Msg, ZAT2_OPTNOTALW_ERR);
}
- if(bCardEcallType == Z_ATI_ECALL_ONLY)
+ ptUicctestNum = (T_z_CallNum*)zAti_GetUB(sizeof(T_z_CallNum));
+ ptUiccReCfgNum = (T_z_CallNum*)zAti_GetUB(sizeof(T_z_CallNum));
+
+ if(bCardEcallType == Z_ATI_ECALL_ONLY && IsSupNum == Z_ATI_ECALL_NUM_SUP)
{
- zAt_GetFdnEcallNum(&testNum, &ReCfgNum, g_zAti_CurInstance);//¶ÁÈ¡FDN
+ zAt_GetFdnEcallNum(ptUicctestNum, ptUiccReCfgNum, g_zAti_CurInstance);//¶ÁÈ¡FDN
}
- else
+ else if(bCardEcallType == Z_ATI_ECALL_NORMCALL && IsSupNum == Z_ATI_ECALL_NUM_SUP)
{
- zAt_GetSdnEcallNum(&testNum, &ReCfgNum, g_zAti_CurInstance);//¶ÁÈ¡SDN
+ zAt_GetSdnEcallNum(ptUicctestNum, ptUiccReCfgNum, g_zAti_CurInstance);//¶ÁÈ¡SDN
}
+ zDev_NV_AtiReadItem(Z_ATI_NV_EcallNum, (PBYTE)&tEcallNum);
+
+ if(tEcallNum.bTestNumLen > 0)
+ {
+ testNum.bNumLen = (tEcallNum.bTestNumLen > Z_DEV_MAX_ECALL_NUM)? Z_DEV_MAX_ECALL_NUM : tEcallNum.bTestNumLen;
+ zOss_Memcpy(testNum.abNum, tEcallNum.abTestNum, testNum.bNumLen);
+ testNum.bNumType = Z_APMMIA_TOA_NOPLUS;
+ }
+
+ if(tEcallNum.bReCfgNumLen > 0)
+ {
+ ReCfgNum.bNumLen = (tEcallNum.bReCfgNumLen > Z_DEV_MAX_ECALL_NUM)? Z_DEV_MAX_ECALL_NUM : tEcallNum.bReCfgNumLen;
+ zOss_Memcpy(ReCfgNum.abNum, tEcallNum.abReCfgNum, ReCfgNum.bNumLen);
+ ReCfgNum.bNumType = Z_APMMIA_TOA_NOPLUS;
+ }
+
+ if(testNum.bNumLen == 0)
+ {
+ testNum = (*ptUicctestNum);
+ }
+
+ if(ReCfgNum.bNumLen == 0)
+ {
+ ReCfgNum = (*ptUiccReCfgNum);
+ }
+
+ zAti_RetUB((VOID**)&ptUicctestNum);
+ zAti_RetUB((VOID**)&ptUiccReCfgNum);
+
if(ptMocReq->bECallType == Z_MMIACC_ECALL_TESTCALL)
{
ptMocReq->tCalledNum = testNum;
@@ -3855,27 +3888,44 @@
T_ZAt_ParseCmd2MsgRslt zAt_PsDecZnecallnumReq(T_ZAt_DecCmdInfo * pDecCmdInfo)
{
CHAR* pStrWalk = g_zAt_EncBuf;
- CHAR* pDecCmdStr = pDecCmdInfo->strParam;
- CHAR strSubBuf[ZAT2_SUB_PARAM_MAX_LEN] = {0};
T_ZAt_ParseCmd2MsgRslt prsCmd2Msg = {0};
BYTE bEcallType = Z_ATI_NOTSUP_ECALL;
BYTE IsSupNum = Z_ATI_ECALL_NUM_NOT_SUP;
BYTE IsSupUri = Z_ATI_ECALL_URI_NOT_SUP;
T_z_CallNum testNum = {0};
T_z_CallNum ReCfgNum = {0};
+ T_z_CallNum UicctestNum = {0};
+ T_z_CallNum UiccReCfgNum = {0};
T_z_UICC_FdnUri *ptTestFdnUri = NULL;
T_z_UICC_FdnUri *ptRecfgFdnUri = NULL;
T_z_UICC_SdnUri *ptTestSdnUri = NULL;
T_z_UICC_SdnUri *ptRecfgSdnUri = NULL;
- BYTE i = 0;
+ WORD i = 0;
+ T_zAti_NV_EcallNum tEcallNum = {0};
+ BYTE *pbTestUri = ZOSS_NULL;
+ BYTE *pbRecfgUri = ZOSS_NULL;
+ BYTE bTestUriLen = 0;
+ BYTE bRecfgUriLen = 0;
+
+ zDev_NV_AtiReadItem(Z_ATI_NV_EcallNum, (PBYTE)&tEcallNum);
+
+ if(tEcallNum.bTestNumLen > 0)
+ {
+ testNum.bNumLen = (tEcallNum.bTestNumLen > Z_DEV_MAX_ECALL_NUM)? Z_DEV_MAX_ECALL_NUM : tEcallNum.bTestNumLen;
+ zOss_Memcpy(testNum.abNum, tEcallNum.abTestNum, testNum.bNumLen);
+ }
+
+ if(tEcallNum.bReCfgNumLen > 0)
+ {
+ ReCfgNum.bNumLen = (tEcallNum.bReCfgNumLen > Z_DEV_MAX_ECALL_NUM)? Z_DEV_MAX_ECALL_NUM : tEcallNum.bReCfgNumLen;
+ zOss_Memcpy(ReCfgNum.abNum, tEcallNum.abReCfgNum, ReCfgNum.bNumLen);
+ }
if(Z_FAIL == zAt_GetEcallSupStat(&bEcallType, &IsSupNum, &IsSupUri))
{
- return zAt_GetParseRslt2(&prsCmd2Msg, ZAT2_OPTNOTALW_ERR);
+ zAti_SendExpt2TraceAgt(ERR_InvalidMsg, TRACE_ERR_LEVEL_NORMAL,"");
}
- pStrWalk += sprintf((char *)pStrWalk, "%s+ZNECALLNUM: ", g_zAt_CRLF);
-
if(bEcallType == Z_ATI_ECALL_ONLY)
{
ptTestFdnUri = (T_z_UICC_FdnUri*)zAti_GetUB(sizeof(T_z_UICC_FdnUri));
@@ -3883,7 +3933,7 @@
if(IsSupNum == Z_ATI_ECALL_NUM_SUP)
{
- zAt_GetFdnEcallNum(&testNum, &ReCfgNum, g_zAti_CurInstance);//¶ÁÈ¡FDN
+ zAt_GetFdnEcallNum(&UicctestNum, &UiccReCfgNum, g_zAti_CurInstance);//¶ÁÈ¡FDN
}
if(IsSupUri == Z_ATI_ECALL_URI_SUP)
@@ -3891,28 +3941,19 @@
zAt_GetFdnEcallUri(ptTestFdnUri, ptRecfgFdnUri, g_zAti_CurInstance);//¶ÁÈ¡FDNURI
}
- pStrWalk += sprintf((char *)pStrWalk, "\"");
- zAt_EncBcd2NumStrByCscsType(pStrWalk, testNum.abNum, testNum.bNumLen, ZAT2_CSCS_GSM);
- pStrWalk += strlen((const char *)pStrWalk);
-
- pStrWalk += sprintf((char *)pStrWalk, "\",\"");
- zAt_EncBcd2NumStrByCscsType(pStrWalk, ReCfgNum.abNum, ReCfgNum.bNumLen, ZAT2_CSCS_GSM);
- pStrWalk += strlen((const char *)pStrWalk);
-
- pStrWalk += sprintf((char *)pStrWalk, "\",\"");
-
- for(i = 0; i < ptTestFdnUri->bUriAddrLen; i++)
+ if(ptTestFdnUri->bUriAddrLen > 0)
{
- pStrWalk += sprintf((char *)pStrWalk, "%c", ptTestFdnUri->abUriAddr[i]);
+ bTestUriLen = ptTestFdnUri->bUriAddrLen;
+ pbTestUri = (BYTE*)zAti_GetUB(bTestUriLen);
+ zOss_Memcpy(pbTestUri, ptTestFdnUri->abUriAddr, bTestUriLen);
}
- pStrWalk += sprintf((char *)pStrWalk, "\",\"");
-
- for(i = 0; i < ptRecfgFdnUri->bUriAddrLen; i++)
+ if(ptRecfgFdnUri->bUriAddrLen > 0)
{
- pStrWalk += sprintf((char *)pStrWalk, "%c", ptRecfgFdnUri->abUriAddr[i]);
+ bRecfgUriLen = ptRecfgFdnUri->bUriAddrLen;
+ pbRecfgUri = (BYTE*)zAti_GetUB(bRecfgUriLen);
+ zOss_Memcpy(pbRecfgUri, ptRecfgFdnUri->abUriAddr, bRecfgUriLen);
}
- pStrWalk += sprintf((char *)pStrWalk, "\"");
zAti_RetUB((VOID**)&ptTestFdnUri);
zAti_RetUB((VOID**)&ptRecfgFdnUri);
@@ -3924,46 +3965,71 @@
if(IsSupNum == Z_ATI_ECALL_NUM_SUP)
{
- zAt_GetSdnEcallNum(&testNum, &ReCfgNum, g_zAti_CurInstance);//¶ÁÈ¡FDN
+ zAt_GetSdnEcallNum(&UicctestNum, &UiccReCfgNum, g_zAti_CurInstance);//¶ÁÈ¡SDN
}
if(IsSupUri == Z_ATI_ECALL_URI_SUP)
{
zAt_GetSdnEcallUri(ptTestSdnUri, ptRecfgSdnUri, g_zAti_CurInstance);//¶ÁÈ¡SDNURI
}
- pStrWalk += sprintf((char *)pStrWalk, "\"");
- zAt_EncBcd2NumStrByCscsType(pStrWalk, testNum.abNum, testNum.bNumLen, ZAT2_CSCS_GSM);
- pStrWalk += strlen((const char *)pStrWalk);
-
- pStrWalk += sprintf((char *)pStrWalk, "\",\"");
- zAt_EncBcd2NumStrByCscsType(pStrWalk, ReCfgNum.abNum, ReCfgNum.bNumLen, ZAT2_CSCS_GSM);
- pStrWalk += strlen((const char *)pStrWalk);
-
- pStrWalk += sprintf((char *)pStrWalk, "\",\"");
-
- for(i = 0; i < ptTestSdnUri->bUriAddrLen; i++)
+ if(ptTestSdnUri->bUriAddrLen > 0)
{
- pStrWalk += sprintf((char *)pStrWalk, "%c", ptTestSdnUri->abUriAddr[i]);
+ bTestUriLen = ptTestSdnUri->bUriAddrLen;
+ pbTestUri = (BYTE*)zAti_GetUB(bTestUriLen);
+ zOss_Memcpy(pbTestUri, ptTestSdnUri->abUriAddr, bTestUriLen);
}
- pStrWalk += sprintf((char *)pStrWalk, "\",\"");
-
- for(i = 0; i < ptRecfgSdnUri->bUriAddrLen; i++)
+ if(ptRecfgSdnUri->bUriAddrLen > 0)
{
- pStrWalk += sprintf((char *)pStrWalk, "%c", ptRecfgSdnUri->abUriAddr[i]);
+ bRecfgUriLen = ptRecfgSdnUri->bUriAddrLen;
+ pbRecfgUri = (BYTE*)zAti_GetUB(bRecfgUriLen);
+ zOss_Memcpy(pbRecfgUri, ptRecfgSdnUri->abUriAddr, bRecfgUriLen);
}
- pStrWalk += sprintf((char *)pStrWalk, "\"");
zAti_RetUB((VOID**)&ptTestSdnUri);
zAti_RetUB((VOID**)&ptRecfgSdnUri);
}
- else
+
+ if(testNum.bNumLen == 0)
{
- pStrWalk += sprintf((char *)pStrWalk, "\"\",\"\",\"\",\"\"");//IMSÒªÇóûÓÐʱÉϱ¨¿Õ
+ testNum = UicctestNum;
}
+ if(ReCfgNum.bNumLen == 0)
+ {
+ ReCfgNum = UiccReCfgNum;
+ }
+
+ pStrWalk += sprintf((char *)pStrWalk, "%s+ZNECALLNUM: ", g_zAt_CRLF);
+
+ pStrWalk += sprintf((char *)pStrWalk, "\"");
+ zAt_EncBcd2NumStrByCscsType(pStrWalk, testNum.abNum, testNum.bNumLen, ZAT2_CSCS_GSM);
+ pStrWalk += strlen((const char *)pStrWalk);
+
+ pStrWalk += sprintf((char *)pStrWalk, "\",\"");
+ zAt_EncBcd2NumStrByCscsType(pStrWalk, ReCfgNum.abNum, ReCfgNum.bNumLen, ZAT2_CSCS_GSM);
+ pStrWalk += strlen((const char *)pStrWalk);
+
+ pStrWalk += sprintf((char *)pStrWalk, "\",\"");
+
+ for(i = 0; i < bTestUriLen; i++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, "%c", pbTestUri[i]);
+ }
+
+ pStrWalk += sprintf((char *)pStrWalk, "\",\"");
+
+ for(i = 0; i < bRecfgUriLen; i++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, "%c", pbRecfgUri[i]);
+ }
+ pStrWalk += sprintf((char *)pStrWalk, "\"");
+
sprintf((char *)pStrWalk, "%s%s", g_zAt_CRLF, g_zAt_OK);
+ zAti_RetUB((VOID**)&pbTestUri);
+ zAti_RetUB((VOID**)&pbRecfgUri);
+
return zAt_GetParseRslt(ZAT2_CMD_REPLY_DIRECT);
}
@@ -3977,7 +4043,7 @@
/*+ZECALLCAPA=<n>*/
if(!(zAt_PsDecNextParamDecimalNumByteNeed( &prsCmd2Msg, strSubBuf, &pDecCmdStr, &bSetPara, NULL))
- || bSetPara > Z_ATI_ECALL_NORMALCALL)
+ || bSetPara > Z_ATI_ECALL_NORMCALL)
{
return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
}
@@ -4009,6 +4075,162 @@
return zAt_GetParseRslt(ZAT2_CMD_REPLY_DIRECT);
}
+
+T_ZAt_ParseCmd2MsgRslt zAt_PsDecEcallNumSetReq(T_ZAt_DecCmdInfo * pDecCmdInfo)
+{
+ CHAR* pDecCmdStr = pDecCmdInfo->strParam; /* ¼Ç¼²ÎÊý×ֶεÄÓÎ×ßÖ¸Õë */
+ CHAR strSubBuf[ZAT2_SUB_PARAM_MAX_LEN] = {0}; /* ´æ·Å½ØÈ¡µÄ²ÎÊý×Ö·û´® */
+ T_ZAt_ParseCmd2MsgRslt prsCmd2Msg = {0};
+ T_zAti_NV_EcallNum tEcallNum = {0};
+ T_zAti_NV_EcallNum tTmpEcallNum = {0};
+ BYTE abCallNum[Z_DEV_MAX_ECALL_NUM + 1] = {0};
+ BYTE bMode = Z_INVALID;
+ BYTE bType = Z_INVALID;
+ WORD strNumLen = 0;
+ BOOL bPlusFlag = FALSE;
+ WORD wNumLen = 0;
+ SINT16 iDecBcdRet = -1;
+ SINT16 iSubLen = -1;
+ CHAR *pstrSubBuf = ZOSS_NULL;
+
+ /*+ZECALLNUM=<Mode>[,<Type>[,<eCallNum>]]*/
+ if(!zAt_PsDecNextParamDecimalNumBoolNeed(&prsCmd2Msg, strSubBuf, &pDecCmdStr, &bMode, NULL))
+ {
+ return prsCmd2Msg;
+ }
+
+ zDev_NV_AtiReadItem(Z_ATI_NV_EcallNum, (PBYTE)&tEcallNum);
+ zOss_Memcpy(&tTmpEcallNum, &tEcallNum, sizeof(T_zAti_NV_EcallNum));
+
+ if(strlen((const char *)pDecCmdStr) > 0)
+ {
+ if(!zAt_PsDecNextParamDecimalNumBoolNeed(&prsCmd2Msg, strSubBuf, &pDecCmdStr, &bType, NULL))
+ {
+ return prsCmd2Msg;
+ }
+
+ pstrSubBuf = (CHAR *)zAti_GetUB(ZAT2_HEXFMTPA_MAX_LEN+1);
+ if ((iSubLen = zAt_GetNextParamStr(pstrSubBuf, ZAT2_PARAM_HEX_FORMAT, &pDecCmdStr)) == -1)
+ {
+ zAti_RetUB((VOID **)&pstrSubBuf);
+ return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
+ }
+
+ if(iSubLen > 0)
+ {
+ iDecBcdRet = zAt_DecCallNum2Bcd(abCallNum, &bPlusFlag, pstrSubBuf, (UINT16)iSubLen, Z_DEV_MAX_ECALL_NUM);
+ if (iDecBcdRet < 0)
+ {
+ zAti_RetUB((VOID **)&pstrSubBuf);
+ return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
+ }
+ }
+
+ zAti_RetUB((VOID **)&pstrSubBuf);
+
+ if(bMode == 0)//ɾ³ý
+ {
+ if(bType == Z_ATI_TEST_NUM)
+ {
+ tEcallNum.bTestNumLen = 0;
+ zOss_Memset(tEcallNum.abTestNum, 0, Z_DEV_MAX_ECALL_NUM);
+ }
+ else
+ {
+ tEcallNum.bReCfgNumLen = 0;
+ zOss_Memset(tEcallNum.abReCfgNum, 0, Z_DEV_MAX_ECALL_NUM);
+ }
+ }
+ else
+ {
+ if(iDecBcdRet <= 0)
+ {
+ return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
+ }
+
+ if(bType == Z_ATI_TEST_NUM)
+ {
+ tEcallNum.bTestNumLen = (BYTE)iDecBcdRet;
+ zOss_Memcpy(tEcallNum.abTestNum, abCallNum, Z_DEV_MAX_ECALL_NUM);
+ }
+ else
+ {
+ tEcallNum.bReCfgNumLen = (BYTE)iDecBcdRet;
+ zOss_Memcpy(tEcallNum.abReCfgNum, abCallNum, Z_DEV_MAX_ECALL_NUM);
+ }
+ }
+ }
+ else//ɾ³ý
+ {
+ if(bMode != 0)
+ {
+ return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
+ }
+ zOss_Memset(&tEcallNum, 0, sizeof(T_zAti_NV_EcallNum));
+ }
+
+ if(strlen((const char *)pDecCmdStr) != 0)
+ {
+ return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
+ }
+
+ if(0 != memcmp(&tTmpEcallNum, &tEcallNum, sizeof(T_zAti_NV_EcallNum)))
+ {
+ zDev_NV_AtiWriteItem(Z_ATI_NV_EcallNum, (BYTE*)&tEcallNum);
+ }
+
+ zOss_Memcpy(g_zAt_EncBuf, g_zAt_OK, strlen((const char *)g_zAt_OK));
+ return zAt_GetParseRslt(ZAT2_CMD_REPLY_DIRECT);
+}
+
+T_ZAt_ParseCmd2MsgRslt zAt_PsDecEcallNumQryReq(T_ZAt_DecCmdInfo * pDecCmdInfo)
+{
+ BYTE bExist = Z_INVALID;
+ CHAR * pStrWalk = g_zAt_EncBuf;
+ T_zAti_NV_EcallNum tEcallNum = {0};
+
+ zDev_NV_AtiReadItem(Z_ATI_NV_EcallNum, (PBYTE)&tEcallNum);
+
+ if(tEcallNum.bTestNumLen > 0)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, "%s+ZECALLNUM: 0,", g_zAt_CRLF);
+
+ if(tEcallNum.bTestNumLen > Z_DEV_MAX_ECALL_NUM)
+ {
+ tEcallNum.bTestNumLen = Z_DEV_MAX_ECALL_NUM;
+ }
+ zAt_EncBcd2NumStrByCscsType(pStrWalk, (UINT8 *)tEcallNum.abTestNum,
+ tEcallNum.bTestNumLen, ZAT2_CSCS_GSM);
+ pStrWalk += strlen((const char *)pStrWalk);
+
+ bExist = Z_VALID;
+ }
+
+
+ if(tEcallNum.bReCfgNumLen > 0)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, "%s+ZECALLNUM: 1,", g_zAt_CRLF);
+
+ if(tEcallNum.bReCfgNumLen > Z_DEV_MAX_ECALL_NUM)
+ {
+ tEcallNum.bReCfgNumLen = Z_DEV_MAX_ECALL_NUM;
+ }
+ zAt_EncBcd2NumStrByCscsType(pStrWalk, (UINT8 *)tEcallNum.abReCfgNum,
+ tEcallNum.bReCfgNumLen, ZAT2_CSCS_GSM);
+ pStrWalk += strlen((const char *)pStrWalk);
+
+ bExist = Z_VALID;
+ }
+
+ if(bExist == Z_VALID)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, "%s", g_zAt_CRLF);
+ }
+
+ sprintf((char *)pStrWalk, "%s", g_zAt_OK);
+
+ return zAt_GetParseRslt(ZAT2_CMD_REPLY_DIRECT);
+}
#endif
/*+Cr */
T_ZAt_ParseCmd2MsgRslt zAt_PsDecCcCrReq(T_ZAt_DecCmdInfo * pDecCmdInfo)
@@ -4836,6 +5058,11 @@
T_ZAt_ParseCmd2MsgRslt prsCmd2Msg = {0};
BYTE bNum = 0;
BYTE i = 0;
+ SINT16 iDecBcdRet = -1;
+ BOOL bIsPlusStr = FALSE;
+ SINT16 iSubLen = -1;
+ BYTE bNumTypeFg = Z_INVALID;
+
zAt_PsDecParamInit(&prsCmd2Msg, sizeof(T_zMmiaCc_State_Req));
/* +ZCCSTATE=[<chnl_id>,<callid>,<dir>,<state>,<mode>,<mpty>, [<number>], [<type>],[<alpha>],[<priority>]
[<chnl_id>,<callid>,<dir>,<state>,<mode>,<mpty>, [<number>], [<type>],[<alpha>],[<priority>]]]*/
@@ -4874,12 +5101,50 @@
break;
}
- /* ,[<number>],[<type>],[<alpha>],[ priority] */
- if(!zAt_DecPbNumType( &pDecCmdStr, Z_MAX_CALLNUM_LEN, &CcStateReq.tStateInfo[bNum].tNum, &CcStateReq.tStateInfo[bNum].bNumFg))
+ if ((iSubLen = zAt_GetNextParamStr(strSubBuf, ZAT2_PARAM_STRING, &pDecCmdStr)) == -1)
{
break;
}
+ bIsPlusStr = FALSE;
+ bNumTypeFg = Z_INVALID;
+ CcStateReq.tStateInfo[bNum].bNumFg = Z_INVALID;
+ CcStateReq.tStateInfo[bNum].bNameFg = Z_INVALID;
+ CcStateReq.tStateInfo[bNum].bNameLen = 0;
+ zOss_Memset(&CcStateReq.tStateInfo[bNum].tNum, 0, sizeof(T_z_CallNum));
+ zOss_Memset(CcStateReq.tStateInfo[bNum].abName, 0, Z_CC_STATE_NAME_MAX_LEN);
+
+ if(iSubLen > 0)
+ {
+ iDecBcdRet = zAt_DecCallNum2Bcd((UINT8 *)CcStateReq.tStateInfo[bNum].tNum.abNum, &bIsPlusStr, strSubBuf, (UINT16)iSubLen, Z_MAX_CALLNUM_LEN);
+ if (iDecBcdRet == -1)
+ {
+ bIsPlusStr = FALSE;
+ CcStateReq.tStateInfo[bNum].bNameFg = Z_APMMIA_VALID;
+ CcStateReq.tStateInfo[bNum].bNameLen = (iSubLen > Z_CC_STATE_NAME_MAX_LEN)? Z_CC_STATE_NAME_MAX_LEN : iSubLen;
+ zOss_Memcpy(CcStateReq.tStateInfo[bNum].abName, strSubBuf, CcStateReq.tStateInfo[bNum].bNameLen);
+ }
+ else
+ {
+ CcStateReq.tStateInfo[bNum].tNum.bNumLen = (BYTE)iDecBcdRet;
+ CcStateReq.tStateInfo[bNum].bNumFg = Z_APMMIA_VALID;
+ }
+ }
+
+ /*[,<type>]*/
+ if(!zAt_PsDecNextParamDecimalNumByte(&prsCmd2Msg, strSubBuf, &pDecCmdStr, &CcStateReq.tStateInfo[bNum].tNum.bNumType, &bNumTypeFg)
+ || (bNumTypeFg && !zAt_DecideNumTypeValid(CcStateReq.tStateInfo[bNum].tNum.bNumType)))
+ {
+ break;
+ }
+
+ if (!bNumTypeFg)
+ {
+ /* default <type>, 145 when dialling string includes "+", otherwise 129 */
+ CcStateReq.tStateInfo[bNum].tNum.bNumType = (bIsPlusStr? Z_APMMIA_TOA_PLUS : Z_APMMIA_TOA_NOPLUS);
+ }
+
+ /*,[<alpha>],[ priority] */
if(zAt_GetNextParamStr(strSubBuf, ZAT2_PARAM_STRING, &pDecCmdStr) < 0)
{
break;
@@ -12718,7 +12983,12 @@
zAt_PsDecParamInit(&prsCmd2Msg, sizeof(T_zMmiaAs_CellInfo_Qry_Req));
/* +ZEMSCIQ=<qryindex> */
- if(!zAt_PsDecNextParamDecimalNumByteNeed( &prsCmd2Msg, strSubBuf, &pDecCmdStr, &bIndex, NULL) || (bIndex != 1))
+ if(!zAt_PsDecNextParamDecimalNumByteNeed( &prsCmd2Msg, strSubBuf, &pDecCmdStr, &bIndex, NULL) || (bIndex > 1))
+ {
+ return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
+ }
+
+ if (strlen((const char *)pDecCmdStr) != 0)
{
return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
}
@@ -12732,7 +13002,7 @@
}
g_zAti_atDataEx[g_zAti_CurInstance].bZemsciqIndex = bIndex;
- return zAt_PsDecFinishParse(&prsCmd2Msg, pDecCmdStr, &tCellInfoQryReq, sizeof(T_zMmiaAs_CellInfo_Qry_Req), TRUE);
+ return zAt_PsDecFinishParse(&prsCmd2Msg, pDecCmdStr, &tCellInfoQryReq, sizeof(T_zMmiaAs_CellInfo_Qry_Req), FALSE);
}
#if defined (PS_RAT_GSM) || defined (PS_RAT_TDD) || defined (PS_RAT_FDD)
/**************************************************************************
@@ -19324,6 +19594,18 @@
return (UINT16)strlen((const char *)pEncCmdInfo->pStrCmd);
}
+
+UINT16 zAt_EncCcZecallStateInd(T_ZAt_EncCmdInfo * pEncCmdInfo)
+{
+ CHAR * pStrWalk = pEncCmdInfo->pStrCmd;
+ T_zMmiaCc_ECallWorkStateInd *pZEcallStateInd = (T_zMmiaCc_ECallWorkStateInd*) pEncCmdInfo->pMsgBody;
+
+ /*^ZECALLSTATE*/
+ sprintf((char *)pStrWalk, "%s^ZECALLSTATE: %d,%d,%d%s", g_zAt_CRLF, pZEcallStateInd->bCallId,
+ pZEcallStateInd->bDir, pZEcallStateInd->bECallState, g_zAt_CRLF);
+
+ return (UINT16)strlen((const char *)pEncCmdInfo->pStrCmd);
+}
#endif
/**************************************************************************
* º¯ÊýÃû³Æ£º zAt_PsEncCcCringInd
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 b8cdf68..9abf081 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
@@ -5760,6 +5760,134 @@
return (UINT16)strlen((const char *)pEncCmdInfo->pStrCmd);
}
+
+UINT16 zAt_EncZemsciqByIndex0(T_ZAt_EncCmdInfo * pEncCmdInfo)
+{
+ BYTE i = 0;
+ BYTE b4GNum = 0;
+ BYTE b3GNum = 0;
+ BYTE bRelNum = 0;
+ WORD wUarfcn = 0;
+ WORD wPci = 0;
+ BYTE bRscp = 0;
+ CHAR * pStrWalk = pEncCmdInfo->pStrCmd;
+ T_zEM_EmInfo_Ind *ptScellCnf = (T_zEM_EmInfo_Ind*)pEncCmdInfo->pMsgBody;
+
+ /*+ZEMSCIQ: 0,<4GCellNum>[,<Pci>,<Earfcn>,<RSRP>]s,<3GCellNum>[,<Psc>,<arfcn>,<Rscp>]s*/
+ pStrWalk += sprintf((char *)pStrWalk, "%s+ZEMSCIQ: 0", g_zAt_CRLF);
+
+ if(Z_LTE_ACT == ptScellCnf->bRatType)
+ {
+ T_zEm_Lte_EmInfo_Ind *ptLteInfo = &ptScellCnf->uEmInfo.tLteEmInfo;
+ T_zEm_Lte_NCellInfo *ptNcellInfo = &ptScellCnf->uEmInfo.tLteEmInfo.tMeasInfo.tNCellInfo;
+
+ b4GNum = ptNcellInfo->bIntraCellNum + ptNcellInfo->bInterCellNum + 1;
+ b4GNum = (b4GNum > 7)? 7 : b4GNum;
+
+ pStrWalk += sprintf((char *)pStrWalk, ",%d", b4GNum);
+
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptLteInfo->tScellPara.tScellInfo.wPci, ptLteInfo->tScellPara.tScellInfo.dwEarfcn,
+ ptLteInfo->tMeasInfo.bScellRsrp);
+ bRelNum++;
+
+ for(i = 0; i < ptNcellInfo->bIntraCellNum && bRelNum < b4GNum; i++, bRelNum++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptNcellInfo->tIntraCell[i].wPci, ptNcellInfo->tIntraCell[i].dwEarfcn, ptNcellInfo->tIntraCell[i].bRsrp);
+ }
+
+ for(i = 0; i < ptNcellInfo->bInterCellNum && bRelNum < b4GNum; i++, bRelNum++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptNcellInfo->tInterCell[i].wPci, ptNcellInfo->tInterCell[i].dwEarfcn, ptNcellInfo->tInterCell[i].bRsrp);
+ }
+
+ b3GNum = (ptNcellInfo->bWCellNum > 7)? 7 : ptNcellInfo->bWCellNum;
+
+ pStrWalk += sprintf((char *)pStrWalk, ",%d", b3GNum);
+
+ for(i = 0; i < b3GNum; i++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptNcellInfo->tNWCell[i].wPci, ptNcellInfo->tNWCell[i].wArfcn, ptNcellInfo->tNWCell[i].bRscp);
+ }
+ }
+ else if(Z_W_ACT == ptScellCnf->bRatType)
+ {
+ if(ptScellCnf->uEmInfo.tWEmInfo.bStateInd == 0)
+ {
+ T_zEm_W_DchMeasInfo *ptDch = &ptScellCnf->uEmInfo.tWEmInfo.uWcellMeasInfo.tDchInfo;
+ b4GNum = (ptDch->tNCellInfo.bLteCellNum > 7)? 7 : ptDch->tNCellInfo.bLteCellNum;
+
+ pStrWalk += sprintf((char *)pStrWalk, ",%d", b4GNum);
+
+ for(i = 0; i < b4GNum; i++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptDch->tNCellInfo.atLteCell[i].wPci, ptDch->tNCellInfo.atLteCell[i].dwEarfcn, ptDch->tNCellInfo.atLteCell[i].bRsrp);
+ }
+
+ b3GNum = ptDch->tNCellInfo.bIntraCellNum + ptDch->tNCellInfo.bInterCellNum + ptDch->tNCellInfo.bDetectCellNum + 1;
+ b3GNum = (b3GNum > 7)? 7 : b3GNum;
+
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%d,%lu,%d", b3GNum, ptDch->tFreqAsVasInfo.tUsedFreqAsInfo.atAsVasCell[0].wPsc, ptDch->tFreqAsVasInfo.tUsedFreqAsInfo.wUarfcn,
+ ptDch->tFreqAsVasInfo.tUsedFreqAsInfo.atAsVasCell[0].bRscp);
+ bRelNum++;
+
+ for(i = 0; i < ptDch->tNCellInfo.bIntraCellNum && bRelNum < b3GNum; i++, bRelNum++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptDch->tNCellInfo.atIntraCell[i].wPsc, ptDch->tNCellInfo.atIntraCell[i].wUarfcn, ptDch->tNCellInfo.atIntraCell[i].bRscp);
+ }
+
+ for(i = 0; i < ptDch->tNCellInfo.bInterCellNum && bRelNum < b3GNum; i++, bRelNum++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptDch->tNCellInfo.atInterCell[i].wPsc, ptDch->tNCellInfo.atInterCell[i].wUarfcn, ptDch->tNCellInfo.atInterCell[i].bRscp);
+ }
+
+ for(i = 0; i < ptDch->tNCellInfo.bDetectCellNum && bRelNum < b3GNum; i++, bRelNum++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptDch->tNCellInfo.atDetectCell[i].wPsc, ptDch->tNCellInfo.atDetectCell[i].wUarfcn, ptDch->tNCellInfo.atDetectCell[i].bRscp);
+ }
+ }
+ else
+ {
+ T_zEm_W_NotDchMeasInfo *ptNotDch = &ptScellCnf->uEmInfo.tWEmInfo.uWcellMeasInfo.tNotDchInfo;
+ b4GNum = (ptNotDch->bLteNCellNum > 7)? 7 : ptNotDch->bLteNCellNum;
+
+ pStrWalk += sprintf((char *)pStrWalk, ",%d", b4GNum);
+
+ for(i = 0; i < b4GNum; i++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptNotDch->atLteCellReselInfo[i].tLteCellInfo.wPci, ptNotDch->atLteCellReselInfo[i].tLteCellInfo.dwEarfcn,
+ ptNotDch->atLteCellReselInfo[i].tLteCellInfo.bRsrp);
+ }
+
+ b3GNum = ptNotDch->bFddIntraCellNum + ptNotDch->bFddInterCellNum + 1;
+ b3GNum = (b3GNum > 7)? 7 : b3GNum;
+
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%d,%lu,%d", b3GNum, ptNotDch->tFddSCellReselInfo.tScellInfo.wPsc, ptNotDch->tFddSCellReselInfo.tScellInfo.wUarfcn,
+ ptNotDch->tFddSCellReselInfo.tScellInfo.bRscp);
+ bRelNum++;
+
+ for(i = 0; i < ptNotDch->bFddIntraCellNum && bRelNum < b3GNum; i++, bRelNum++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptNotDch->atFddIntraCellInfo[i].tFddCellInfo.wPsc, ptNotDch->atFddIntraCellInfo[i].tFddCellInfo.wUarfcn,
+ ptNotDch->atFddIntraCellInfo[i].tFddCellInfo.bRscp);
+ }
+
+ for(i = 0; i < ptNotDch->bFddInterCellNum && bRelNum < b3GNum; i++, bRelNum++)
+ {
+ pStrWalk += sprintf((char *)pStrWalk, ",%d,%lu,%d", ptNotDch->atFddInterCellInfo[i].tFddCellInfo.wPsc, ptNotDch->atFddInterCellInfo[i].tFddCellInfo.wUarfcn,
+ ptNotDch->atFddInterCellInfo[i].tFddCellInfo.bRscp);
+ }
+ }
+ }
+ else
+ {
+ zAti_SendExpt2TraceAgt(ERR_InvalidPara, TRACE_ERR_LEVEL_NORMAL,"");
+ return zAt_EncErrorCode(pEncCmdInfo->pStrCmd, pEncCmdInfo->cmdId, ZAT2_CMEE_GETNOINFO_ERR);
+ }
+
+ sprintf((char *)pStrWalk, "%s%s", g_zAt_CRLF, g_zAt_OK);
+ return (UINT16)strlen((const char *)pEncCmdInfo->pStrCmd);
+}
+
UINT16 zAt_PsEncZemsciqByIndexCnf(T_ZAt_EncCmdInfo * pEncCmdInfo)
{
T_zEM_EmInfo_Ind *ptScellCnf = (T_zEM_EmInfo_Ind*)pEncCmdInfo->pMsgBody;
@@ -5773,6 +5901,10 @@
switch (bZemsciqIndex)
{
+ case 0:
+ {
+ return zAt_EncZemsciqByIndex0(pEncCmdInfo);
+ }
case 1:
{
return zAt_EncZemsciqByIndex1(pEncCmdInfo);
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 b3ee326..e52bc2a 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
@@ -184,6 +184,7 @@
{ "+CECN", ZAT2_CC_CECN, "+CECN: (0,1)" },
{ "+ZNECALLNUM", ZAT2_CC_ZNECALLNUM, "" },
{ "+ZECALLCAPA", ZAT2_CC_ZECALLCAPA, "+ZECALLCAPA: (0-2)" },
+ { "+ZECALLNUM", ZAT2_CC_ZECALLNUM, "" },
#endif
/********************************* SMSÄ£¿é ***********************************/
{ "+CGSMS", ZAT2_SMS_CGSMS, "+CGSMS: (0-3)" },
@@ -910,6 +911,10 @@
/***************************************+ZECALLCAPA**********************************/
{ ZAT2_CC_ZECALLCAPA, ZAT2_CO_SET_REQ, 0, zAt_PsDecEcallCapaSetReq },
{ ZAT2_CC_ZECALLCAPA, ZAT2_CO_QUERY_REQ, 0, zAt_PsDecEcallCapaQryReq },
+
+ /*********************************+ZECALLNUM*****************************/
+ { ZAT2_CC_ZECALLNUM, ZAT2_CO_SET_REQ, 0, zAt_PsDecEcallNumSetReq },
+ { ZAT2_CC_ZECALLNUM, ZAT2_CO_QUERY_REQ, 0, zAt_PsDecEcallNumQryReq },
#endif
/******************************************* +CEER *********************************************/
{ ZAT2_CC_CEER, ZAT2_CO_SET_REQ, 0, zAt_PsDecCeerSetReq },
@@ -2003,6 +2008,9 @@
/*************************************+ZECALL*************************/
{MMIA_CC_ZECALL_IND_EV, zAt_EncCcZEcallInd, ZAT2_CO_IND },
+
+ /*************************************^ECALLSTATE**********************/
+ {MMIA_CC_ECALL_WORKSTATE_IND_EV, zAt_EncCcZecallStateInd, ZAT2_CO_IND },
#endif
#endif
/*****************************************************************
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 075fb4f..72b5b7f 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
@@ -1039,6 +1039,7 @@
#ifdef ECALL_SUPPORT
case MMIA_CC_CECN_IND_EV:
case MMIA_CC_ZECALL_IND_EV:
+ case MMIA_CC_ECALL_WORKSTATE_IND_EV:
#endif
/* PDP ²¿·Ö */
case MMIA_SM_PDP_ACTIVATE_IND_EV:
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 2a4cb47..d0b3f6e 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
@@ -2507,9 +2507,60 @@
return Z_APMMIA_NORESULT;
}
+DWORD zAti_EM_NCellInfoQryReq(VOID* pBuff)
+{
+ BYTE bRet = Z_FAIL;
+ BYTE bCurAct = Z_NO_ACT;
+ T_zMmiaAs_CellInfo_Qry_Req* ptCellInfoQryReq = ZOSS_NULL;
+ T_zMmiaAs_CellInfo_Qry_Req *ptQryReq = ZOSS_NULL;
+
+ bCurAct = zAti_GetCurAct_ByIndex(g_zAti_CurInstance);
+
+ ptCellInfoQryReq = (T_zMmiaAs_CellInfo_Qry_Req*)pBuff;
+ ptQryReq = (T_zMmiaAs_CellInfo_Qry_Req*)zAti_GetUB(sizeof(T_zMmiaAs_CellInfo_Qry_Req));
+
+ zOss_Memcpy(ptQryReq, ptCellInfoQryReq, sizeof(T_zMmiaAs_CellInfo_Qry_Req));
+
+ switch (bCurAct)
+ {
+ #ifdef PS_RAT_LTE
+ case Z_LTE_ACT:
+ bRet = zAti_MsgSend(MMIA_AS_QUERY_EM_CELL_INFO_REQ_EV, (PBYTE)ptQryReq, sizeof(T_zMmiaAs_CellInfo_Qry_Req), Z_ATI_TASKID_EUMCR);
+ break;
+ #endif
+ #ifdef PS_RAT_FDD
+ case Z_W_ACT:
+ bRet = zAti_MsgSend(MMIA_AS_QUERY_EM_CELL_INFO_REQ_EV, (PBYTE)ptQryReq, sizeof(T_zMmiaAs_CellInfo_Qry_Req), Z_ATI_TASKID_WMCR);
+ break;
+ #endif
+ default:
+ zAti_RetUB((VOID**)&ptQryReq);
+ zAti_SendExpt2TraceAgt(ERR_InvalidPara, TRACE_ERR_LEVEL_NORMAL,"");
+ return ZAT2_CMEE_GETNOINFO_ERR;
+ }
+
+ if(bRet == Z_FAIL)
+ {
+ zAti_SendExpt2TraceAgt(ERR_InvalidPara, TRACE_ERR_LEVEL_NORMAL,"");
+ return Z_APMMIA_OPTNOTALW_ERR;
+ }
+
+ return Z_APMMIA_NORESULT;
+}
+
DWORD zAti_EM_CellInfoQryReqByIndex(VOID* pBuff)
{
- DWORD dwResult = zAti_EM_CellInfoQryReq(pBuff);
+ DWORD dwResult = ZAT2_CMEE_SYNTAX_ERR;
+ BYTE bInsNo = ((g_zAti_CurInstance == Z_ATI_INSNO_1)? Z_ATI_INSNO_1 : Z_ATI_INSNO_2);
+
+ if(g_zAti_atDataEx[bInsNo].bZemsciqIndex == 1)
+ {
+ dwResult = zAti_EM_CellInfoQryReq(pBuff);
+ }
+ else if(g_zAti_atDataEx[bInsNo].bZemsciqIndex == 0)
+ {
+ dwResult = zAti_EM_NCellInfoQryReq(pBuff);
+ }
if (dwResult != Z_APMMIA_NORESULT)
{
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 cb9adba..10bf45f 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
@@ -4889,7 +4889,26 @@
CHAR *pStrWalk = g_zAt_EncBuf;
if(pZSetReq->bCommandOp == ZAT2_CO_SET_REQ)
{
- zAti_EncOKError((BOOL)(ZOSS_SUCCESS == zOss_AtCfgSet(pZSetReq->cmd, &(pZSetReq->iParam),g_zAti_CurInstance)));
+ BOOL bResult = (BOOL)(ZOSS_SUCCESS == zOss_AtCfgSet(pZSetReq->cmd, &(pZSetReq->iParam),g_zAti_CurInstance));
+ zAti_EncOKError(bResult);
+
+ if(bResult)
+ {
+ if(strcmp((const char *)pZSetReq->cmd, "FREQ_SCAN") == 0)
+ {
+ if(Z_SUCC != zAti_MsgSend(MMIA_UMM_FREQ_SCAN_REQ_EV, ZOSS_NULL, 0, Z_ATI_TASKID_UMM))
+ {
+ zAti_SendExpt2TraceAgt(ERR_InvalidPara, TRACE_ERR_LEVEL_NORMAL,"");
+ }
+ }
+ else if(strcmp((const char *)pZSetReq->cmd, "FAST_FREQ_SCAN") == 0)
+ {
+ if(Z_SUCC != zAti_MsgSend(MMIA_UMM_FAST_FREQ_SCAN_REQ_EV, ZOSS_NULL, 0, Z_ATI_TASKID_UMM))
+ {
+ zAti_SendExpt2TraceAgt(ERR_InvalidPara, TRACE_ERR_LEVEL_NORMAL,"");
+ }
+ }
+ }
}
else if(pZSetReq->bCommandOp == ZAT2_CO_QUERY_REQ)
{
diff --git a/cp/ps/plat/src/oss/sup/src/sup_nvm.c b/cp/ps/plat/src/oss/sup/src/sup_nvm.c
index c0283a2..2bcd830 100755
--- a/cp/ps/plat/src/oss/sup/src/sup_nvm.c
+++ b/cp/ps/plat/src/oss/sup/src/sup_nvm.c
@@ -51,6 +51,9 @@
#include <linux/statfs.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
+#ifdef _USE_VEHICLE_DC
+#include "pub_flags.h"
+#endif
#endif
#ifdef __cplusplus
@@ -268,6 +271,10 @@
{// ro_c0cail
NvItemID -= OS_FLASH_C0CALIINFO_ROW_OFFSET_FROM_NV;
status = Nvram_FsWrite(NVM_FS_ROW_C0_FAC_PATH, NvItemID, NvItemLen, NvItemData);
+#ifdef _USE_VEHICLE_DC
+ extern int flags_set_nvroflag(unsigned int flag);
+ flags_set_nvroflag(NVRO_BACKING_UP);
+#endif
}
zOss_PutMutex(gNV_Mutex);