From 611737bde8674d9ad45fd15caa26e035a1c76802 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Mon, 5 Mar 2007 20:14:41 +0000 Subject: Add extra filtering to the X5 and M5 button drivers to prevent erratic button events (ported from H300). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12627 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/coldfire/iaudio/m5/button-m5.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'firmware/target/coldfire/iaudio/m5/button-m5.c') diff --git a/firmware/target/coldfire/iaudio/m5/button-m5.c b/firmware/target/coldfire/iaudio/m5/button-m5.c index a5fdd79fde..5d49bf1e35 100644 --- a/firmware/target/coldfire/iaudio/m5/button-m5.c +++ b/firmware/target/coldfire/iaudio/m5/button-m5.c @@ -60,6 +60,8 @@ int button_read_device(void) int btn = BUTTON_NONE; bool hold_button_old; bool remote_hold_button_old; + static int prev_data = 0xff; + static int last_valid = 0xff; int data; /* normal buttons */ @@ -76,6 +78,13 @@ int button_read_device(void) { data = adc_scan(ADC_BUTTONS); + /* ADC debouncing: Only accept new reading if it's + * stable (+/-1). Use latest stable value otherwise. */ + if ((unsigned)(data - prev_data + 1) <= 2) + last_valid = data; + prev_data = data; + data = last_valid; + if (data < 0xf0) { if(data < 0x7c) -- cgit v1.2.3