Rework the custom event handler architecture

Instead of a single custom function, have an array of functions that get
called in order, until one of them returns true. Defaults to the normal
event handler.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
pull/25/head
Gergely Nagy 8 years ago
parent b0d6bc9fcc
commit 5d010e7103

@ -48,19 +48,10 @@ void handle_synthetic_key_event(Key mappedKey, uint8_t currentState, uint8_t pre
}
__attribute__((weak))
bool handle_user_key_event(byte row, byte col, uint8_t currentState, uint8_t previousState) {
return false;
}
static custom_handler_t customHandler = handle_user_key_event;
void set_custom_handler(custom_handler_t f) {
customHandler = f;
}
custom_handler_t get_custom_handler() {
return customHandler;
}
custom_handler_t eventHandlers[] = {
handle_key_event_default,
(custom_handler_t) NULL
};
Key lookup_key(byte keymap, byte row, byte col) {
Key mappedKey;
@ -71,12 +62,16 @@ Key lookup_key(byte keymap, byte row, byte col) {
}
void handle_key_event(byte row, byte col, uint8_t currentState, uint8_t previousState) {
//for every newly pressed button, figure out what logical key it is and send a key down event
// for every newly released button, figure out what logical key it is and send a key up event
if ((*customHandler)(row, col, currentState, previousState)) {
for (byte i = 0; eventHandlers[i] != NULL; i++) {
custom_handler_t handler = eventHandlers[i];
if ((*handler)(row, col, currentState, previousState))
return;
}
}
bool handle_key_event_default(byte row, byte col, uint8_t currentState, uint8_t previousState) {
//for every newly pressed button, figure out what logical key it is and send a key down event
// for every newly released button, figure out what logical key it is and send a key up event
Key mappedKey = lookup_key(temporary_keymap, row, col);
Key baseKey = lookup_key(primary_keymap, row, col);
@ -88,6 +83,7 @@ void handle_key_event(byte row, byte col, uint8_t currentState, uint8_t previous
} else if (key_is_pressed(currentState, previousState)) {
press_key(mappedKey);
}
return true;
}
void press_key(Key mappedKey) {

@ -14,9 +14,7 @@ extern uint8_t primary_keymap;
extern uint8_t temporary_keymap;
typedef bool (*custom_handler_t)(byte row, byte col, uint8_t currentState, uint8_t previousState);
void set_custom_handler(custom_handler_t f);
custom_handler_t get_custom_handler();
extern custom_handler_t eventHandlers[];
// sending events to the computer
void handle_synthetic_key_event( Key mappedKey, uint8_t currentState, uint8_t previousState);
@ -24,6 +22,6 @@ void handle_key_event(byte row, byte col, uint8_t currentState, uint8_t previous
void press_key(Key mappedKey);
void handle_keymap_key_event(Key keymapEntry, uint8_t currentState, uint8_t previousState);
void handle_mouse_key_event(Key mappedKey, uint8_t currentState, uint8_t previousState);
bool handle_user_key_event(byte row, byte col, uint8_t currentState, uint8_t previousState);
bool handle_key_event_default(byte row, byte col, uint8_t currentState, uint8_t previousState);
Key lookup_key(byte keymap, byte row, byte col);

Loading…
Cancel
Save