diff options
Diffstat (limited to 'firmware/target/arm/as3525/dbop-as3525.c')
-rw-r--r-- | firmware/target/arm/as3525/dbop-as3525.c | 40 |
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 */ |
35 | static short int dbop_input_value = 0; | 35 | static 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 | */ | ||
42 | static short int input_value_tmp[2]; | ||
43 | int dbop_denoise_reject = 0; | ||
44 | int dbop_denoise_accept = 0; | ||
45 | #endif | ||
46 | |||
37 | /* read the DBOP data pins */ | 47 | /* read the DBOP data pins */ |
48 | #if defined(SANSA_C200V2) | ||
49 | unsigned short dbop_read_input_once(void); | ||
50 | |||
38 | unsigned short dbop_read_input(void) | 51 | unsigned 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 | |||
75 | unsigned short dbop_read_input_once(void) | ||
76 | #else | ||
77 | unsigned 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 | ||