comparison chipsetsw/services/Audio/audio_tones.c @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:509db1a7b7b8
1 /****************************************************************************/
2 /* */
3 /* File Name: audio_tones.c */
4 /* */
5 /* Purpose: This file contains all the functions used to manage the */
6 /* tones . */
7 /* */
8 /* Version 0.1 */
9 /* */
10 /* Date Modification */
11 /* ------------------------------------ */
12 /* 28 May 2001 Create */
13 /* */
14 /* Author */
15 /* Francois Mazard - Stephanie Gerthoux */
16 /* */
17 /* (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved*/
18 /****************************************************************************/
19
20 #include "rv/rv_defined_swe.h"
21
22 #ifdef RVM_AUDIO_MAIN_SWE
23 #ifndef _WINDOWS
24 #include "config/swconfig.cfg"
25 #include "config/sys.cfg"
26 #include "config/chipset.cfg"
27 #endif
28
29 #include "l1_confg.h"
30 #if (TONE)
31 #include <math.h>
32 #include "rv/rv_general.h"
33 #include "rvm/rvm_gen.h"
34 #include "audio/audio_features_i.h"
35 #include "audio/audio_ffs_i.h"
36 #include "audio/audio_api.h"
37 #include "audio/audio_structs_i.h"
38 #include "audio/audio_var_i.h"
39 #include "audio/audio_messages_i.h"
40 #include "rvf/rvf_target.h"
41 #include "audio/audio_const_i.h"
42 #include "audio/audio_error_hdlr_i.h"
43
44 /* include the usefull L1 header */
45 #define BOOL_FLAG
46 #define CHAR_FLAG
47 #include "l1_types.h"
48 #include "l1audio_cust.h"
49 #include "l1audio_msgty.h"
50 #include "l1audio_signa.h"
51
52 /********************************************************************************/
53 /* */
54 /* Function Name: audio_tones_convert_parameter */
55 /* */
56 /* Purpose: Convert the tones paramters from the entity to the l1 */
57 /* parameters */
58 /* */
59 /* Input Parameters: */
60 /* entity tones message */
61 /* */
62 /* Output Parameters: */
63 /* layer 1 tones message */
64 /* */
65 /* Note: */
66 /* None. */
67 /* */
68 /* Revision History: */
69 /* None. */
70 /* */
71 /********************************************************************************/
72 void audio_tones_convert_parameter( T_AUDIO_TONES_START *entity_parameter,
73 T_MMI_TONE_REQ *l1_parameter)
74 {
75 double frequency_index, frequency_beep, amplitude_beep, amplitude, amplitude_index;
76
77 /* Calculation of the frequency index */
78 /* note: we /* add +0.5 to compensate the truncation */
79 frequency_beep = (double)(entity_parameter->tones_parameter.tones[0].frequency_tone);
80 frequency_index = (256 * cos(6.283185*(frequency_beep/8000)));
81 /* Calculation of the amplitude index */
82 /* note: we /* add +0.5 to compensate the truncation */
83 amplitude_beep = (double)(entity_parameter->tones_parameter.tones[0].amplitude_tone);
84 amplitude = exp((amplitude_beep*0.115129)+(5.544625));
85 amplitude_index = amplitude * sin(6.283185*(frequency_beep/8000));
86
87 l1_parameter->d_k_x1_t0 = (UINT16)((((UINT16)(frequency_index))<<8) | ((UINT16)(amplitude_index)));
88
89 /* Calculation of the frequency index */
90 /* note: we /* add +0.5 to compensate the truncation */
91 frequency_beep = (double)(entity_parameter->tones_parameter.tones[1].frequency_tone);
92 frequency_index = (256 * cos(6.283185*(frequency_beep/8000)));
93 /* Calculation of the amplitude index */
94 /* note: we /* add +0.5 to compensate the truncation */
95 amplitude_beep = (double)(entity_parameter->tones_parameter.tones[1].amplitude_tone);
96 amplitude = exp((amplitude_beep*0.115129)+(5.544625));
97 amplitude_index = amplitude * sin(6.283185*(frequency_beep/8000));
98
99 l1_parameter->d_k_x1_t1 = (UINT16)((((UINT16)(frequency_index))<<8) | ((UINT16)(amplitude_index)));
100
101 /* Calculation of the frequency index */
102 /* note: we /* add +0.5 to compensate the truncation */
103 frequency_beep = (double)(entity_parameter->tones_parameter.tones[2].frequency_tone);
104 frequency_index = (256 * cos(6.283185*(frequency_beep/8000)));
105 /* Calculation of the amplitude index */
106 /* note: we /* add +0.5 to compensate the truncation */
107 amplitude_beep = (double)(entity_parameter->tones_parameter.tones[2].amplitude_tone);
108 amplitude = exp((amplitude_beep*0.115129)+(5.544625));
109 amplitude_index = amplitude * sin(6.283185*(frequency_beep/8000));
110
111 l1_parameter->d_k_x1_t2 = (UINT16)((((UINT16)(frequency_index))<<8) | ((UINT16)(amplitude_index)));
112
113 l1_parameter->d_t0_on = (UINT16)((entity_parameter->tones_parameter.tones[0].start_tone)/20);
114 l1_parameter->d_t1_on = (UINT16)((entity_parameter->tones_parameter.tones[1].start_tone)/20);
115 l1_parameter->d_t2_on = (UINT16)((entity_parameter->tones_parameter.tones[2].start_tone)/20);
116
117 l1_parameter->d_t0_off = (UINT16)((entity_parameter->tones_parameter.tones[0].stop_tone)/20);
118 l1_parameter->d_t1_off = (UINT16)((entity_parameter->tones_parameter.tones[1].stop_tone)/20);
119 l1_parameter->d_t2_off = (UINT16)((entity_parameter->tones_parameter.tones[2].stop_tone)/20);
120
121 l1_parameter->d_bu_off = (UINT16)((entity_parameter->tones_parameter.frame_duration)/20);
122
123 l1_parameter->d_se_off = (UINT16)((entity_parameter->tones_parameter.sequence_duration)/20);
124
125 l1_parameter->d_pe_off = (UINT16)((entity_parameter->tones_parameter.period_duration)/20);
126
127 l1_parameter->d_pe_rep = entity_parameter->tones_parameter.repetition;
128 }
129
130
131
132 /********************************************************************************/
133 /* */
134 /* Function Name: audio_tones_send_status */
135 /* */
136 /* Purpose: This function sends the tones status to the entity. */
137 /* */
138 /* Input Parameters: */
139 /* status, */
140 /* return path */
141 /* */
142 /* Output Parameters: */
143 /* None. */
144 /* */
145 /* Note: */
146 /* None. */
147 /* */
148 /* Revision History: */
149 /* None. */
150 /* */
151 /********************************************************************************/
152 void audio_tones_send_status (T_AUDIO_RET status, T_RV_RETURN return_path)
153 {
154 void *p_send_message = NULL;
155 T_RVF_MB_STATUS mb_status = RVF_RED;
156
157 while (mb_status == RVF_RED)
158 {
159 /* allocate the message buffer */
160 mb_status = rvf_get_buf (p_audio_gbl_var->mb_external,
161 sizeof (T_AUDIO_TONES_STATUS),
162 (T_RVF_BUFFER **) (&p_send_message));
163
164 /* If insufficient resources, then report a memory error and abort. */
165 /* and wait until more ressource is given */
166 if (mb_status == RVF_RED)
167 {
168 audio_tones_error_trace(AUDIO_ENTITY_NO_MEMORY);
169 rvf_delay(RVF_MS_TO_TICKS(1000));
170 }
171 }
172
173 /*fill the header of the message */
174 ((T_AUDIO_TONES_STATUS *)(p_send_message))->os_hdr.msg_id = AUDIO_TONES_STATUS_MSG;
175
176 /* fill the status parameters */
177 ((T_AUDIO_TONES_STATUS *)(p_send_message))->status = status;
178
179 if (return_path.callback_func == NULL)
180 {
181 /* send the message to the entity */
182 rvf_send_msg (return_path.addr_id,
183 p_send_message);
184 }
185 else
186 {
187 /* call the callback function */
188 (*return_path.callback_func)((void *)(p_send_message));
189 rvf_free_buf((T_RVF_BUFFER *)p_send_message);
190 }
191 }
192 /********************************************************************************/
193 /* */
194 /* Function Name: audio_tones_manager */
195 /* */
196 /* Purpose: This function is called to manage a tones generation */
197 /* */
198 /* Input Parameters: */
199 /* Audio Key Beep Parameters, */
200 /* */
201 /* Output Parameters: */
202 /* None. */
203 /* */
204 /* Note: */
205 /* None. */
206 /* */
207 /* Revision History: */
208 /* None. */
209 /* */
210 /********************************************************************************/
211 void audio_tones_manager (T_RV_HDR *p_message)
212 {
213
214 /* Declare local variables. */
215 void *p_send_message;
216
217 /**************** audio_tones_manager function begins *********************/
218 switch(p_audio_gbl_var->tones.state)
219 {
220 case AUDIO_TONES_IDLE:
221 {
222 switch(p_message->msg_id)
223 {
224 case AUDIO_TONES_START_REQ:
225 {
226 /* save the addr id of the entity */
227 p_audio_gbl_var->tones.task_id = p_message->src_addr_id;
228
229 /* save the return path */
230 p_audio_gbl_var->tones.return_path.callback_func = ((T_AUDIO_TONES_START*)(p_message))->return_path.callback_func;
231 p_audio_gbl_var->tones.return_path.addr_id = ((T_AUDIO_TONES_START*)(p_message))->return_path.addr_id;
232
233 /* allocate the buffer for the message to the L1 */
234 p_send_message = audio_allocate_l1_message(sizeof(T_MMI_TONE_REQ));
235 if (p_send_message != NULL)
236 {
237 /* Convert the entity parameters to the audio L1 parameters */
238 audio_tones_convert_parameter((T_AUDIO_TONES_START *)p_message,
239 (T_MMI_TONE_REQ *)p_send_message);
240
241 /* send the start command to the audio L1 */
242 audio_send_l1_message(MMI_TONE_START_REQ, p_send_message);
243 }
244
245 /* change to the state AUDIO_TONES_WAIT_START_CONFIRMATION */
246 p_audio_gbl_var->tones.state = AUDIO_TONES_WAIT_START_CON;
247 break;
248 }
249
250 case AUDIO_TONES_STOP_REQ:
251 {
252 /* event error - send an error message*/
253 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_STOP *)(p_message))->return_path);
254
255 audio_tones_error_trace(AUDIO_ERROR_STOP_EVENT);
256 break;
257 }
258 }
259 break;
260 } /* case AUDIO_TONES_IDLE */
261
262 case AUDIO_TONES_WAIT_START_CON:
263 {
264 switch(p_message->msg_id)
265 {
266 case MMI_TONE_START_CON:
267 {
268 /* change to the state AUDIO_TONES_WAIT_STOP_COMMAND */
269 p_audio_gbl_var->tones.state = AUDIO_TONES_WAIT_STOP_COMMAND;
270 break;
271 }
272 case AUDIO_TONES_STOP_REQ:
273 /*.Before stopping this task, control that */
274 /* stop task id caller = Tones task id */
275 {
276 if ( p_audio_gbl_var->tones.task_id == p_message->src_addr_id)
277 {
278 /* change to the state AUDIO_TONES_WAIT_STOP_CONFIRMATION */
279 p_audio_gbl_var->tones.state = AUDIO_TONES_WAIT_START_CON_TO_STOP;
280 }
281 else
282 {
283 /* A stop request from an other task is sent during a start connection */
284 /* event error - send an error message */
285 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_STOP *)(p_message))->return_path);
286
287 audio_tones_error_trace(AUDIO_ERROR_STOP_EVENT);
288 }
289 break;
290 }
291 case AUDIO_TONES_START_REQ:
292 {
293 /* event error - send an error message*/
294 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_START *)(p_message))->return_path);
295
296 audio_tones_error_trace(AUDIO_ERROR_START_EVENT);
297 break;
298 }
299 }
300 break;
301 } /* case AUDIO_TONES_WAIT_START_CON */
302
303 case AUDIO_TONES_WAIT_START_CON_TO_STOP:
304 {
305 switch(p_message->msg_id)
306 {
307 case MMI_TONE_START_CON:
308 {
309 /* allocate the buffer for the message to the L1 */
310 p_send_message = audio_allocate_l1_message(0);
311 if (p_send_message != NULL)
312 {
313 /* send the start command to the audio L1 */
314 audio_send_l1_message(MMI_TONE_STOP_REQ, p_send_message);
315 }
316
317 /* change to the state AUDIO_TONES_WAIT_STOP_CON */
318 p_audio_gbl_var->tones.state = AUDIO_TONES_WAIT_STOP_CON;
319 break;
320 }
321 case AUDIO_TONES_START_REQ:
322 {
323 /* event error - send an error message*/
324 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_START *)(p_message))->return_path);
325
326 audio_tones_error_trace(AUDIO_ERROR_START_EVENT);
327 break;
328 }
329 case AUDIO_TONES_STOP_REQ:
330 {
331 /* event error - send an error message*/
332 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_STOP *)(p_message))->return_path);
333
334 audio_tones_error_trace(AUDIO_ERROR_STOP_EVENT);
335 break;
336 }
337 }
338 break;
339 }
340
341 case AUDIO_TONES_WAIT_STOP_COMMAND:
342 {
343 switch(p_message->msg_id)
344 {
345 case MMI_TONE_STOP_CON:
346 {
347 audio_tones_send_status (AUDIO_OK, p_audio_gbl_var->tones.return_path);
348
349 /* change to the state AUDIO_TONES_IDLE */
350 p_audio_gbl_var->tones.state = AUDIO_TONES_IDLE;
351 break;
352 }
353
354 case AUDIO_TONES_STOP_REQ:
355 {
356 /* A stop request is sent during a stop connection */
357 /* Save the addr id of the entity */
358 p_audio_gbl_var->tones.task_id = p_message->src_addr_id;
359
360 /*.Control that (stop task id caller = tones task id) and stop the task */
361 if ( p_audio_gbl_var->tones.task_id == p_message->src_addr_id)
362 {
363 /* allocate the buffer for the message to the L1 */
364 p_send_message = audio_allocate_l1_message(0);
365 if (p_send_message != NULL)
366 {
367 /* send the start command to the audio L1 */
368 audio_send_l1_message(MMI_TONE_STOP_REQ, p_send_message);
369 }
370
371 /* change to the state AUDIO_TONES_WAIT_STOP_CONFIRMATION */
372 p_audio_gbl_var->tones.state = AUDIO_TONES_WAIT_STOP_CON;
373 }
374 else
375 {
376 /* A stop request from an other task is sent during a stop connection */
377 /* event error - send an error message */
378 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_STOP *)(p_message))->return_path);
379
380 audio_tones_error_trace(AUDIO_ERROR_STOP_EVENT);
381 }
382 break;
383 }
384
385 case AUDIO_TONES_START_REQ:
386 {
387 /* event error - send an error message*/
388 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_START *)(p_message))->return_path);
389
390 audio_tones_error_trace(AUDIO_ERROR_START_EVENT);
391 break;
392 }
393 }
394 break;
395 } /* case AUDIO_TONES_WAIT_STOP_COMMAND */
396
397 case AUDIO_TONES_WAIT_STOP_CON:
398 {
399 switch(p_message->msg_id)
400 {
401 case MMI_TONE_STOP_CON:
402 {
403 audio_tones_send_status (AUDIO_OK, p_audio_gbl_var->tones.return_path);
404
405 /* change to the state AUDIO_TONES_IDLE */
406 p_audio_gbl_var->tones.state = AUDIO_TONES_IDLE;
407 break;
408 }
409 case AUDIO_TONES_STOP_REQ:
410 {
411 /* event error - send an error message*/
412 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_STOP *)(p_message))->return_path);
413
414 audio_tones_error_trace(AUDIO_ERROR_STOP_EVENT);
415 break;
416 }
417 case AUDIO_TONES_START_REQ:
418 {
419 /* event error - send an error message*/
420 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_START *)(p_message))->return_path);
421
422 audio_tones_error_trace(AUDIO_ERROR_START_EVENT);
423 break;
424 }
425 }
426 break;
427 } /* case AUDIO_TONES_WAIT_STOP_CON */
428
429 } /* switch(p_audio_gbl_var->tones.state) */
430 } /*********************** End of audio_tones_manager function **********************/
431
432 #endif /* #if (TONE) */
433 #endif /* #ifdef RVM_AUDIO_MAIN_SWE */