aboutsummaryrefslogtreecommitdiff
path: root/drivers/ps2kbd.c
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-03-01 13:05:04 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-03-01 13:05:04 -0500
commit6e86a3abee2d9b2c03452cd62997c2152a3332aa (patch)
treeef868a5a58b59fb0fbc215a4dd4367d5fcb4125e /drivers/ps2kbd.c
parentd532ad93a42ea95460765d4527b3fb1e4544c154 (diff)
downloadkappa-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.c21
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();