FreeCalypso > hg > fc-tourmaline
comparison src/cs/services/audio/audio_mode_volume.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4e78acac3d88 |
---|---|
1 /****************************************************************************/ | |
2 /* */ | |
3 /* File Name: audio_mode_volume.c */ | |
4 /* */ | |
5 /* Purpose: This file contains all the functions used for audio mode */ | |
6 /* speaker volume services. */ | |
7 /* */ | |
8 /* Version 0.1 */ | |
9 /* */ | |
10 /* Date Modification */ | |
11 /* ------------------------------------------------------------------------*/ | |
12 /* 14 Jan 2002 Create */ | |
13 /* */ | |
14 /* Author Francois Mazard */ | |
15 /* */ | |
16 /* (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved*/ | |
17 /****************************************************************************/ | |
18 | |
19 #include "rv/rv_defined_swe.h" | |
20 | |
21 #ifdef RVM_AUDIO_MAIN_SWE | |
22 #ifndef _WINDOWS | |
23 #include "config/swconfig.cfg" | |
24 #include "config/sys.cfg" | |
25 #include "config/chipset.cfg" | |
26 #endif | |
27 | |
28 #include "l1_confg.h" | |
29 #include "rv/rv_general.h" | |
30 #include "rvm/rvm_gen.h" | |
31 #include "audio/audio_ffs_i.h" | |
32 #include "audio/audio_api.h" | |
33 #include "audio/audio_structs_i.h" | |
34 #include "audio/audio_error_hdlr_i.h" | |
35 #include "audio/audio_var_i.h" | |
36 #include "audio/audio_messages_i.h" | |
37 #include "audio/audio_macro_i.h" | |
38 #include "rvf/rvf_target.h" | |
39 #include "audio/audio_const_i.h" | |
40 | |
41 /* include the usefull L1 header */ | |
42 #ifdef _WINDOWS | |
43 #define BOOL_FLAG | |
44 //#define CHAR_FLAG | |
45 #endif | |
46 #include "l1_types.h" | |
47 #include "l1audio_const.h" | |
48 #include "l1audio_cust.h" | |
49 #include "l1audio_defty.h" | |
50 #include "l1audio_msgty.h" | |
51 #include "l1audio_signa.h" | |
52 #if TESTMODE | |
53 #include "l1tm_defty.h" | |
54 #endif | |
55 #if (L1_GTT == 1) | |
56 #include "l1gtt_const.h" | |
57 #include "l1gtt_defty.h" | |
58 #endif | |
59 #include "l1_const.h" | |
60 #include "l1_defty.h" | |
61 #include "l1_msgty.h" | |
62 #include "l1_signa.h" | |
63 #ifdef _WINDOWS | |
64 #define L1_ASYNC_C | |
65 #endif | |
66 #include "l1_varex.h" | |
67 | |
68 #ifdef _WINDOWS | |
69 #include "audio/tests/audio_test.h" | |
70 #endif | |
71 | |
72 /* external functions */ | |
73 /* write */ | |
74 extern T_AUDIO_RET audio_mode_speaker_volume_write (T_AUDIO_SPEAKER_LEVEL *data); | |
75 /* read */ | |
76 extern T_AUDIO_RET audio_mode_speaker_volume_read (T_AUDIO_SPEAKER_LEVEL *data); | |
77 | |
78 /********************************************************************************/ | |
79 /* */ | |
80 /* Function Name: audio_mode_speaker_volume_send_status */ | |
81 /* */ | |
82 /* Purpose: This function sends the audio mode speaker volume status to */ | |
83 /* the entity. */ | |
84 /* */ | |
85 /* Input Parameters: */ | |
86 /* status, */ | |
87 /* return path */ | |
88 /* */ | |
89 /* Output Parameters: */ | |
90 /* None. */ | |
91 /* */ | |
92 /* Note: */ | |
93 /* None. */ | |
94 /* */ | |
95 /* Revision History: */ | |
96 /* None. */ | |
97 /* */ | |
98 /********************************************************************************/ | |
99 void audio_mode_speaker_volume_send_status (T_AUDIO_RET status, T_RV_RETURN return_path) | |
100 { | |
101 void *p_send_message = NULL; | |
102 T_RVF_MB_STATUS mb_status = RVF_RED; | |
103 | |
104 while (mb_status == RVF_RED) | |
105 { | |
106 /* allocate the message buffer */ | |
107 mb_status = rvf_get_buf (p_audio_gbl_var->mb_external, | |
108 sizeof (T_AUDIO_VOLUME_DONE), | |
109 (T_RVF_BUFFER **) (&p_send_message)); | |
110 | |
111 /* If insufficient resources, then report a memory error and abort. */ | |
112 /* and wait until more ressource is given */ | |
113 if (mb_status == RVF_RED) | |
114 { | |
115 audio_mode_error_trace(AUDIO_ENTITY_NO_MEMORY); | |
116 rvf_delay(RVF_MS_TO_TICKS(1000)); | |
117 } | |
118 } | |
119 /*fill the header of the message */ | |
120 ((T_AUDIO_VOLUME_DONE *)(p_send_message))->os_hdr.msg_id = | |
121 AUDIO_SPEAKER_VOLUME_DONE; | |
122 | |
123 /* fill the status parameters */ | |
124 ((T_AUDIO_VOLUME_DONE *)(p_send_message))->status = status; | |
125 | |
126 if (return_path.callback_func == NULL) | |
127 { | |
128 /* send the message to the entity */ | |
129 rvf_send_msg (return_path.addr_id, | |
130 p_send_message); | |
131 } | |
132 else | |
133 { | |
134 /* call the callback function */ | |
135 (*return_path.callback_func)((void *)(p_send_message)); | |
136 rvf_free_buf((T_RVF_BUFFER *)p_send_message); | |
137 } | |
138 } | |
139 | |
140 /********************************************************************************/ | |
141 /* */ | |
142 /* Function Name: audio_mode_speaker_volume_manager */ | |
143 /* */ | |
144 /* Purpose: This function manage the audio mode save services. */ | |
145 /* */ | |
146 /* Input Parameters: */ | |
147 /* Audio message. */ | |
148 /* */ | |
149 /* Output Parameters: */ | |
150 /* None. */ | |
151 /* */ | |
152 /* Note: */ | |
153 /* None. */ | |
154 /* */ | |
155 /* Revision History: */ | |
156 /* None. */ | |
157 /* */ | |
158 /********************************************************************************/ | |
159 void audio_mode_speaker_volume_manager (T_RV_HDR *p_message) | |
160 { | |
161 T_AUDIO_SPEAKER_LEVEL volume; | |
162 #ifndef _WINDOWS | |
163 T_FFS_FD audio_volume_ffs_fd; | |
164 #endif | |
165 | |
166 switch (((T_AUDIO_SPEAKER_VOLUME_REQ *)p_message)->volume.volume_action) | |
167 { | |
168 case AUDIO_SPEAKER_VOLUME_INCREASE: | |
169 { | |
170 if ( (audio_mode_speaker_volume_read(&volume)) == AUDIO_ERROR ) | |
171 { | |
172 AUDIO_SEND_TRACE("AUDIO MODE SPEAKER VOLUME: can't read the current volume", RV_TRACE_LEVEL_ERROR); | |
173 audio_mode_speaker_volume_send_status (AUDIO_ERROR, | |
174 ((T_AUDIO_SPEAKER_VOLUME_REQ *)p_message)->return_path); | |
175 return; | |
176 } | |
177 | |
178 if (volume.audio_speaker_level == AUDIO_SPEAKER_VOLUME_MUTE) | |
179 { | |
180 volume.audio_speaker_level = AUDIO_SPEAKER_VOLUME_24dB; | |
181 } | |
182 else | |
183 if (volume.audio_speaker_level == AUDIO_SPEAKER_VOLUME_24dB) | |
184 { | |
185 volume.audio_speaker_level = AUDIO_SPEAKER_VOLUME_18dB; | |
186 } | |
187 else | |
188 if (volume.audio_speaker_level == AUDIO_SPEAKER_VOLUME_0dB) | |
189 { | |
190 volume.audio_speaker_level = AUDIO_SPEAKER_VOLUME_0dB; | |
191 } | |
192 else | |
193 { | |
194 volume.audio_speaker_level += 50; | |
195 } | |
196 break; | |
197 } | |
198 case AUDIO_SPEAKER_VOLUME_DECREASE: | |
199 { | |
200 if ( (audio_mode_speaker_volume_read(&volume)) == AUDIO_ERROR ) | |
201 { | |
202 AUDIO_SEND_TRACE("AUDIO MODE SPEAKER VOLUME: can't read the current volume", RV_TRACE_LEVEL_ERROR); | |
203 audio_mode_speaker_volume_send_status (AUDIO_ERROR, | |
204 ((T_AUDIO_SPEAKER_VOLUME_REQ *)p_message)->return_path); | |
205 return; | |
206 } | |
207 | |
208 if (volume.audio_speaker_level == AUDIO_SPEAKER_VOLUME_MUTE) | |
209 { | |
210 volume.audio_speaker_level = AUDIO_SPEAKER_VOLUME_MUTE; | |
211 } | |
212 else | |
213 if (volume.audio_speaker_level == AUDIO_SPEAKER_VOLUME_24dB) | |
214 { | |
215 volume.audio_speaker_level = AUDIO_SPEAKER_VOLUME_MUTE; | |
216 } | |
217 else | |
218 if (volume.audio_speaker_level == AUDIO_SPEAKER_VOLUME_18dB) | |
219 { | |
220 volume.audio_speaker_level = AUDIO_SPEAKER_VOLUME_24dB; | |
221 } | |
222 else | |
223 { | |
224 volume.audio_speaker_level -= 50; | |
225 } | |
226 break; | |
227 } | |
228 case AUDIO_SPEAKER_VOLUME_SET: | |
229 { | |
230 volume.audio_speaker_level = ((T_AUDIO_SPEAKER_VOLUME_REQ *)p_message)->volume.value; | |
231 break; | |
232 } | |
233 } | |
234 | |
235 /* Open the volume file */ | |
236 #ifndef _WINDOWS | |
237 audio_volume_ffs_fd = ffs_open(p_audio_gbl_var->audio_mode_var.audio_volume_var.audio_volume_path_name, | |
238 FFS_O_CREATE | FFS_O_WRONLY | FFS_O_TRUNC | FFS_O_APPEND); | |
239 if (audio_volume_ffs_fd <= 0) | |
240 { | |
241 AUDIO_SEND_TRACE("AUDIO MODE SPEAKER VOLUME: can't open the current volume file", RV_TRACE_LEVEL_ERROR); | |
242 /* Close the file */ | |
243 ffs_close(audio_volume_ffs_fd); | |
244 | |
245 audio_mode_speaker_volume_send_status (AUDIO_ERROR, | |
246 ((T_AUDIO_SPEAKER_VOLUME_REQ *)p_message)->return_path); | |
247 return; | |
248 } | |
249 | |
250 /* Save the audio speaker volume structure from the FFS */ | |
251 if ( (ffs_write (audio_volume_ffs_fd, | |
252 &volume, | |
253 sizeof(T_AUDIO_SPEAKER_LEVEL))) < EFFS_OK ) | |
254 { | |
255 AUDIO_SEND_TRACE("AUDIO MODE SPEAKER VOLUME: impossible to save the current speaker volume", RV_TRACE_LEVEL_ERROR); | |
256 | |
257 /* Close the file */ | |
258 ffs_close(audio_volume_ffs_fd); | |
259 | |
260 /* send the status message */ | |
261 audio_mode_speaker_volume_send_status (AUDIO_ERROR, | |
262 ((T_AUDIO_SPEAKER_VOLUME_REQ *)p_message)->return_path); | |
263 return; | |
264 } | |
265 | |
266 /* Close the file */ | |
267 ffs_close(audio_volume_ffs_fd); | |
268 #else | |
269 #if ((AUDIO_REGR == SW_COMPILED) || (AUDIO_MISC == SW_COMPILED)) | |
270 p_audio_test->speaker_volume_1.audio_speaker_level = volume.audio_speaker_level; | |
271 #endif | |
272 #endif | |
273 | |
274 /* Fill the audio volume structure */ | |
275 if ( (audio_mode_speaker_volume_write(&volume)) == AUDIO_ERROR) | |
276 { | |
277 AUDIO_SEND_TRACE("AUDIO MODE LOAD: error in the the audio speaker volume set function", RV_TRACE_LEVEL_ERROR); | |
278 | |
279 /* send the status message */ | |
280 audio_mode_speaker_volume_send_status (AUDIO_ERROR, | |
281 ((T_AUDIO_SPEAKER_VOLUME_REQ *)p_message)->return_path); | |
282 | |
283 return; | |
284 } | |
285 | |
286 /* send the good status message */ | |
287 audio_mode_speaker_volume_send_status (AUDIO_OK, | |
288 ((T_AUDIO_SPEAKER_VOLUME_REQ *)p_message)->return_path); | |
289 } | |
290 #endif /* RVM_AUDIO_MAIN_SWE */ |