From 05fdb1ad30bbeeabe3cb74f4f5d366a53c8f3cef Mon Sep 17 00:00:00 2001 From: Miika Pekkarinen Date: Sat, 19 Nov 2005 07:58:20 +0000 Subject: [PATCH] Added option to reduce (and almost prevent) the remote lcd ticking problem with a cost slightly more CPU usage. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7985 a1c6a512-1295-4272-9138-f99709370657 --- apps/lang/english.lang | 7 +++++++ apps/settings.c | 4 ++++ apps/settings.h | 2 ++ apps/settings_menu.c | 13 ++++++++++++- firmware/drivers/lcd-h100-remote.c | 18 +++++++++++++++--- firmware/export/lcd-remote.h | 1 + 6 files changed, 41 insertions(+), 4 deletions(-) diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 58ec145a29..5e49b95708 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -3454,3 +3454,10 @@ desc: Custom themes menu eng: "Browse Themes" voice: "Browse Themes" new: + +id: LANG_REDUCE_TICKING +desc: in remote lcd settings menu +eng: "Reduce ticking" +voice: "Reduce ticking" +new: + diff --git a/apps/settings.c b/apps/settings.c index 36bd332ae3..02fa6ee69f 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -277,6 +277,10 @@ static const struct bit_entry rtc_bits[] = {1, S_O(bidi_support), false, "bidi hebrew/arabic", off_on }, #endif +#ifdef HAVE_REMOTE_LCD /* move to REMOTE_LCD next time we bump version */ + {1, S_O(remote_reduce_ticking), false, "remote reduce ticking", off_on }, +#endif + /* new stuff to be added here */ /* If values are just added to the end, no need to bump the version. */ diff --git a/apps/settings.h b/apps/settings.h index c41ee1d8e3..0dd9789991 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -343,6 +343,8 @@ struct user_settings int remote_backlight_timeout; /* backlight off timeout: 0-18 0=never, 1=always, then according to timeout_values[] */ + bool remote_reduce_ticking; /* 0=normal operation, + 1=EMI reduce on with cost more CPU. */ #endif bool next_folder; /* move to next folder */ diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 27e24347a3..05fcacf77a 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c @@ -120,6 +120,16 @@ static bool remote_flip_display(void) return rc; } + +static bool remote_reduce_ticking(void) +{ + bool rc = set_bool( str(LANG_REDUCE_TICKING), + &global_settings.remote_reduce_ticking); + + lcd_remote_emireduce(global_settings.remote_reduce_ticking); + + return rc; +} #endif #ifdef CONFIG_BACKLIGHT @@ -1540,7 +1550,8 @@ static bool lcd_remote_settings_menu(void) { ID2P(LANG_CONTRAST), remote_contrast }, { ID2P(LANG_INVERT), remote_invert }, { ID2P(LANG_FLIP_DISPLAY), remote_flip_display }, - }; + { ID2P(LANG_REDUCE_TICKING), remote_reduce_ticking }, +}; m=menu_init( items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL); diff --git a/firmware/drivers/lcd-h100-remote.c b/firmware/drivers/lcd-h100-remote.c index aaf8a1efd6..221338b2d9 100644 --- a/firmware/drivers/lcd-h100-remote.c +++ b/firmware/drivers/lcd-h100-remote.c @@ -61,7 +61,11 @@ #define RS_HI or_l(0x00010000, &GPIO_OUT) /* delay loop */ -#define DELAY do { int _x; for(_x=0;_x<3;_x++);} while (0) +#define DELAY_DEFAULT do { int _x = 0; for (_x = 0;_x < 2;_x++); } while (0) +#define DELAY_EMIREDUCE do { int _x = cpu_frequency >> 21; while (_x--); } \ + while (0) +#define DELAY do { if (emireduce) DELAY_EMIREDUCE; \ + else DELAY_DEFAULT; } while (0) #define SCROLLABLE_LINES 13 @@ -77,6 +81,9 @@ static int curfont = FONT_SYSFIXED; #ifndef SIMULATOR static int xoffset; /* needed for flip */ +/* If set to true, will prevent "ticking" to headphones. */ +static bool emireduce = false; + /* remote hotplug */ static int countdown; /* for remote plugging debounce */ static bool last_remote_status = false; @@ -177,7 +184,7 @@ void lcd_remote_write_data(const unsigned char* p_bytes, int count) CLK_HI; data <<= 1; DELAY; - + CLK_LO; } } @@ -343,6 +350,11 @@ int lcd_remote_default_contrast(void) #ifndef SIMULATOR +void lcd_remote_emireduce(bool state) +{ + emireduce = state; +} + void lcd_remote_powersave(bool on) { if (remote_initialized) @@ -476,7 +488,7 @@ static void remote_tick(void) } } } -} +} #endif /* !SIMULATOR */ /* LCD init */ diff --git a/firmware/export/lcd-remote.h b/firmware/export/lcd-remote.h index bc7f84ca83..6d5091fc66 100644 --- a/firmware/export/lcd-remote.h +++ b/firmware/export/lcd-remote.h @@ -34,6 +34,7 @@ extern void lcd_remote_backlight_on(void); extern void lcd_remote_backlight_off(void); extern int lcd_remote_default_contrast(void); extern void lcd_remote_set_contrast(int val); +extern void lcd_remote_emireduce(bool state); extern void lcd_remote_clear_display(void); extern void lcd_remote_puts(int x, int y, const unsigned char *string);