summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-07-27 19:42:58 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-07-27 19:42:58 +0000
commit2b934027d89e4d0e857c6f4dd8280a08d35ec3ed (patch)
treefcf7f70e13c2dc2f4d0dbaef004492d9bb92cf13 /apps
parentb3d0b6ea2a9a75080c502f77fada8c23a62368c2 (diff)
downloadrockbox-2b934027d89e4d0e857c6f4dd8280a08d35ec3ed.tar.gz
rockbox-2b934027d89e4d0e857c6f4dd8280a08d35ec3ed.zip
Better keylock and button handling, with visual feedback
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1465 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/wps.c163
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
44static void draw_screen(struct mp3entry* id3) 50static 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
141void 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 */
136int wps_show(void) 166int 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