Rev 4632 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4632 | Rev 4634 | ||
---|---|---|---|
Line 52... | Line 52... | ||
52 | #include <ddi.h> |
52 | #include <ddi.h> |
53 | #include <align.h> |
53 | #include <align.h> |
54 | 54 | ||
55 | #define PL050_KEY_RELEASE 0xF0 |
55 | #define PL050_KEY_RELEASE 0xF0 |
56 | #define PL050_ESC_KEY 0xE0 |
56 | #define PL050_ESC_KEY 0xE0 |
- | 57 | #define PL050_CAPS_SCAN_CODE 0x58 |
|
57 | 58 | ||
58 | irq_cmd_t pl050_cmds[] = { |
59 | irq_cmd_t pl050_cmds[] = { |
59 | { CMD_MEM_READ_1, (void *) 0, 0, 1 }, |
60 | { CMD_MEM_READ_1, (void *) 0, 0, 1 }, |
60 | { CMD_MEM_READ_1, (void *) 0, 0, 2} |
61 | { CMD_MEM_READ_1, (void *) 0, 0, 2} |
61 | }; |
62 | }; |
Line 89... | Line 90... | ||
89 | 90 | ||
90 | /** Process keyboard & mouse events */ |
91 | /** Process keyboard & mouse events */ |
91 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
92 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
92 | { |
93 | { |
93 | static int key_released_flag = 0; |
94 | static int key_released_flag = 0; |
94 | static int caps_count = 0; |
95 | static int caps_locked = 0; |
95 | - | ||
96 | int scan_code = IPC_GET_ARG1(*call); |
96 | int scan_code = IPC_GET_ARG1(*call); |
97 | 97 | ||
98 | if (scan_code == 0x58) { |
- | |
99 | if (caps_count == 2) { |
- | |
100 | caps_count = 0; |
- | |
101 | return 1; |
- | |
102 | } else if (key_released_flag && !caps_count) { |
- | |
103 | key_released_flag = 0; |
- | |
104 | return 1; |
- | |
105 | } |
- | |
106 | caps_count++; |
- | |
107 | } |
- | |
108 | - | ||
109 | - | ||
110 | if (scan_code == PL050_KEY_RELEASE) { |
98 | if (scan_code == PL050_KEY_RELEASE) { |
111 | key_released_flag = 1; |
99 | key_released_flag = 1; |
112 | } else { |
100 | } else { |
113 | if (key_released_flag) { |
101 | if (key_released_flag) { |
- | 102 | key_released_flag = 0; |
|
- | 103 | if (scan_code == PL050_CAPS_SCAN_CODE) { |
|
- | 104 | if (caps_locked) { |
|
- | 105 | caps_locked = 0; |
|
- | 106 | return 1; |
|
- | 107 | } else |
|
- | 108 | caps_locked = 1; |
|
- | 109 | } |
|
114 | key_released(keybuffer, scan_code); |
110 | key_released(keybuffer, scan_code); |
115 | } else { |
111 | } else { |
- | 112 | if (scan_code == PL050_CAPS_SCAN_CODE && caps_locked) |
|
- | 113 | return 1; |
|
116 | key_pressed(keybuffer, scan_code); |
114 | key_pressed(keybuffer, scan_code); |
117 | } |
115 | } |
118 | key_released_flag = 0; |
- | |
119 | } |
116 | } |
120 | 117 | ||
121 | return 1; |
118 | return 1; |
122 | } |
119 | } |
123 | 120 |