diff options
-rw-r--r-- | apps/plugin.c | 4 | ||||
-rw-r--r-- | apps/plugin.h | 6 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/mpeg_settings.c | 22 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/mpegplayer.c | 23 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/mpegplayer.h | 3 | ||||
-rw-r--r-- | firmware/drivers/lcd-16bit.c | 21 | ||||
-rw-r--r-- | firmware/export/kernel.h | 1 | ||||
-rw-r--r-- | firmware/export/lcd.h | 4 | ||||
-rw-r--r-- | firmware/target/arm/iriver/h10/lcd-h10_20gb.c | 1 | ||||
-rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c | 1 | ||||
-rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/lcd-e200.c | 1 | ||||
-rw-r--r-- | firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c | 1 | ||||
-rw-r--r-- | firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c | 1 | ||||
-rw-r--r-- | firmware/target/coldfire/iaudio/x5/lcd-x5.c | 1 | ||||
-rw-r--r-- | firmware/target/coldfire/iriver/h300/lcd-h300.c | 1 |
15 files changed, 90 insertions, 1 deletions
diff --git a/apps/plugin.c b/apps/plugin.c index e7b66a1cb2..9a435b24bc 100644 --- a/apps/plugin.c +++ b/apps/plugin.c | |||
@@ -601,6 +601,10 @@ static const struct plugin_api rockbox_api = { | |||
601 | simplelist_info_init, | 601 | simplelist_info_init, |
602 | simplelist_show_list, | 602 | simplelist_show_list, |
603 | 603 | ||
604 | #ifdef HAVE_LCD_ENABLE | ||
605 | lcd_set_enable_hook, | ||
606 | &button_queue, | ||
607 | #endif | ||
604 | }; | 608 | }; |
605 | 609 | ||
606 | int plugin_load(const char* plugin, const void* parameter) | 610 | int plugin_load(const char* plugin, const void* parameter) |
diff --git a/apps/plugin.h b/apps/plugin.h index c23e6457cf..edd54989da 100644 --- a/apps/plugin.h +++ b/apps/plugin.h | |||
@@ -124,7 +124,7 @@ void* plugin_get_buffer(size_t *buffer_size); | |||
124 | #define PLUGIN_MAGIC 0x526F634B /* RocK */ | 124 | #define PLUGIN_MAGIC 0x526F634B /* RocK */ |
125 | 125 | ||
126 | /* increase this every time the api struct changes */ | 126 | /* increase this every time the api struct changes */ |
127 | #define PLUGIN_API_VERSION 115 | 127 | #define PLUGIN_API_VERSION 116 |
128 | 128 | ||
129 | /* update this to latest version if a change to the api struct breaks | 129 | /* update this to latest version if a change to the api struct breaks |
130 | backwards compatibility (and please take the opportunity to sort in any | 130 | backwards compatibility (and please take the opportunity to sort in any |
@@ -752,6 +752,10 @@ struct plugin_api { | |||
752 | int count, void* data); | 752 | int count, void* data); |
753 | bool (*simplelist_show_list)(struct simplelist_info *info); | 753 | bool (*simplelist_show_list)(struct simplelist_info *info); |
754 | 754 | ||
755 | #ifdef HAVE_LCD_ENABLE | ||
756 | void (*lcd_set_enable_hook)(void (*enable_hook)(void)); | ||
757 | struct event_queue *button_queue; | ||
758 | #endif | ||
755 | }; | 759 | }; |
756 | 760 | ||
757 | /* plugin header */ | 761 | /* plugin header */ |
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c index 70b41a00e2..17a1cbbb69 100644 --- a/apps/plugins/mpegplayer/mpeg_settings.c +++ b/apps/plugins/mpegplayer/mpeg_settings.c | |||
@@ -543,6 +543,13 @@ static uint32_t increment_time(uint32_t val, int32_t amount, uint32_t range) | |||
543 | return val; | 543 | return val; |
544 | } | 544 | } |
545 | 545 | ||
546 | #ifdef HAVE_LCD_ENABLE | ||
547 | static void get_start_time_lcd_enable_hook(void) | ||
548 | { | ||
549 | rb->queue_post(rb->button_queue, LCD_ENABLE_EVENT_0, 0); | ||
550 | } | ||
551 | #endif /* HAVE_LCD_ENABLE */ | ||
552 | |||
546 | static int get_start_time(uint32_t duration) | 553 | static int get_start_time(uint32_t duration) |
547 | { | 554 | { |
548 | int button = 0; | 555 | int button = 0; |
@@ -556,6 +563,10 @@ static int get_start_time(uint32_t duration) | |||
556 | lcd_(clear_display)(); | 563 | lcd_(clear_display)(); |
557 | lcd_(update)(); | 564 | lcd_(update)(); |
558 | 565 | ||
566 | #ifdef HAVE_LCD_ENABLE | ||
567 | rb->lcd_set_enable_hook(get_start_time_lcd_enable_hook); | ||
568 | #endif | ||
569 | |||
559 | draw_slider(0, 100, &rc_bound); | 570 | draw_slider(0, 100, &rc_bound); |
560 | rc_bound.b = rc_bound.t - SLIDER_TMARGIN; | 571 | rc_bound.b = rc_bound.t - SLIDER_TMARGIN; |
561 | rc_bound.t = SCREEN_MARGIN; | 572 | rc_bound.t = SCREEN_MARGIN; |
@@ -707,6 +718,13 @@ static int get_start_time(uint32_t duration) | |||
707 | slider_state = state9; | 718 | slider_state = state9; |
708 | break; | 719 | break; |
709 | 720 | ||
721 | #ifdef HAVE_LCD_ENABLE | ||
722 | case LCD_ENABLE_EVENT_0: | ||
723 | if (slider_state == state2) | ||
724 | display_thumb_image(&rc_vid); | ||
725 | continue; | ||
726 | #endif | ||
727 | |||
710 | default: | 728 | default: |
711 | rb->default_event_handler(button); | 729 | rb->default_event_handler(button); |
712 | rb->yield(); | 730 | rb->yield(); |
@@ -736,6 +754,10 @@ static int get_start_time(uint32_t duration) | |||
736 | rb->yield(); | 754 | rb->yield(); |
737 | } | 755 | } |
738 | 756 | ||
757 | #ifdef HAVE_LCD_ENABLE | ||
758 | rb->lcd_set_enable_hook(NULL); | ||
759 | #endif | ||
760 | |||
739 | #ifndef HAVE_LCD_COLOR | 761 | #ifndef HAVE_LCD_COLOR |
740 | stream_gray_show(false); | 762 | stream_gray_show(false); |
741 | grey_clear_display(); | 763 | grey_clear_display(); |
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index 5b92ccced1..42e0ddd5ad 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c | |||
@@ -587,13 +587,27 @@ static void draw_putsxy_oriented(int x, int y, const char *str) | |||
587 | } | 587 | } |
588 | #endif /* LCD_PORTRAIT */ | 588 | #endif /* LCD_PORTRAIT */ |
589 | 589 | ||
590 | #ifdef HAVE_LCD_ENABLE | ||
591 | /* So we can refresh the overlay */ | ||
592 | static void wvs_lcd_enable_hook(void) | ||
593 | { | ||
594 | rb->queue_post(rb->button_queue, LCD_ENABLE_EVENT_1, 0); | ||
595 | } | ||
596 | #endif | ||
597 | |||
590 | static void wvs_backlight_on_video_mode(bool video_on) | 598 | static void wvs_backlight_on_video_mode(bool video_on) |
591 | { | 599 | { |
592 | if (video_on) { | 600 | if (video_on) { |
593 | /* Turn off backlight timeout */ | 601 | /* Turn off backlight timeout */ |
594 | /* backlight control in lib/helper.c */ | 602 | /* backlight control in lib/helper.c */ |
595 | backlight_force_on(rb); | 603 | backlight_force_on(rb); |
604 | #ifdef HAVE_LCD_ENABLE | ||
605 | rb->lcd_set_enable_hook(NULL); | ||
606 | #endif | ||
596 | } else { | 607 | } else { |
608 | #ifdef HAVE_LCD_ENABLE | ||
609 | rb->lcd_set_enable_hook(wvs_lcd_enable_hook); | ||
610 | #endif | ||
597 | /* Revert to user's backlight settings */ | 611 | /* Revert to user's backlight settings */ |
598 | backlight_use_settings(rb); | 612 | backlight_use_settings(rb); |
599 | } | 613 | } |
@@ -1441,6 +1455,15 @@ static void button_loop(void) | |||
1441 | continue; | 1455 | continue; |
1442 | } /* BUTTON_NONE: */ | 1456 | } /* BUTTON_NONE: */ |
1443 | 1457 | ||
1458 | #ifdef HAVE_LCD_ENABLE | ||
1459 | case LCD_ENABLE_EVENT_1: | ||
1460 | { | ||
1461 | /* Draw the current frame if prepared already */ | ||
1462 | stream_draw_frame(true); | ||
1463 | break; | ||
1464 | } /* LCD_ENABLE_EVENT_1: */ | ||
1465 | #endif | ||
1466 | |||
1444 | case MPEG_VOLUP: | 1467 | case MPEG_VOLUP: |
1445 | case MPEG_VOLUP|BUTTON_REPEAT: | 1468 | case MPEG_VOLUP|BUTTON_REPEAT: |
1446 | #ifdef MPEG_VOLUP2 | 1469 | #ifdef MPEG_VOLUP2 |
diff --git a/apps/plugins/mpegplayer/mpegplayer.h b/apps/plugins/mpegplayer/mpegplayer.h index fa13a1e378..571c28883d 100644 --- a/apps/plugins/mpegplayer/mpegplayer.h +++ b/apps/plugins/mpegplayer/mpegplayer.h | |||
@@ -104,4 +104,7 @@ enum mpeg_malloc_reason_t | |||
104 | #include "disk_buf.h" | 104 | #include "disk_buf.h" |
105 | #include "stream_mgr.h" | 105 | #include "stream_mgr.h" |
106 | 106 | ||
107 | #define LCD_ENABLE_EVENT_0 MAKE_SYS_EVENT(SYS_EVENT_CLS_PRIVATE, 0) | ||
108 | #define LCD_ENABLE_EVENT_1 MAKE_SYS_EVENT(SYS_EVENT_CLS_PRIVATE, 1) | ||
109 | |||
107 | #endif /* MPEGPLAYER_H */ | 110 | #endif /* MPEGPLAYER_H */ |
diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c index c91d222830..020d6bf63a 100644 --- a/firmware/drivers/lcd-16bit.c +++ b/firmware/drivers/lcd-16bit.c | |||
@@ -49,6 +49,10 @@ fb_data lcd_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] | |||
49 | static fb_data* lcd_backdrop = NULL; | 49 | static fb_data* lcd_backdrop = NULL; |
50 | static long lcd_backdrop_offset IDATA_ATTR = 0; | 50 | static long lcd_backdrop_offset IDATA_ATTR = 0; |
51 | 51 | ||
52 | #ifdef HAVE_LCD_ENABLE | ||
53 | static void (*lcd_enable_hook)(void) = NULL; | ||
54 | #endif | ||
55 | |||
52 | static struct viewport default_vp = | 56 | static struct viewport default_vp = |
53 | { | 57 | { |
54 | .x = 0, | 58 | .x = 0, |
@@ -84,6 +88,23 @@ void lcd_init(void) | |||
84 | scroll_init(); | 88 | scroll_init(); |
85 | } | 89 | } |
86 | 90 | ||
91 | /*** Helpers - consolidate optional code ***/ | ||
92 | #ifdef HAVE_LCD_ENABLE | ||
93 | void lcd_set_enable_hook(void (*enable_hook)(void)) | ||
94 | { | ||
95 | lcd_enable_hook = enable_hook; | ||
96 | } | ||
97 | |||
98 | /* To be called by target driver after enabling display and refreshing it */ | ||
99 | void lcd_call_enable_hook(void) | ||
100 | { | ||
101 | void (*enable_hook)(void) = lcd_enable_hook; | ||
102 | |||
103 | if (enable_hook != NULL) | ||
104 | enable_hook(); | ||
105 | } | ||
106 | #endif | ||
107 | |||
87 | /*** Viewports ***/ | 108 | /*** Viewports ***/ |
88 | 109 | ||
89 | void lcd_set_viewport(struct viewport* vp) | 110 | void lcd_set_viewport(struct viewport* vp) |
diff --git a/firmware/export/kernel.h b/firmware/export/kernel.h index 60c37bd3f1..88f3b80cdc 100644 --- a/firmware/export/kernel.h +++ b/firmware/export/kernel.h | |||
@@ -45,6 +45,7 @@ | |||
45 | #define SYS_EVENT_CLS_FILESYS 3 | 45 | #define SYS_EVENT_CLS_FILESYS 3 |
46 | #define SYS_EVENT_CLS_PLUG 4 | 46 | #define SYS_EVENT_CLS_PLUG 4 |
47 | #define SYS_EVENT_CLS_MISC 5 | 47 | #define SYS_EVENT_CLS_MISC 5 |
48 | #define SYS_EVENT_CLS_PRIVATE 7 /* For use inside plugins */ | ||
48 | /* make sure SYS_EVENT_CLS_BITS has enough range */ | 49 | /* make sure SYS_EVENT_CLS_BITS has enough range */ |
49 | 50 | ||
50 | /* Bit 31->|S|c...c|i...i| */ | 51 | /* Bit 31->|S|c...c|i...i| */ |
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h index 3e0ec780d2..45a6850db9 100644 --- a/firmware/export/lcd.h +++ b/firmware/export/lcd.h | |||
@@ -341,6 +341,10 @@ void lcd_poweroff(void); | |||
341 | /* Enable/disable the main display. */ | 341 | /* Enable/disable the main display. */ |
342 | extern void lcd_enable(bool on); | 342 | extern void lcd_enable(bool on); |
343 | extern bool lcd_enabled(void); | 343 | extern bool lcd_enabled(void); |
344 | /* Register a hook that is called when the lcd is powered and after the | ||
345 | * framebuffer data is synchronized */ | ||
346 | void lcd_set_enable_hook(void (*enable_hook)(void)); | ||
347 | void lcd_call_enable_hook(void); | ||
344 | #endif /* HAVE_LCD_ENABLE */ | 348 | #endif /* HAVE_LCD_ENABLE */ |
345 | 349 | ||
346 | #ifdef HAVE_LCD_SLEEP | 350 | #ifdef HAVE_LCD_SLEEP |
diff --git a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c index 1ee43c390f..7d942662b8 100644 --- a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c +++ b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c | |||
@@ -361,6 +361,7 @@ void lcd_enable(bool on) | |||
361 | /* Probably out of sync and we don't wanna pepper the code with | 361 | /* Probably out of sync and we don't wanna pepper the code with |
362 | lcd_update() calls for this. */ | 362 | lcd_update() calls for this. */ |
363 | lcd_update(); | 363 | lcd_update(); |
364 | lcd_call_enable_hook(); | ||
364 | } | 365 | } |
365 | else | 366 | else |
366 | { | 367 | { |
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c index 7484cae94e..1833639cf0 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c | |||
@@ -287,6 +287,7 @@ void lcd_enable(bool state) | |||
287 | 287 | ||
288 | lcd_on = true; | 288 | lcd_on = true; |
289 | lcd_update(); | 289 | lcd_update(); |
290 | lcd_call_enable_hook(); | ||
290 | } | 291 | } |
291 | else | 292 | else |
292 | { | 293 | { |
diff --git a/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c b/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c index acdb2c9956..9f8f580802 100644 --- a/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c +++ b/firmware/target/arm/sandisk/sansa-e200/lcd-e200.c | |||
@@ -436,6 +436,7 @@ void lcd_enable(bool on) | |||
436 | DEV_EN |= DEV_LCD; /* Enable LCD controller */ | 436 | DEV_EN |= DEV_LCD; /* Enable LCD controller */ |
437 | lcd_display_on(); /* Turn on display */ | 437 | lcd_display_on(); /* Turn on display */ |
438 | lcd_update(); /* Resync display */ | 438 | lcd_update(); /* Resync display */ |
439 | lcd_call_enable_hook(); | ||
439 | LCD_REG_6 |= 1; /* Restart DMA */ | 440 | LCD_REG_6 |= 1; /* Restart DMA */ |
440 | sleep(HZ/50); /* Wait for a frame to be written */ | 441 | sleep(HZ/50); /* Wait for a frame to be written */ |
441 | } | 442 | } |
diff --git a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c index 8a268db4cc..062b178a05 100644 --- a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c +++ b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c | |||
@@ -212,6 +212,7 @@ void lcd_enable(bool on) | |||
212 | lcd_display_on(); | 212 | lcd_display_on(); |
213 | LCDC_CTRL |= 1; /* controller enable */ | 213 | LCDC_CTRL |= 1; /* controller enable */ |
214 | lcd_update(); /* Resync display */ | 214 | lcd_update(); /* Resync display */ |
215 | lcd_call_enable_hook(); | ||
215 | } | 216 | } |
216 | else | 217 | else |
217 | { | 218 | { |
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c index a2634f0de7..b4b76d4241 100644 --- a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c +++ b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c | |||
@@ -235,6 +235,7 @@ return; | |||
235 | { | 235 | { |
236 | lcd_display_on(false); /* Turn on display */ | 236 | lcd_display_on(false); /* Turn on display */ |
237 | lcd_update(); /* Resync display */ | 237 | lcd_update(); /* Resync display */ |
238 | lcd_call_enable_hook(); | ||
238 | } | 239 | } |
239 | else | 240 | else |
240 | { | 241 | { |
diff --git a/firmware/target/coldfire/iaudio/x5/lcd-x5.c b/firmware/target/coldfire/iaudio/x5/lcd-x5.c index 19faf0474d..5aecb366ca 100644 --- a/firmware/target/coldfire/iaudio/x5/lcd-x5.c +++ b/firmware/target/coldfire/iaudio/x5/lcd-x5.c | |||
@@ -383,6 +383,7 @@ void lcd_enable(bool on) | |||
383 | /* Probably out of sync and we don't wanna pepper the code with | 383 | /* Probably out of sync and we don't wanna pepper the code with |
384 | lcd_update() calls for this. */ | 384 | lcd_update() calls for this. */ |
385 | lcd_update(); | 385 | lcd_update(); |
386 | lcd_call_enable_hook(); | ||
386 | } | 387 | } |
387 | else | 388 | else |
388 | { | 389 | { |
diff --git a/firmware/target/coldfire/iriver/h300/lcd-h300.c b/firmware/target/coldfire/iriver/h300/lcd-h300.c index 5081366d41..61d0a6cabd 100644 --- a/firmware/target/coldfire/iriver/h300/lcd-h300.c +++ b/firmware/target/coldfire/iriver/h300/lcd-h300.c | |||
@@ -261,6 +261,7 @@ void lcd_enable(bool on) | |||
261 | if(on) | 261 | if(on) |
262 | { | 262 | { |
263 | _display_on(); | 263 | _display_on(); |
264 | lcd_call_enable_hook(); | ||
264 | } | 265 | } |
265 | else | 266 | else |
266 | { | 267 | { |