diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/wps.c | 163 |
1 files changed, 138 insertions, 25 deletions
diff --git a/apps/wps.c b/apps/wps.c index 3462be90de..24a31354ff 100644 --- a/apps/wps.c +++ b/apps/wps.c | |||
@@ -41,6 +41,12 @@ | |||
41 | #define PLAY_DISPLAY_FILENAME_SCROLL 1 | 41 | #define PLAY_DISPLAY_FILENAME_SCROLL 1 |
42 | #define PLAY_DISPLAY_TRACK_TITLE 2 | 42 | #define PLAY_DISPLAY_TRACK_TITLE 2 |
43 | 43 | ||
44 | #ifdef HAVE_RECORDER_KEYPAD | ||
45 | #define RELEASE_MASK (BUTTON_F1 | BUTTON_DOWN) | ||
46 | #else | ||
47 | #define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP) | ||
48 | #endif | ||
49 | |||
44 | static void draw_screen(struct mp3entry* id3) | 50 | static void draw_screen(struct mp3entry* id3) |
45 | { | 51 | { |
46 | lcd_clear_display(); | 52 | lcd_clear_display(); |
@@ -132,18 +138,51 @@ static void draw_screen(struct mp3entry* id3) | |||
132 | lcd_update(); | 138 | lcd_update(); |
133 | } | 139 | } |
134 | 140 | ||
141 | void display_keylock_text(bool locked) | ||
142 | { | ||
143 | lcd_clear_display(); | ||
144 | |||
145 | #ifdef HAVE_LCD_CHARCELLS | ||
146 | if(locked) | ||
147 | lcd_puts(0, 0, "Keylock ON"); | ||
148 | else | ||
149 | lcd_puts(0, 0, "Keylock OFF"); | ||
150 | #else | ||
151 | if(locked) | ||
152 | { | ||
153 | lcd_puts(2, 3, "Key lock is ON"); | ||
154 | } | ||
155 | else | ||
156 | { | ||
157 | lcd_puts(2, 3, "Key lock is OFF"); | ||
158 | } | ||
159 | lcd_update(); | ||
160 | #endif | ||
161 | |||
162 | sleep(HZ); | ||
163 | } | ||
164 | |||
135 | /* demonstrates showing different formats from playtune */ | 165 | /* demonstrates showing different formats from playtune */ |
136 | int wps_show(void) | 166 | int wps_show(void) |
137 | { | 167 | { |
138 | static bool playing = true; | 168 | struct mp3entry* id3 = NULL; |
139 | struct mp3entry* id3 = mpeg_current_track(); | ||
140 | bool keys_locked = false; | 169 | bool keys_locked = false; |
141 | bool dont_go_to_menu = false; | 170 | bool dont_go_to_menu = false; |
171 | bool menu_button_is_down = false; | ||
172 | bool pending_keylock = true; /* Keylock will go ON next time */ | ||
173 | int old_release_mask; | ||
174 | int x = 0; | ||
142 | 175 | ||
143 | lcd_clear_display(); | 176 | old_release_mask = button_set_release(RELEASE_MASK); |
144 | draw_screen(id3); | ||
145 | 177 | ||
146 | while ( 1 ) { | 178 | if(mpeg_is_playing()) |
179 | { | ||
180 | id3 = mpeg_current_track(); | ||
181 | draw_screen(id3); | ||
182 | } | ||
183 | |||
184 | while ( 1 ) | ||
185 | { | ||
147 | int i; | 186 | int i; |
148 | char buffer[32]; | 187 | char buffer[32]; |
149 | 188 | ||
@@ -154,7 +193,7 @@ int wps_show(void) | |||
154 | draw_screen(id3); | 193 | draw_screen(id3); |
155 | } | 194 | } |
156 | 195 | ||
157 | if (playing && id3) | 196 | if (mpeg_is_playing() && id3) |
158 | { | 197 | { |
159 | #ifdef HAVE_LCD_BITMAP | 198 | #ifdef HAVE_LCD_BITMAP |
160 | snprintf(buffer,sizeof(buffer), "Time: %d:%02d / %d:%02d", | 199 | snprintf(buffer,sizeof(buffer), "Time: %d:%02d / %d:%02d", |
@@ -166,7 +205,8 @@ int wps_show(void) | |||
166 | lcd_puts(0, 6, buffer); | 205 | lcd_puts(0, 6, buffer); |
167 | lcd_update(); | 206 | lcd_update(); |
168 | #else | 207 | #else |
169 | // Display time with the filename scroll only because the screen has room. | 208 | /* Display time with the filename scroll only because |
209 | the screen has room. */ | ||
170 | if (global_settings.wps_display == PLAY_DISPLAY_FILENAME_SCROLL) | 210 | if (global_settings.wps_display == PLAY_DISPLAY_FILENAME_SCROLL) |
171 | { | 211 | { |
172 | snprintf(buffer,sizeof(buffer), "Time: %d:%02d / %d:%02d", | 212 | snprintf(buffer,sizeof(buffer), "Time: %d:%02d / %d:%02d", |
@@ -179,7 +219,7 @@ int wps_show(void) | |||
179 | lcd_update(); | 219 | lcd_update(); |
180 | } | 220 | } |
181 | #endif | 221 | #endif |
182 | } | 222 | } |
183 | 223 | ||
184 | status_draw(); | 224 | status_draw(); |
185 | 225 | ||
@@ -190,13 +230,32 @@ int wps_show(void) | |||
190 | #endif | 230 | #endif |
191 | 231 | ||
192 | for ( i=0;i<5;i++ ) { | 232 | for ( i=0;i<5;i++ ) { |
193 | switch ( button_get(false) ) { | 233 | int button = button_get(false); |
234 | |||
235 | if(button == BUTTON_NONE) | ||
236 | x++; | ||
237 | else | ||
238 | { | ||
239 | if(x) | ||
240 | debugf("%d BUTTON_NONE\n", x); | ||
241 | debugf("Btn: %04x - lock: %d\n", button, keys_locked); | ||
242 | x = 0; | ||
243 | } | ||
244 | |||
245 | switch ( button ) | ||
246 | { | ||
194 | case BUTTON_ON: | 247 | case BUTTON_ON: |
195 | if(keys_locked) | 248 | if (keys_locked) |
249 | { | ||
250 | display_keylock_text(keys_locked); | ||
251 | draw_screen(id3); | ||
196 | break; | 252 | break; |
253 | } | ||
254 | |||
197 | #ifdef HAVE_LCD_CHARCELLS | 255 | #ifdef HAVE_LCD_CHARCELLS |
198 | lcd_icon(ICON_RECORD, false); | 256 | lcd_icon(ICON_RECORD, false); |
199 | #endif | 257 | #endif |
258 | button_set_release(old_release_mask); | ||
200 | return 0; | 259 | return 0; |
201 | 260 | ||
202 | #ifdef HAVE_RECORDER_KEYPAD | 261 | #ifdef HAVE_RECORDER_KEYPAD |
@@ -205,9 +264,13 @@ int wps_show(void) | |||
205 | case BUTTON_UP: | 264 | case BUTTON_UP: |
206 | #endif | 265 | #endif |
207 | if (keys_locked) | 266 | if (keys_locked) |
267 | { | ||
268 | display_keylock_text(keys_locked); | ||
269 | draw_screen(id3); | ||
208 | break; | 270 | break; |
271 | } | ||
209 | 272 | ||
210 | if ( playing ) | 273 | if ( mpeg_is_playing() ) |
211 | { | 274 | { |
212 | mpeg_pause(); | 275 | mpeg_pause(); |
213 | status_set_playmode(STATUS_PAUSE); | 276 | status_set_playmode(STATUS_PAUSE); |
@@ -217,14 +280,17 @@ int wps_show(void) | |||
217 | mpeg_resume(); | 280 | mpeg_resume(); |
218 | status_set_playmode(STATUS_PLAY); | 281 | status_set_playmode(STATUS_PLAY); |
219 | } | 282 | } |
220 | |||
221 | playing = !playing; | ||
222 | break; | 283 | break; |
223 | 284 | ||
224 | #ifdef HAVE_RECORDER_KEYPAD | 285 | #ifdef HAVE_RECORDER_KEYPAD |
225 | case BUTTON_UP: | 286 | case BUTTON_UP: |
226 | if (keys_locked) | 287 | if (keys_locked) |
288 | { | ||
289 | display_keylock_text(keys_locked); | ||
290 | draw_screen(id3); | ||
227 | break; | 291 | break; |
292 | } | ||
293 | |||
228 | global_settings.volume++; | 294 | global_settings.volume++; |
229 | if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME)) | 295 | if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME)) |
230 | global_settings.volume = mpeg_sound_max(SOUND_VOLUME); | 296 | global_settings.volume = mpeg_sound_max(SOUND_VOLUME); |
@@ -233,7 +299,12 @@ int wps_show(void) | |||
233 | 299 | ||
234 | case BUTTON_DOWN: | 300 | case BUTTON_DOWN: |
235 | if (keys_locked) | 301 | if (keys_locked) |
302 | { | ||
303 | display_keylock_text(keys_locked); | ||
304 | draw_screen(id3); | ||
236 | break; | 305 | break; |
306 | } | ||
307 | |||
237 | global_settings.volume--; | 308 | global_settings.volume--; |
238 | if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) | 309 | if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) |
239 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); | 310 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); |
@@ -243,13 +314,22 @@ int wps_show(void) | |||
243 | 314 | ||
244 | case BUTTON_LEFT: | 315 | case BUTTON_LEFT: |
245 | if (keys_locked) | 316 | if (keys_locked) |
317 | { | ||
318 | display_keylock_text(keys_locked); | ||
319 | draw_screen(id3); | ||
246 | break; | 320 | break; |
321 | } | ||
322 | |||
247 | mpeg_prev(); | 323 | mpeg_prev(); |
248 | break; | 324 | break; |
249 | 325 | ||
250 | case BUTTON_RIGHT: | 326 | case BUTTON_RIGHT: |
251 | if (keys_locked) | 327 | if (keys_locked) |
328 | { | ||
329 | display_keylock_text(keys_locked); | ||
330 | draw_screen(id3); | ||
252 | break; | 331 | break; |
332 | } | ||
253 | mpeg_next(); | 333 | mpeg_next(); |
254 | break; | 334 | break; |
255 | 335 | ||
@@ -272,22 +352,50 @@ int wps_show(void) | |||
272 | 352 | ||
273 | case BUTTON_MENU: | 353 | case BUTTON_MENU: |
274 | lcd_icon(ICON_PARAM, true); | 354 | lcd_icon(ICON_PARAM, true); |
355 | menu_button_is_down = true; | ||
275 | break; | 356 | break; |
276 | #endif | ||
277 | 357 | ||
358 | case BUTTON_STOP | BUTTON_REL: | ||
359 | /* The STOP key has been release while the MENU key | ||
360 | was held */ | ||
361 | if(menu_button_is_down) | ||
362 | pending_keylock = !pending_keylock; | ||
363 | break; | ||
364 | #else | ||
365 | case BUTTON_F1: | ||
366 | menu_button_is_down = true; | ||
367 | break; | ||
368 | |||
369 | case BUTTON_DOWN | BUTTON_REL: | ||
370 | /* The DOWN key has been release while the F1 key | ||
371 | was held */ | ||
372 | if(menu_button_is_down) | ||
373 | { | ||
374 | pending_keylock = !pending_keylock; | ||
375 | debugf("pending: %d\n", pending_keylock); | ||
376 | } | ||
377 | break; | ||
378 | #endif | ||
379 | |||
278 | #ifdef HAVE_RECORDER_KEYPAD | 380 | #ifdef HAVE_RECORDER_KEYPAD |
279 | case BUTTON_F1 | BUTTON_DOWN: | 381 | case BUTTON_F1 | BUTTON_DOWN: |
280 | #else | 382 | #else |
281 | case BUTTON_MENU | BUTTON_STOP: | 383 | case BUTTON_MENU | BUTTON_STOP: |
282 | #endif | 384 | #endif |
283 | keys_locked = !keys_locked; | 385 | if(keys_locked != pending_keylock) |
386 | { | ||
387 | keys_locked = pending_keylock; | ||
388 | |||
284 | #ifdef HAVE_LCD_CHARCELLS | 389 | #ifdef HAVE_LCD_CHARCELLS |
285 | lcd_icon(ICON_PARAM, false); | 390 | if(keys_locked) |
286 | if(keys_locked) | 391 | lcd_icon(ICON_RECORD, true); |
287 | lcd_icon(ICON_RECORD, true); | 392 | else |
288 | else | 393 | lcd_icon(ICON_RECORD, false); |
289 | lcd_icon(ICON_RECORD, false); | ||
290 | #endif | 394 | #endif |
395 | display_keylock_text(keys_locked); | ||
396 | draw_screen(id3); | ||
397 | } | ||
398 | |||
291 | dont_go_to_menu = true; | 399 | dont_go_to_menu = true; |
292 | break; | 400 | break; |
293 | 401 | ||
@@ -299,16 +407,15 @@ int wps_show(void) | |||
299 | #ifdef HAVE_LCD_CHARCELLS | 407 | #ifdef HAVE_LCD_CHARCELLS |
300 | lcd_icon(ICON_PARAM, false); | 408 | lcd_icon(ICON_PARAM, false); |
301 | #endif | 409 | #endif |
410 | menu_button_is_down = false; | ||
302 | if(!keys_locked && !dont_go_to_menu) | 411 | if(!keys_locked && !dont_go_to_menu) |
303 | { | 412 | { |
304 | lcd_stop_scroll(); | 413 | lcd_stop_scroll(); |
414 | button_set_release(old_release_mask); | ||
305 | main_menu(); | 415 | main_menu(); |
416 | old_release_mask = button_set_release(RELEASE_MASK); | ||
306 | id3 = mpeg_current_track(); | 417 | id3 = mpeg_current_track(); |
307 | draw_screen(id3); | 418 | draw_screen(id3); |
308 | /* Prevent any stray BUTTON_REL events from going | ||
309 | back to the main menu until we get a new | ||
310 | BUTTON_MENU event */ | ||
311 | dont_go_to_menu = true; | ||
312 | } | 419 | } |
313 | else | 420 | else |
314 | { | 421 | { |
@@ -319,12 +426,18 @@ int wps_show(void) | |||
319 | #ifdef HAVE_RECORDER_KEYPAD | 426 | #ifdef HAVE_RECORDER_KEYPAD |
320 | case BUTTON_OFF: | 427 | case BUTTON_OFF: |
321 | #else | 428 | #else |
322 | case BUTTON_DOWN: | 429 | case BUTTON_STOP: |
323 | #endif | 430 | #endif |
324 | if (keys_locked) | 431 | if (keys_locked) |
432 | { | ||
433 | display_keylock_text(keys_locked); | ||
434 | draw_screen(id3); | ||
325 | break; | 435 | break; |
436 | } | ||
437 | |||
326 | mpeg_stop(); | 438 | mpeg_stop(); |
327 | status_set_playmode(STATUS_STOP); | 439 | status_set_playmode(STATUS_STOP); |
440 | button_set_release(old_release_mask); | ||
328 | return 0; | 441 | return 0; |
329 | 442 | ||
330 | #ifndef SIMULATOR | 443 | #ifndef SIMULATOR |