[Feature][T106][task-view-97] add interface for voice call to rtp,
modification in cp and ap and pub
Only Configure: No
Affected branch: unknown
Affected module: voice call and at
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: yes
Doc Update: no
Change-Id: I5c7bc461e790ee24805a520077ca80b5eeb7bbf1
diff --git a/cp/ps/driver/inc/misc/drvs_voiceprocess.h b/cp/ps/driver/inc/misc/drvs_voiceprocess.h
index 67cc84d..acceb20 100755
--- a/cp/ps/driver/inc/misc/drvs_voiceprocess.h
+++ b/cp/ps/driver/inc/misc/drvs_voiceprocess.h
@@ -283,6 +283,10 @@
BOOL firstRegZCATFlag; //25
T_Hal_EcallData ecallData;//26
UINT8 voice_nv_update;//27
+ UINT8 useVoiceBuffer; // 0 not use,1 use
+ UINT8 voiceBufferType; //0 single core, 1 dual core
+
+
} T_zDrvVoice_GbVar; //T_zDrvVoice_GbVar
typedef struct
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 7489d52..20c1ddc 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
@@ -25,6 +25,7 @@
#include "drvs_general.h"
#include "drvs_i2s.h"
#include "drvs_voiceprocess.h"
+#include "hal_voiceprocess.h"
#include "drvs_voice_config.h"
#include "drvs_i2c.h"
#include "NvParam_drv.h"
@@ -132,7 +133,7 @@
//#define AUDIO_USE_FIXED_ADDRESS
-#define VP_INOUT_BAK_BUFFER_SIZE 0x30000 // 0x60000
+//#define VP_INOUT_BAK_BUFFER_SIZE 0x30000 // 0x60000
#define VP_INOUT_NOBAK_BUFSIZE 640
/**************************************************************************
@@ -595,7 +596,8 @@
//ret = zDrvNand_Read(OS_FLASH_VOICE_DRV_RW_NONFAC_BASE_ADDR, sizeof(audionvflag), ((UINT8 *)(&audionvflag)));
ret = zOss_NvItemRead(OS_FLASH_VOICE_DRV_RW_NONFAC_BASE_ADDR, ((UINT8 *)(&audionvflag)), sizeof(audionvflag));
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " zDrvVoiceConfig_Init zOss_NvItemRead isVpParamInNv=%d,isUseSlicCodec=%d!\n", audionvflag.isVpParamInNv, audionvflag.isUseSlicCodec);
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " zDrvVoiceConfig_Init zOss_NvItemRead isVpParamInNv=%d,isUseSlicCodec=%d,isUseVoiceProc=%d,isUseTdm=%d,isUseEcall=%d!\n", audionvflag.isVpParamInNv, audionvflag.isUseSlicCodec,audionvflag.isUseVoiceProc,audionvflag.isUseTdm,audionvflag.isUseEcall);
//hal_TestTopI2sConfig();
if (ret != DRV_SUCCESS)
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c b/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
index dff7364..db57346 100755
--- a/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
@@ -193,6 +193,40 @@
{
return g_voiceVar.muteEn;
}
+
+int zDrvVp_SetVoiceProc_Wrap(int val)
+{
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: val=%d !\n",__func__,val);
+
+ g_voiceVar.audio_ctrlFlag.isUseVoiceProc = val;
+ return DRV_SUCCESS;
+}
+
+int zDrvVp_GetVoiceProc_Wrap(void)
+{
+ return g_voiceVar.audio_ctrlFlag.isUseVoiceProc;
+}
+
+int zDrvVp_SetVoiceBuffer_Wrap(int en,int type)
+{
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: en=%d,type=%d !\n",__func__,en,type);
+
+ g_voiceVar.useVoiceBuffer = en;
+ g_voiceVar.voiceBufferType = type;
+ return DRV_SUCCESS;
+}
+
+void zDrvVp_GetVoiceBuffer_Wrap(int *en,int *type)
+{
+ if((en!=NULL)&&(type!=NULL)){
+ *en = g_voiceVar.useVoiceBuffer;
+ *type = g_voiceVar.voiceBufferType;
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: en=%d,type=%d !\n",__func__,*type,*en);
+ }
+}
+
+
SINT32 zDrvVp_SetRxMute_Wrap(int enable)
{
return zDrvVp_SetRxMute(enable, VOICE_DOWNLINK);
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/audiointf/voice_procintf.c b/cp/ps/driver/src/chipsets/src/audio_base/audiointf/voice_procintf.c
index 2f0e803..5146753 100644
--- a/cp/ps/driver/src/chipsets/src/audio_base/audiointf/voice_procintf.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/audiointf/voice_procintf.c
@@ -15,6 +15,10 @@
* Include files
****************************************************************************/
#include "drvs_general.h"
+
+#include "drvs_volte.h"
+#include "drvs_voiceprocess.h"
+
#include "drvs_ramlog.h"
#include <oss_clib.h>
#include <oss_kernel.h>
@@ -73,8 +77,12 @@
g_voiceVar.isUseSlicCodec = g_voiceVar.audio_ctrlFlag.isUseSlicCodec;
g_voiceVar.g_isUseTdm = g_voiceVar.audio_ctrlFlag.isUseTdm;
+
+ g_voiceVar.useVoiceBuffer = g_voiceVar.audio_ctrlFlag.isUseVoiceBuffer; // 0 not use,1 use
+ g_voiceVar.voiceBufferType = g_voiceVar.audio_ctrlFlag.selVoiceBufferType;//0 single core, 1 dual core
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " VoiceProc_InitNvParam isUseVoiceProc=%d,isUseSlicCodec=%d,isUseTdm=%d!\n", g_voiceVar.audio_ctrlFlag.isUseVoiceProc, g_voiceVar.isUseSlicCodec, g_voiceVar.audio_ctrlFlag.isUseTdm);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " VoiceProc_InitNvParam isUseVoiceProc=%d,isUseSlicCodec=%d,isUseTdm=%d,useVoiceBuffer=%d,voiceBufferType=%d!\n", g_voiceVar.audio_ctrlFlag.isUseVoiceProc, \
+ g_voiceVar.isUseSlicCodec, g_voiceVar.audio_ctrlFlag.isUseTdm,g_voiceVar.useVoiceBuffer,g_voiceVar.voiceBufferType);
if (g_voiceVar.audio_ctrlFlag.isUseVoiceProc == 1)
{
#ifdef _USE_NXP_AUD
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/i2s/hal_i2s.c b/cp/ps/driver/src/chipsets/src/audio_base/i2s/hal_i2s.c
index 983a92a..5ea7c1d 100755
--- a/cp/ps/driver/src/chipsets/src/audio_base/i2s/hal_i2s.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/i2s/hal_i2s.c
@@ -4322,6 +4322,37 @@
*/
VOID vp_SetTopI2sConfig(VOID)
{
+
+
+UINT32 AmrRegBit = 0;
+
+if (g_voiceVar.useVoiceBuffer == 1){
+
+
+
+ /* inter loop */
+ AmrRegBit = ARM_I2S_LOOP_CFG;
+
+ AmrRegBit &= 0xfffffe07;
+ AmrRegBit |= 0x000000a8; /* 0x000000a8 loop dsp afe(loop i2s1)--arm i2s2(loop i2s2) 0x00000150 loop dsp arm(loop i2s1)--afe i2s2(loop i2s2)*/
+
+ ARM_I2S_LOOP_CFG = AmrRegBit;
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_SetTopI2sConfig ARM_I2S_LOOP_CFG=0x%x\n", ARM_I2S_LOOP_CFG);
+}
+#ifdef CONFIG_VOICE_BUFFER_DRV
+ /* inter loop */
+ AmrRegBit = ARM_I2S_LOOP_CFG;
+
+ AmrRegBit &= 0xfffffe07;
+ AmrRegBit |= 0x000000a8; /* 0x000000a8 loop dsp afe(loop i2s1)--arm i2s2(loop i2s2) 0x00000150 loop dsp arm(loop i2s1)--afe i2s2(loop i2s2)*/
+
+ ARM_I2S_LOOP_CFG = AmrRegBit;
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_SetTopI2sConfig ARM_I2S_LOOP_CFG=0x%x\n", ARM_I2S_LOOP_CFG);
+
+#endif
+
#if 0
UINT32 AmrRegBit = 0;
int ret;
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voicebuffer.h b/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voicebuffer.h
new file mode 100755
index 0000000..a9fbd34
--- /dev/null
+++ b/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voicebuffer.h
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (C) 2007, ZTE Corporation.
+ *
+ * File Name: hal_voicebuffer.h
+ * File Mark:
+* Description: Provide voicebuffer hal function prototype declaration and type declaration.
+ * Others:
+ * Version: V0.5
+ * Author: xxq
+ * Date: 2024-07-11
+ * History 1:
+ * Date:
+ * Version:
+ * Author:
+ * Modification: add mute/read/write/loopback.
+ * History 2:
+ ********************************************************************************/
+
+#ifndef _HAL_VOICEBUFFER_H
+#define _HAL_VOICEBUFFER_H
+
+
+/****************************************************************************
+* Include files
+****************************************************************************/
+
+
+/****************************************************************************
+* Macros
+****************************************************************************/
+#define VP_BUF_LENGTH 0x7FF80 //0xFFD80 //0x7FE40 //0x4df80// (0.5M 0x80000)
+#define VP_FRAME_BUFFER_SIZE 320 //20ms 800KHZ
+#define VP_I2S_BUFFER_SIZE 320
+#define VOICE_SYNC_TIMEOUT_TIME 100
+
+ //#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;
+
+#define RPMSG_CAP_ID 1
+
+#define MAX_BUF_SIZE 640
+#define MAX_BUF_NUM 3
+
+/****************************************************************************
+* Types
+****************************************************************************/
+
+
+
+enum{
+ UP_LINK,
+ DOWN_LINK
+};
+
+struct voice_ring_buffer {
+ volatile uint read_pos;
+ volatile uint write_pos;
+ volatile char data[];
+
+};
+
+
+/****************************************************************************
+* Constants
+****************************************************************************/
+
+/****************************************************************************
+* Global Variables
+****************************************************************************/
+
+/****************************************************************************
+* Function Prototypes
+****************************************************************************/
+
+SINT32 vp_Open_Vbuffer(void);
+
+SINT32 vp_Close_Vbuffer(void);
+
+SINT32 vp_VoiceI2sStart_Vbuffer(VOID);
+
+VOID vp_VoiceI2sStop_Vbuffer(VOID);
+
+SINT32 zDrvVp_VoiceWorkStop_Vbuffer(VOID);
+
+SINT32 vp_VolteReadStart_Vbuffer(VOID);
+//whole replace
+SINT32 vp_VolteReadStop_Vbuffer(VOID);
+
+SINT32 vp_VolteWriteStart_Vbuffer(VOID);
+//whole replace
+SINT32 vp_VolteWriteStop_Vbuffer(VOID);
+
+SINT32 vp_WriteDataToCodec_Vbuffer(UINT8 *pBuf, UINT32 count);
+
+SINT32 vp_ReadDataFromCodec_Vbuffer(UINT8 *pBuf, UINT32 count);
+
+SINT32 vp_CreateThreadSemaph_Vbuffer(VOID);
+
+
+
+
+#endif/*_HAL_VOICEBUFFER_H*/
+
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/tdm/hal_tdm.c b/cp/ps/driver/src/chipsets/src/audio_base/tdm/hal_tdm.c
index 322aea4..50e28da 100644
--- a/cp/ps/driver/src/chipsets/src/audio_base/tdm/hal_tdm.c
+++ b/cp/ps/driver/src/chipsets/src/audio_base/tdm/hal_tdm.c
@@ -54,6 +54,7 @@
#define TDM_DRIVER_VERSION 1
//#define ARM_TDM_LOOP_SET *((volatile unsigned int *)(ZX_SOC_SYS_BASE + 0x60))
+#define ARM_TDM_LOOP_CFG *((volatile UINT32 *)(SOC_SYS_REG_BASE+0x60))
/* version register */
#define TDM_VERSION 0x0104 /*TDM Version V1.4*/
@@ -2415,7 +2416,12 @@
memset(temp, 0, sizeof(temp));
tdmDmaState[TDM_RX].channel = DMA_CH_TDM_RX0;
tdmDmaState[TDM_RX].ch = dma_request_channel(mask, zx29_dma_filter_fn, (void*)(tdmDmaState[TDM_RX].channel));
-
+ if(!tdmDmaState[TDM_RX].ch){
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: dma_request_channel fail, dma_id(%d).\n",__func__,tdmDmaState[TDM_RX].channel);
+ return DRV_ERR_BUSY;
+
+ }
for (i = 0; i < TDM_OUT_BUF_NUM; i++) {
temp[i].dest_addr = tdmDmaState[TDM_RX].dma_phyaddr + (tdmStream->rxLen) * i;
temp[i].src_addr = ZX29_TDM_PHYS + 0x24;
@@ -2484,6 +2490,12 @@
memset(temp, 0, sizeof(temp));
tdmDmaState[TDM_TX].channel = DMA_CH_TDM_TX0;
tdmDmaState[TDM_TX].ch = dma_request_channel(mask, zx29_dma_filter_fn, (void*)(tdmDmaState[TDM_TX].channel));
+ if(!tdmDmaState[TDM_TX].ch){
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: dma_request_channel fail, dma_id(%d).\n",__func__,tdmDmaState[TDM_TX].channel);
+ return DRV_ERR_BUSY;
+
+ }
for (i = 0; i < TDM_OUT_BUF_NUM; i++) {
temp[i].src_addr = tdmDmaState[TDM_TX].dma_phyaddr + (txStream->txLen) * i;
@@ -2840,6 +2852,7 @@
SINT32 ret = DRV_SUCCESS;
ret = tdm_Reset();
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvTDM_Reset , ret=%d",ret);
return ret;
}
@@ -3751,6 +3764,21 @@
VOID vp_SetTopTdmConfig(VOID)
{
+ UINT32 AmrRegBit = 0;
+
+ /* inter loop */
+ AmrRegBit = ARM_TDM_LOOP_CFG;
+
+ AmrRegBit &= 0xfffffe07;
+ AmrRegBit |= 0x000000a8; /* 0x000000a8 loop dsp afe(loop i2s1)--arm i2s2(loop i2s2) 0x00000150 loop dsp arm(loop i2s1)--afe i2s2(loop i2s2)*/
+
+ ARM_TDM_LOOP_CFG = AmrRegBit;
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_SetTopTDMConfig ARM_TDM_LOOP_CFG=0x%x\n", ARM_TDM_LOOP_CFG);
+
+
+
+
#if 0
UINT32 AmrRegBit = 0;
int ret = 0;
diff --git a/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voicebuffer.c b/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voicebuffer.c
new file mode 100755
index 0000000..8d0e5f7
--- /dev/null
+++ b/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voicebuffer.c
@@ -0,0 +1,1065 @@
+/*******************************************************************************
+ * Copyright (C) 2007, ZTE Corporation.
+ *
+ * File Name:hal_voicebuffer.c
+ * File Mark:
+ * Description: voice buffer function.
+ * Others:
+ * Version:
+ * Author: xxq
+ * Date: 2024-07-03
+ * History 1:
+ * Date:
+ * Version:
+ * Author:
+ * Modification: edit for union version
+ * History 2:
+ ********************************************************************************/
+
+/****************************************************************************
+* Include files
+****************************************************************************/
+#include "drvs_general.h"
+#include "drvs_volte.h"
+#include "drvs_i2s.h"
+#include "drvs_voiceprocess.h"
+#include "hal_voiceprocess.h"
+#include "drvs_voice_config.h"
+//#include "hal_pcmmixer.h"
+#include "NvParam_drv.h"
+#include "drvs_io_voice.h"
+#include "hal_ringdata.h"
+#include "drvs_tdm.h"
+#include "hal_dtmf_detect.h"
+#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"
+#endif
+
+#include "drvs_icp.h"
+#include "drvs_rpmsg.h"
+//#include <linux/completion.h>
+#include "hal_voicebuffer.h"
+
+/****************************************************************************
+* Local Macros
+****************************************************************************/
+//#define USE_AUDIO_RING
+//#define VP_GET_TX_ALL_DATA
+
+
+/****************************************************************************
+* Local Types
+****************************************************************************/
+
+
+/****************************************************************************
+* Local Constants
+****************************************************************************/
+static SINT32 vp_Get_Add_RpMsg_Vbuffer(VOID);
+
+/****************************************************************************
+* Local Function Prototypes
+****************************************************************************/
+
+/****************************************************************************
+* Global Constants
+****************************************************************************/
+
+
+/****************************************************************************
+* Global Variables
+****************************************************************************/
+//static T_zDrvVp_SpeechState *s_pSpeechState = NULL;
+extern T_zDrvVp_SpeechState s_speechState; //104 bytes
+extern T_zDrvVoice_GbVar g_voiceVar;
+extern T_zDrvVp_State s_vpState;
+
+
+#ifdef ECALL_SUPPORT
+extern int eWrErr;
+extern UINT8 e_reg_flag;
+
+#endif
+
+//for test whiteNoise
+#ifdef TEST_WHITE_NOISE
+extern UINT32 tempCount;
+extern UINT8 *pVoiceTempBuf;
+#endif
+
+
+extern T_ZDrv_VpInOutBuffer vpInOutBuffer;
+
+extern T_HalMixerToneInfo mixerToneInfo;
+
+static int vbuffer_init_flag = 0;
+
+/****************************************************************************
+* Global Function Prototypes
+****************************************************************************/
+//aduvoice config code
+
+
+
+
+
+
+extern SINT32 voice_ToneMixerData(UINT8 *pvdata, UINT32 size, UINT8 *pmixdata);//xiu gai chu sheng ming
+extern SINT32 zDrvI2S_Read_Start(T_ZDrvI2S_Id tId, T_ZDrvI2s_Params *params, T_ZDrvI2S_Cfg *ptCfg);//xiu gai chu sheng ming
+extern SINT32 zDrvI2S_Write_Start(T_ZDrvI2S_Id tId, T_ZDrvI2s_Params *params, T_ZDrvI2S_Cfg *ptCfg);//xiu gai chu sheng ming
+
+
+
+/****************************************************************************
+* Function Definitions
+****************************************************************************/
+ZOSS_TIMER_ID s_voiceTimerId ;
+ZOSS_SEMAPHORE_ID s_voiceRdSema;
+ZOSS_SEMAPHORE_ID s_voiceWrSema;
+
+//#ifdef CONFIG_VOICE_BUFFER_DRV
+//#ifdef _VBUFF_IN_MULTI_CORE
+//voice buffer use in multi core
+//#define RPMSG_CAP_ID 1
+
+
+
+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;
+
+
+
+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",__FUNCTION__,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",__FUNCTION__,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",__FUNCTION__,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",__FUNCTION__,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;
+}
+
+
+//voice buffer use in single core
+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);
+//static DECLARE_COMPLETION(s_voice_completion);
+//ZOSS_TIMER_ID s_voiceTimerId ;
+//ZOSS_SEMAPHORE_ID s_voiceRdSema;
+//ZOSS_SEMAPHORE_ID s_voiceWrSema;
+static void voiceTimerCallBack(SINT32 para)
+{
+
+
+ if (g_voiceVar.voiceBufferType == 1)//multi core
+ {
+
+
+ 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);
+#ifdef _USE_VEHICLE_DC
+ zDrvRpMsg_Write_Cap(&icp_pMsg);
+#endif
+ 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",__FUNCTION__,timer_cb_count);
+ if(timer_cb_count> 10000000)
+ timer_cb_count=0;
+ }
+
+#endif
+
+
+ }
+ else{
+
+
+
+ // complete_all(&s_voice_completion);
+ zOss_PutSemaphore(s_voiceWrSema);
+ zOss_PutSemaphore(s_voiceRdSema);
+ voice_inform_to_app();
+ // zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voiceTimerCallBack timer=%u\n", cpu_clock(0)>>10);
+ }
+
+
+}
+
+
+
+
+
+static SINT32 vp_rxsem_count_Init(void)
+{
+ UINT32 i = 0;
+ UINT32 semCount = 0;
+ SINT32 Count = 0;
+
+ semCount = zOss_GetSemaphoreCount(s_voiceRdSema);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_rxsem_count_Init rxSem count=%d\n", semCount);
+
+ Count = semCount;
+ if(Count > 0) {
+ for(i = 0; i < Count; i++) {
+ zOss_GetSemaphore(s_voiceRdSema, ZOSS_NO_WAIT);
+ }
+ }
+
+ return DRV_SUCCESS;
+}
+
+static SINT32 vp_txsem_count_Init(void)
+{
+ UINT32 i = 0;
+ UINT32 semCount = 0;
+ SINT32 Count = 0;
+
+ semCount = zOss_GetSemaphoreCount(s_voiceWrSema);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_txsem_count_Init txSem count=%d \n", semCount);
+
+ Count = 3 - semCount;
+ if(Count > 0) {
+ for(i = 0; i < Count; i++) {
+ zOss_PutSemaphore(s_voiceWrSema);
+ }
+ } else if(Count < 0) {
+ Count = 0 - Count;
+ for(i = 0; i < Count; i++) {
+ zOss_GetSemaphore(s_voiceWrSema, ZOSS_NO_WAIT);
+ }
+ }
+
+ return DRV_SUCCESS;
+}
+
+
+
+
+
+SINT32 vp_Open_Vbuffer(void)
+{
+ SINT32 ret = DRV_SUCCESS;
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: start \n", __func__);
+ if (g_voiceVar.voiceBufferType == 1)//multi core
+ {
+ vp_Get_Add_RpMsg_Vbuffer();
+
+ 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);
+ //for debug
+ 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_Vbuffer init voice buffer val!\n");
+
+
+ }else{
+
+ // INIT_COMPLETION(s_voice_copletion);
+ vp_rxsem_count_Init();
+ vp_txsem_count_Init();
+ }
+
+ return DRV_SUCCESS;
+
+}
+
+
+SINT32 vp_Close_Vbuffer(void)
+{
+ SINT32 ret = DRV_SUCCESS;
+
+ if (g_voiceVar.voiceBufferType == 1)//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",__FUNCTION__,timer_cb_count,first_full_flag,first_empty_flag,vb_read_count,vb_write_count);
+ }
+
+ return DRV_SUCCESS;
+}
+
+SINT32 vp_VoiceI2sStart_Vbuffer(VOID)
+{
+ SINT32 ret = DRV_SUCCESS;
+
+ UINT8 *read_buf = NULL;
+ UINT8 *write_buf = NULL;
+ UINT32 read_len = 0;
+ UINT32 write_len = 0;
+
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: start.\n",__func__);
+
+
+ ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer failed ret is %d .\n", ret);
+ return DRV_ERROR;
+ }
+
+ zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
+
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer VB zOss_StartTimer\n");
+
+ ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
+
+ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer error12:zDrvI2S_Write I2S_2 ret=%d", ret);
+ }
+
+ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer error13:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer error14:zDrvI2S_Write I2S_2 ret=%d", ret);
+ }
+
+ if (g_voiceVar.voiceBufferType == 1)//multi core
+ {
+
+ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+
+ }else{
+ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ }
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: end.\n",__func__);
+ return ret;
+}
+VOID vp_VoiceI2sStop_Vbuffer(VOID)
+{
+ SINT32 ret = DRV_SUCCESS;
+ return ret;
+}
+
+
+
+SINT32 zDrvVp_VoiceWorkStop_Vbuffer(VOID)
+{
+ SINT32 ret = DRV_SUCCESS;
+
+ //complete_all(&s_voice_completion);
+ zOss_PutSemaphore(s_voiceRdSema);
+ zOss_PutSemaphore(s_voiceWrSema);
+ zOss_StopTimer(s_voiceTimerId);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: zOss_StopTimer\n",__func__);
+
+
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: success",__func__);
+ return DRV_SUCCESS;
+}
+
+
+SINT32 vp_VolteReadStart_Vbuffer(VOID)
+{
+ SINT32 ret = DRV_SUCCESS;
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart_Vbuffer start\n");
+
+ zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart_Vbuffer zOss_StartTimer start\n");
+
+ return DRV_SUCCESS;
+}
+//whole replace
+SINT32 vp_VolteReadStop_Vbuffer(VOID)
+{
+ SINT32 ret = DRV_SUCCESS;
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ zOss_PutSemaphore(s_voiceRdSema);
+
+ }
+ else
+ {
+
+#ifdef CONFIG_VOICE_BUFFER_DRV
+ zOss_PutSemaphore(s_voiceRdSema);
+#else
+
+ //zDrvI2s_RxRlsSemaBeforeStop(I2S_1);
+ zDrvExtAudio_RxRlsSemaBeforeStop();
+
+#if 0//move to close lvwenhua 20150910
+ ret = zDrvExtAudio_Read_Stop();
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVolte_ReadStop I2S1 Stop wrong ret=%d", ret);
+ }
+#endif
+#endif
+
+ }
+
+ if (s_speechState.volteVpCfgEnFlag == 1)
+ {
+ ret = halVpCfg_Disable();
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: halVpCfg_Enable err ret=%x !\n",__func__, ret);
+ }
+ else
+ {
+ s_speechState.volteVpCfgEnFlag = 0;
+ }
+ }
+
+ s_speechState.volteVpReadStopFlag = 1;//together control vp s_speechState
+ if ((s_speechState.volteVpWriteStopFlag == 1) && (s_speechState.volteVpReadStopFlag == 1))
+ {
+ g_voiceVar.vpI2sStatus = VP_I2S_OPEN;
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ zOss_StopTimer(s_voiceTimerId);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: zOss_StopTimer\n",__func__);
+
+ }
+ else
+ {
+#ifdef CONFIG_VOICE_BUFFER_DRV
+ zOss_StopTimer(s_voiceTimerId);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStop_Vbuffer zOss_StopTimer\n");
+#endif
+ }
+ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: end\n",__func__);
+ return ret;
+}
+
+SINT32 vp_VolteWriteStart_Vbuffer(VOID)
+{
+ SINT32 ret = DRV_SUCCESS;
+
+ //???? for check
+ if (g_voiceVar.voiceBufferType == 1)//multi core
+ {
+ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ }
+ else
+ {
+ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:end \n",__func__);
+
+ return ret;
+}
+//whole replace
+SINT32 vp_VolteWriteStop_Vbuffer(VOID)
+{
+ SINT32 ret = DRV_SUCCESS;
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ zOss_PutSemaphore(s_voiceWrSema);
+
+ }
+ else
+ {
+
+#ifdef CONFIG_VOICE_BUFFER_DRV
+ //complete_all(&s_voice_completion);
+ zOss_PutSemaphore(s_voiceWrSema);
+#else
+ //zDrvI2s_TxRlsSemaBeforeStop(I2S_1);
+ zDrvExtAudio_TxRlsSemaBeforeStop();
+#endif
+ }
+#if 0//move to close lvwenhua 20150910
+ //wait for write drain semaphore
+#ifdef VOICE_TONE_MIXER_FUNCTION
+ voice_ToneMixerStop();
+#endif
+
+ ret = zDrvExtAudio_Write_Stop();
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVolte_WriteStop I2S1 Stop wrong ret=%d", ret);
+ }
+
+ //s_VolteWriteSema = 0;
+#endif
+
+ if (s_speechState.volteVpCfgEnFlag == 1)
+ {
+ ret = halVpCfg_Disable();
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStop_Vbuffer halVpCfg_Enable err ret=%x !\n", ret);
+ }
+ else
+ {
+ s_speechState.volteVpCfgEnFlag = 0;
+ }
+ }
+
+ s_speechState.volteVpWriteStopFlag = 1;//together control vp s_speechState
+ if ((s_speechState.volteVpWriteStopFlag == 1) && (s_speechState.volteVpReadStopFlag == 1))
+ {
+ g_voiceVar.vpI2sStatus = VP_I2S_OPEN;
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+
+ zOss_StopTimer(s_voiceTimerId);
+
+ }
+ else
+ {
+
+#ifdef CONFIG_VOICE_BUFFER_DRV
+ zOss_StopTimer(s_voiceTimerId);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStop_Vbuffer zOss_StopTimer\n");
+#endif
+ }
+ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStop_Vbuffer \n");
+ return ret;
+}
+
+
+/*******************************************************************************
+ * For union version
+ * Others:
+ ********************************************************************************/
+SINT32 vp_WriteDataToCodec_Vbuffer(UINT8 *pBuf, UINT32 count)
+{
+ SINT32 ret = DRV_SUCCESS;
+ SINT32 e_ret = DRV_SUCCESS;
+ UINT8 *write_buf = NULL;
+ UINT32 write_len = 0;
+ UINT8 *e_write_buf = NULL;
+ UINT32 e_write_len = 0;
+ UINT32 i = 0, j = 0;
+#ifdef TEST_WHITE_NOISE
+ // UINT32 tempCount = 0;
+ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "test the white noise");
+ //UINT8 *pVoiceTempBuf = s_voiceTempBuffer;
+#endif
+
+
+
+ if (pBuf == NULL)
+ {
+ return DRV_ERR_INVALID_PARAM;
+ }
+
+ if (count != s_speechState.i2sWriteParam.buffersize)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_WriteDataToCodec_Vbuffer write data length err,count=%d,writebuffersize=%d \n", count, s_speechState.i2sWriteParam.buffersize);
+ return DRV_ERR_INVALID_PARAM;
+ }
+ #ifdef ECALL_SUPPORT
+
+ if(e_reg_flag == 1)
+ {
+ e_ret = update_ecall_state(DIR_RX);
+ if (e_ret == DRV_ERR_NOT_SUPPORTED)
+ {
+ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "vp_WriteDataToCodec_Vbuffer get__ecall_state fun not register or invalid para,e_ret=%d !\n",e_ret);
+
+ }
+ }
+ #endif
+
+
+
+ #ifdef TEST_WHITE_NOISE
+
+ zOss_Memcpy(s_speechState.pVpTempRxInBuffer, pVoiceTempBuf, s_speechState.totalFrameBufSize);
+
+ pVoiceTempBuf += s_speechState.totalFrameBufSize;
+ tempCount += s_speechState.totalFrameBufSize;
+ if (tempCount >= 0x4df80) //307200
+ //if(tempCount >= 0x4e200) //320000
+ {
+ pVoiceTempBuf = s_voiceTempBuffer;
+ tempCount = 0;
+ }
+ #endif
+
+ #ifdef VOICE_TONE_MIXER_FUNCTION
+
+ if (mixerToneInfo.StartMixer == TRUE)
+ {
+ //voice_ToneMixerData( s_speechState.pVpTempRxInBuffer);
+ if ((g_voiceVar.voiceInVolteMode == 1) && (g_voiceVar.volteIsWb == 1))
+ {
+ voice_ToneMixerData(s_speechState.pVpTempRxInBuffer, 640, s_speechState.pVpTempRxInBuffer);
+ }
+ else
+ {
+ voice_ToneMixerData(s_speechState.pVpTempRxInBuffer, 320, s_speechState.pVpTempRxInBuffer);
+ }
+
+ }
+
+ #endif
+ if (pBuf != s_speechState.pVpTempRxInBuffer)
+ {
+ zOss_Memcpy(s_speechState.pVpTempRxInBuffer, pBuf, s_speechState.totalFrameBufSize);
+ }
+
+ if (g_voiceVar.vProcIsNormal == TRUE)
+ {
+ VoiceProc_RxProcess(& s_speechState.pVpTempRxInBuffer, & s_speechState.pVpTempRxOutPutBuffer, s_speechState.frameCount);
+ }
+ else
+ {
+ zOss_Memcpy((VOID *)(s_speechState.pVpTempRxOutPutBuffer), (VOID *) s_speechState.pVpTempRxInBuffer, s_speechState.totalFrameBufSize);
+ }
+ //wait_for_completion_timeout(&s_voice_completion, 60);
+ zOss_GetSemaphore(s_voiceWrSema, 60);
+ //#ifdef _VBUFF_IN_MULTI_CORE
+ if (g_voiceVar.voiceBufferType == 1)
+ {
+ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ }
+ else
+ {
+ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ }
+ if (g_voiceVar.voiceInVolteMode == 1)
+ {
+ s_speechState.rxSaveLen += s_speechState.totalFrameBufSize;
+ if (s_speechState.rxSaveLen >= s_speechState.inOutBufUseSize)
+ {
+ 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
+ }
+
+
+ if (s_speechState.firstWriteDataFlag == FALSE)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_WriteDataToCodec_Vbuffer first write ret=%d,tick=%d.\n", ret, zOss_GetTickCount());
+ s_speechState.firstWriteDataFlag = TRUE;
+ }
+
+ return ret;
+}
+
+
+
+SINT32 vp_ReadDataFromCodec_Vbuffer(UINT8 *pBuf, UINT32 count)
+{
+ SINT32 ret = DRV_SUCCESS;
+ UINT8 *read_buf = NULL;
+ UINT32 read_len = 0;
+
+ UINT32 i = 0, j = 0;
+#ifdef CONFIG_ARCH_ZX297520V3_CPE_SWITCH
+ UINT8 temp8bit = 0;
+ UINT8 *ptemp8bit = NULL;
+#endif
+
+ if (pBuf == NULL)
+ {
+ return DRV_ERR_INVALID_PARAM;
+ }
+
+ if (count != s_speechState.i2sReadParam.buffersize)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: read data length err,count=%d,readbuffersize=%d \n",__func__, count, s_speechState.i2sReadParam.buffersize);
+ return DRV_ERR_INVALID_PARAM;
+ }
+#ifdef ECALL_SUPPORT
+
+ if(e_reg_flag == 1)
+ {
+ ret = update_ecall_state(DIR_TX);
+ if (ret == DRV_ERR_NOT_SUPPORTED)
+ {
+ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "vp_ReadDataFromCodecvp_ReadDataFromCodec get__ecall_state fun not register,ret=%d !\n",ret);
+
+ }
+ }
+#endif
+
+
+// wait_for_completion_timeout(&s_voice_completion, 60);
+ zOss_GetSemaphore(s_voiceRdSema, 60);
+ if (g_voiceVar.voiceBufferType == 1)
+ {
+ voice_buffer_read(s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
+
+ }
+ else
+ {
+ voicebuffer_ulqueue_read(s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
+ }
+ if (g_voiceVar.vProcIsNormal == TRUE)
+ {
+ VoiceProc_TxProcess(&s_speechState.pVpTempTxInBuffer, NULL, &s_speechState.pVpTempTxOutPutBuffer, s_speechState.frameCount);
+ }
+ else
+ {
+ zOss_Memcpy((VOID *)(s_speechState.pVpTempTxOutPutBuffer), (VOID *) s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
+ }
+
+ if (pBuf != s_speechState.pVpTempTxOutPutBuffer)
+ {
+ zOss_Memcpy(pBuf, s_speechState.pVpTempTxOutPutBuffer, s_speechState.totalFrameBufSize);
+ }
+
+ if (g_voiceVar.voiceInVolteMode == 1)
+ {
+ // s_speechState.txSaveLen += VP_FRAME_BUFFER_SIZE;
+ s_speechState.txSaveLen += s_speechState.totalFrameBufSize;
+ if (s_speechState.txSaveLen >= s_speechState.inOutBufUseSize)
+ {
+ s_speechState.txSaveLen = 0;
+ }
+ s_speechState.pVpTempTxInBuffer = s_vpState.pVpTxInBuffer + s_speechState.txSaveLen;
+ s_speechState.pVpTempTxOutPutBuffer = s_vpState.pVpTxOutPutBuffer + s_speechState.txSaveLen;
+ }
+
+
+ if (s_speechState.firstReadDataFlag == FALSE)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_ReadDataFromCodec first read tick=%d.\n", zOss_GetTickCount());
+ s_speechState.firstReadDataFlag = TRUE;
+ }
+
+ return ret;
+}
+
+
+
+
+SINT32 vp_CreateThreadSemaph_Vbuffer(VOID)
+{
+ SINT32 ret = 0;
+//#ifdef CONFIG_VOICE_BUFFER_DRV
+// init_completion(&s_voice_completion);
+ /*
+ if(vbuffer_init_flag == 1){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vbuffer already init,return! \n");
+ return DRV_SUCCESS;
+
+ }
+ */
+ s_voiceRdSema = zOss_CreateSemaphore("voice_rx_sem", 0);
+ if(NULL == s_voiceRdSema) {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create voice_rx_sem err \n");
+ return DRV_ERROR;
+ }
+
+ s_voiceWrSema = zOss_CreateSemaphore("voice_tx_sem", 0);
+ if(NULL == s_voiceWrSema) {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create voice_tx_sem err \n");
+ return DRV_ERROR;
+ }
+
+
+
+ s_voiceTimerId = zOss_CreateTimer("voice_frameTimer", voiceTimerCallBack, 0, TRUE);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "s_voiceTimerId=%p\n", s_voiceTimerId);
+ if(!s_voiceTimerId)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice_frameTimer failed\n");
+ return DRV_ERROR;
+ }
+
+
+
+
+ //ret = zDrvRpMsg_CreateChannel(IPC_MSG_ACTOR_A9,channel_41,0x10);
+#ifdef _USE_VEHICLE_DC
+ 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
+ //vbuffer_init_flag = 1;
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_CreateThreadSemaph success. \r\n");
+ return DRV_SUCCESS;
+}
+
+
+
+
+static SINT32 vp_Get_Add_RpMsg_Vbuffer(VOID)
+{
+ SINT32 ret = 0;
+//#ifdef CONFIG_VOICE_BUFFER_DRV
+// init_completion(&s_voice_completion);
+
+ if(vbuffer_init_flag == 1){
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vbuffer already init,return! \n");
+ return DRV_SUCCESS;
+
+ }
+
+ //ret = zDrvRpMsg_CreateChannel(IPC_MSG_ACTOR_A9,channel_41,0x10);
+#ifdef _USE_VEHICLE_DC
+
+ 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));
+
+ vbuffer_init_flag = 1;
+
+ }
+
+
+
+#endif
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: success. \r\n",__func__);
+ return DRV_SUCCESS;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 f34d0b7..3296dad 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
@@ -34,9 +34,7 @@
#include "drvs_tdm.h"
#include "hal_dtmf_detect.h"
#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"
@@ -45,40 +43,19 @@
#include "drvs_icp.h"
#include "drvs_rpmsg.h"
//#include <linux/completion.h>
+
+#include "hal_voicebuffer.h"
+
/****************************************************************************
* Local Macros
****************************************************************************/
//#define USE_AUDIO_RING
//#define VP_GET_TX_ALL_DATA
-#define VP_BUF_LENGTH 0x7FF80 //0xFFD80 //0x7FE40 //0x4df80// (0.5M 0x80000)
-#define VP_FRAME_BUFFER_SIZE 320 //20ms 800KHZ
-#define VP_I2S_BUFFER_SIZE 320
-#define VOICE_SYNC_TIMEOUT_TIME 100
-
-#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
****************************************************************************/
- typedef enum
- {
- VBUF_SEM = 0,//voice buffer
- ECALL_SEM,
- SEM_MAX
- } T_Sem_Owner;
- typedef enum
- {
- DIR_RX,
- DIR_TX,
- DIR_ALL,
- DIR_MAX
- } T_Data_Dir_Type;
/****************************************************************************
* Local Constants
@@ -104,7 +81,46 @@
* Global Variables
****************************************************************************/
//static T_zDrvVp_SpeechState *s_pSpeechState = NULL;
+#if 0
static T_zDrvVp_SpeechState s_speechState = {0}; //104 bytes
+#else
+T_zDrvVp_SpeechState s_speechState = {
+ //use for vp data process
+ .pVpTempRxInBuffer = NULL,
+ .pVpTempTxInBuffer = NULL,
+ .pVpTempRxOutPutBuffer = NULL,
+ .pVpTempTxOutPutBuffer = NULL,
+
+ .pVpI2sCfg = NULL,
+
+ .vpCfgParam = {0},
+
+ .i2sWriteParam = {0},
+ .i2sReadParam = {0},
+
+ .frameCount = 0,
+ .totalFrameBufSize = 0,
+ .inOutBufUseSize = 0,
+ .rxSaveLen = 0,
+ .txSaveLen = 0,
+ .saveLen = 0,
+
+ .pcmSlotNum = 0,
+ .pcmWbSecDataPosition = 0,
+
+ .volteVpWriteStopFlag = 0,
+ .volteVpReadStopFlag = 0,
+ . volteVpCfgEnFlag = 0,
+ .firstWriteDataFlag = FALSE,
+ .firstReadDataFlag = FALSE,
+ .i2sIsRstFlag = FALSE,
+
+};
+
+
+#endif
+
+#if 0
T_zDrvVoice_GbVar g_voiceVar =
{
@@ -138,32 +154,104 @@
#endif
0 //27 voice_nv_update
};
+#else
+T_zDrvVoice_GbVar g_voiceVar =
+{
+ .volteIsWb = 0, //volteIsWb
+ .isUseSlicCodec = 0, //isUseSlicCodec
+ .g_isUseTdm = 0, //g_isUseTdm
+ .voiceInGsmTdMode = 0, //voiceInGsmTdMode
+ .voiceInVolteMode = 0, //voiceInVolteMode
+ .innerI2sIsMaster = FALSE, //innerI2sIsMaster
+ .innerI2sIsI2sMode = TRUE, //innerI2sIsI2sMode
+ .vpLoopRuning = FALSE, //vpLoopRunning
+ .muteEn = FALSE, //muteEn
+ .vProcIsNormal = FALSE, //vProcIsNormal
+ .vpI2sStatus = VP_I2S_IDLE, //vpI2sStatus
+ .vpPath = VP_PATH_HANDSET, //vpPath
+ .vpLoopPath = VP_PATH_HANDSET, //vpLoopPath
+ .vpVol = VP_VOL_3, //vpVol
+ .voiceMode = MAX_VOICE_MODE, //voiceMode
+ .vpInitGain = -1, //vpInitGain
+ .audio_ctrlFlag = {0}, //audio_ctrlFlag
+
+ .dtmfDirSel = DTMF_IDLE, //dtmfDirSel
+ .sample_rate = 0, //sample_rate
+ .useDtmfLoop = 0, //useDtmfLoop
+ .muteCount = 0, //muteCount
+ .vpLoopBkRunning = FALSE, //vpLoopBkRunning
+ .rxMuteEn = FALSE, //rxMuteEn
+ .firstRegZCATFlag = FALSE,
+#ifdef ECALL_SUPPORT
+ .ecallData = {0}, //ecallData
+#endif
+ .voice_nv_update = 0, // voice_nv_update
+ .useVoiceBuffer = 0,// 0 not use,1 use
+ .voiceBufferType = 0, //0 single core, 1 dual core
+
+};
+
+#endif
+
+#if 0
+
static T_zDrvVp_State s_vpState =
{
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- {0},
- {0},
- 0,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ NULL,//1 pVpRxInBuffer
+ NULL,//2 pVpTxInBuffer
+ NULL,//3 pVpRxOutPutBuffer
+ NULL,//4 pVpTxOutPutBuffer
+ 0,//5 inOutBufSize
+ NULL,//6 pVpInnerI2sCfg
+ NULL,//7 pVpExtI2sCfg
+ NULL,//8 pVpExtI2sWbCfg
+ NULL,//9 s_pVpTdmCfg
+ NULL,//10 s_pVpTdmWbCfg
+ NULL,//11 pVpTdmCfg
+ {0},//12 pMsg
+ {0},//13 pMsgBuf[2]
+ //0,//14
+ NULL,//15 vpThread
+ NULL,//16 rcvDtmfThread
+ NULL,//17 vpSemaphore
+ NULL,//18 vpThreadQuitSema
+ NULL,//19 vpLoopThread
+ NULL,//20 vpLoopSemaphore
+ NULL//21 vpState
// {0}
};
+#else
+T_zDrvVp_State s_vpState =
+{
+ .pVpRxInBuffer = NULL,//1
+ .pVpTxInBuffer = NULL,//2
+ .pVpRxOutPutBuffer = NULL,//3
+ .pVpTxOutPutBuffer = NULL,//4
+ .inOutBufSize = 0,//5
+ .pVpInnerI2sCfg = NULL,//6
+ .pVpExtI2sCfg = NULL,//7
+ .pVpExtI2sWbCfg = NULL,//8
+ .s_pVpTdmCfg = NULL,//9
+ .s_pVpTdmWbCfg = NULL,//10
+ .pVpTdmCfg = NULL,//11
+ .pMsg = {0},//12
+ .pMsgBuf = {0},//13
+ .vpThread = NULL,//14
+ .rcvDtmfThread = NULL,//15
+ .vpSemaphore = NULL,//16
+ .vpThreadQuitSema = NULL,//17
+ .vpLoopThread = NULL,//18
+ .vpLoopSemaphore = NULL,//19
+
+ .vpState = NULL,//
+// {0}
+};
+
+
+#endif
+
+
//for test whiteNoise
#ifdef TEST_WHITE_NOISE
@@ -271,8 +359,8 @@
****************************************************************************/
#ifdef CONFIG_VOICE_BUFFER_DRV
#ifdef _VBUFF_IN_MULTI_CORE
-#define RPMSG_CAP_ID 1
-
+//#define RPMSG_CAP_ID 1
+#if 0
ZOSS_TIMER_ID s_voiceTimerId ;
ZOSS_SEMAPHORE_ID s_voiceRdSema;
ZOSS_SEMAPHORE_ID s_voiceWrSema;
@@ -283,9 +371,22 @@
int vb_read_count = 0;
int vb_write_count = 0;
+#else
+//define in hal_voicebuffer.c
+extern ZOSS_TIMER_ID s_voiceTimerId ;
+extern ZOSS_SEMAPHORE_ID s_voiceRdSema;
+extern ZOSS_SEMAPHORE_ID s_voiceWrSema;
+extern int timer_cb_count;
+extern int first_full_flag;
+extern int first_empty_flag;
-void voiceTimerCallBack(SINT32 para)
+extern int vb_read_count;
+extern int vb_write_count;
+
+#endif
+
+static void voiceTimerCallBack(SINT32 para)
{
T_ZDrvRpMsg_Msg icp_pMsg = {0};
@@ -316,22 +417,8 @@
// 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};
+extern struct voice_ring_buffer *voice_buff[2];
@@ -460,10 +547,10 @@
extern int voicebuffer_dlqueue_write(void *buf, unsigned int size);
extern void voice_inform_to_app(void);
//static DECLARE_COMPLETION(s_voice_completion);
-ZOSS_TIMER_ID s_voiceTimerId ;
-ZOSS_SEMAPHORE_ID s_voiceRdSema;
-ZOSS_SEMAPHORE_ID s_voiceWrSema;
-void voiceTimerCallBack(SINT32 para)
+extern ZOSS_TIMER_ID s_voiceTimerId ;
+extern ZOSS_SEMAPHORE_ID s_voiceRdSema;
+extern ZOSS_SEMAPHORE_ID s_voiceWrSema;
+static void voiceTimerCallBack(SINT32 para)
{
// complete_all(&s_voice_completion);
zOss_PutSemaphore(s_voiceWrSema);
@@ -476,7 +563,7 @@
#endif
-SINT32 vp_rxsem_count_Init(void)
+static SINT32 vp_rxsem_count_Init(void)
{
UINT32 i = 0;
UINT32 semCount = 0;
@@ -495,7 +582,7 @@
return DRV_SUCCESS;
}
-SINT32 vp_txsem_count_Init(void)
+static SINT32 vp_txsem_count_Init(void)
{
UINT32 i = 0;
UINT32 semCount = 0;
@@ -522,6 +609,7 @@
#endif
+
#ifdef ECALL_SUPPORT
int eWrErr = 0;
UINT8 e_reg_flag = 0;
@@ -533,6 +621,7 @@
T_Ecall_State preEcallRxSta = 0;
T_Ecall_State preEcallTxSta = 0;
+
//tx
SINT32 rdsem_count_Init(T_Sem_Owner owner)
{
@@ -706,7 +795,7 @@
e_startCount = 0;
e_stopCount = 0;
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "ecall_Open end!\n");
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "ecall_Open bufsize=%d end!\n",bufsize);
return DRV_SUCCESS;
@@ -758,7 +847,7 @@
{
SINT32 ret = DRV_SUCCESS;
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s start e_startCount=%d \n",__FUNCTION__,e_startCount);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: start e_startCount=%d \n",__FUNCTION__,e_startCount);
if(g_voiceVar.ecallData.ecallSta == ECALL_ST_START)
{
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "ecall_Start repeat ecallSta=%d\n",g_voiceVar.ecallData.ecallSta);
@@ -785,7 +874,7 @@
SINT32 ecall_Stop(VOID)
{
SINT32 ret = DRV_SUCCESS;
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s start e_stopCount=%d \n",__FUNCTION__,e_stopCount);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: start e_stopCount=%d \n",__FUNCTION__,e_stopCount);
if((g_voiceVar.ecallData.ecallSta == ECALL_ST_STOP)||(g_voiceVar.ecallData.ecallSta == ECALL_ST_CLOSE))
{
@@ -833,7 +922,7 @@
{
if(dir == DIR_RX)
{
-
+
preEcallRxSta = g_voiceVar.ecallData.ecallRxSta;
g_voiceVar.ecallData.ecallRxSta = ECALL_ST_RX_INUSE;
//zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "update_ecall_state rx state change to ecallRxSta = %d\n", g_voiceVar.ecallData.ecallRxSta);
@@ -964,9 +1053,15 @@
return DRV_SUCCESS;
}
+
SINT32 zDrvExtAudio_Open(T_ZDrvI2s_TransMode i2sTransMode)
{
+
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
+
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -984,6 +1079,9 @@
SINT32 zDrvExtAudio_Reset()
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1000,6 +1098,9 @@
SINT32 zDrvExtAudio_Close()
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1017,6 +1118,9 @@
SINT32 zDrvExtAudio_Write_Prepare(T_ZDrvI2S_Cfg *i2sCfg, T_ZDrvTdm_Cfg *tdmCfg)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1035,6 +1139,9 @@
T_ZDrvTdm_Params *tdmParams, T_ZDrvTdm_Cfg *tdmCfg)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1052,6 +1159,9 @@
T_ZDrvTdm_Params *tdmParams, T_ZDrvTdm_Cfg *tdmCfg)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1068,6 +1178,9 @@
SINT32 zDrvExtAudio_Read_Prepare(T_ZDrvI2S_Cfg *i2sCfg, T_ZDrvTdm_Cfg *tdmCfg)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1086,6 +1199,9 @@
T_ZDrvTdm_Params *tdmParams, T_ZDrvTdm_Cfg *tdmCfg)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1103,6 +1219,9 @@
T_ZDrvTdm_Params *tdmParams, T_ZDrvTdm_Cfg *tdmCfg)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1119,6 +1238,9 @@
SINT32 zDrvExtAudio_Write(const UINT8 *pBuf, UINT32 uiLen)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1136,6 +1258,9 @@
SINT32 zDrvExtAudio_Read(const UINT8 **pBuf, UINT32 *uiLen)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1195,9 +1320,13 @@
return ret;
}
#endif
+
SINT32 zDrvExtAudio_Write_Stop()
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1215,6 +1344,9 @@
SINT32 zDrvExtAudio_Read_Stop()
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1232,6 +1364,9 @@
SINT32 zDrvExtAudio_GetBuf(UINT8 **pBuf, UINT32 *uiLen)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1263,6 +1398,9 @@
SINT32 zDrvExtAudio_FreeBuf(UINT8 *pBuf)
{
int ret = 0;
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return ret;
+ }
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm != 1)
@@ -1279,6 +1417,10 @@
void zDrvExtAudio_RlsAllSemaBeforeStop(void)
{
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return;
+ }
+
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm == 1)
@@ -1296,6 +1438,10 @@
void zDrvExtAudio_RxRlsSemaBeforeStop(void)
{
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return;
+ }
+
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm == 1)
@@ -1311,6 +1457,10 @@
void zDrvExtAudio_TxRlsSemaBeforeStop(void)
{
+ if (g_voiceVar.useVoiceBuffer == 1){
+ return;
+ }
+
#ifdef CONFIG_VOICE_BUFFER_DRV
#else
if (g_voiceVar.g_isUseTdm == 1)
@@ -1595,7 +1745,19 @@
ext_aRdCount = 0;
ext_aRdFBufCount = 0;
+
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = vp_Open_Vbuffer();
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open_Vbuffer ret=%d!\n",ret);
+ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open_Vbuffer useVoiceBuffer=%d voiceBufferType=%d!\n",g_voiceVar.useVoiceBuffer,g_voiceVar.voiceBufferType);
+
+
+
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open end!\n");
return DRV_SUCCESS;
@@ -2282,7 +2444,7 @@
ret = ecall_Close();
if (ret != DRV_SUCCESS)
{
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "ecall_Open error,ret=%d", ret);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:ecall_Close error,ret=%d",__func__,ret);
}
e_reg_flag = 0;
}
@@ -2305,6 +2467,12 @@
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",__FUNCTION__,timer_cb_count,first_full_flag,first_empty_flag,vb_read_count,vb_write_count);
#endif
+ if(g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = vp_Close_Vbuffer();
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Close_Vbuffer ret=%d!\n",ret);
+
+ }
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: ext_aRdCount %d,ext_aRdFBufCount %d!\n",__FUNCTION__,ext_aRdCount,ext_aRdFBufCount);
@@ -2337,176 +2505,185 @@
// {
// zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "is the i2s loopback mode");
// }
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = vp_VoiceI2sStart_Vbuffer();
+ }
+ else
+ {
+
#ifdef CONFIG_VOICE_BUFFER_DRV
- ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S2_Read_Start failed ret is %d .\n", ret);
- return DRV_ERROR;
- }
-
- zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart VB zOss_StartTimer\n");
+ ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S2_Read_Start failed ret is %d .\n", ret);
+ return DRV_ERROR;
+ }
+
+ zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart VB zOss_StartTimer\n");
- ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
+ ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
- ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
- return DRV_ERROR;
- }
- zOss_Memset(write_buf, 0, write_len);
- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error12:zDrvI2S_Write I2S_2 ret=%d", ret);
- }
-
- ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error13:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
- return DRV_ERROR;
- }
- zOss_Memset(write_buf, 0, write_len);
- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error14:zDrvI2S_Write I2S_2 ret=%d", ret);
- }
+ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error12:zDrvI2S_Write I2S_2 ret=%d", ret);
+ }
+
+ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error13:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ 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);
+ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
#else
- voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
#endif
#else
- if (g_voiceVar.isUseSlicCodec == 1)
- {
-
- if (s_speechState.i2sIsRstFlag == FALSE)
+ if (g_voiceVar.isUseSlicCodec == 1)
{
- ret = zDrvExtAudio_Reset();
- if (ret != DRV_SUCCESS)
+
+ if (s_speechState.i2sIsRstFlag == FALSE)
{
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvExtAudio_Reset() err ret=%d ", ret);
- return DRV_ERROR;
+ ret = zDrvExtAudio_Reset();
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvExtAudio_Reset() err ret=%d ", ret);
+ return DRV_ERROR;
+ }
+ s_speechState.i2sIsRstFlag = TRUE;
}
- s_speechState.i2sIsRstFlag = TRUE;
+
}
- }
+ ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S2_Read_Start failed ret is %d .\n", ret);
+ return DRV_ERROR;
+ }
- ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S2_Read_Start failed ret is %d .\n", ret);
- return DRV_ERROR;
- }
+ ret += zDrvExtAudio_Read_Start(&s_speechState.i2sReadParam, s_speechState.pVpI2sCfg, &s_vpTdmReadParam, s_vpState.pVpTdmCfg);
- ret += zDrvExtAudio_Read_Start(&s_speechState.i2sReadParam, s_speechState.pVpI2sCfg, &s_vpTdmReadParam, s_vpState.pVpTdmCfg);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S1_Read_Start failed ret is %d .\n", ret);
+ zDrvI2S_Read_Stop(I2S_2);
+ return DRV_ERROR;
+ }
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S1_Read_Start failed ret is %d .\n", ret);
- zDrvI2S_Read_Stop(I2S_2);
- return DRV_ERROR;
- }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read_Start ret=%d", ret);
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read_Start ret=%d", ret);
+ ret = zDrvI2S_Read(I2S_2, &read_buf, &read_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read I2S_2 ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read I2S_2 ret=%d", ret);
- ret = zDrvI2S_Read(I2S_2, &read_buf, &read_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read I2S_2 ret=%d", ret);
- return DRV_ERROR;
- }
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read I2S_2 ret=%d", ret);
+ ret = zDrvExtAudio_Read(&read_buf, &read_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read I2S_1 ret=%d", ret);
- ret = zDrvExtAudio_Read(&read_buf, &read_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read ret=%d", ret);
- return DRV_ERROR;
- }
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read I2S_1 ret=%d", ret);
+ ret += zDrvExtAudio_Read_Stop();
+ ret += zDrvI2S_Read_Stop(I2S_2);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read ret=%d", ret);
+ return DRV_ERROR;
+ }
- ret += zDrvExtAudio_Read_Stop();
- ret += zDrvI2S_Read_Stop(I2S_2);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read ret=%d", ret);
- return DRV_ERROR;
- }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart first read/write stop ret=%d", ret);
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart first read/write stop ret=%d", ret);
+ ret += zDrvExtAudio_Read_Start(&s_speechState.i2sReadParam, s_speechState.pVpI2sCfg, &s_vpTdmReadParam, s_vpState.pVpTdmCfg);
- ret += zDrvExtAudio_Read_Start(&s_speechState.i2sReadParam, s_speechState.pVpI2sCfg, &s_vpTdmReadParam, s_vpState.pVpTdmCfg);
+ ret += zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
- ret += zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
+ ret += zDrvExtAudio_Write_Start(&s_speechState.i2sWriteParam, s_speechState.pVpI2sCfg, &s_VpTdmWriteParam, s_vpState.pVpTdmCfg);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error4:zDrvI2S_Write_Start ret=%d", ret);
+ return DRV_ERROR;
+ }
+ ret += zDrvExtAudio_GetBuf(&write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error5:zDrvI2S_GetBuf ret=%d", ret);
+ return DRV_ERROR;
+ }
- ret += zDrvExtAudio_Write_Start(&s_speechState.i2sWriteParam, s_speechState.pVpI2sCfg, &s_VpTdmWriteParam, s_vpState.pVpTdmCfg);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error4:zDrvI2S_Write_Start ret=%d", ret);
- return DRV_ERROR;
- }
- ret += zDrvExtAudio_GetBuf(&write_buf, &write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error5:zDrvI2S_GetBuf ret=%d", ret);
- return DRV_ERROR;
- }
-
- zOss_Memset(write_buf, 0, write_len);
- ret += zDrvExtAudio_Write(write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error6:zDrvI2S_Write ret=%d", ret);
- return DRV_ERROR;
- }
- ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
- ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
- return DRV_ERROR;
- }
- zOss_Memset(write_buf, 0, write_len);
- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error8:zDrvI2S_Write I2S_2 ret=%d", ret);
- return DRV_ERROR;
- }
- ret += zDrvExtAudio_GetBuf(&write_buf, &write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error9:zDrvI2S_GetBuf ret=%d", ret);
- return DRV_ERROR;
- }
- zOss_Memset(write_buf, 0, write_len);
- ret += zDrvExtAudio_Write(write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error10:zDrvI2S_Write ret=%d", ret);
- return DRV_ERROR;
- }
- ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error11:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
- return DRV_ERROR;
- }
- zOss_Memset(write_buf, 0, write_len);
- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error12:zDrvI2S_Write I2S_2 ret=%d", ret);
- }
+ zOss_Memset(write_buf, 0, write_len);
+ ret += zDrvExtAudio_Write(write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error6:zDrvI2S_Write ret=%d", ret);
+ return DRV_ERROR;
+ }
+ ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
+ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error8:zDrvI2S_Write I2S_2 ret=%d", ret);
+ return DRV_ERROR;
+ }
+ ret += zDrvExtAudio_GetBuf(&write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error9:zDrvI2S_GetBuf ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret += zDrvExtAudio_Write(write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error10:zDrvI2S_Write ret=%d", ret);
+ return DRV_ERROR;
+ }
+ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error11:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error12:zDrvI2S_Write I2S_2 ret=%d", ret);
+ }
#endif
+ }
#ifdef ECALL_SUPPORT
if((g_voiceVar.audio_ctrlFlag.isUseEcall == 1)&&(e_reg_flag == 1))
{
@@ -2657,18 +2834,27 @@
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_VoiceWorkStop call voice_ToneMixerStop !\n");
g_voiceVar.vpI2sStatus = VP_I2S_OPEN;
-#ifdef CONFIG_VOICE_BUFFER_DRV
- //complete_all(&s_voice_completion);
- zOss_PutSemaphore(s_voiceRdSema);
- zOss_PutSemaphore(s_voiceWrSema);
- zOss_StopTimer(s_voiceTimerId);
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_VoiceWorkStop zOss_StopTimer\n");
-#else
- //zDrvI2s_RxRlsSemaBeforeStop(I2S_1);
- //zDrvI2s_TxRlsSemaBeforeStop(I2S_1);
- zDrvExtAudio_RlsAllSemaBeforeStop();
-#endif
+
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = zDrvVp_VoiceWorkStop_Vbuffer();
+ }
+ else
+ {
+#ifdef CONFIG_VOICE_BUFFER_DRV
+ //complete_all(&s_voice_completion);
+ zOss_PutSemaphore(s_voiceRdSema);
+ zOss_PutSemaphore(s_voiceWrSema);
+ zOss_StopTimer(s_voiceTimerId);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_VoiceWorkStop zOss_StopTimer\n");
+#else
+ //zDrvI2s_RxRlsSemaBeforeStop(I2S_1);
+ //zDrvI2s_TxRlsSemaBeforeStop(I2S_1);
+ zDrvExtAudio_RlsAllSemaBeforeStop();
+#endif
+ }
zDrvI2s_RxRlsSemaBeforeStop(I2S_2);
zDrvI2s_TxRlsSemaBeforeStop(I2S_2);
@@ -2736,10 +2922,19 @@
}
g_voiceVar.vpI2sStatus = VP_I2S_INUSE;
+
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = vp_VolteReadStart_Vbuffer();
+ }
+ else
+ {
#ifdef CONFIG_VOICE_BUFFER_DRV
- zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart zOss_StartTimer start\n");
-#endif
+ zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart zOss_StartTimer start\n");
+#endif
+ }
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart \n");
return DRV_SUCCESS;
@@ -2748,6 +2943,15 @@
SINT32 vp_VolteReadStop(VOID)
{
SINT32 ret = DRV_SUCCESS;
+
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = vp_VolteReadStop_Vbuffer();
+ return ret;
+ }
+
+
#ifdef CONFIG_VOICE_BUFFER_DRV
zOss_PutSemaphore(s_voiceRdSema);
#else
@@ -2844,46 +3048,54 @@
}
g_voiceVar.vpI2sStatus = VP_I2S_INUSE;
+
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ vp_VolteWriteStart_Vbuffer();
+ }
+ else
+ {
#ifdef CONFIG_VOICE_BUFFER_DRV
#ifdef _VBUFF_IN_MULTI_CORE
- voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
#else
- voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
#endif
#else
- ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error1:zDrvI2S_GetBuf I2S_1 ret=%d", ret);
- zDrvExtAudio_Write_Stop();
- return DRV_ERROR;
- }
- zOss_Memset(write_buf, 0, write_len);
- ret = zDrvExtAudio_Write(write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error2:zDrvI2S_Write I2S_1 ret=%d", ret);
- zDrvExtAudio_Write_Stop();
- return DRV_ERROR;
- }
- ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error3:zDrvI2S_GetBuf I2S_1 ret=%d", ret);
- zDrvExtAudio_Write_Stop();
- return DRV_ERROR;
- }
- zOss_Memset(write_buf, 0, write_len);
- ret = zDrvExtAudio_Write(write_buf, write_len);
- if (ret != DRV_SUCCESS)
- {
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error4:zDrvI2S_Write I2S_1 ret=%d", ret);
- zDrvExtAudio_Write_Stop();
- return DRV_ERROR;
- }
+ ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error1:zDrvI2S_GetBuf I2S_1 ret=%d", ret);
+ zDrvExtAudio_Write_Stop();
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret = zDrvExtAudio_Write(write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error2:zDrvI2S_Write I2S_1 ret=%d", ret);
+ zDrvExtAudio_Write_Stop();
+ return DRV_ERROR;
+ }
+ ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error3:zDrvI2S_GetBuf I2S_1 ret=%d", ret);
+ zDrvExtAudio_Write_Stop();
+ return DRV_ERROR;
+ }
+ zOss_Memset(write_buf, 0, write_len);
+ ret = zDrvExtAudio_Write(write_buf, write_len);
+ if (ret != DRV_SUCCESS)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error4:zDrvI2S_Write I2S_1 ret=%d", ret);
+ zDrvExtAudio_Write_Stop();
+ return DRV_ERROR;
+ }
#endif
- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart \n");
+ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart end\n");
return DRV_SUCCESS;
}
@@ -2891,6 +3103,13 @@
SINT32 vp_VolteWriteStop(VOID)
{
SINT32 ret = DRV_SUCCESS;
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = vp_VolteWriteStop_Vbuffer();
+ return ret;
+ }
+
+
#ifdef CONFIG_VOICE_BUFFER_DRV
//complete_all(&s_voice_completion);
@@ -2961,6 +3180,11 @@
//UINT8 *pVoiceTempBuf = s_voiceTempBuffer;
#endif
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = vp_WriteDataToCodec_Vbuffer(pBuf, count);
+ return ret;
+ }
if (pBuf == NULL)
@@ -3285,6 +3509,14 @@
UINT8 *ptemp8bit = NULL;
#endif
+ if (g_voiceVar.useVoiceBuffer == 1)
+ {
+ ret = vp_ReadDataFromCodec_Vbuffer(pBuf, count);
+ return ret;
+ }
+
+
+
if (pBuf == NULL)
{
return DRV_ERR_INVALID_PARAM;
@@ -3313,6 +3545,8 @@
// 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
@@ -3911,11 +4145,14 @@
SINT32 vp_CreateThreadSemaph(VOID)
{
+ SINT32 ret = 0;
+
s_vpState.vpSemaphore = zOss_CreateSemaphore("VpI2sReadWriteSemaphore", 0);
#ifdef _USE_WEBRTC_AUD
s_vpState.vpThread = zOss_CreateThread("vp_DataProcessThreadEntry", vp_DataProcessThreadEntry, 0, 8192, 15, 0, 1);
#else
- s_vpState.vpThread = zOss_CreateThread("vp_DataProcessThreadEntry", vp_DataProcessThreadEntry, 0, 1024, 15, 0, 1);
+ //s_vpState.vpThread = zOss_CreateThread("vp_DataProcessThreadEntry", vp_DataProcessThreadEntry, 0, 1024, 15, 0, 1);
+ s_vpState.vpThread = zOss_CreateThread("vp_DataProcessThreadEntry", vp_DataProcessThreadEntry, 0, 8192, 15, 0, 1);
#endif
#ifdef _OS_TOS
@@ -3937,6 +4174,9 @@
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create vp Thread sem err s_vpState.vpThread=%p,s_vpState.vpSemaphore=%p !\r\n", s_vpState.vpThread, s_vpState.vpSemaphore);
return DRV_ERROR;
}
+
+
+
#ifdef CONFIG_VOICE_BUFFER_DRV
// init_completion(&s_voice_completion);
s_voiceRdSema = zOss_CreateSemaphore("voice_rx_sem", 0);
@@ -3959,50 +4199,57 @@
return DRV_ERROR;
}
#ifdef _VBUFF_IN_MULTI_CORE
- SINT32 ret = 0;
+ //SINT32 ret = 0;
- //ret = zDrvRpMsg_CreateChannel(IPC_MSG_ACTOR_A9,channel_41,0x10);
- ret = zDrvRpMsg_CreateChannel_Cap(RPMSG_CAP_ID,channel_41,0x10);
+ //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;
- }
+ 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);
- 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
+ }
+ 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 *)(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[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));
- 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
+
+#else
+ //flag ctrl voicebuffer func
+ vp_CreateThreadSemaph_Vbuffer();
+
+
#endif
-
+
+
zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_CreateThreadSemaph success. \r\n");
return DRV_SUCCESS;
}