[dev][gpio_keypad] make the init function wait for one full scan
diff --git a/dev/keys/gpio_keypad.c b/dev/keys/gpio_keypad.c
index b867769..5d15076 100644
--- a/dev/keys/gpio_keypad.c
+++ b/dev/keys/gpio_keypad.c
@@ -36,11 +36,13 @@
#include <dev/keys.h>
#include <dev/gpio.h>
#include <dev/gpio_keypad.h>
+#include <kernel/event.h>
#include <kernel/timer.h>
struct gpio_kp {
struct gpio_keypad_info *keypad_info;
struct timer timer;
+ event_t full_scan;
int current_output;
unsigned int some_keys_pressed:2;
unsigned long keys_pressed[0];
@@ -113,6 +115,7 @@
}
if (/*!kp->use_irq*/ 1 || kp->some_keys_pressed) {
+ event_signal(&kp->full_scan, false);
timer_set_oneshot(timer, kpinfo->poll_time,
gpio_keypad_timer_func, NULL);
goto done;
@@ -166,6 +169,10 @@
keypad->current_output = kpinfo->noutputs;
+ event_init(&keypad->full_scan, false, EVENT_FLAG_AUTOUNSIGNAL);
timer_initialize(&keypad->timer);
timer_set_oneshot(&keypad->timer, 0, gpio_keypad_timer_func, NULL);
+
+ /* wait for the keypad to complete one full scan */
+ event_wait(&keypad->full_scan);
}