summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/dbop-as3525.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/as3525/dbop-as3525.c')
-rw-r--r--firmware/target/arm/as3525/dbop-as3525.c40
1 files changed, 40 insertions, 0 deletions
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,9 +34,49 @@
34/* doesn't work with the new ams sansas so far and is not needed */ 34/* doesn't work with the new ams sansas so far and is not needed */
35static short int dbop_input_value = 0; 35static short int dbop_input_value = 0;
36 36
37#if defined(SANSA_C200V2)
38/*
39 * workaround DBOP noise issue cause it's really annoying if your
40 * buttons don't work in the debug menu...
41 */
42static short int input_value_tmp[2];
43int dbop_denoise_reject = 0;
44int dbop_denoise_accept = 0;
45#endif
46
37/* read the DBOP data pins */ 47/* read the DBOP data pins */
48#if defined(SANSA_C200V2)
49unsigned short dbop_read_input_once(void);
50
38unsigned short dbop_read_input(void) 51unsigned short dbop_read_input(void)
39{ 52{
53 int i;
54
55 while (1) {
56 for (i=0; i<2; i++) {
57 input_value_tmp[i] = dbop_read_input_once();
58 }
59 /* noise rejection */
60 if (input_value_tmp[0] == input_value_tmp[1]) {
61 dbop_denoise_accept++;
62 break;
63 } else {
64 dbop_denoise_reject++;
65 }
66 }
67 if (dbop_denoise_accept + dbop_denoise_reject > 1000) {
68 dbop_denoise_accept /= 2;
69 dbop_denoise_reject /= 2;
70 }
71
72 return dbop_input_value;
73}
74
75unsigned short dbop_read_input_once(void)
76#else
77unsigned short dbop_read_input(void)
78#endif
79{
40 unsigned int dbop_ctrl_old = DBOP_CTRL; 80 unsigned int dbop_ctrl_old = DBOP_CTRL;
41 unsigned int dbop_timpol23_old = DBOP_TIMPOL_23; 81 unsigned int dbop_timpol23_old = DBOP_TIMPOL_23;
42 82