diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2006-09-10 02:00:40 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2006-09-10 02:00:40 +0000 |
commit | 3d2e10bcbd13ec48decafe49f32afcc12c5e185a (patch) | |
tree | 60c490e727a28fd2359c3d185cf2a4f5fd8c328b /firmware/backlight.c | |
parent | 24ca76ffec3e0d782f75ac1cca2c0b2c8b71f5db (diff) | |
download | rockbox-3d2e10bcbd13ec48decafe49f32afcc12c5e185a.tar.gz rockbox-3d2e10bcbd13ec48decafe49f32afcc12c5e185a.zip |
Added remote backlight on hold option to players with remote hold switch. Disabled IRQs while reading pcf50606 ADC. This seems to have stopped buttons becoming unresponsive when using remote. Maybe fixes other button glitches as well?
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10911 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/backlight.c')
-rw-r--r-- | firmware/backlight.c | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c index 6f7432c9e2..bf88cbe9bc 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c | |||
@@ -178,6 +178,9 @@ static int remote_backlight_timeout = 5*HZ; | |||
178 | #ifdef CONFIG_CHARGING | 178 | #ifdef CONFIG_CHARGING |
179 | static int remote_backlight_timeout_plugged = 5*HZ; | 179 | static int remote_backlight_timeout_plugged = 5*HZ; |
180 | #endif | 180 | #endif |
181 | #ifdef HAS_REMOTE_BUTTON_HOLD | ||
182 | static int remote_backlight_on_button_hold = 0; | ||
183 | #endif | ||
181 | #endif | 184 | #endif |
182 | 185 | ||
183 | #ifdef HAVE_LCD_SLEEP | 186 | #ifdef HAVE_LCD_SLEEP |
@@ -461,6 +464,10 @@ static void remote_backlight_update_state(void) | |||
461 | if (remote_backlight_timer < 0) | 464 | if (remote_backlight_timer < 0) |
462 | { | 465 | { |
463 | remote_backlight_timer = 0; /* Disable the timeout */ | 466 | remote_backlight_timer = 0; /* Disable the timeout */ |
467 | #ifdef HAS_REMOTE_BUTTON_HOLD | ||
468 | if (remote_backlight_on_button_hold == 2 && remote_button_hold()) | ||
469 | return; /* Keep on if "On" */ | ||
470 | #endif | ||
464 | __remote_backlight_off(); | 471 | __remote_backlight_off(); |
465 | } | 472 | } |
466 | else | 473 | else |
@@ -471,8 +478,18 @@ static void remote_backlight_update_state(void) | |||
471 | backlight_update_state(); | 478 | backlight_update_state(); |
472 | } | 479 | } |
473 | else | 480 | else |
474 | #endif | 481 | #endif |
482 | { | ||
483 | #ifdef HAS_REMOTE_BUTTON_HOLD | ||
484 | if (remote_backlight_on_button_hold == 1 && remote_button_hold()) | ||
485 | { | ||
486 | /* Keep off if "Off". */ | ||
487 | remote_backlight_timer = 0; /* Disable the timeout */ | ||
488 | return; | ||
489 | } | ||
490 | #endif | ||
475 | __remote_backlight_on(); | 491 | __remote_backlight_on(); |
492 | } | ||
476 | } | 493 | } |
477 | } | 494 | } |
478 | #endif /* HAVE_REMOTE_LCD */ | 495 | #endif /* HAVE_REMOTE_LCD */ |
@@ -493,9 +510,15 @@ void backlight_thread(void) | |||
493 | 510 | ||
494 | case REMOTE_BACKLIGHT_OFF: | 511 | case REMOTE_BACKLIGHT_OFF: |
495 | remote_backlight_timer = 0; /* Disable the timeout */ | 512 | remote_backlight_timer = 0; /* Disable the timeout */ |
513 | #ifdef HAS_REMOTE_BUTTON_HOLD | ||
514 | if (remote_backlight_on_button_hold == 2 && | ||
515 | remote_button_hold()) | ||
516 | break; /* Keep on if "On" */ | ||
517 | #endif | ||
496 | __remote_backlight_off(); | 518 | __remote_backlight_off(); |
497 | break; | 519 | break; |
498 | #endif | 520 | #endif /* HAVE_REMOTE_LCD */ |
521 | |||
499 | case BACKLIGHT_ON: | 522 | case BACKLIGHT_ON: |
500 | backlight_update_state(); | 523 | backlight_update_state(); |
501 | break; | 524 | break; |
@@ -701,9 +724,7 @@ void backlight_hold_changed(bool hold_button) | |||
701 | set to "Normal" */ | 724 | set to "Normal" */ |
702 | /* Queue or freeze */ | 725 | /* Queue or freeze */ |
703 | if (hold_button && backlight_on_button_hold == 1) | 726 | if (hold_button && backlight_on_button_hold == 1) |
704 | { | ||
705 | backlight_off(); /* setting == Off */ | 727 | backlight_off(); /* setting == Off */ |
706 | } | ||
707 | else /* setting == On, Normal, no hold button, or anything else */ | 728 | else /* setting == On, Normal, no hold button, or anything else */ |
708 | backlight_on(); | 729 | backlight_on(); |
709 | } | 730 | } |
@@ -774,6 +795,34 @@ void remote_backlight_set_timeout_plugged(int index) | |||
774 | } | 795 | } |
775 | #endif /* CONFIG_CHARGING */ | 796 | #endif /* CONFIG_CHARGING */ |
776 | 797 | ||
798 | #ifdef HAS_REMOTE_BUTTON_HOLD | ||
799 | /* Remote hold button change event handler. */ | ||
800 | void remote_backlight_hold_changed(bool rc_hold_button) | ||
801 | { | ||
802 | /* Hold switch overrides all backlight behavior except when | ||
803 | set to "Normal" */ | ||
804 | /* Queue or freeze */ | ||
805 | if (rc_hold_button && remote_backlight_on_button_hold == 1) | ||
806 | remote_backlight_off(); /* setting == Off */ | ||
807 | else /* setting == On, Normal, no hold button, or anything else */ | ||
808 | remote_backlight_on(); | ||
809 | |||
810 | } | ||
811 | |||
812 | void remote_backlight_set_on_button_hold(int index) | ||
813 | { | ||
814 | if ((unsigned)index >= 3) | ||
815 | /* if given a weird value, use default */ | ||
816 | index = 0; | ||
817 | |||
818 | if (index == remote_backlight_on_button_hold) | ||
819 | return; | ||
820 | |||
821 | remote_backlight_on_button_hold = index; | ||
822 | remote_backlight_hold_changed(remote_button_hold()); | ||
823 | } | ||
824 | #endif /* HAS_REMOTE_BUTTON_HOLD */ | ||
825 | |||
777 | /* return value in ticks; 0 means always on, <0 means always off */ | 826 | /* return value in ticks; 0 means always on, <0 means always off */ |
778 | int remote_backlight_get_current_timeout(void) | 827 | int remote_backlight_get_current_timeout(void) |
779 | { | 828 | { |