Vhex-kernel/src/kernel/drivers/keyboard/wait_event.c

42 lines
916 B
C

#include <kernel/drivers/keyboard.h>
#include <kernel/util/atomic.h>
/*keyboard_wait_event() - Wait keys events (press or release) */
void keyboard_wait_event(keyscan_t *list)
{
extern volatile uint8_t keylist_isUpdate;
extern struct keycache_s *keylist;
struct keycache_s *keynode;
int i;
// Wait key list update.
// @note : each tim the user press or relase key(s)
// the hardware driver will set the "keylist_isUpdate" to 1.
// TODO: schedule !!
while (keylist_isUpdate == 0)
{
__asm__ volatile ("sleep");
}
// Start atomic operations
atomic_start();
// Dump all keys
i = 0;
keynode = keylist;
while (keynode != NULL)
{
list[i].counter = keynode->counter;
list[i].keycode = keynode->keycode;
keynode = keynode->next;
i = i + 1;
}
list[i].keycode = KEY_UNUSED;
// Indicate that the key buffer has been readed
keylist_isUpdate = 0;
// Stop atomic operations
atomic_stop();
}