diff options
-rw-r--r-- | firmware/backlight.c | 73 |
1 files changed, 42 insertions, 31 deletions
diff --git a/firmware/backlight.c b/firmware/backlight.c index bf2baeb1c3..7e7f745298 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c | |||
@@ -44,7 +44,6 @@ | |||
44 | #include "backlight-target.h" | 44 | #include "backlight-target.h" |
45 | #endif | 45 | #endif |
46 | 46 | ||
47 | |||
48 | #if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ | 47 | #if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ |
49 | || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) | 48 | || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) |
50 | #include "backlight-sw-fading.h" | 49 | #include "backlight-sw-fading.h" |
@@ -94,6 +93,8 @@ static inline void _remote_backlight_off(void) | |||
94 | 93 | ||
95 | #if defined(HAVE_BACKLIGHT) && defined(BACKLIGHT_FULL_INIT) | 94 | #if defined(HAVE_BACKLIGHT) && defined(BACKLIGHT_FULL_INIT) |
96 | 95 | ||
96 | #define BACKLIGHT_THREAD_TIMEOUT HZ | ||
97 | |||
97 | enum { | 98 | enum { |
98 | BACKLIGHT_ON, | 99 | BACKLIGHT_ON, |
99 | BACKLIGHT_OFF, | 100 | BACKLIGHT_OFF, |
@@ -138,6 +139,7 @@ static int backlight_timeout_plugged = 5*HZ; | |||
138 | #ifdef HAS_BUTTON_HOLD | 139 | #ifdef HAS_BUTTON_HOLD |
139 | static int backlight_on_button_hold = 0; | 140 | static int backlight_on_button_hold = 0; |
140 | #endif | 141 | #endif |
142 | static void backlight_timeout_handler(void); | ||
141 | 143 | ||
142 | #ifdef HAVE_BUTTON_LIGHT | 144 | #ifdef HAVE_BUTTON_LIGHT |
143 | static int buttonlight_timer; | 145 | static int buttonlight_timer; |
@@ -534,6 +536,16 @@ static void remote_backlight_update_state(void) | |||
534 | } | 536 | } |
535 | } | 537 | } |
536 | #endif /* HAVE_REMOTE_LCD */ | 538 | #endif /* HAVE_REMOTE_LCD */ |
539 | static inline void do_backlight_off(void) | ||
540 | { | ||
541 | backlight_timer = 0; | ||
542 | #if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ | ||
543 | || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) | ||
544 | backlight_setup_fade_down(); | ||
545 | #else | ||
546 | _backlight_off(); | ||
547 | #endif /* CONFIG_BACKLIGHT_FADING */ | ||
548 | } | ||
537 | 549 | ||
538 | void backlight_thread(void) | 550 | void backlight_thread(void) |
539 | { | 551 | { |
@@ -544,11 +556,11 @@ void backlight_thread(void) | |||
544 | { | 556 | { |
545 | #if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ | 557 | #if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ |
546 | || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) | 558 | || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) |
547 | if (backlight_fading_state) | 559 | if (backlight_fading_state != NOT_FADING) |
548 | queue_wait_w_tmo(&backlight_queue, &ev, FADE_DELAY); | 560 | queue_wait_w_tmo(&backlight_queue, &ev, FADE_DELAY); |
549 | else | 561 | else |
550 | #endif | 562 | #endif |
551 | queue_wait(&backlight_queue, &ev); | 563 | queue_wait_w_tmo(&backlight_queue, &ev, BACKLIGHT_THREAD_TIMEOUT); |
552 | switch(ev.id) | 564 | switch(ev.id) |
553 | { /* These events must always be processed */ | 565 | { /* These events must always be processed */ |
554 | #ifdef _BACKLIGHT_FADE_BOOST | 566 | #ifdef _BACKLIGHT_FADE_BOOST |
@@ -585,8 +597,6 @@ void backlight_thread(void) | |||
585 | #endif /* HAVE_REMOTE_LCD/ HAVE_REMOTE_LCD_AS_MAIN */ | 597 | #endif /* HAVE_REMOTE_LCD/ HAVE_REMOTE_LCD_AS_MAIN */ |
586 | #endif /* !SIMULATOR */ | 598 | #endif /* !SIMULATOR */ |
587 | case SYS_USB_CONNECTED: | 599 | case SYS_USB_CONNECTED: |
588 | /* Tell the USB thread that we are safe */ | ||
589 | DEBUGF("backlight_thread got SYS_USB_CONNECTED\n"); | ||
590 | usb_acknowledge(SYS_USB_CONNECTED_ACK); | 600 | usb_acknowledge(SYS_USB_CONNECTED_ACK); |
591 | break; | 601 | break; |
592 | 602 | ||
@@ -623,13 +633,7 @@ void backlight_thread(void) | |||
623 | break; | 633 | break; |
624 | 634 | ||
625 | case BACKLIGHT_OFF: | 635 | case BACKLIGHT_OFF: |
626 | backlight_timer = 0; /* Disable the timeout */ | 636 | do_backlight_off(); |
627 | #if (CONFIG_BACKLIGHT_FADING != BACKLIGHT_FADING_SW_SETTING) \ | ||
628 | && (CONFIG_BACKLIGHT_FADING != BACKLIGHT_FADING_SW_HW_REG) | ||
629 | _backlight_off(); | ||
630 | #else | ||
631 | backlight_setup_fade_down(); | ||
632 | #endif /* CONFIG_BACKLIGHT_FADING */ | ||
633 | break; | 637 | break; |
634 | #ifdef HAVE_LCD_SLEEP | 638 | #ifdef HAVE_LCD_SLEEP |
635 | case LCD_SLEEP: | 639 | case LCD_SLEEP: |
@@ -660,51 +664,59 @@ void backlight_thread(void) | |||
660 | remote_backlight_update_state(); | 664 | remote_backlight_update_state(); |
661 | #endif | 665 | #endif |
662 | break; | 666 | break; |
667 | case SYS_TIMEOUT: | ||
663 | #if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ | 668 | #if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_SETTING) \ |
664 | || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) | 669 | || (CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG) |
665 | case SYS_TIMEOUT: | 670 | if (backlight_fading_state != NOT_FADING) |
666 | if ((_backlight_fade_step(backlight_fading_state))) | 671 | { |
667 | backlight_fading_state = NOT_FADING; /* finished fading */ | 672 | if ((_backlight_fade_step(backlight_fading_state))) |
668 | break; | 673 | backlight_fading_state = NOT_FADING; /* finished fading */ |
674 | } | ||
675 | else | ||
669 | #endif /* CONFIG_BACKLIGHT_FADING */ | 676 | #endif /* CONFIG_BACKLIGHT_FADING */ |
677 | backlight_timeout_handler(); | ||
678 | break; | ||
670 | } | 679 | } |
671 | } /* end while */ | 680 | } /* end while */ |
672 | } | 681 | } |
673 | 682 | ||
674 | static void backlight_tick(void) | 683 | static void backlight_timeout_handler(void) |
675 | { | 684 | { |
676 | if(backlight_timer) | 685 | if(backlight_timer > 0) |
677 | { | 686 | { |
678 | if(--backlight_timer == 0) | 687 | backlight_timer -= BACKLIGHT_THREAD_TIMEOUT; |
688 | if(backlight_timer <= 0) | ||
679 | { | 689 | { |
680 | backlight_off(); | 690 | do_backlight_off(); |
681 | } | 691 | } |
682 | } | 692 | } |
683 | #ifdef HAVE_LCD_SLEEP | 693 | #ifdef HAVE_LCD_SLEEP |
684 | else if(lcd_sleep_timer) | 694 | else if(lcd_sleep_timer > 0) |
685 | { | 695 | { |
686 | if(--lcd_sleep_timer == 0) | 696 | lcd_sleep_timer -= BACKLIGHT_THREAD_TIMEOUT; |
697 | if(lcd_sleep_timer <= 0) | ||
687 | { | 698 | { |
688 | /* Queue on bl thread or freeze! */ | 699 | lcd_sleep(); |
689 | queue_post(&backlight_queue, LCD_SLEEP, 0); | ||
690 | } | 700 | } |
691 | } | 701 | } |
692 | #endif /* HAVE_LCD_SLEEP */ | 702 | #endif /* HAVE_LCD_SLEEP */ |
693 | #ifdef HAVE_REMOTE_LCD | 703 | #ifdef HAVE_REMOTE_LCD |
694 | if(remote_backlight_timer) | 704 | if(remote_backlight_timer > 0) |
695 | { | 705 | { |
696 | if(--remote_backlight_timer == 0) | 706 | remote_backlight_timer -= BACKLIGHT_THREAD_TIMEOUT; |
707 | if(remote_backlight_timer <= 0) | ||
697 | { | 708 | { |
698 | remote_backlight_off(); | 709 | _remote_backlight_off(); |
699 | } | 710 | } |
700 | } | 711 | } |
701 | #endif /* HAVE_REMOVE_LCD */ | 712 | #endif /* HAVE_REMOVE_LCD */ |
702 | #ifdef HAVE_BUTTON_LIGHT | 713 | #ifdef HAVE_BUTTON_LIGHT |
703 | if (buttonlight_timer) | 714 | if (buttonlight_timer > 0) |
704 | { | 715 | { |
705 | if (--buttonlight_timer == 0) | 716 | buttonlight_timer -= BACKLIGHT_THREAD_TIMEOUT; |
717 | if (buttonlight_timer <= 0) | ||
706 | { | 718 | { |
707 | buttonlight_off(); | 719 | _buttonlight_off(); |
708 | } | 720 | } |
709 | } | 721 | } |
710 | #endif /* HAVE_BUTTON_LIGHT */ | 722 | #endif /* HAVE_BUTTON_LIGHT */ |
@@ -734,7 +746,6 @@ void backlight_init(void) | |||
734 | sizeof(backlight_stack), 0, backlight_thread_name | 746 | sizeof(backlight_stack), 0, backlight_thread_name |
735 | IF_PRIO(, PRIORITY_USER_INTERFACE) | 747 | IF_PRIO(, PRIORITY_USER_INTERFACE) |
736 | IF_COP(, CPU)); | 748 | IF_COP(, CPU)); |
737 | tick_add_task(backlight_tick); | ||
738 | } | 749 | } |
739 | 750 | ||
740 | #ifdef BACKLIGHT_DRIVER_CLOSE | 751 | #ifdef BACKLIGHT_DRIVER_CLOSE |