Rev 1797 | Rev 1923 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1797 | Rev 1873 | ||
---|---|---|---|
Line 37... | Line 37... | ||
37 | #include <arch/kbd.h> |
37 | #include <arch/kbd.h> |
38 | #include <ipc/ipc.h> |
38 | #include <ipc/ipc.h> |
39 | #include <sysinfo.h> |
39 | #include <sysinfo.h> |
40 | #include <kbd.h> |
40 | #include <kbd.h> |
41 | #include <keys.h> |
41 | #include <keys.h> |
- | 42 | #include <stdio.h> |
|
- | 43 | #include <types.h> |
|
- | 44 | #include <genarch/kbd.h> |
|
42 | 45 | ||
- | 46 | #define KBD_KEY_RELEASE 0x80 |
|
- | 47 | #define KBD_ALL_KEYS_UP 0x7f |
|
- | 48 | ||
- | 49 | irq_cmd_t z8530_cmds[] = { |
|
- | 50 | { CMD_MEM_READ_1, 0, 0, 1 } |
|
- | 51 | }; |
|
- | 52 | ||
- | 53 | irq_code_t z8530_kbd = { |
|
- | 54 | 1, |
|
- | 55 | z8530_cmds |
|
- | 56 | }; |
|
43 | 57 | ||
44 | int kbd_arch_init(void) |
58 | int kbd_arch_init(void) |
45 | { |
59 | { |
- | 60 | z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual") + 6; |
|
- | 61 | ipc_register_irq(sysinfo_value("kbd.irq"), &z8530_kbd); |
|
46 | return 0; |
62 | return 0; |
47 | } |
63 | } |
48 | 64 | ||
49 | - | ||
- | 65 | /** Process keyboard events */ |
|
50 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
66 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
51 | { |
67 | { |
- | 68 | int scan_code = IPC_GET_ARG1(*call); |
|
- | 69 | ||
- | 70 | if (scan_code == KBD_ALL_KEYS_UP) |
|
- | 71 | return 1; |
|
- | 72 | ||
- | 73 | if (scan_code & KBD_KEY_RELEASE) |
|
- | 74 | key_released(keybuffer, scan_code ^ KBD_KEY_RELEASE); |
|
- | 75 | else |
|
- | 76 | key_pressed(keybuffer, scan_code); |
|
- | 77 | ||
52 | return 1; |
78 | return 1; |
53 | } |
79 | } |
54 | 80 | ||
55 | /** @} |
81 | /** @} |
56 | */ |
82 | */ |