picofuse

keycode.h
Go to the documentation of this file.
1 
6 #pragma once
7 #include <stddef.h>
8 #include <stdint.h>
9 
11 // TYPES
12 
23 typedef enum {
25  hid_state_on = (1 << 0),
26  hid_state_off = (1 << 1),
32  hid_state_click = (1 << 2),
37  (1 << 5),
38  hid_state_repeat = (1 << 6),
39  hid_state_function = (1 << 7),
45  hid_state_caps_lock = (1 << 8),
46  hid_state_num_lock = (1 << 9),
47  hid_state_scroll_lock = (1 << 10),
48  hid_state_left_shift = (1 << 11),
49  hid_state_right_shift = (1 << 12),
50  hid_state_left_meta = (1 << 13),
52  (1 << 14),
53  hid_state_left_alt = (1 << 15),
54  hid_state_right_alt = (1 << 16),
55  hid_state_left_control = (1 << 17),
57  hid_state_left_windows = (1 << 19),
59  (1 << 20),
75 } hid_state_t;
77 
79 // KEYCODES
80 
88 #define KEYCODE_NONE 0x0000
89 #define KEYCODE_ESC 0x0001
90 #define KEYCODE_1 0x0002
91 #define KEYCODE_2 0x0003
92 #define KEYCODE_3 0x0004
93 #define KEYCODE_4 0x0005
94 #define KEYCODE_5 0x0006
95 #define KEYCODE_6 0x0007
96 #define KEYCODE_7 0x0008
97 #define KEYCODE_8 0x0009
98 #define KEYCODE_9 0x000A
99 #define KEYCODE_0 0x000B
100 #define KEYCODE_MINUS 0x000C
101 #define KEYCODE_EQUAL 0x000D
102 #define KEYCODE_BACKSPACE 0x000E
103 #define KEYCODE_TAB 0x000F
104 #define KEYCODE_Q 0x0010
105 #define KEYCODE_W 0x0011
106 #define KEYCODE_E 0x0012
107 #define KEYCODE_R 0x0013
108 #define KEYCODE_T 0x0014
109 #define KEYCODE_Y 0x0015
110 #define KEYCODE_U 0x0016
111 #define KEYCODE_I 0x0017
112 #define KEYCODE_O 0x0018
113 #define KEYCODE_P 0x0019
114 #define KEYCODE_LEFTBRACE 0x001A
115 #define KEYCODE_RIGHTBRACE 0x001B
116 #define KEYCODE_ENTER 0x001C
117 #define KEYCODE_LEFTCTRL 0x001D
118 #define KEYCODE_A 0x001E
119 #define KEYCODE_S 0x001F
120 #define KEYCODE_D 0x0020
121 #define KEYCODE_F 0x0021
122 #define KEYCODE_G 0x0022
123 #define KEYCODE_H 0x0023
124 #define KEYCODE_J 0x0024
125 #define KEYCODE_K 0x0025
126 #define KEYCODE_L 0x0026
127 #define KEYCODE_SEMICOLON 0x0027
128 #define KEYCODE_APOSTROPHE 0x0028
129 #define KEYCODE_GRAVE 0x0029
130 #define KEYCODE_LEFTSHIFT 0x002A
131 #define KEYCODE_BACKSLASH 0x002B
132 #define KEYCODE_Z 0x002C
133 #define KEYCODE_X 0x002D
134 #define KEYCODE_C 0x002E
135 #define KEYCODE_V 0x002F
136 #define KEYCODE_B 0x0030
137 #define KEYCODE_N 0x0031
138 #define KEYCODE_M 0x0032
139 #define KEYCODE_COMMA 0x0033
140 #define KEYCODE_DOT 0x0034
141 #define KEYCODE_SLASH 0x0035
142 #define KEYCODE_RIGHTSHIFT 0x0036
143 #define KEYCODE_KPASTERISK 0x0037
144 #define KEYCODE_LEFTALT 0x0038
145 #define KEYCODE_SPACE 0x0039
146 #define KEYCODE_CAPSLOCK 0x003A
147 #define KEYCODE_F1 0x003B
148 #define KEYCODE_F2 0x003C
149 #define KEYCODE_F3 0x003D
150 #define KEYCODE_F4 0x003E
151 #define KEYCODE_F5 0x003F
152 #define KEYCODE_F6 0x0040
153 #define KEYCODE_F7 0x0041
154 #define KEYCODE_F8 0x0042
155 #define KEYCODE_F9 0x0043
156 #define KEYCODE_F10 0x0044
157 #define KEYCODE_NUMLOCK 0x0045
158 #define KEYCODE_SCROLLLOCK 0x0046
159 #define KEYCODE_KP7 0x0047
160 #define KEYCODE_KP8 0x0048
161 #define KEYCODE_KP9 0x0049
162 #define KEYCODE_KPMINUS 0x004A
163 #define KEYCODE_KP4 0x004B
164 #define KEYCODE_KP5 0x004C
165 #define KEYCODE_KP6 0x004D
166 #define KEYCODE_KPPLUS 0x004E
167 #define KEYCODE_KP1 0x004F
168 #define KEYCODE_KP2 0x0050
169 #define KEYCODE_KP3 0x0051
170 #define KEYCODE_KP0 0x0052
171 #define KEYCODE_KPDOT 0x0053
172 #define KEYCODE_F11 0x0057
173 #define KEYCODE_F12 0x0058
174 #define KEYCODE_KPENTER 0x0060
175 #define KEYCODE_RIGHTCTRL 0x0061
176 #define KEYCODE_KPSLASH 0x0062
177 #define KEYCODE_SYSRQ 0x0063
178 #define KEYCODE_RIGHTALT 0x0064
179 #define KEYCODE_LINEFEED 0x0065
180 #define KEYCODE_HOME 0x0066
181 #define KEYCODE_UP 0x0067
182 #define KEYCODE_PAGEUP 0x0068
183 #define KEYCODE_LEFT 0x0069
184 #define KEYCODE_RIGHT 0x006A
185 #define KEYCODE_END 0x006B
186 #define KEYCODE_DOWN 0x006C
187 #define KEYCODE_PAGEDOWN 0x006D
188 #define KEYCODE_INSERT 0x006E
189 #define KEYCODE_DELETE 0x006F
190 #define KEYCODE_MACRO 0x0070
191 #define KEYCODE_MUTE 0x0071
192 #define KEYCODE_VOLUMEDOWN 0x0072
193 #define KEYCODE_VOLUMEUP 0x0073
194 #define KEYCODE_POWER 0x0074
195 #define KEYCODE_KPEQUAL 0x0075
196 #define KEYCODE_KPPLUSMINUS 0x0076
197 #define KEYCODE_KPCOMMA 0x0079
198 #define KEYCODE_LEFTMETA 0x007D
199 #define KEYCODE_RIGHTMETA 0x007E
200 #define KEYCODE_SLEEP 0x008E
201 #define KEYCODE_WAKEUP 0x008F
202 #define KEYCODE_KPLEFTPAREN 0x00B3
203 #define KEYCODE_KPRIGHTPAREN 0x00B4
204 #define KEYCODE_F13 0x00B7
205 #define KEYCODE_F14 0x00B8
206 #define KEYCODE_F15 0x00B9
207 #define KEYCODE_F16 0x00BA
208 #define KEYCODE_F17 0x00BB
209 #define KEYCODE_F18 0x00BC
210 #define KEYCODE_F19 0x00BD
211 #define KEYCODE_F20 0x00BE
212 #define KEYCODE_F21 0x00BF
213 #define KEYCODE_F22 0x00C0
214 #define KEYCODE_F23 0x00C1
215 #define KEYCODE_F24 0x00C2
216 #define KEYCODE_CLOSE 0x00CE
217 #define KEYCODE_PLAY 0x00CF
218 #define KEYCODE_PRINT 0x00D2
219 #define KEYCODE_SEARCH 0x00D9
220 #define KEYCODE_CANCEL 0x00DF
221 #define KEYCODE_BRIGHTNESS_DOWN 0x00E0
222 #define KEYCODE_BRIGHTNESS_UP 0x00E1
223 #define KEYCODE_BRIGHTNESS_CYCLE 0x00F3
224 #define KEYCODE_BRIGHTNESS_AUTO 0x00F4
225 #define KEYCODE_BTN0 0x0100
226 #define KEYCODE_BTN1 0x0101
227 #define KEYCODE_BTN2 0x0102
228 #define KEYCODE_BTN3 0x0103
229 #define KEYCODE_BTN4 0x0104
230 #define KEYCODE_BTN5 0x0105
231 #define KEYCODE_BTN6 0x0106
232 #define KEYCODE_BTN7 0x0107
233 #define KEYCODE_BTN8 0x0108
234 #define KEYCODE_BTN9 0x0109
235 #define KEYCODE_BTNLEFT 0x0110
236 #define KEYCODE_BTNRIGHT 0x0111
237 #define KEYCODE_BTNMIDDLE 0x0112
238 #define KEYCODE_BTNSIDE 0x0113
239 #define KEYCODE_BTNEXTRA 0x0114
240 #define KEYCODE_BTNTOUCH 0x014A
241 #define KEYCODE_EJECT 0x0200
242 #define KEYCODE_POWER_OFF 0x0201
243 #define KEYCODE_POWER_ON 0x0202
244 #define KEYCODE_INPUT_SELECT 0x0203
245 #define KEYCODE_INPUT_PC 0x0204
246 #define KEYCODE_INPUT_VIDEO1 0x0205
247 #define KEYCODE_INPUT_VIDEO2 0x0206
248 #define KEYCODE_INPUT_VIDEO3 0x0207
249 #define KEYCODE_INPUT_VIDEO4 0x0208
250 #define KEYCODE_INPUT_VIDEO5 0x0209
251 #define KEYCODE_INPUT_HDMI1 0x020A
252 #define KEYCODE_INPUT_HDMI2 0x020B
253 #define KEYCODE_INPUT_HDMI3 0x020C
254 #define KEYCODE_INPUT_HDMI4 0x020D
255 #define KEYCODE_INPUT_HDMI5 0x020E
256 #define KEYCODE_INPUT_AUX1 0x020F
257 #define KEYCODE_INPUT_AUX2 0x0210
258 #define KEYCODE_INPUT_AUX3 0x0211
259 #define KEYCODE_INPUT_AUX4 0x0212
260 #define KEYCODE_INPUT_AUX5 0x0213
261 #define KEYCODE_INPUT_CD 0x0214
262 #define KEYCODE_INPUT_DVD 0x0215
263 #define KEYCODE_INPUT_PHONO 0x0216
264 #define KEYCODE_INPUT_TAPE1 0x0217
265 #define KEYCODE_INPUT_TAPE2 0x0218
266 #define KEYCODE_INPUT_TUNER 0x0219
267 #define KEYCODE_INPUT_ANALOG 0x021A
268 #define KEYCODE_INPUT_DIGITAL 0x021B
269 #define KEYCODE_INPUT_INTERNET 0x021C
270 #define KEYCODE_INPUT_TEXT 0x021D
271 #define KEYCODE_INPUT_NEXT 0x021E
272 #define KEYCODE_INPUT_PREV 0x021F
273 #define KEYCODE_VIDEO_ASPECT 0x0220
274 #define KEYCODE_VIDEO_PIP 0x0221
275 #define KEYCODE_AUDIO_MONITOR 0x0222
276 #define KEYCODE_CLEAR 0x0223
277 #define KEYCODE_TIMER 0x0224
278 #define KEYCODE_CHANNEL_PREV 0x0225
279 #define KEYCODE_CHANNEL_GUIDE 0x0226
280 #define KEYCODE_RECORD 0x0227
281 #define KEYCODE_RECORD_SPEED 0x0228
282 #define KEYCODE_PLAY_SPEED 0x0229
283 #define KEYCODE_PLAY_MODE 0x022A
284 #define KEYCODE_REPLAY 0x022B
285 #define KEYCODE_DISPLAY 0x022C
286 #define KEYCODE_MENU 0x022D
287 #define KEYCODE_INFO 0x022E
288 #define KEYCODE_THUMBS_UP 0x022F
289 #define KEYCODE_THUMBS_DOWN 0x0230
290 #define KEYCODE_FAVOURITE 0x0231
291 #define KEYCODE_BUTTON_RED 0x0232
292 #define KEYCODE_BUTTON_GREEN 0x0233
293 #define KEYCODE_BUTTON_YELLOW 0x0234
294 #define KEYCODE_BUTTON_BLUE 0x0235
295 #define KEYCODE_SEARCH_LEFT 0x0236
296 #define KEYCODE_SEARCH_RIGHT 0x0237
297 #define KEYCODE_CHAPTER_NEXT 0x0238
298 #define KEYCODE_CHAPTER_PREV 0x0239
299 #define KEYCODE_NAV_SELECT 0x023A
300 #define KEYCODE_SUBTITLE_TOGGLE 0x023B
301 #define KEYCODE_SUBTITLE_ON 0x023C
302 #define KEYCODE_SUBTITLE_OFF 0x023D
303 #define KEYCODE_STOP 0x023E
304 #define KEYCODE_PAUSE 0x023F
305 #define KEYCODE_BROWSE 0x0240
306 #define KEYCODE_SHUFFLE 0x0241
307 #define KEYCODE_REPEAT 0x0242
308 #define KEYCODE_KEYPAD_10PLUS 0x0243
309 #define KEYCODE_BUTTON_USER 0x0244
310 
313 // FUNCTION DECLARATIONS
315 
327 const char *hid_keycode_to_string(uint16_t keycode);
328 
345 size_t hid_state_to_string(hid_state_t state, char *buf, size_t buf_size);
346 
351 static inline hid_state_t hid_keycode_to_state(uint16_t keycode) {
352  switch (keycode) {
353  case KEYCODE_LEFTCTRL:
354  return hid_state_left_control;
355  case KEYCODE_RIGHTCTRL:
357  case KEYCODE_LEFTSHIFT:
358  return hid_state_left_shift;
359  case KEYCODE_RIGHTSHIFT:
360  return hid_state_right_shift;
361  case KEYCODE_LEFTALT:
362  return hid_state_left_alt;
363  case KEYCODE_RIGHTALT:
364  return hid_state_right_alt;
365  case KEYCODE_LEFTMETA:
366  return hid_state_left_meta;
367  case KEYCODE_RIGHTMETA:
368  return hid_state_right_meta;
369  case KEYCODE_CAPSLOCK:
370  return hid_state_caps_lock;
371  case KEYCODE_NUMLOCK:
372  return hid_state_num_lock;
373  case KEYCODE_SCROLLLOCK:
374  return hid_state_scroll_lock;
375  default:
376  return hid_state_none;
377  }
378 }
379 
384 static inline char hid_keycode_to_char(uint16_t keycode) {
385  switch (keycode) {
386  case KEYCODE_1:
387  return '1';
388  case KEYCODE_2:
389  return '2';
390  case KEYCODE_3:
391  return '3';
392  case KEYCODE_4:
393  return '4';
394  case KEYCODE_5:
395  return '5';
396  case KEYCODE_6:
397  return '6';
398  case KEYCODE_7:
399  return '7';
400  case KEYCODE_8:
401  return '8';
402  case KEYCODE_9:
403  return '9';
404  case KEYCODE_0:
405  return '0';
406  case KEYCODE_MINUS:
407  return '-';
408  case KEYCODE_EQUAL:
409  return '=';
410  case KEYCODE_TAB:
411  return '\t';
412  case KEYCODE_Q:
413  return 'Q';
414  case KEYCODE_W:
415  return 'W';
416  case KEYCODE_E:
417  return 'E';
418  case KEYCODE_R:
419  return 'R';
420  case KEYCODE_T:
421  return 'T';
422  case KEYCODE_Y:
423  return 'Y';
424  case KEYCODE_U:
425  return 'U';
426  case KEYCODE_I:
427  return 'I';
428  case KEYCODE_O:
429  return 'O';
430  case KEYCODE_P:
431  return 'P';
432  case KEYCODE_LEFTBRACE:
433  return '[';
434  case KEYCODE_RIGHTBRACE:
435  return ']';
436  case KEYCODE_ENTER:
437  return '\n';
438  case KEYCODE_A:
439  return 'A';
440  case KEYCODE_S:
441  return 'S';
442  case KEYCODE_D:
443  return 'D';
444  case KEYCODE_F:
445  return 'F';
446  case KEYCODE_G:
447  return 'G';
448  case KEYCODE_H:
449  return 'H';
450  case KEYCODE_J:
451  return 'J';
452  case KEYCODE_K:
453  return 'K';
454  case KEYCODE_L:
455  return 'L';
456  case KEYCODE_SEMICOLON:
457  return ';';
458  case KEYCODE_APOSTROPHE:
459  return '\'';
460  case KEYCODE_GRAVE:
461  return '`';
462  case KEYCODE_BACKSLASH:
463  return '\\';
464  case KEYCODE_Z:
465  return 'Z';
466  case KEYCODE_X:
467  return 'X';
468  case KEYCODE_C:
469  return 'C';
470  case KEYCODE_V:
471  return 'V';
472  case KEYCODE_B:
473  return 'B';
474  case KEYCODE_N:
475  return 'N';
476  case KEYCODE_M:
477  return 'M';
478  case KEYCODE_COMMA:
479  return ',';
480  case KEYCODE_DOT:
481  return '.';
482  case KEYCODE_SLASH:
483  return '/';
484  case KEYCODE_KPASTERISK:
485  return '*';
486  case KEYCODE_SPACE:
487  return ' ';
488  case KEYCODE_KP7:
489  return '7';
490  case KEYCODE_KP8:
491  return '8';
492  case KEYCODE_KP9:
493  return '9';
494  case KEYCODE_KPMINUS:
495  return '-';
496  case KEYCODE_KP4:
497  return '4';
498  case KEYCODE_KP5:
499  return '5';
500  case KEYCODE_KP6:
501  return '6';
502  case KEYCODE_KPPLUS:
503  return '+';
504  case KEYCODE_KP1:
505  return '1';
506  case KEYCODE_KP2:
507  return '2';
508  case KEYCODE_KP3:
509  return '3';
510  case KEYCODE_KP0:
511  return '0';
512  case KEYCODE_KPDOT:
513  return '.';
514  case KEYCODE_KPENTER:
515  return '\n';
516  case KEYCODE_KPSLASH:
517  return '/';
518  case KEYCODE_LINEFEED:
519  return '\r';
520  case KEYCODE_KPCOMMA:
521  return ',';
522  case KEYCODE_KPLEFTPAREN:
523  return '(';
524  case KEYCODE_KPRIGHTPAREN:
525  return ')';
526  default:
527  return 0;
528  }
529 }
Function key or mode modifier is active.
Definition: keycode.h:44
Alias for hid_state_off; used to indicate a falling edge.
Definition: keycode.h:31
Num Lock state is active.
Definition: keycode.h:46
const char * hid_keycode_to_string(uint16_t keycode)
Convert a keycode to a display string.
Key/button is currently released (logical off).
Definition: keycode.h:27
hid_state_t
Input state flags used by the input manager and key handling.
Definition: keycode.h:23
Convenience mask: either left or right Windows/Meta.
Definition: keycode.h:72
Right Windows/Meta modifier is active.
Definition: keycode.h:58
A repeated key/button event (auto-repeat).
Definition: keycode.h:38
static char hid_keycode_to_char(uint16_t keycode)
Convert a keycode to its one-byte character representation.
Definition: keycode.h:384
Left Option/Alt modifier is active.
Definition: keycode.h:53
Convenience mask: either left or right Shift.
Definition: keycode.h:60
No input state set.
Definition: keycode.h:24
Key/button is currently pressed (logical.
Definition: keycode.h:25
Convenience mask: either left or right Control.
Definition: keycode.h:69
A long-press (long click) event was generated.
Definition: keycode.h:36
Scroll Lock state is active.
Definition: keycode.h:47
Right Meta (Command) modifier is active.
Definition: keycode.h:51
Right Control modifier is active.
Definition: keycode.h:56
Caps Lock state is active.
Definition: keycode.h:45
static hid_state_t hid_keycode_to_state(uint16_t keycode)
Convert a keycode to modifier/input state flags.
Definition: keycode.h:351
size_t hid_state_to_string(hid_state_t state, char *buf, size_t buf_size)
Format a HID state bitmask as a "|"-separated list of active flag names (for example "on|left_shift")...
Right Shift modifier is active.
Definition: keycode.h:49
Left Shift modifier is active.
Definition: keycode.h:48
Convenience mask: either left or right Meta (Command).
Definition: keycode.h:63
Alias for hid_state_on; used to indicate a rising edge.
Definition: keycode.h:29
Right Option/Alt modifier is active.
Definition: keycode.h:54
Left Control modifier is active.
Definition: keycode.h:55
Left Windows/Meta modifier is active.
Definition: keycode.h:57
A double-click event was generated.
Definition: keycode.h:34
Left Meta (Command) modifier is active.
Definition: keycode.h:50
A single click event was generated.
Definition: keycode.h:33
Convenience mask: either left or right Alt (Option).
Definition: keycode.h:66
A triple-click event was generated.
Definition: keycode.h:35