diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2015-03-01 13:05:04 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2015-03-01 13:05:04 -0500 |
| commit | 6e86a3abee2d9b2c03452cd62997c2152a3332aa (patch) | |
| tree | ef868a5a58b59fb0fbc215a4dd4367d5fcb4125e /drivers/ps2kbd.c | |
| parent | d532ad93a42ea95460765d4527b3fb1e4544c154 (diff) | |
| download | kappa-6e86a3abee2d9b2c03452cd62997c2152a3332aa.zip kappa-6e86a3abee2d9b2c03452cd62997c2152a3332aa.tar.gz kappa-6e86a3abee2d9b2c03452cd62997c2152a3332aa.tar.bz2 kappa-6e86a3abee2d9b2c03452cd62997c2152a3332aa.tar.xz | |
lots of stuff
Diffstat (limited to 'drivers/ps2kbd.c')
| -rw-r--r-- | drivers/ps2kbd.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/drivers/ps2kbd.c b/drivers/ps2kbd.c index 27faaf4..29d02dc 100644 --- a/drivers/ps2kbd.c +++ b/drivers/ps2kbd.c @@ -138,6 +138,8 @@ static void handle_extended_scancode(void) //printf("Extended scancode: 0x%x\n", temp); } +void (*keyevent_handler)(const struct ps2_keyevent*); + static void key_handler(struct regs_t *regs) { (void) regs; @@ -153,6 +155,7 @@ static void key_handler(struct regs_t *regs) int type = ps2_set1_scancodes[scancode & 0x7F]; int release = (scancode & (1<<7)) >> 7; + char ascii = '\0'; switch(type) { case PRINTING_KEY: @@ -163,9 +166,9 @@ static void key_handler(struct regs_t *regs) if(special_keys.shift) capitals = ~capitals; if(capitals) - putchar(ps2_set1_shift[scancode]); + ascii = ps2_set1_shift[scancode]; else - putchar(ps2_set1_ascii[scancode]); + ascii = ps2_set1_ascii[scancode]; } break; } @@ -174,7 +177,14 @@ static void key_handler(struct regs_t *regs) break; } if(special_keys.bksp) - putchar('\b'); + ascii = '\b'; + if(keyevent_handler) + { + struct ps2_keyevent ev; + ev.special_keys = &special_keys; + ev.ascii = ascii; + keyevent_handler(&ev); + } } static void ps2_set_scancode_set(uint8_t set) @@ -191,6 +201,11 @@ static void keyboard_init(void) memset(&special_keys, 0, sizeof(special_keys)); } +void ps2kbd_set_handler(void (*handler)(const struct ps2_keyevent*)) +{ + keyevent_handler = handler; +} + void ps2kbd_init(void) { keyboard_init(); |