summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/lang/english.lang7
-rw-r--r--apps/settings.c4
-rw-r--r--apps/settings.h2
-rw-r--r--apps/settings_menu.c13
-rw-r--r--firmware/drivers/lcd-h100-remote.c18
-rw-r--r--firmware/export/lcd-remote.h1
6 files changed, 41 insertions, 4 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 58ec145..5e49b95 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 36bd332..02fa6ee 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 c41ee1d..0dd9789 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 27e2434..05fcacf 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 aaf8a1e..221338b 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 bc7f84c..6d5091f 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);