sos

[unmaintained] experimenting with low level OS development
Log | Files | Refs | README | LICENSE

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