
Hello Gerhard,
On 04/28/2014 03:44 PM, Gerhard Sittig wrote:
On Fri, 2014-04-25 at 12:20 +0200, Przemyslaw Marczak wrote:
This change prevents gpio keys bouncing by adding 50 ms delay when key pressed condition met.
[ ... ] @@ -105,6 +105,10 @@ static int check_keys(void) if (key_pressed(KEY_VOLUMEDOWN)) keys += KEY_VOLUMEDOWN;
- /* Avoids gpio keys debouncing */
- if (keys)
mdelay(50);
- return keys; }
The approach might have helped in your case, since you tested it and found it's good. I'm just wondering whether the code really does correct de-bouncing.
The delay does decrease the polling frequency (assuming that the routine is called in a loop). But you return data that was sampled before the delay. You don't re-fetch samples after the delay. And this would not necessarily help either, I'm afraid.
In case the GPIO (or the key_pressed() call) does debouncing, you wouldn't need it here. If the key_pressed() result still is bouncy, then the above logic would not debounce it. What you need is some kind of "trigger" where you notice that the line levels are changing, and a delayed fetch of the lines' values after they have settled. Without the first condition, you always have the risk of sampling arbitrary data that does not reflect the keys' status.
nit: The comment still appears to be misleading, you don't want to avoid debouncing. :)
virtually yours Gerhard Sittig
This is right notice. Actually the problem was not a key bouncing. The right problem is about the menu loop where check_keys() is called too many times for a one second. And changing menu position few times in a second is useless and hard to choose proper menu option.
Putting delay into check_keys() function was good enough to make this menu more useful but in fact this was not a solution for key bouncing.
Function check_keys() should be as fast as it could be. So I think that I need only increase a delay in the menu loop which is now 100ms.
Increasing it to 200ms gives good results. It's a simple solution.
What do you think about this?
Thank you for comments.