Rev 1504 | Rev 1566 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1504 | Rev 1560 | ||
|---|---|---|---|
| Line 55... | Line 55... | ||
| 55 | #define SC_DOWNARR 0x50 |
55 | #define SC_DOWNARR 0x50 |
| 56 | #define SC_DELETE 0x53 |
56 | #define SC_DELETE 0x53 |
| 57 | #define SC_HOME 0x47 |
57 | #define SC_HOME 0x47 |
| 58 | #define SC_END 0x4f |
58 | #define SC_END 0x4f |
| 59 | 59 | ||
| - | 60 | #define FUNCTION_KEYS 0x100 |
|
| - | 61 | ||
| 60 | static volatile int keyflags; /**< Tracking of multiple keypresses. */ |
62 | static volatile int keyflags; /**< Tracking of multiple keypresses. */ |
| 61 | static volatile int lockflags; /**< Tracking of multiple keys lockings. */ |
63 | static volatile int lockflags; /**< Tracking of multiple keys lockings. */ |
| 62 | 64 | ||
| 63 | /** Primary meaning of scancodes. */ |
65 | /** Primary meaning of scancodes. */ |
| 64 | static char sc_primary_map[] = { |
66 | static int sc_primary_map[] = { |
| 65 | SPECIAL, /* 0x00 */ |
67 | SPECIAL, /* 0x00 */ |
| 66 | SPECIAL, /* 0x01 - Esc */ |
68 | SPECIAL, /* 0x01 - Esc */ |
| 67 | '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', |
69 | '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', |
| 68 | '\b', /* 0x0e - Backspace */ |
70 | '\b', /* 0x0e - Backspace */ |
| 69 | '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', |
71 | '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', |
| Line 76... | Line 78... | ||
| 76 | SPECIAL, /* 0x36 - RShift */ |
78 | SPECIAL, /* 0x36 - RShift */ |
| 77 | '*', |
79 | '*', |
| 78 | SPECIAL, /* 0x38 - LAlt */ |
80 | SPECIAL, /* 0x38 - LAlt */ |
| 79 | ' ', |
81 | ' ', |
| 80 | SPECIAL, /* 0x3a - CapsLock */ |
82 | SPECIAL, /* 0x3a - CapsLock */ |
| 81 | SPECIAL, /* 0x3b - F1 */ |
83 | (FUNCTION_KEYS | 1), /* 0x3b - F1 */ |
| 82 | SPECIAL, /* 0x3c - F2 */ |
84 | (FUNCTION_KEYS | 2), /* 0x3c - F2 */ |
| 83 | SPECIAL, /* 0x3d - F3 */ |
85 | (FUNCTION_KEYS | 3), /* 0x3d - F3 */ |
| 84 | SPECIAL, /* 0x3e - F4 */ |
86 | (FUNCTION_KEYS | 4), /* 0x3e - F4 */ |
| 85 | SPECIAL, /* 0x3f - F5 */ |
87 | (FUNCTION_KEYS | 5), /* 0x3f - F5 */ |
| 86 | SPECIAL, /* 0x40 - F6 */ |
88 | (FUNCTION_KEYS | 6), /* 0x40 - F6 */ |
| 87 | SPECIAL, /* 0x41 - F7 */ |
89 | (FUNCTION_KEYS | 7), /* 0x41 - F7 */ |
| 88 | SPECIAL, /* 0x42 - F8 */ |
90 | (FUNCTION_KEYS | 8), /* 0x42 - F8 */ |
| 89 | SPECIAL, /* 0x43 - F9 */ |
91 | (FUNCTION_KEYS | 9), /* 0x43 - F9 */ |
| 90 | SPECIAL, /* 0x44 - F10 */ |
92 | (FUNCTION_KEYS | 10), /* 0x44 - F10 */ |
| 91 | SPECIAL, /* 0x45 - NumLock */ |
93 | SPECIAL, /* 0x45 - NumLock */ |
| 92 | SPECIAL, /* 0x46 - ScrollLock */ |
94 | SPECIAL, /* 0x46 - ScrollLock */ |
| 93 | '7', '8', '9', '-', |
95 | '7', '8', '9', '-', |
| 94 | '4', '5', '6', '+', |
96 | '4', '5', '6', '+', |
| 95 | '1', '2', '3', |
97 | '1', '2', '3', |
| 96 | '0', '.', |
98 | '0', '.', |
| 97 | SPECIAL, /* 0x54 - Alt-SysRq */ |
99 | SPECIAL, /* 0x54 - Alt-SysRq */ |
| 98 | SPECIAL, /* 0x55 - F11/F12/PF1/FN */ |
100 | SPECIAL, /* 0x55 - F11/F12/PF1/FN */ |
| 99 | SPECIAL, /* 0x56 - unlabelled key next to LAlt */ |
101 | SPECIAL, /* 0x56 - unlabelled key next to LAlt */ |
| 100 | SPECIAL, /* 0x57 - F11 */ |
102 | FUNCTION_KEYS | 11, /* 0x57 - F11 */ |
| 101 | SPECIAL, /* 0x58 - F12 */ |
103 | FUNCTION_KEYS | 12, /* 0x58 - F12 */ |
| 102 | SPECIAL, /* 0x59 */ |
104 | SPECIAL, /* 0x59 */ |
| 103 | SPECIAL, /* 0x5a */ |
105 | SPECIAL, /* 0x5a */ |
| 104 | SPECIAL, /* 0x5b */ |
106 | SPECIAL, /* 0x5b */ |
| 105 | SPECIAL, /* 0x5c */ |
107 | SPECIAL, /* 0x5c */ |
| 106 | SPECIAL, /* 0x5d */ |
108 | SPECIAL, /* 0x5d */ |
| Line 248... | Line 250... | ||
| 248 | } |
250 | } |
| 249 | } |
251 | } |
| 250 | 252 | ||
| 251 | static int key_pressed(keybuffer_t *keybuffer, unsigned char key) |
253 | static int key_pressed(keybuffer_t *keybuffer, unsigned char key) |
| 252 | { |
254 | { |
| 253 | char *map = sc_primary_map; |
255 | int *map = sc_primary_map; |
| 254 | char ascii = sc_primary_map[key]; |
256 | int ascii = sc_primary_map[key]; |
| 255 | char shift, capslock; |
257 | int shift, capslock; |
| 256 | char letter = 0; |
258 | int letter = 0; |
| 257 | 259 | ||
| 258 | switch (key) { |
260 | switch (key) { |
| 259 | case SC_LSHIFT: |
261 | case SC_LSHIFT: |
| 260 | case SC_RSHIFT: |
262 | case SC_RSHIFT: |
| 261 | keyflags |= PRESSED_SHIFT; |
263 | keyflags |= PRESSED_SHIFT; |