tizen 2.4 release
[kernel/u-boot-tm1.git] / arch / arm / include / asm / arch-sc8800g / 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
248
249 typedef enum
250 {
251         MIDI_PLAY   = 1,
252         MP3_PLAY        = 2,
253         WAV_PLAY        = 3,
254         MP4_PLAY        = 4
255 } AUD_MSG_SERVICE_E;
256
257 typedef enum
258 {
259         AUD_REC_PCM= 0x0,
260         AUD_REC_FS, 
261         AUD_REC_EFS,
262         AUD_REC_AMR,
263         AUD_REC_ADPCM,
264         AUD_REC_DSP_DATA_MIN, //=5  
265         AUD_REC_DSP_DATA_1 = AUD_REC_DSP_DATA_MIN,//=5
266         AUD_REC_DSP_DATA_2, //=6
267         AUD_REC_DSP_DATA_3, //=7
268         AUD_REC_DSP_DATA_4, //=8
269         AUD_REC_DSP_DATA_5, //=9
270         AUD_REC_DSP_DATA_6, //=10
271         AUD_REC_DSP_DATA_7, //=11
272         AUD_REC_DSP_DATA_8, //=12
273         AUD_REC_DSP_DATA_9, //=13
274         AUD_REC_DSP_DATA_10, //=14
275         AUD_REC_DSP_DATA_11, //=15
276         AUD_REC_DSP_DATA_12, //=16
277         AUD_REC_DSP_DATA_13, //=17
278         AUD_REC_DSP_DATA_14, //=18
279         AUD_REC_DSP_DATA_15, //=19
280         AUD_REC_DSP_DATA_MAX = AUD_REC_DSP_DATA_15,
281         AUD_REC_DSP_LOG,    //20
282         AUD_REC_FORMAT_MAX 
283 }AUD_REC_FORMAT_E; 
284
285
286 typedef enum 
287 {
288         MR475 = 0,/*4.75kbps*/
289         MR515, 
290         MR59,
291         MR67,
292         MR74,
293         MR795,
294         MR102,
295         MR122, 
296         MRDTX,
297         N_MODES     /* number of (SPC) modes */
298 }AMR_MODE; //amr encode mode
299
300 typedef enum
301 {
302     REC_BY_DSPVB = 0,
303     REC_BY_ARMVB,
304     REC_BY_PERIPHERAL,
305     AUD_REC_DEV_TYPE_MAX
306 }AUD_REC_DEV_TYPE_E;
307 /**---------------------------------------------------------------------------*
308  **                         Data Structures                                   *
309  **---------------------------------------------------------------------------*/
310 /**---------------------------------------------------------------------------*
311  **                         Function Prototypes                               *
312  **---------------------------------------------------------------------------*/
313 /*****************************************************************************/
314 //  Description:    This function plays generic tone.
315 //  Author:         Xueliang.Wang
316 //      Note:           This function does nothing if it is called when playing
317 //                  Ring.
318 /*****************************************************************************/
319 PUBLIC ERR_AUD_E AUD_PlayGenericTone(   // If succeed, return ERR_AUD_NONE,
320                                         // else return error value
321     AUD_GENERIC_TONE_ID_E tone_id,      // Generic tone enumeration value.
322     uint32  duration    // Number of milliseconds of playing this tone.
323     );
324
325 /*****************************************************************************/
326 //  Description:    This function stops playing generic tone.
327 //  Author:         Xueliang.Wang
328 //      Note:           
329 /*****************************************************************************/
330 PUBLIC ERR_AUD_E AUD_StopGenericTone(void); // If succeed, return ERR_AUD_NONE,
331                                             // else return error value
332             
333 /*****************************************************************************/
334 //  Description:    This function is used to set voice codec enable/disable.
335 //  Author:         Xueliang.Wang
336 //      Note:           
337 /*****************************************************************************/
338 PUBLIC ERR_AUD_E AUD_EnableVoiceCodec(  // If succeed, return ERR_AUD_NONE,
339                                         // else return error value
340     BOOLEAN is_enable                   // SCI_TRUE: Enable,   SCI_FALSE: Disable
341     );
342
343
344 /*****************************************************************************/
345 //  Description:    This function is used to set engineering audio parameters.
346 //  Author:         Xueliang.Wang
347 //      Note:           
348 /*****************************************************************************/
349 PUBLIC ERR_AUD_E AUD_SetEngineeringParameter(   // If succeed, return ERR_AUD_NONE,
350                                                 // else return error value
351     AUDIO_DEVICE_MODE_TYPE_E  parameter_type,
352     AUDIO_TEST_DATA_T  parameter_data
353
354
355     );
356     
357 /*****************************************************************************/
358 //  Description:    This function is used to enable/disable volice loopback 
359 //                  test.
360 //  Author:         Xueliang.Wang
361 //      Note:           
362 /*****************************************************************************/
363 PUBLIC ERR_AUD_E AUD_EnableVoiceLoopback(   // If succeed, return ERR_AUD_NONE,
364                                             // else return error value
365     BOOLEAN is_enable,      // 0: disable  1:enable
366     uint16  delay_time      // millisecones
367     );
368
369 /*****************************************************************************/
370 //  Description:    This function is used to get engineering audio parameters.
371 //  Author:         Sunsome.Ju
372 //      Note:           
373 /*****************************************************************************/
374 PUBLIC ERR_AUD_E AUD_GetEngineeringParameter(   // If succeed, return ERR_AUD_NONE,
375                                                 // else return error value
376     AUDIO_DEVICE_MODE_TYPE_E  parameter_type,
377     AUDIO_TEST_DATA_T *parameter_data
378     );
379
380
381 /*****************************************************************************/
382 //  Description:    This function is used to set midi playing frequency.
383 //  Author:         
384 //      Note:           
385 /*****************************************************************************/
386 PUBLIC void AUDIO_SetMidiPlayFreq(uint32 midi_play_freq);         
387
388 /*****************************************************************************/
389 //  Description:    This function is used to set whether the audio data is output by stereo mode.
390 //  Author:         BenjaminWang
391 //      Note:           
392 /*****************************************************************************/
393 PUBLIC void AUDIO_SetDataStereo(     // return void
394         BOOLEAN stereo_state      // SCI_TRUE - stereo on      SCI_FALSE - stereo off
395         );
396
397 /*****************************************************************************/
398 //  Description:    This function is used to know whether the audio data is output by stereo mode.
399 //  Author:         BenjaminWang
400 //      Note:           
401 /*****************************************************************************/
402 PUBLIC BOOLEAN AUDIO_GetDataStereo(void);     // return SCI_TRUE - stereo on    SCI_FALSE - stereo off
403
404 PUBLIC void AUD_EnableAmplifier(BOOLEAN bEnable);
405
406
407 /*****************************************************************************/
408 //  Description:    This function is used to turn on MICBIAS voltage.
409 //  Author:         Benjamin.Wang
410 //  Note:
411 //****************************************************************************/
412 void VB_TurnOnMICBIAS(void);
413
414 /*****************************************************************************/
415 //  Description:    This function is used to shut down MICBIAS voltage.
416 //  Author:         Benjamin.Wang
417 //  Note:
418 //****************************************************************************/
419 void VB_ShutDownMICBIAS(void);
420
421 //record call back function
422 typedef void (*RECORD_CALLBACK)(uint16 data_length);
423
424 //play call back function
425 typedef BOOLEAN (*PLAY_CALLBACK)();                                              
426
427 /*****************************************************************************/
428 //  Description:    This function is used to set voice codec enable/disable.
429 //  Author:         Jimmy.Jia
430 //      Note:           
431 /*****************************************************************************/
432 PUBLIC ERR_AUD_E AUD_EnableVoiceRecord(  // If succeed, return ERR_AUD_NONE,
433                                         // else return error value
434     BOOLEAN is_enable,                  // SCI_TRUE: Enable,   SCI_FALSE: Disable
435         AUD_REC_FORMAT_E recorder_format,
436         RECORD_CALLBACK callback_fun    
437     );
438
439 /*****************************************************************************/
440 //  Description:    This function config the amr parameters
441 //  Author:         yujun.ke
442 //      Note:           
443 /*****************************************************************************/
444
445 extern void AUD_CfgAmrParam( AMR_MODE amr_mode, uint8 channels, uint8 sample_rate );
446
447  /*****************************************************************************/
448 //  Description:    This function transmit the recorded data to uplayer buffer
449 //  Author:         yujun.ke
450 //      Note:           
451 /*****************************************************************************/
452 extern void AUD_ReadVoiceData( uint16 *destination_buf_ptr,uint16 data_length );
453
454  /*****************************************************************************/
455 //  Description:    This function start the play flow
456 //  Author:         yujun.ke
457 //      Note:           
458 /*****************************************************************************/
459 extern void AUD_StartPlay( AUD_REC_FORMAT_E voice_format,
460                                            PLAY_CALLBACK callback_fun,
461                                            BOOLEAN is_to_speaker,
462                                            BOOLEAN is_to_net
463                           );
464
465  /*****************************************************************************/
466 //  Description:    This function transmit data to downlayer for playing
467 //  Author:         yujun.ke
468 //      Note:           
469 /*****************************************************************************/
470 extern void AUD_WriteVoiceData (uint16 * source_buf_ptr,uint16 data_length);
471
472  /*****************************************************************************/
473 //  Description:    This function stop the paly process
474 //  Author:         yujun.ke
475 //      Note:           
476 /*****************************************************************************/
477 extern void AUD_StopPlay( void );
478  
479 /*****************************************************************************/
480 // Description: United operation for POP noise restrain.
481 // Author: Benjamin
482 // Note:           
483 /*****************************************************************************/
484 PUBLIC void AUD_DSPUnitedOperation(void);
485 /*****************************************************************************/
486 //  Description:    This function is used to set Audio Codec Output Data Type.      
487 /*****************************************************************************/
488 PUBLIC void AUD_SetOutputDataType(AUDIO_OUTPUT_DATA_TYPE_E eDataType);
489
490 /*****************************************************************************/
491 //  Description:    This function is used to get Audio Codec Output Data Type.      
492 /*****************************************************************************/
493 PUBLIC AUDIO_OUTPUT_DATA_TYPE_E AUD_GetOutputDataType(void);
494
495 /*****************************************************************************/
496 //  Description:    This function is used to config dsp trans samplerate param
497 /*****************************************************************************/
498 PUBLIC void AUD_Cfg_PcmTrans_Param(uint16 dest_samplerate);
499
500 /*****************************************************************************/
501 //  Description:    This function sets volume of background music.
502 //  Author:         Cherry.Liu
503 //      Note:           
504 /*****************************************************************************/
505 PUBLIC ERR_AUD_E AUD_SetBkMusicVolume (
506     AUD_BKMUSIC_PARAM_TYPE_E  eParamType,
507     uint16  uiUplinkLevel, 
508     uint16  uiDownlinkLevel
509 );
510 /*****************************************************************************/
511 //  Description:    This function eanble/disable earphone when power off.
512 //  Author:        
513 //      Note:           
514 /*****************************************************************************/
515 PUBLIC void AUD_Enable_Earphone(BOOLEAN bEnable);
516 /*****************************************************************************/
517 //  Description:    This function is used to get dsp trans samplerate param
518 /*****************************************************************************/
519 PUBLIC uint16 AUD_Get_PcmTrans_Samplerate(void);
520
521 /*****************************************************************************/
522 //  Description:    This function is used to get record dev type.      
523 /*****************************************************************************/
524 PUBLIC AUD_REC_DEV_TYPE_E AUD_GetRecordDevType(HAUDIODEV hDevice);
525
526 /*****************************************************************************/
527 //  Description:    interface for mmi to set eq mode. 
528 //  Author:         Cherry.Liu
529 //  Note:
530 //****************************************************************************/
531 PUBLIC BOOLEAN AUD_SetEqMode(
532     int32 eq_mode
533 );
534
535 /*****************************************************************************/
536 //  Description:    interface to set digital gain in arm volume[]. high 7bits
537 //  Author:         Cherry.Liu
538 //  Note:
539 //****************************************************************************/
540 PUBLIC void AUD_SetDgGain(
541     int32 dac_gain
542 );
543
544 /*****************************************************************************/
545 //  Description: Audio interface to call sbc encoder for dsp codec.
546 //  Author: TH
547 //  Note: NONE.
548 //****************************************************************************/
549 PUBLIC void AUD_SBC_Encode_For_DSPCodec(
550     uint16 source_samplerate,
551     uint16 frame_address,
552     uint16 frame_size,
553     void * callback
554 );
555 /**---------------------------------------------------------------------------*
556  **                         Compiler Flag                                     *
557  **---------------------------------------------------------------------------*/
558 #ifdef __cplusplus
559     }  
560 #endif
561
562 #endif  // _AUDIO_H
563
564