diff --git a/event/keyboard.c b/event/keyboard.c new file mode 100644 index 0000000..2881086 --- /dev/null +++ b/event/keyboard.c @@ -0,0 +1,33 @@ +#include "keyboard.h" + +static callback callbacks[3][6][10]={0}; + +static inline uint32_t get_x(const uint32_t matrix_code) +{ + return (matrix_code-1) % 0x10; +} + +static inline uint32_t get_y(const uint32_t matrix_code) +{ + return (matrix_code-1) / 0x10; +} + +void FE_keyboard_reload() +{ + key_event_t event; + while (1) + { + event=pollevent(); + event.type--; + if (event.type==-1) + break; + callback action = callbacks[event.type][get_x(event.key)][get_y(event.key)]; + if (action) + action(); + } +} + +void FE_keyboard_set_key(uint32_t matrix_code, uint32_t ev_type, callback function) +{ + callbacks[ev_type-1][get_x(matrix_code)][get_y(matrix_code)]=function; +} \ No newline at end of file diff --git a/event/keyboard.h b/event/keyboard.h new file mode 100644 index 0000000..5a16dc7 --- /dev/null +++ b/event/keyboard.h @@ -0,0 +1,22 @@ +#ifndef FE_KEYBOARD +#define FE_KEYBOARD + +#include +#include +#include + +/* FE_keyboard: gestion evenementielle du clavier + on peut assigner des callbacks à certains evènements définis dans gint + les arguments envoyés sont le code de la touche en question (event.key) + le type d'evenement (event.type) + void (*callback)(void) + la fonction à exécuter en cas de pression sur une touche + la fonction reload est appelée à la demande de l'utilisateur et appelle tous les callbacks dans l'ordre */ + +typedef void (*callback)(void); + +void FE_keyboard_set_key(uint32_t matrix_code, uint32_t ev_type, callback function); + +void FE_keyboard_reload(); + +#endif \ No newline at end of file