diff --git a/firmware/target/arm/as3525/dbop-as3525.c b/firmware/target/arm/as3525/dbop-as3525.c index 5ca551ca70..66202b70b7 100644 --- a/firmware/target/arm/as3525/dbop-as3525.c +++ b/firmware/target/arm/as3525/dbop-as3525.c @@ -34,8 +34,48 @@ /* 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 06c22c027c..cfd7c37b16 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))