diff options
Diffstat (limited to 'src/lib/include')
-rw-r--r-- | src/lib/include/keyboard.h | 37 | ||||
-rw-r--r-- | src/lib/include/proto/keymap_file.h | 16 |
2 files changed, 53 insertions, 0 deletions
diff --git a/src/lib/include/keyboard.h b/src/lib/include/keyboard.h new file mode 100644 index 0000000..2842936 --- /dev/null +++ b/src/lib/include/keyboard.h @@ -0,0 +1,37 @@ +#pragma once + +#include <proto/keymap_file.h> + + +#define KBD_CHAR 0x01 +#define KBD_ALT 0x02 +#define KBD_CTRL 0x04 +#define KBD_SUPER 0x08 +#define KBD_SHIFT 0x10 +#define KBD_CAPS 0x20 +#define KBD_MOD 0x40 + +typedef struct { + union { + int chr; // if flags & KBD_CHAR, chr is a character number + int key; // if !(flags & KBD_CHAR), key is one of KBD_CODE_* defined in <proto/keyboard.h> + }; + uint32_t flags; // one of kbd_* +} key_t; + +typedef struct { + keymap_t km; + uint32_t status; // mask of alt/ctrl/super +} keyboard_t; + +keyboard_t *init_keyboard(); +void free_keyboard(keyboard_t *t); + +bool load_keymap(keyboard_t *kb, const char* kmname); + +key_t keyboard_press(keyboard_t *t, int scancode); // what key is pressed? +key_t keyboard_release(keyboard_t *t, int scancode); // what key is released? + + + +/* vim: set ts=4 sw=4 tw=0 noet :*/ diff --git a/src/lib/include/proto/keymap_file.h b/src/lib/include/proto/keymap_file.h new file mode 100644 index 0000000..53ffeb7 --- /dev/null +++ b/src/lib/include/proto/keymap_file.h @@ -0,0 +1,16 @@ +#pragma once + +#include <stdint.h> +#include <stddef.h> +#include <stdbool.h> + +typedef struct { + int normal[128]; + int shift[128]; + int caps[128]; + int mod[128]; + int shiftmod[128]; + bool ralt_is_mod; // true: right alt = alt-gr +} keymap_t; + +/* vim: set ts=4 sw=4 tw=0 noet :*/ |