keyboard.h (1703B)
1 #ifndef KEYBOARD_H 2 #define KEYBOARD_H 3 4 #include <stdbool.h> 5 6 #define MAX_CALLBACK_COUNT 256 7 8 // TODO: Switch to #define instead of enum, so that we can define 9 // bits individually and restrict to required length (8 bits) 10 // currently it's int always 11 enum keyboard_key { 12 KEY_1 = 0, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, 13 14 KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, 15 KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_A, KEY_S, KEY_D, 16 KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_Z, KEY_X, 17 KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, 18 19 KEY_F1, KEY_F2, KEY_F3, 20 KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, 21 KEY_F12, 22 23 KEY_COMMA, KEY_DOT, KEY_SLASH, 24 KEY_BACKSLASH, KEY_APOSTROPHE, KEY_SEMICOLON, KEY_MINUS, KEY_EQUALS, 25 KEY_BACKSPACE, KEY_SPACE, KEY_ENTER, KEY_TAB, KEY_ESC, 26 27 KEY_LSHIFT, KEY_RSHIFT, KEY_ALT, KEY_ALTGR, KEY_LCTRL, 28 KEY_RCTRL, KEY_BACKTICK, KEY_RSQ_BRACKET, KEY_LSQ_BRACKET, 29 KEY_CAPSLOCK, KEY_NUMLOCK, KEY_SCROLLLOCK, 30 31 KEY_0_KP, KEY_1_KP, KEY_2_KP, KEY_3_KP, KEY_4_KP, KEY_5_KP, KEY_6_KP, 32 KEY_7_KP, KEY_8_KP, KEY_9_KP, 33 KEY_MINUS_KP, KEY_TIMES_KP, KEY_PLUS_KP, KEY_DOT_KP, 34 35 KEY_UNUSED 36 }; 37 38 struct keyboard_event { 39 enum keyboard_key key; 40 bool released; // true if released event 41 char ascii; 42 bool printable; 43 // TODO: Add more useful fields 44 // some people have ctrl_pressed, shift_pressed, and stuff here 45 }; 46 47 void keyboard_init(); 48 void keyboard_irq_handler(); 49 50 void keyboard_add_callback(void (*callback)(struct keyboard_event)); 51 52 // TODO: This should only be callable for functions in keyboard folder 53 void keyboard_fire_event(enum keyboard_key kbdkey, bool released); 54 55 #endif