Skip to content

Commit 3cc04f8

Browse files
Update host_keyboard.c
Added the ability to work with the function keys f1-f12, ctrl-left, ctrl-right, ctrl-up, ctrl-down, page down, page up, insert, delete, pause. in the format of command VT 100
1 parent c4e98e1 commit 3cc04f8

1 file changed

Lines changed: 59 additions & 2 deletions

File tree

supervisor/shared/usb/host_keyboard.c

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,27 @@ struct keycode_mapper {
7878
#define CURSOR_INS "\e[2~"
7979
#define CURSOR_DEL "\e[3~"
8080

81+
// https://aperiodic.net/phil/archives/Geekery/term-function-keys/
82+
#define F1 "\eOP"
83+
#define F2 "\eOQ"
84+
#define F3 "\eOR"
85+
#define F4 "\eOS"
86+
#define F5 "\e[15~"
87+
#define F6 "\e[17~"
88+
#define F7 "\e[18~"
89+
#define F8 "\e[19~"
90+
#define F9 "\e[20~"
91+
#define F10 "\e[21~"
92+
#define F11 "\e[23~"
93+
#define F12 "\e[24~"
94+
#define PRINT_SCREEN "\e[i"
95+
#define CTRL_UP "\e[1;5A"
96+
#define CTRL_DOWN "\e[1;5B"
97+
#define CTRL_RIGHT "\e[1;5C"
98+
#define CTRL_LEFT "\e[1;5D"
99+
100+
101+
81102
STATIC struct keycode_mapper keycode_to_ascii[] = {
82103
{ HID_KEY_A, HID_KEY_Z, 'a', 0, NULL},
83104

@@ -90,13 +111,46 @@ STATIC struct keycode_mapper keycode_to_ascii[] = {
90111
{ HID_KEY_ENTER, HID_KEY_SLASH, 0, FLAG_SHIFT, "\n\x1b\177\t _+{}|~:\"~<>?" },
91112
{ HID_KEY_ENTER, HID_KEY_SLASH, 0, 0, "\r\x1b\10\t -=[]\\#;'`,./" },
92113

93-
{ HID_KEY_F1, HID_KEY_F1, 0x1e, 0, }, // help key on xerox 820 kbd
114+
// { HID_KEY_F1, HID_KEY_F1, 0x1e, 0, }, // help key on xerox 820 kbd
94115

95116
{ HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 0, FLAG_NUMLOCK | FLAG_STRING,
96117
"/\0" "*\0" "-\0" "+\0" "\n\0" CURSOR_END SEP CURSOR_DOWN SEP CURSOR_PGDN SEP CURSOR_LEFT SEP NOTHING SEP CURSOR_RIGHT SEP CURSOR_HOME SEP CURSOR_UP SEP CURSOR_PGDN SEP CURSOR_INS SEP CURSOR_DEL},
97118
{ HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 0, 0, "/*-+\n1234567890." },
98119

99-
{ HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_UP, 0, FLAG_STRING, CURSOR_RIGHT SEP CURSOR_LEFT SEP CURSOR_DOWN SEP CURSOR_UP },
120+
// { HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_UP, 0, FLAG_STRING, CURSOR_RIGHT SEP CURSOR_LEFT SEP CURSOR_DOWN SEP CURSOR_UP },
121+
{ HID_KEY_PAUSE, HID_KEY_PAUSE, 0x1a, 0, },
122+
{ HID_KEY_PAGE_DOWN, HID_KEY_PAGE_DOWN, 0, FLAG_STRING, CURSOR_PGDN },
123+
{ HID_KEY_PAGE_UP, HID_KEY_PAGE_UP, 0, FLAG_STRING, CURSOR_PGUP },
124+
{ HID_KEY_HOME, HID_KEY_HOME, 0, FLAG_STRING, CURSOR_HOME },
125+
{ HID_KEY_END, HID_KEY_END, 0, FLAG_STRING, CURSOR_END },
126+
{ HID_KEY_INSERT, HID_KEY_INSERT, 0, FLAG_STRING, CURSOR_INS },
127+
{ HID_KEY_DELETE, HID_KEY_DELETE, 0, FLAG_STRING, CURSOR_DEL },
128+
129+
{ HID_KEY_F1, HID_KEY_F1, 0, FLAG_STRING, F1 },
130+
{ HID_KEY_F2, HID_KEY_F2, 0, FLAG_STRING, F2 },
131+
{ HID_KEY_F3, HID_KEY_F3, 0, FLAG_STRING, F3 },
132+
{ HID_KEY_F4, HID_KEY_F4, 0, FLAG_STRING, F4 },
133+
{ HID_KEY_F5, HID_KEY_F5, 0, FLAG_STRING, F5 },
134+
{ HID_KEY_F6, HID_KEY_F6, 0, FLAG_STRING, F6 },
135+
{ HID_KEY_F7, HID_KEY_F7, 0, FLAG_STRING, F7 },
136+
{ HID_KEY_F8, HID_KEY_F8, 0, FLAG_STRING, F8 },
137+
{ HID_KEY_F9, HID_KEY_F9, 0, FLAG_STRING, F9 },
138+
{ HID_KEY_F10, HID_KEY_F10, 0, FLAG_STRING, F10 },
139+
{ HID_KEY_F11, HID_KEY_F11, 0, FLAG_STRING, F11 },
140+
{ HID_KEY_F12, HID_KEY_F12, 0, FLAG_STRING, F12 },
141+
{ HID_KEY_PRINT_SCREEN, HID_KEY_PRINT_SCREEN, 0, FLAG_STRING, PRINT_SCREEN },
142+
143+
144+
{ HID_KEY_ARROW_UP, HID_KEY_ARROW_UP, 0 , FLAG_STRING+FLAG_CTRL,CTRL_UP },
145+
{ HID_KEY_ARROW_DOWN, HID_KEY_ARROW_DOWN, 0 , FLAG_STRING+FLAG_CTRL, CTRL_DOWN },
146+
{ HID_KEY_ARROW_LEFT, HID_KEY_ARROW_LEFT, 0 , FLAG_STRING+FLAG_CTRL, CTRL_LEFT },
147+
{ HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_RIGHT, 0 , FLAG_STRING+FLAG_CTRL, CTRL_RIGHT},
148+
{ HID_KEY_ARROW_UP, HID_KEY_ARROW_UP, 0 , FLAG_STRING,CURSOR_UP },
149+
{ HID_KEY_ARROW_DOWN, HID_KEY_ARROW_DOWN, 0 , FLAG_STRING, CURSOR_DOWN },
150+
{ HID_KEY_ARROW_LEFT, HID_KEY_ARROW_LEFT, 0 , FLAG_STRING, CURSOR_LEFT },
151+
{ HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_RIGHT, 0 , FLAG_STRING, CURSOR_RIGHT},
152+
153+
100154

101155
};
102156

@@ -243,6 +297,9 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard
243297
if (mapper->flags & FLAG_CTRL && !ctrl) {
244298
continue;
245299
}
300+
if (!(mapper->flags & FLAG_CTRL) && ctrl) {
301+
continue;
302+
}
246303
if (mapper->flags & FLAG_STRING) {
247304
const char *msg = skip_nuls(mapper->data, keycode - mapper->first);
248305
send_bufz(msg);

0 commit comments

Comments
 (0)