39,16 → 39,42 |
#include <sysinfo.h> |
#include <kbd.h> |
#include <keys.h> |
#include <stdio.h> |
#include <types.h> |
#include <genarch/kbd.h> |
|
#define KBD_KEY_RELEASE 0x80 |
#define KBD_ALL_KEYS_UP 0x7f |
|
irq_cmd_t z8530_cmds[] = { |
{ CMD_MEM_READ_1, 0, 0, 1 } |
}; |
|
irq_code_t z8530_kbd = { |
1, |
z8530_cmds |
}; |
|
int kbd_arch_init(void) |
{ |
z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual") + 6; |
ipc_register_irq(sysinfo_value("kbd.irq"), &z8530_kbd); |
return 0; |
} |
|
/** Process keyboard events */ |
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
{ |
int scan_code = IPC_GET_ARG1(*call); |
|
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
{ |
if (scan_code == KBD_ALL_KEYS_UP) |
return 1; |
|
if (scan_code & KBD_KEY_RELEASE) |
key_released(keybuffer, scan_code ^ KBD_KEY_RELEASE); |
else |
key_pressed(keybuffer, scan_code); |
|
return 1; |
} |
|