[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