change source file mode to 0644 instead of 0755
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / include / asm / arch-tiger / dal_audio.h
1 /******************************************************************************
2  ** File Name:      audio.h                                                   *
3  ** Author:         Xueliang.Wang                                             *
4  ** DATE:           05/10/2004                                                *
5  ** Copyright:      2004 Spreatrum, Incoporated. All Rights Reserved.         *
6  ** Description:    This file define all audio interface.                     *
7  ******************************************************************************
8
9  ******************************************************************************
10  **                        Edit History                                       *
11  ** ------------------------------------------------------------------------- *
12  ** DATE           NAME             DESCRIPTION                               *
13  ** 05/10/2004     Xueliang.Wang    Create                                    *
14  ******************************************************************************/
15 #ifndef _AUDIO_H
16 #define _AUDIO_H
17
18 #include "os_api.h"
19 #include "audio_api.h"
20
21 /**---------------------------------------------------------------------------*
22  **                         Dependencies                                      *
23  **---------------------------------------------------------------------------*/
24
25 /**---------------------------------------------------------------------------*
26  **                         Compiler Flag                                     *
27  **---------------------------------------------------------------------------*/
28 #ifdef __cplusplus
29     extern   "C"
30     {
31 #endif
32
33 /**---------------------------------------------------------------------------*
34  **                         Constant Variables                                *
35  **---------------------------------------------------------------------------*/
36 typedef enum
37 {
38     AUD_DTMF_One,           // 1
39     AUD_DTMF_Two,           // 2
40     AUD_DTMF_Three,         // 3
41     AUD_DTMF_letterA,       // A
42     AUD_DTMF_Four,          // 4
43     AUD_DTMF_Five,          // 5
44     AUD_DTMF_Six,           // 6
45     AUD_DTMF_letterB,       // B
46     AUD_DTMF_Seven,         // 7
47     AUD_DTMF_Eight,         // 8
48     AUD_DTMF_Nine,          // 9
49     AUD_DTMF_letterC,       // C
50     AUD_DTMF_Star,          // *
51     AUD_DTMF_Zero,          // 0
52     AUD_DTMF_Pond,          // #
53     AUD_DTMF_letterD,       // D
54     AUD_DTMF_MAX_ID         // Reserved, user can't use it.
55 } AUD_DTMF_TONE_ID_E;
56  
57 typedef struct
58 {
59     uint16 UL_equalizer_coeff[33];
60     uint16 DL_equalizer_coeff[33];
61    
62
63     uint16 UL_PGA_gain;
64     uint16 DL_PGA_gain;
65   
66     uint16 UL_digital_gain;
67     uint16 DL_digital_gain;
68
69     uint16 UL_digital_scale;
70     uint16 DL_digital_scale;
71
72     uint16 midi_PGA_gain_base;
73     uint16 digital_sidetone_gain;
74
75     uint16 DL_IIR1_coeff[6];
76     uint16 DL_IIR2_coeff[6];
77
78     uint16 reserved[2];
79 } AUDIO_TEST_DATA_T;
80
81
82  
83 #define AUD_PLAY_FOREVER            0xFFFFFFFF
84
85 // Volume of max value.
86 #define AUD_MAX_MIC_VOLUME          9
87 #define AUD_MAX_SPEAKER_VOLUME      9
88 #define AUD_MAX_SIDE_TONE_GAIN      10
89
90 //background music level
91 #define  AUD_BKMUSIC_LOWEST_LEVEL       0  //0:mute
92 #define  AUD_BKMUSIC_HIGHEST_LEVEL      5  
93 #define  AUD_BKMUSIC_TOTAL_LEVEL        6  
94 // Echo test callback function.
95 typedef void (*AUD_ECHOCALLBACK_PFUNC)(uint32);
96
97 // Audio error value.
98 typedef enum
99 {
100     ERR_AUD_NONE,
101     ERR_AUD_PARAM,               // Input parameters is error.
102     ERR_AUD_CONFLICT,            // It's playing ring or midi now, don't handle tone.
103     ERR_AUD_MAX                  // Reserved, user can't use it.
104 } ERR_AUD_E;
105
106
107 // Audio type.
108 typedef enum
109 {
110     AUD_TYPE_CUSTOM_TONE,
111     AUD_TYPE_DTMF_TONE,
112     AUD_TYPE_GENERIC_TONE,
113     AUD_TYPE_RING,
114     AUD_TYPE_VOICE,
115     AUD_TYPE_RECORD,    
116     AUD_TYPE_MAX            // Reserved, user can't use it.
117 } AUD_TYPE_E;
118
119 // Generic tone ID.
120 typedef enum 
121 {
122     AUD_GENERIC_PRESS_KEY_TONE,
123     AUD_GENERIC_WARNING_TONE,
124     AUD_GENERIC_BATT_WARNING_TONE,
125     AUD_GENERIC_DIAL_TONE,
126     AUD_GENERIC_CONGESTION_TONE,
127     AUD_GENERIC_SUBSCRIBER_BUSY_TONE,
128     AUD_GENERIC_SPECIAL_DIAL_TONE,
129     AUD_GENERIC_SV_CALL_WAITING_TONE,
130     AUD_GENERIC_SV_RADIO_PATH_ACK_TONE,
131     AUD_GENERIC_SV_RADIO_PATH_NOT_AVAIL_TONE,
132     AUD_GENERIC_SV_ERROR_INFO_TONE,
133     AUD_GENERIC_INFO_FREE_TONE,
134
135     // User could add new at here.
136     // ......
137     
138         AUD_GENERIC_TONE_ID_MAX     // Reserved, user can't use it.
139 } AUD_GENERIC_TONE_ID_E;
140
141 // Audio ring data type.
142 typedef enum
143 {
144     AUD_MIDI_RING,          // File format: 
145                             //  General Midi file format
146                                                         
147     AUD_SINGLE_TONE_RING,   // File format(in BigEndian): 
148                             //  uint16(type),       // AUD_SINGLE_TONE_RING
149                             //  uint16(data_len),   // Number of bytes of ring data
150                             //  uint16(freq),   uint16(duration millisecond),
151                             //  uint16(freq),   uint16(duration millisecond),
152                             //  ......
153                             //  uint16(freq),   uint16(duration millisecond)
154                                                         
155                             // Note: duration = 0xFFFF, means play for ever.
156                                             
157     AUD_DUAL_TONE_RING,     // File format(in BigEndian):
158                             //  uint16(type),       // AUD_DUAL_TONE_RING
159                             //  uint16(data_len),   // Number of bytes of ring data
160                             //  uint16(freq1),  uint16(freq2),  uint16(duration millisecond),
161                             //  uint16(freq1),  uint16(freq2),  uint16(duration millisecond),
162                             //  ......
163                             //  uint16(freq1),  uint16(freq2),  uint16(duration millisecond)
164                             
165     AUD_TRIPLE_TONE_RING,   // File format(in BigEndian):
166                             //  uint16(type),       // AUD_TRIPLE_TONE_RING
167                             //  uint16(data_len),   // Number of bytes of ring data
168                             //  uint16(freq1),  uint16(freq2),  uint16(freq3),  uint16(duration millisecond),
169                             //  uint16(freq1),  uint16(freq2),  uint16(freq3),  uint16(duration millisecond),
170                             //  ......
171                             //  uint16(freq1),  uint16(freq2),  uint16(freq3),  uint16(duration millisecond)
172
173     AUD_SMAF_RING,          // File format:
174                             //  Defined by Yamaha.
175                             
176     AUD_WAVE_RING,          // File format:
177                             //  wave sound 16bit samples data ,sound sampling rate is 16k                            
178                             
179     AUD_MP3_RING,               // File format:
180                             //  mp3
181     
182     AUD_AMR_RING,           // File format
183                             // AMR_NB
184     AUD_RING_TYPE_MAX       // Reserved, user can't use it.
185 } AUD_RING_TYPE_E;
186
187 // definition of type of background music volume  .
188 typedef enum
189 {
190     AUD_BKMUSIC_BOTH_INVALID,/*both uplink and downlink paras are invalid*/
191     AUD_BKMUSIC_UPLINK_VALID,        /*uplink para is valid*/
192     AUD_BKMUSIC_DOWNLINK_VALID,  /*downlink para is valid*/
193     AUD_BKMUSIC_BOTH_VALID,           /*both uplink and downlink paras are valid*/
194     AUD_BKMUSIC_PARAM_TYPE_MAX   /* Reserved, user can't use it.*/
195 } AUD_BKMUSIC_PARAM_TYPE_E; 
196
197 typedef enum
198 {
199     AUD_WAV_ADPCM,
200     AUD_WAV_MAX
201 }AUD_WAV_TYPE_E;
202
203 typedef enum
204 {
205     AUD_EQ_NORMAL = 0x0,
206     AUD_EQ_BASS,
207     AUD_EQ_ALT,
208     AUD_EQ_SPECIAL
209 }AUD_EQ_TYPE_E;
210
211
212 typedef struct AUD_SINGLE_TONE_tag
213 {
214     uint16  freq;
215     uint16  duration;           // Number of milliseconds
216 } AUD_SINGLE_TONE_T;
217
218 typedef struct AUD_DUAL_TONE_tag
219 {
220     uint16  freq1;
221     uint16  freq2;
222     uint16  duration;           // Number of milliseconds
223 } AUD_DUAL_TONE_T;
224
225 typedef struct AUD_TRIPLE_TONE_tag
226 {
227     uint16  freq1;
228     uint16  freq2;
229     uint16  freq3;
230     uint16  duration;           // Number of milliseconds
231 } AUD_TRIPLE_TONE_T;
232
233 typedef struct AUD_RING_DATA_INFO_tag
234 {
235     AUD_RING_TYPE_E type;
236     uint8           name[32];
237     uint32          data_len;  
238         const uint8        *data_ptr;
239 } AUD_RING_DATA_INFO_T;
240
241 enum aud_stereo_mode 
242 {
243     AUD_STEREO                  = 0,    // dual channel 
244     AUD_NON_STEREO              = 1             // single channel 
245 };
246
247 typedef enum
248 {
249         MIDI_PLAY   = 1,
250         MP3_PLAY        = 2,
251         WAV_PLAY        = 3,
252         MP4_PLAY        = 4
253 } AUD_MSG_SERVICE_E;
254
255 typedef enum
256 {
257         AUD_REC_PCM= 0x0,
258         AUD_REC_FS, 
259         AUD_REC_EFS,
260         AUD_REC_AMR,
261         AUD_REC_ADPCM,
262         AUD_REC_DSP_DATA_MIN, //=5  
263         AUD_REC_DSP_DATA_1 = AUD_REC_DSP_DATA_MIN,//=5
264         AUD_REC_DSP_DATA_2, //=6
265         AUD_REC_DSP_DATA_3, //=7
266         AUD_REC_DSP_DATA_4, //=8
267         AUD_REC_DSP_DATA_5, //=9
268         AUD_REC_DSP_DATA_6, //=10
269         AUD_REC_DSP_DATA_7, //=11
270         AUD_REC_DSP_DATA_8, //=12
271         AUD_REC_DSP_DATA_9, //=13
272         AUD_REC_DSP_DATA_10, //=14
273         AUD_REC_DSP_DATA_11, //=15
274         AUD_REC_DSP_DATA_12, //=16
275         AUD_REC_DSP_DATA_13, //=17
276         AUD_REC_DSP_DATA_14, //=18
277         AUD_REC_DSP_DATA_15, //=19
278         AUD_REC_DSP_DATA_MAX = AUD_REC_DSP_DATA_15,
279         AUD_REC_DSP_LOG,    //20
280         AUD_REC_FORMAT_MAX 
281 }AUD_REC_FORMAT_E; 
282
283
284 typedef enum 
285 {
286         MR475 = 0,/*4.75kbps*/
287         MR515, 
288         MR59,
289         MR67,
290         MR74,
291         MR795,
292         MR102,
293         MR122, 
294         MRDTX,
295         N_MODES     /* number of (SPC) modes */
296 }AMR_MODE; //amr encode mode
297
298 typedef enum
299 {
300     REC_BY_DSPVB = 0,
301     REC_BY_ARMVB,
302     REC_BY_PERIPHERAL,
303     AUD_REC_DEV_TYPE_MAX
304 }AUD_REC_DEV_TYPE_E;
305 /**---------------------------------------------------------------------------*
306  **                         Data Structures                                   *
307  **---------------------------------------------------------------------------*/
308 /**---------------------------------------------------------------------------*
309  **                         Function Prototypes                               *
310  **---------------------------------------------------------------------------*/
311 /*****************************************************************************/
312 //  Description:    This function plays generic tone.
313 //  Author:         Xueliang.Wang
314 //      Note:           This function does nothing if it is called when playing
315 //                  Ring.
316 /*****************************************************************************/
317 PUBLIC ERR_AUD_E AUD_PlayGenericTone(   // If succeed, return ERR_AUD_NONE,
318                                         // else return error value
319     AUD_GENERIC_TONE_ID_E tone_id,      // Generic tone enumeration value.
320     uint32  duration    // Number of milliseconds of playing this tone.
321     );
322
323 /*****************************************************************************/
324 //  Description:    This function stops playing generic tone.
325 //  Author:         Xueliang.Wang
326 //      Note:           
327 /*****************************************************************************/
328 PUBLIC ERR_AUD_E AUD_StopGenericTone(void); // If succeed, return ERR_AUD_NONE,
329                                             // else return error value
330             
331 /*****************************************************************************/
332 //  Description:    This function is used to set voice codec enable/disable.
333 //  Author:         Xueliang.Wang
334 //      Note:           
335 /*****************************************************************************/
336 PUBLIC ERR_AUD_E AUD_EnableVoiceCodec(  // If succeed, return ERR_AUD_NONE,
337                                         // else return error value
338     BOOLEAN is_enable                   // SCI_TRUE: Enable,   SCI_FALSE: Disable
339     );
340
341
342 /*****************************************************************************/
343 //  Description:    This function is used to set engineering audio parameters.
344 //  Author:         Xueliang.Wang
345 //      Note:           
346 /*****************************************************************************/
347 PUBLIC ERR_AUD_E AUD_SetEngineeringParameter(   // If succeed, return ERR_AUD_NONE,
348                                                 // else return error value
349     AUDIO_DEVICE_MODE_TYPE_E  parameter_type,
350     AUDIO_TEST_DATA_T  parameter_data
351
352
353     );
354     
355 /*****************************************************************************/
356 //  Description:    This function is used to enable/disable volice loopback 
357 //                  test.
358 //  Author:         Xueliang.Wang
359 //      Note:           
360 /*****************************************************************************/
361 PUBLIC ERR_AUD_E AUD_EnableVoiceLoopback(   // If succeed, return ERR_AUD_NONE,
362                                             // else return error value
363     BOOLEAN is_enable,      // 0: disable  1:enable
364     uint16  delay_time      // millisecones
365     );
366
367 /*****************************************************************************/
368 //  Description:    This function is used to get engineering audio parameters.
369 //  Author:         Sunsome.Ju
370 //      Note:           
371 /*****************************************************************************/
372 PUBLIC ERR_AUD_E AUD_GetEngineeringParameter(   // If succeed, return ERR_AUD_NONE,
373                                                 // else return error value
374     AUDIO_DEVICE_MODE_TYPE_E  parameter_type,
375     AUDIO_TEST_DATA_T *parameter_data
376     );
377
378
379 /*****************************************************************************/
380 //  Description:    This function is used to set midi playing frequency.
381 //  Author:         
382 //      Note:           
383 /*****************************************************************************/
384 PUBLIC void AUDIO_SetMidiPlayFreq(uint32 midi_play_freq);         
385
386 /*****************************************************************************/
387 //  Description:    This function is used to set whether the audio data is output by stereo mode.
388 //  Author:         BenjaminWang
389 //      Note:           
390 /*****************************************************************************/
391 PUBLIC void AUDIO_SetDataStereo(     // return void
392         BOOLEAN stereo_state      // SCI_TRUE - stereo on      SCI_FALSE - stereo off
393         );
394
395 /*****************************************************************************/
396 //  Description:    This function is used to know whether the audio data is output by stereo mode.
397 //  Author:         BenjaminWang
398 //      Note:           
399 /*****************************************************************************/
400 PUBLIC BOOLEAN AUDIO_GetDataStereo(void);     // return SCI_TRUE - stereo on    SCI_FALSE - stereo off
401
402 PUBLIC void AUD_EnableAmplifier(BOOLEAN bEnable);
403
404
405 /*****************************************************************************/
406 //  Description:    This function is used to turn on MICBIAS voltage.
407 //  Author:         Benjamin.Wang
408 //  Note:
409 //****************************************************************************/
410 void VB_TurnOnMICBIAS(void);
411
412 /*****************************************************************************/
413 //  Description:    This function is used to shut down MICBIAS voltage.
414 //  Author:         Benjamin.Wang
415 //  Note:
416 //****************************************************************************/
417 void VB_ShutDownMICBIAS(void);
418
419 //record call back function
420 typedef void (*RECORD_CALLBACK)(uint16 data_length);
421
422 //play call back function
423 typedef BOOLEAN (*PLAY_CALLBACK)();                                              
424
425 /*****************************************************************************/
426 //  Description:    This function is used to set voice codec enable/disable.
427 //  Author:         Jimmy.Jia
428 //      Note:           
429 /*****************************************************************************/
430 PUBLIC ERR_AUD_E AUD_EnableVoiceRecord(  // If succeed, return ERR_AUD_NONE,
431                                         // else return error value
432     BOOLEAN is_enable,                  // SCI_TRUE: Enable,   SCI_FALSE: Disable
433         AUD_REC_FORMAT_E recorder_format,
434         RECORD_CALLBACK callback_fun    
435     );
436
437 /*****************************************************************************/
438 //  Description:    This function config the amr parameters
439 //  Author:         yujun.ke
440 //      Note:           
441 /*****************************************************************************/
442
443 extern void AUD_CfgAmrParam( AMR_MODE amr_mode, uint8 channels, uint8 sample_rate );
444
445  /*****************************************************************************/
446 //  Description:    This function transmit the recorded data to uplayer buffer
447 //  Author:         yujun.ke
448 //      Note:           
449 /*****************************************************************************/
450 extern void AUD_ReadVoiceData( uint16 *destination_buf_ptr,uint16 data_length );
451
452  /*****************************************************************************/
453 //  Description:    This function start the play flow
454 //  Author:         yujun.ke
455 //      Note:           
456 /*****************************************************************************/
457 extern void AUD_StartPlay( AUD_REC_FORMAT_E voice_format,
458                                            PLAY_CALLBACK callback_fun,
459                                            BOOLEAN is_to_speaker,
460                                            BOOLEAN is_to_net
461                           );
462
463  /*****************************************************************************/
464 //  Description:    This function transmit data to downlayer for playing
465 //  Author:         yujun.ke
466 //      Note:           
467 /*****************************************************************************/
468 extern void AUD_WriteVoiceData (uint16 * source_buf_ptr,uint16 data_length);
469
470  /*****************************************************************************/
471 //  Description:    This function stop the paly process
472 //  Author:         yujun.ke
473 //      Note:           
474 /*****************************************************************************/
475 extern void AUD_StopPlay( void );
476  
477 /*****************************************************************************/
478 // Description: United operation for POP noise restrain.
479 // Author: Benjamin
480 // Note:           
481 /*****************************************************************************/
482 PUBLIC void AUD_DSPUnitedOperation(void);
483 /*****************************************************************************/
484 //  Description:    This function is used to set Audio Codec Output Data Type.      
485 /*****************************************************************************/
486 PUBLIC void AUD_SetOutputDataType(AUDIO_OUTPUT_DATA_TYPE_E eDataType);
487
488 /*****************************************************************************/
489 //  Description:    This function is used to get Audio Codec Output Data Type.      
490 /*****************************************************************************/
491 PUBLIC AUDIO_OUTPUT_DATA_TYPE_E AUD_GetOutputDataType(void);
492
493 /*****************************************************************************/
494 //  Description:    This function is used to config dsp trans samplerate param
495 /*****************************************************************************/
496 PUBLIC void AUD_Cfg_PcmTrans_Param(uint16 dest_samplerate);
497
498 /*****************************************************************************/
499 //  Description:    This function sets volume of background music.
500 //  Author:         Cherry.Liu
501 //      Note:           
502 /*****************************************************************************/
503 PUBLIC ERR_AUD_E AUD_SetBkMusicVolume (
504     AUD_BKMUSIC_PARAM_TYPE_E  eParamType,
505     uint16  uiUplinkLevel, 
506     uint16  uiDownlinkLevel
507 );
508 /*****************************************************************************/
509 //  Description:    This function eanble/disable earphone when power off.
510 //  Author:        
511 //      Note:           
512 /*****************************************************************************/
513 PUBLIC void AUD_Enable_Earphone(BOOLEAN bEnable);
514 /*****************************************************************************/
515 //  Description:    This function is used to get dsp trans samplerate param
516 /*****************************************************************************/
517 PUBLIC uint16 AUD_Get_PcmTrans_Samplerate(void);
518
519 /*****************************************************************************/
520 //  Description:    This function is used to get record dev type.      
521 /*****************************************************************************/
522 PUBLIC AUD_REC_DEV_TYPE_E AUD_GetRecordDevType(HAUDIODEV hDevice);
523
524 /*****************************************************************************/
525 //  Description:    interface for mmi to set eq mode. 
526 //  Author:         Cherry.Liu
527 //  Note:
528 //****************************************************************************/
529 PUBLIC BOOLEAN AUD_SetEqMode(
530     int32 eq_mode
531 );
532
533 /*****************************************************************************/
534 //  Description:    interface to set digital gain in arm volume[]. high 7bits
535 //  Author:         Cherry.Liu
536 //  Note:
537 //****************************************************************************/
538 PUBLIC void AUD_SetDgGain(
539     int32 dac_gain
540 );
541
542 /*****************************************************************************/
543 //  Description: Audio interface to call sbc encoder for dsp codec.
544 //  Author: TH
545 //  Note: NONE.
546 //****************************************************************************/
547 PUBLIC void AUD_SBC_Encode_For_DSPCodec(
548     uint16 source_samplerate,
549     uint16 frame_address,
550     uint16 frame_size,
551     void * callback
552 );
553 /**---------------------------------------------------------------------------*
554  **                         Compiler Flag                                     *
555  **---------------------------------------------------------------------------*/
556 #ifdef __cplusplus
557     }  
558 #endif
559
560 #endif  // _AUDIO_H
561
562