Rev 4629 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4629 | Rev 4632 | ||
---|---|---|---|
Line 89... | Line 89... | ||
89 | 89 | ||
90 | /** Process keyboard & mouse events */ |
90 | /** Process keyboard & mouse events */ |
91 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
91 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
92 | { |
92 | { |
93 | static int key_released_flag = 0; |
93 | static int key_released_flag = 0; |
94 | static uint8_t prev_char = 0xFF; |
94 | static int caps_count = 0; |
95 | 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 | ||
98 | if (scan_code == PL050_KEY_RELEASE) { |
110 | if (scan_code == PL050_KEY_RELEASE) { |
99 | key_released_flag = 1; |
111 | key_released_flag = 1; |
100 | } else { |
112 | } else { |
101 | if (key_released_flag && prev_char == scan_code) { |
113 | if (key_released_flag) { |
102 | prev_char = 0xFF; |
- | |
103 | key_released(keybuffer, scan_code); |
114 | key_released(keybuffer, scan_code); |
104 | } else { |
115 | } else { |
105 | key_pressed(keybuffer, scan_code); |
116 | key_pressed(keybuffer, scan_code); |
106 | prev_char = scan_code; |
- | |
107 | } |
117 | } |
108 | key_released_flag = 0; |
118 | key_released_flag = 0; |
109 | } |
119 | } |
110 | 120 | ||
111 | return 1; |
121 | return 1; |