blob: a8e8e234702bf043dc18a214f2d6095b576f6679 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/*******************************************************************************
2 * Copyright (C) 2007, ZTE Corporation.
3 *
4 * File Name: Drvs_voiceprocess.h
5 * File Mark:
6 * Description: Provide the interface of using vp
7 * Others:
8 * Version: V0.5
9 * Author: lvwenhua
10 * Date: 2012-06-13
11 * History 1:
12 * Date:
13 * Version:
14 * Author:
15 * Modification:
16 * History 2:
17 ********************************************************************************/
18#ifndef _DRVS_VP_H
19#define _DRVS_VP_H
20
21#include "drvs_i2s.h"
22#include "drvs_tdm.h"
23#include "drvs_volte.h"
24#include "drvs_rpmsg.h"
25#include "NvParam_drv.h"
26
xf.lia7d2a2b2025-02-10 01:44:22 -080027#include "pub_debug_info.h"
28
lh9ed821d2023-04-07 01:36:19 -070029#define VOICE_TONE_MIXER_FUNCTION
30//#define TEST_WHITE_NOISE
31typedef enum
32{
33 VP_I2S_IDLE = 0,
34 VP_I2S_OPEN,
35 VP_I2S_INUSE,
36 VP_LOOP_ON
37} T_Vp_I2sStatus;
38
39/* Voice process channel selection. */
40typedef enum
41{
42 VP_PATH_HANDSET = 0,
43 VP_PATH_SPEAKER,
44 VP_PATH_HEADSET,
45 VP_PATH_BLUETOOTH,
46 VP_PATH_BLUETOOTH_NO_NR,
47 VP_PATH_HSANDSPK,
48
49 VP_PATH_OFF = 255,
50
51 MAX_VP_PATH = VP_PATH_OFF
52} T_ZDrv_VpPath;
53
54typedef enum
55{
56 VP_VOL_0 = 0,
57 VP_VOL_1,
58 VP_VOL_2,
59 VP_VOL_3,
60 VP_VOL_4,
61 VP_VOL_5,
62 VP_VOL_6,
63 VP_VOL_7,
64 VP_VOL_8,
65 VP_VOL_9,
66 VP_VOL_10,
67 VP_VOL_11,
68
69 MAX_VP_VOL
70} T_ZDrv_VpVol;
71
72typedef enum
73{
74 VP_FS_8000 = 0, ///< 8k sampling rate
75 VP_FS_11025 = 1, ///< 11.025k sampling rate
76 VP_FS_12000 = 2, ///< 12k sampling rate
77 VP_FS_16000 = 3, ///< 16k sampling rate
78 VP_FS_22050 = 4, ///< 22.050k sampling rate
79 VP_FS_24000 = 5, ///< 24k sampling rate
80 VP_FS_32000 = 6, ///< 32k sampling rate
81 VP_FS_44100 = 7, ///< 44.1k sampling rate
82 VP_FS_48000 = 8, ///< 48k sampling rate
83 MAX_VP_FS = 9 ///< Max sampling rate count
84
85} T_ZDrv_VpFs;
86
87typedef enum
88{
89 VP_DTMF_KEY_0 = 0,
90 VP_DTMF_KEY_1,
91 VP_DTMF_KEY_2,
92 VP_DTMF_KEY_3,
93 VP_DTMF_KEY_4,
94 VP_DTMF_KEY_5,
95 VP_DTMF_KEY_6,
96 VP_DTMF_KEY_7,
97 VP_DTMF_KEY_8,
98 VP_DTMF_KEY_9,
99 VP_DTMF_KEY_10, /* * */
100 VP_DTMF_KEY_11, /* # */
101
102 MAX_VP_DTMF_KEY
103} T_ZDrv_VpDtmfKey;
104
105
106//typedef T_ZDrvVolte_Cfg T_ZDrvVp_Cfg
107typedef struct
108{
109 char* pPresetRx;
110 unsigned long PresetLengthRx;
111 char* pPresetTx;
112 unsigned long PresetLengthTx;
113} zDrvVp_NxpParamsTool;
114
115typedef struct
116{
117 char* pPresetRx;
118 unsigned long PresetLengthRx;
119 char* pPresetTx;
120 unsigned long PresetLengthTx;
121} zDrvVp_ParamsTool;
122
123typedef enum
124{
125 VP_VOICE_SOURCE ,
126 VP_AUDIO_SOURCE ,
127 VP_FM_SOURCE ,
128 VP_EXTERN_AUDIO,
129 VP_SOURCE_MAX
130} T_ZDrvVp_SourceType;
131
132/* 0 lowpower;1 sms;2 call standard;3 alarm beep;*/
133typedef enum
134{
135 VP_LOWPOWER_TONE ,
136 VP_SMS_TONE ,
137 VP_CALLSTD_TONE ,
138 VP_ALARM_TONE,
139 VP_CALL_TIME_TONE,
140 VP_0_KEY_TONE,
141 VP_1_KEY_TONE,
142 VP_2_KEY_TONE,
143 VP_3_KEY_TONE,
144 VP_4_KEY_TONE,
145 VP_5_KEY_TONE,
146 VP_6_KEY_TONE,
147 VP_7_KEY_TONE,
148 VP_8_KEY_TONE,
149 VP_9_KEY_TONE,
150 VP_HASH_KEY_TONE, //#
151 VP_ASTERRIX_KEY_TONE, //*
152 VP_RESERVED1_TONE,
153 VP_RESERVED2_TONE,
154 VP_RESERVED3_TONE,
155 VP_RESERVED4_TONE,
156 VP_RESERVED5_TONE,
157 VP_RESERVED6_TONE,
158 VP_TONE_MAX
159} T_ZDrvVp_ToneNum;
160typedef struct _T_HalMixerToneInfo
161{
162 BOOL StartMixer;/*mixer flag TRUE start, FALSE stop;*/
163 BOOL dataIsWb;/* TRUE wb, FALSE nb, for voice mixer;*/
164 UINT32 cur_tone_fcount;/*tone data already processed count*/
165 UINT32 tone_total_size;/*tone data total size,unit 2byte*/
166 UINT32 inter_mixer_fcount;/*inter ,tone_size/data_mixer_oncesize*/
167 UINT32 rem_mixer_count;/*remainder , tone_size%data_mixer_oncesize*/
168 UINT16 *ptdata_mixer;/* tone data array pointer */
169 UINT32 data_mixer_oncesize;/*the size of a data processing, unit 2byte*/
170} T_HalMixerToneInfo;
171
172typedef struct _T_HalAudioLoopTestInfo
173{
174 BOOL startLoopTest;/*audo loop test flag TRUE start, FALSE stop;*/
175 UINT32 fs;/*tone data real frequence*/
176 UINT32 sampFs;/*tone data sample frequence*/
177 UINT8 *ptdata;/* audo loop test data array pointer */
178 UINT32 totalSize;/*tone data total size,unit 2byte*/
179 T_ZDrv_VpVol outpathvol[4];
180
181} T_HalAudioLoopTestInfo;
182typedef struct _T_HalAudioLoopTestPra
183{
184 UINT8 *src;/*tone data frequence*/
185 UINT8 *dest;/*tone data sample frequence*/
186 UINT32 sampfs;
187
188} T_HalAudioLoopTestPra;
xf.lice873192023-11-08 17:10:35 -0800189
xf.lice873192023-11-08 17:10:35 -0800190typedef enum
191{
192 ECALL_ST_INIT = 0,
xf.lif1aed282024-02-06 00:31:51 -0800193 ECALL_ST_OPEN,//1
194 ECALL_ST_START,//2
195 ECALL_ST_IDLE,//3
196 ECALL_ST_RX_IDLE,//4
197 ECALL_ST_TX_IDLE,//5
198 ECALL_ST_INUSE,//6
199 ECALL_ST_RX_INUSE,//7
200 ECALL_ST_TX_INUSE,//8
201 ECALL_ST_STOP,//9
202 ECALL_ST_CLOSE,//10
xf.lice873192023-11-08 17:10:35 -0800203 ECALL_ST_MAX
204} T_Ecall_State;
205
206
207typedef struct
208{
209 T_DrvEcall_Opt opt;
210 ZOSS_TIMER_ID timerId ;
211 ZOSS_SEMAPHORE_ID wrSemaphore;
212 ZOSS_SEMAPHORE_ID rdSemaphore;
213 T_Ecall_State ecallSta;
xf.lif1aed282024-02-06 00:31:51 -0800214 T_Ecall_State ecallRxSta;//two state,idle/inuse
215 T_Ecall_State ecallTxSta;//two state,idle/inuse
xf.lice873192023-11-08 17:10:35 -0800216 unsigned char* rxDataBuf;
217 unsigned char* txDataBuf;
218 int dataBufSize;
219
220} T_Hal_EcallData;
xf.lice873192023-11-08 17:10:35 -0800221
lh9ed821d2023-04-07 01:36:19 -0700222typedef struct
223{
224 //use for vp data process
225 UINT8* pVpTempRxInBuffer; //pVpRxInBuffer
226 UINT8* pVpTempTxInBuffer; //pVpTxInBuffer
227 UINT8* pVpTempRxOutPutBuffer;//pVpRxOutPutBuffer
228 UINT8* pVpTempTxOutPutBuffer;//pVpTxOutPutBuffer
229
230 T_ZDrvI2S_Cfg *pVpI2sCfg; //i2s cfg
231
232 T_ZDrvVp_Cfg vpCfgParam; //s_cfgParam
233
234 T_ZDrvI2s_Params i2sWriteParam; //s_VpI2sWriteParam
235 T_ZDrvI2s_Params i2sReadParam; //s_vpI2sReadParam
236
237 UINT32 frameCount; //s_vpFrameCount
238 UINT32 totalFrameBufSize; //s_vpTotalFrameBufSize
239 UINT32 inOutBufUseSize; //s_inOutBufUseSize
240 UINT32 rxSaveLen; //s_rxSaveLen
241 UINT32 txSaveLen; //s_txSaveLen
242 UINT32 saveLen; //save_len
243
244 UINT8 pcmSlotNum; //s_vpPcmSlotNum
245 UINT8 pcmWbSecDataPosition; //s_vpPcmWbSecDataPosition
246
247 UINT8 volteVpWriteStopFlag;//s_volteVpWriteStopFlag
248 UINT8 volteVpReadStopFlag;//s_volteVpReadStopFlag
249 UINT8 volteVpCfgEnFlag; // s_volteVpCfgEnFlag
250 BOOL firstWriteDataFlag;//s_firstWriteDataFlag
251 BOOL firstReadDataFlag;//s_firstReadDataFlag
252 BOOL i2sIsRstFlag;//s_i2sIsRstFlag
253} T_zDrvVp_SpeechState; // T_zDrvVp_SpeechState
254
255typedef struct
256{
xf.libdd93d52023-05-12 07:10:14 -0700257 UINT8 volteIsWb; //1 g_volteIsWb
258 UINT8 isUseSlicCodec; //2 g_isUseSlicCodec
259 UINT8 g_isUseTdm; //3
lh9ed821d2023-04-07 01:36:19 -0700260//for voice data process
xf.libdd93d52023-05-12 07:10:14 -0700261 UINT8 voiceInGsmTdMode; //4 g_voiceInGsmTdMode
262 UINT8 voiceInVolteMode; //5 g_voiceInVolteMode
lh9ed821d2023-04-07 01:36:19 -0700263
xf.libdd93d52023-05-12 07:10:14 -0700264 BOOL innerI2sIsMaster;//6 arm i2s2 g_innerI2sIsMaster
265 BOOL innerI2sIsI2sMode; //7 g_innerI2sIsI2sMode
266 BOOL vpLoopRuning; //8 g_vpLoopRuning
267 BOOL muteEn; //9 g_vpMuteEn
268 //BOOL nxpIsNormal; //10 g_vpNxpIsNormal
269 BOOL vProcIsNormal; //11 voice processing is normal flag
270 T_Vp_I2sStatus vpI2sStatus; //12 VpI2sStatus
lh9ed821d2023-04-07 01:36:19 -0700271
xf.libdd93d52023-05-12 07:10:14 -0700272 T_ZDrv_VpPath vpPath;//13 VP_PATH_HEADSET;//VP_PATH_SPEAKER; //VP_PATH_HANDSET; g_vpPath
273 T_ZDrv_VpPath vpLoopPath; //14 g_vpLoopPath
274 T_ZDrv_VpVol vpVol; //15 g_vpVol
275 T_ZDrvVoice_MODE voiceMode; //16 g_vpVoiceMode
276 SINT8 vpInitGain; //17 s_vpInitGain
277 T_Audio_NvFlag audio_ctrlFlag;//18 USE 32byte
lh9ed821d2023-04-07 01:36:19 -0700278
xf.libdd93d52023-05-12 07:10:14 -0700279 UINT8 dtmfDirSel;//19
280 UINT32 sample_rate;//20
281 UINT8 useDtmfLoop;//21
282 SINT32 muteCount;//22 mute_count
lh758261d2023-07-13 05:52:04 -0700283 BOOL vpLoopBkRunning;//23
284 BOOL rxMuteEn; //24
xf.liaa4d92f2023-09-13 00:18:58 -0700285 BOOL firstRegZCATFlag; //25
xf.lice873192023-11-08 17:10:35 -0800286 T_Hal_EcallData ecallData;//26
xf.li7ccf8372024-03-07 00:08:02 -0800287 UINT8 voice_nv_update;//27
xf.lidf7f8ba2024-09-12 23:53:34 -0700288 UINT8 useVoiceBuffer; // 0 not use,1 use
289 UINT8 voiceBufferType; //0 single core, 1 dual core
290
291
lh9ed821d2023-04-07 01:36:19 -0700292} T_zDrvVoice_GbVar; //T_zDrvVoice_GbVar
293
294typedef struct
295{
296 //use for store memory address
297 UINT8* pVpRxInBuffer; //s_pVpRxInBuffer
298 UINT8* pVpTxInBuffer; //s_pVpTxInBuffer
299 UINT8* pVpRxOutPutBuffer; //s_pVpRxOutPutBuffer
300 UINT8* pVpTxOutPutBuffer; //s_pVpTxOutPutBuffer
301
302 UINT32 inOutBufSize; //s_inOutBufSize
303
304 T_ZDrvI2S_Cfg *pVpInnerI2sCfg; //s_pVpInnerI2sCfg
305 T_ZDrvI2S_Cfg *pVpExtI2sCfg; //s_pVpExtI2sCfg
306 T_ZDrvI2S_Cfg *pVpExtI2sWbCfg; //s_pVpExtI2sWbCfg
307 T_ZDrvTdm_Cfg *s_pVpTdmCfg;
308 T_ZDrvTdm_Cfg *s_pVpTdmWbCfg;
309 T_ZDrvTdm_Cfg *pVpTdmCfg;
310
311 T_ZDrvRpMsg_Msg pMsg;
312 SINT32 pMsgBuf[2];
313 //SINT32 muteCount;//mute_count
314
315 ZOSS_THREAD_ID vpThread ; //s_VpThread
316 ZOSS_THREAD_ID rcvDtmfThread ; //s_rcvDtmfThread
317 ZOSS_SEMAPHORE_ID vpSemaphore; //s_VpSemaphore
318 ZOSS_SEMAPHORE_ID vpThreadQuitSema;
319
320 ZOSS_THREAD_ID vpLoopThread; //s_VpLoopThread
321 ZOSS_SEMAPHORE_ID vpLoopSemaphore; //s_VpLoopSemaphore
322
323 T_zDrvVp_SpeechState *vpState;
324// T_zDrvVoice_GbVar wrapVpGbVar;
325} T_zDrvVp_State; //T_zDrvVp_State
326
327SINT32 zDrvVp_SetPath(T_ZDrv_VpPath path);
328SINT32 zDrvVp_SetVol(T_ZDrv_VpVol volume);
329SINT32 zDrvVp_SetGain(SINT32 vgain, UINT32 channel);
330/* 0 lowpower;1 sms;2 call standard;3 alarm beep;*/
331SINT32 zDrvVp_ToneMixerStart(T_ZDrvVp_ToneNum toneNum);
332SINT32 zDrvVp_SetMute(UINT32 enable, UINT32 channel);
333SINT32 zDrvVp_RcdOnOff(UINT32 on);
334SINT32 zDrvVp_DtmfTone(UINT32 Num);
335SINT32 zDrvVp_Loop(T_ZDrv_VpPath path);
336SINT32 zDrvVp_RingStart(VOID);
337SINT32 zDrvVp_RingStop(VOID);
338VOID zDrvVp_SetUseSlicFlag(BOOL useSlic);
339SINT32 zDrvVp_NxpSetParam(zDrvVp_NxpParamsTool *NxpParamsTool);
340SINT32 zDrvVp_NxpGetParam(zDrvVp_NxpParamsTool *NxpParamsTool);
341SINT32 zDrvVp_SetFmPath(T_ZDrv_VpPath path, BOOL enable);
342SINT32 zDrvVp_SetParam(zDrvVp_ParamsTool *paramsTool);
343SINT32 zDrvVp_GetParam(zDrvVp_ParamsTool *paramsTool);
344SINT32 zDrvVp_SetNvParam(zDrvVp_ParamsTool *paramsTool);
345SINT32 zDrvVp_GetNvParam(zDrvVp_ParamsTool *paramsTool);
346
347
348#endif