FreeCalypso > hg > fc-magnetite
comparison src/aci2/mfw/mfw_aud.c @ 3:93999a60b835
src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Sep 2016 00:29:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:c41a534f33c6 | 3:93999a60b835 |
---|---|
1 /* | |
2 +--------------------------------------------------------------------+ | |
3 | PROJECT: MMI-Framework (8417) $Workfile:: mfw_aud.c $| | |
4 | $Author:: NDH $Revision:: 1 $| | |
5 | CREATED: 04.02.03 $Modtime:: 10.04.00 14:58 $| | |
6 | STATE : code | | |
7 +--------------------------------------------------------------------+ | |
8 | |
9 MODULE : MFW_AUD | |
10 | |
11 PURPOSE : This module contains Audio Riveria Interface functions. | |
12 | |
13 HISTORY: | |
14 | |
15 Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar | |
16 Description: RE: Vocoder interface change | |
17 Solution: Function call 'enable_tch_vocoder()' is replaced with new functions 'hl_drv_enable_vocoder()' | |
18 and 'hl_drv_disable_vocoder()' | |
19 | |
20 Aug 25, 2004 REF: CRR 20655 xnkulkar | |
21 Description: Voice Memo functionality not working | |
22 Solution: The voice recording functionality was failing because | |
23 " mmi" folder is not present. As a solution, we create the | |
24 "mmi" folder and then proceed with recording. | |
25 */ | |
26 | |
27 | |
28 /* | |
29 ** Include Files | |
30 */ | |
31 | |
32 #define ENTITY_MFW | |
33 | |
34 /* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */ | |
35 #ifndef NEPTUNE_BOARD | |
36 /* END ADD: Req ID: : Sumit : 14-Mar-05 */ | |
37 | |
38 /* includes */ | |
39 #include <string.h> | |
40 | |
41 #include "typedefs.h" | |
42 #include "vsi.h" | |
43 #include "pei.h" | |
44 #include "custom.h" | |
45 #include "gsm.h" | |
46 | |
47 #include "mfw_ffs.h" | |
48 #include "mfw_aud.h" | |
49 | |
50 #include "Audio/audio_api.h" | |
51 | |
52 // Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar | |
53 #include "hl_audio_drv.h" | |
54 | |
55 /* | |
56 ** Local Variable Definitions | |
57 */ | |
58 | |
59 static T_RV_RETURN_PATH voice_memo_return_path; | |
60 | |
61 | |
62 /* | |
63 ** Local Macro Definitions | |
64 */ | |
65 | |
66 #define VM_FILE_NAME "vmfile" // FFS File Name | |
67 #define VM_FOLDER "/mmi/vm" | |
68 | |
69 #define VM_MICROPHONE_GAIN (0x0100) // Default Gain of 1 | |
70 #define VM_NETWORK_GAIN (0x0100) // Default Gain of 1 | |
71 | |
72 #define VM_TONE_DURATION (50) | |
73 #define VM_TONE_INTERVAL (50) | |
74 #define VM_TONE_AMPLITUDE (-24) // Default Amplitude of -24dB | |
75 | |
76 | |
77 /* | |
78 ** Local Function Prototypes | |
79 */ | |
80 | |
81 static void mfw_aud_vm_create_file(const char *folder, const char *fname, UBYTE index); | |
82 static void configure_callback_fn(void (*callback_fn)(void *)); | |
83 static void configure_vm_filename(char *vm_filename, const char *folder, const char *fname, UBYTE index); | |
84 | |
85 | |
86 /* | |
87 ** Public function Definitions | |
88 */ | |
89 | |
90 | |
91 | |
92 /* | |
93 +--------------------------------------------------------------------+ | |
94 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
95 | STATE : code ROUTINE: mfw_aud_vm_delete_file | | |
96 +--------------------------------------------------------------------+ | |
97 | |
98 | |
99 PURPOSE : Delete the file which held the Voice Memo | |
100 | |
101 */ | |
102 SHORT mfw_aud_vm_delete_file(void) | |
103 { | |
104 char tmpFile[AUDIO_PATH_NAME_MAX_SIZE]; | |
105 | |
106 configure_vm_filename(tmpFile, VM_FOLDER, VM_FILE_NAME, 0); | |
107 | |
108 ffs_remove(tmpFile); | |
109 | |
110 return MFW_AUD_VM_OK; | |
111 } | |
112 | |
113 | |
114 /* | |
115 +--------------------------------------------------------------------+ | |
116 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
117 | STATE : code ROUTINE: mfw_aud_vm_start_playback | | |
118 +--------------------------------------------------------------------+ | |
119 | |
120 | |
121 PURPOSE : Start playback of a previously recorded Voice Memo | |
122 | |
123 */ | |
124 SHORT mfw_aud_vm_start_playback(void (*callback_fn)(void *)) | |
125 { | |
126 T_AUDIO_RET audio_riv_retVal; | |
127 T_AUDIO_VM_PLAY_PARAMETER mfw_vm_play_param; | |
128 | |
129 if (FFS_flashData.voice_memo_position EQ 0) | |
130 { | |
131 return MFW_AUD_VM_MEM_EMPTY; | |
132 } | |
133 else | |
134 { | |
135 | |
136 configure_callback_fn(callback_fn); | |
137 | |
138 //Set up the Voice Memo filename in FFS | |
139 configure_vm_filename(mfw_vm_play_param.memo_name, VM_FOLDER, VM_FILE_NAME, 0); | |
140 | |
141 // Call Riviera function to start playback. | |
142 #ifndef WIN32 // only if not in Windows | |
143 audio_riv_retVal = audio_vm_play_start(&mfw_vm_play_param, | |
144 voice_memo_return_path); | |
145 | |
146 // If the Riviera call failed | |
147 if (audio_riv_retVal != RV_OK) | |
148 return MFW_AUD_VM_RIVIERA_FAILED; | |
149 #endif | |
150 } | |
151 | |
152 return MFW_AUD_VM_OK; | |
153 } | |
154 | |
155 | |
156 /* | |
157 +--------------------------------------------------------------------+ | |
158 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
159 | STATE : code ROUTINE: mfw_aud_vm_stop_playback | | |
160 +--------------------------------------------------------------------+ | |
161 | |
162 | |
163 PURPOSE : Stop playback of a previously recorded Voice Memo | |
164 | |
165 */ | |
166 SHORT mfw_aud_vm_stop_playback(void (*callback_fn)(void *)) | |
167 { | |
168 T_AUDIO_RET audio_riv_retVal; | |
169 | |
170 configure_callback_fn(callback_fn); | |
171 | |
172 #ifndef WIN32 // only if not in Windows | |
173 audio_riv_retVal = audio_vm_play_stop(voice_memo_return_path); | |
174 | |
175 // If the Riviera call failed | |
176 if (audio_riv_retVal != RV_OK) | |
177 return MFW_AUD_VM_RIVIERA_FAILED; | |
178 | |
179 #endif | |
180 | |
181 return MFW_AUD_VM_OK; | |
182 } | |
183 | |
184 | |
185 /* | |
186 +--------------------------------------------------------------------+ | |
187 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
188 | STATE : code ROUTINE: mfw_aud_vm_start_record | | |
189 +--------------------------------------------------------------------+ | |
190 | |
191 | |
192 PURPOSE : Configure Riviera and start recording a Voice Memo | |
193 | |
194 */ | |
195 SHORT mfw_aud_vm_start_record(UBYTE max_duration, void (*callback_fn)(void *)) | |
196 { | |
197 T_AUDIO_RET audio_riv_retVal; | |
198 T_AUDIO_VM_RECORD_PARAMETER mfw_vm_record_param; | |
199 T_AUDIO_TONES_PARAMETER mfw_vm_tones_param; | |
200 char * mmiDir = "/mmi"; // Aug 25, 2004 REF: CRR 20655 xnkulkar | |
201 | |
202 configure_callback_fn(callback_fn); | |
203 | |
204 //Set up, and create, the Voice Memo filename in FFS | |
205 configure_vm_filename(mfw_vm_record_param.memo_name, VM_FOLDER, VM_FILE_NAME, 0); | |
206 //Aug 25, 2004 REF: CRR 20655 xnkulkar | |
207 // We now create the "mmi" folder and then proceed with recording. | |
208 flash_makedir(mmiDir); | |
209 mfw_aud_vm_create_file(VM_FOLDER, VM_FILE_NAME, 0); | |
210 | |
211 // Setup the Voice Memo Tones | |
212 mfw_vm_record_param.memo_duration = (UINT32)max_duration; | |
213 mfw_vm_record_param.compression_mode = FALSE; // No Compression | |
214 mfw_vm_record_param.microphone_gain = VM_MICROPHONE_GAIN; | |
215 mfw_vm_record_param.network_gain = VM_NETWORK_GAIN; | |
216 | |
217 mfw_vm_tones_param.tones[0].start_tone = 0; | |
218 mfw_vm_tones_param.tones[0].stop_tone = VM_TONE_DURATION; | |
219 mfw_vm_tones_param.tones[0].frequency_tone = 520; // Tone 1 Frequecny in Hz | |
220 mfw_vm_tones_param.tones[0].amplitude_tone = VM_TONE_AMPLITUDE; | |
221 | |
222 mfw_vm_tones_param.tones[1].start_tone = mfw_vm_tones_param.tones[0].stop_tone + VM_TONE_INTERVAL; | |
223 mfw_vm_tones_param.tones[1].stop_tone = mfw_vm_tones_param.tones[1].start_tone + VM_TONE_DURATION; | |
224 mfw_vm_tones_param.tones[1].frequency_tone = 643; // Tone 2 Frequecny in Hz | |
225 mfw_vm_tones_param.tones[1].amplitude_tone = VM_TONE_AMPLITUDE; | |
226 | |
227 mfw_vm_tones_param.tones[2].start_tone = mfw_vm_tones_param.tones[1].stop_tone + VM_TONE_INTERVAL; | |
228 mfw_vm_tones_param.tones[2].stop_tone = mfw_vm_tones_param.tones[2].start_tone + VM_TONE_DURATION; | |
229 mfw_vm_tones_param.tones[2].frequency_tone = 775; // Tone 3 Frequecny in Hz | |
230 mfw_vm_tones_param.tones[2].amplitude_tone = VM_TONE_AMPLITUDE; | |
231 | |
232 mfw_vm_tones_param.frame_duration = mfw_vm_tones_param.tones[2].stop_tone * 2; | |
233 mfw_vm_tones_param.sequence_duration = mfw_vm_tones_param.frame_duration * 2; | |
234 mfw_vm_tones_param.period_duration = mfw_vm_tones_param.sequence_duration; | |
235 mfw_vm_tones_param.repetition = TONE_INFINITE; | |
236 | |
237 // Call Riviera function to start recording. | |
238 #ifndef WIN32 // only if not in Windows | |
239 audio_riv_retVal = audio_vm_record_start(&mfw_vm_record_param, | |
240 &mfw_vm_tones_param, | |
241 voice_memo_return_path); | |
242 | |
243 // If the Riviera call failed | |
244 if (audio_riv_retVal != RV_OK) | |
245 return MFW_AUD_VM_RIVIERA_FAILED; | |
246 #endif | |
247 | |
248 return MFW_AUD_VM_OK; | |
249 } | |
250 | |
251 | |
252 /* | |
253 +--------------------------------------------------------------------+ | |
254 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
255 | STATE : code ROUTINE: mfw_aud_vm_stop_record | | |
256 +--------------------------------------------------------------------+ | |
257 | |
258 | |
259 PURPOSE : Stop recording a Voice Memo | |
260 | |
261 */ | |
262 SHORT mfw_aud_vm_stop_record(void (*callback_fn)(void *)) | |
263 { | |
264 T_AUDIO_RET audio_riv_retVal; | |
265 | |
266 configure_callback_fn(callback_fn); | |
267 | |
268 #ifndef WIN32 // only if not in Windows | |
269 audio_riv_retVal = audio_vm_record_stop(voice_memo_return_path); | |
270 | |
271 // If the Riviera call failed | |
272 if (audio_riv_retVal != RV_OK) | |
273 return MFW_AUD_VM_RIVIERA_FAILED; | |
274 #endif | |
275 | |
276 return MFW_AUD_VM_OK; | |
277 } | |
278 | |
279 | |
280 /* | |
281 +--------------------------------------------------------------------+ | |
282 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
283 | STATE : code ROUTINE: mfw_aud_vm_get_duration | | |
284 +--------------------------------------------------------------------+ | |
285 | |
286 | |
287 PURPOSE : Get the duration of the previously recorded Voice Memo | |
288 | |
289 */ | |
290 UBYTE mfw_aud_vm_get_duration(void) | |
291 { | |
292 return FFS_flashData.voice_memo_position; | |
293 } | |
294 | |
295 | |
296 /* | |
297 +--------------------------------------------------------------------+ | |
298 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
299 | STATE : code ROUTINE: mfw_aud_vm_get_duration | | |
300 +--------------------------------------------------------------------+ | |
301 | |
302 | |
303 PURPOSE : Set the duration of the previously recorded Voice Memo | |
304 | |
305 */ | |
306 void mfw_aud_vm_set_duration(UBYTE duration) | |
307 { | |
308 FFS_flashData.voice_memo_position = duration; | |
309 | |
310 flash_write(); | |
311 return; | |
312 } | |
313 | |
314 | |
315 /* | |
316 ** Local Function Definitions | |
317 */ | |
318 | |
319 /* | |
320 +--------------------------------------------------------------------+ | |
321 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
322 | STATE : code ROUTINE: mfw_aud_vm_create_file | | |
323 +--------------------------------------------------------------------+ | |
324 | |
325 | |
326 PURPOSE : Create the FFS file required for the Riviera Voice Memo | |
327 | |
328 */ | |
329 static void mfw_aud_vm_create_file(const char *folder, const char *fname, UBYTE index) | |
330 { | |
331 UBYTE dummy = 0x00; | |
332 | |
333 flash_data_write(folder, fname, &dummy, sizeof(dummy)); | |
334 return; | |
335 } | |
336 | |
337 | |
338 /* | |
339 +--------------------------------------------------------------------+ | |
340 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
341 | STATE : code ROUTINE: configure_callback_fn | | |
342 +--------------------------------------------------------------------+ | |
343 | |
344 | |
345 PURPOSE : Configure the Riviera Return PAth | |
346 | |
347 */ | |
348 static void configure_callback_fn(void (*callback_fn)(void *)) | |
349 { | |
350 voice_memo_return_path.addr_id = 0; | |
351 voice_memo_return_path.callback_func = callback_fn; | |
352 | |
353 return; | |
354 } | |
355 | |
356 | |
357 | |
358 /* | |
359 +--------------------------------------------------------------------+ | |
360 | PROJECT: MMI-Framework (8417) MODULE: MFW_AUD | | |
361 | STATE : code ROUTINE: configure_vm_filename | | |
362 +--------------------------------------------------------------------+ | |
363 | |
364 | |
365 PURPOSE : Create the Voice memo filename from the incoming parameters | |
366 | |
367 */ | |
368 static void configure_vm_filename(char *vm_filename, const char *folder, const char *fname, UBYTE index) | |
369 { | |
370 memset(vm_filename, 0x00, AUDIO_PATH_NAME_MAX_SIZE); | |
371 strcpy(vm_filename, folder); | |
372 strcat(vm_filename, "/"); | |
373 strcat(vm_filename, fname); | |
374 } | |
375 | |
376 // Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar | |
377 // Commented as we are no more using 'enable_tch_vocoder()' from MFW | |
378 /* | |
379 #ifndef _SIMULATION_ | |
380 void enable_tch_vocoder(BOOL enabled); | |
381 #endif | |
382 */ | |
383 | |
384 /********************************************************************** | |
385 ** | |
386 ** MFW Riviera Vocoder Interface functions | |
387 ** | |
388 **********************************************************************/ | |
389 | |
390 void mfw_aud_l1_enable_vocoder ( void ) | |
391 { | |
392 #ifndef _SIMULATION_ | |
393 // Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar | |
394 // Call 'hl_drv_enable_vocoder()' instead of 'enable_tch_vocoder(TRUE)' | |
395 // enable_tch_vocoder(TRUE); | |
396 T_HL_VOICE_DRV_RSLT vocoderState; | |
397 vocoderState = hl_drv_enable_vocoder(); | |
398 if ( vocoderState == HL_VOICE_DRV_FAIL ) | |
399 { | |
400 TRACE_EVENT("vocoder driver : FAILED "); | |
401 return; | |
402 } | |
403 #endif | |
404 return; | |
405 } | |
406 | |
407 void mfw_aud_l1_disable_vocoder ( void ) | |
408 { | |
409 #ifndef _SIMULATION_ | |
410 // Mar 03, 2005 REF: CRR MMI-ENH-28950 xnkulkar | |
411 // Call 'hl_drv_disable_vocoder()' instead of 'enable_tch_vocoder(FALSE)' | |
412 // enable_tch_vocoder(FALSE); | |
413 hl_drv_disable_vocoder(); | |
414 #endif | |
415 return; | |
416 } | |
417 | |
418 /****************************************************************/ | |
419 /* NEPTUNE DEFINITIONS START HERE */ | |
420 /* BEGIN ADD: Req ID: : Sumit : 14-Mar-05 */ | |
421 #else /* NEPTUNE_BOARD */ | |
422 #include "typedefs.h" | |
423 #include "mfw_aud.h" | |
424 | |
425 SHORT mfw_aud_vm_delete_file(void) | |
426 { | |
427 return MFW_AUD_VM_OK; | |
428 } | |
429 | |
430 SHORT mfw_aud_vm_start_playback(void (*callback_fn)(void *)) | |
431 { | |
432 return MFW_AUD_VM_OK; | |
433 } | |
434 | |
435 SHORT mfw_aud_vm_stop_playback(void (*callback_fn)(void *)) | |
436 { | |
437 return MFW_AUD_VM_OK; | |
438 } | |
439 | |
440 SHORT mfw_aud_vm_start_record(UBYTE max_duration, void (*callback_fn)(void *)) | |
441 { | |
442 return MFW_AUD_VM_OK; | |
443 } | |
444 | |
445 SHORT mfw_aud_vm_stop_record(void (*callback_fn)(void *)) | |
446 { | |
447 return MFW_AUD_VM_OK; | |
448 } | |
449 | |
450 UBYTE mfw_aud_vm_get_duration(void) | |
451 { | |
452 return 0; | |
453 } | |
454 | |
455 void mfw_aud_vm_set_duration(UBYTE duration) | |
456 { | |
457 return; | |
458 } | |
459 | |
460 /* | |
461 ** Layer1 Audio interface functions | |
462 */ | |
463 void mfw_aud_l1_enable_vocoder ( void ) | |
464 { | |
465 } | |
466 | |
467 void mfw_aud_l1_disable_vocoder ( void ) | |
468 { | |
469 } | |
470 | |
471 #endif /* NEPTUNE_BOARD*/ | |
472 /* END ADD: Req ID: : Sumit : 14-Mar-05 */ | |
473 |