summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Diedrich <ranma+coreboot@tdiedrich.de>2010-04-16 06:01:24 +0000
committerTobias Diedrich <ranma+coreboot@tdiedrich.de>2010-04-16 06:01:24 +0000
commit0a3d50b88f90d579bd628927daa35b55d1d839ff (patch)
tree20015215ce7dccf6e03ee51411211dae256ea604
parenteee235f0b4abbd602ea9b192b467a5ca5c23e86d (diff)
downloadrockbox-0a3d50b88f90d579bd628927daa35b55d1d839ff.zip
rockbox-0a3d50b88f90d579bd628927daa35b55d1d839ff.tar.gz
rockbox-0a3d50b88f90d579bd628927daa35b55d1d839ff.tar.bz2
rockbox-0a3d50b88f90d579bd628927daa35b55d1d839ff.tar.xz
workaround DBOP noise issue on C200v2 cause it's really annoying if your buttons don't work in the debug menu...
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25655 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/dbop-as3525.c40
-rw-r--r--firmware/target/arm/as3525/debug-as3525.c13
2 files changed, 52 insertions, 1 deletions
diff --git a/firmware/target/arm/as3525/dbop-as3525.c b/firmware/target/arm/as3525/dbop-as3525.c
index 5ca551c..66202b7 100644
--- a/firmware/target/arm/as3525/dbop-as3525.c
+++ b/firmware/target/arm/as3525/dbop-as3525.c
@@ -34,9 +34,49 @@
/* doesn't work with the new ams sansas so far and is not needed */
static short int dbop_input_value = 0;
+#if defined(SANSA_C200V2)
+/*
+ * workaround DBOP noise issue cause it's really annoying if your
+ * buttons don't work in the debug menu...
+ */
+static short int input_value_tmp[2];
+int dbop_denoise_reject = 0;
+int dbop_denoise_accept = 0;
+#endif
+
/* read the DBOP data pins */
+#if defined(SANSA_C200V2)
+unsigned short dbop_read_input_once(void);
+
unsigned short dbop_read_input(void)
{
+ int i;
+
+ while (1) {
+ for (i=0; i<2; i++) {
+ input_value_tmp[i] = dbop_read_input_once();
+ }
+ /* noise rejection */
+ if (input_value_tmp[0] == input_value_tmp[1]) {
+ dbop_denoise_accept++;
+ break;
+ } else {
+ dbop_denoise_reject++;
+ }
+ }
+ if (dbop_denoise_accept + dbop_denoise_reject > 1000) {
+ dbop_denoise_accept /= 2;
+ dbop_denoise_reject /= 2;
+ }
+
+ return dbop_input_value;
+}
+
+unsigned short dbop_read_input_once(void)
+#else
+unsigned short dbop_read_input(void)
+#endif
+{
unsigned int dbop_ctrl_old = DBOP_CTRL;
unsigned int dbop_timpol23_old = DBOP_TIMPOL_23;
diff --git a/firmware/target/arm/as3525/debug-as3525.c b/firmware/target/arm/as3525/debug-as3525.c
index 06c22c0..cfd7c37 100644
--- a/firmware/target/arm/as3525/debug-as3525.c
+++ b/firmware/target/arm/as3525/debug-as3525.c
@@ -257,12 +257,23 @@ bool __dbg_hw_info(void)
while(1)
{
#ifdef SANSA_C200V2
+ extern int dbop_denoise_accept;
+ extern int dbop_denoise_reject;
+
lcd_clear_display();
line = 0;
lcd_puts(0, line++, "[Submodel:]");
lcd_putsf(0, line++, "C200v2 variant %d", c200v2_variant);
+ if (dbop_denoise_accept) {
+ lcd_putsf(0, line++, "DBOP noise: %d%%",
+ (100*dbop_denoise_reject)/dbop_denoise_accept);
+ } else {
+ lcd_puts(0, line++, "DBOP noise: oo");
+ }
+ lcd_putsf(0, line++, "reject: %d", dbop_denoise_reject);
+ lcd_putsf(0, line++, "accept: %d", dbop_denoise_accept);
lcd_update();
- int btn = button_get(1);
+ int btn = button_get_w_tmo(HZ/10);
if(btn == (DEBUG_CANCEL|BUTTON_REL))
goto end;
else if(btn == (BUTTON_DOWN|BUTTON_REL))