keyboard stuff
1/* Copyright 2019
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19// clang-format off
20
21/* Punctuation */
22#define X_ENT X_ENTER
23#define X_ESC X_ESCAPE
24#define X_BSPC X_BACKSPACE
25#define X_SPC X_SPACE
26#define X_MINS X_MINUS
27#define X_EQL X_EQUAL
28#define X_LBRC X_LEFT_BRACKET
29#define X_RBRC X_RIGHT_BRACKET
30#define X_BSLS X_BACKSLASH
31#define X_NUHS X_NONUS_HASH
32#define X_SCLN X_SEMICOLON
33#define X_QUOT X_QUOTE
34#define X_GRV X_GRAVE
35#define X_COMM X_COMMA
36#define X_SLSH X_SLASH
37#define X_NUBS X_NONUS_BACKSLASH
38
39/* Lock Keys */
40#define X_CAPS X_CAPS_LOCK
41#define X_SCRL X_SCROLL_LOCK
42#define X_NUM X_NUM_LOCK
43#define X_LCAP X_LOCKING_CAPS_LOCK
44#define X_LNUM X_LOCKING_NUM_LOCK
45#define X_LSCR X_LOCKING_SCROLL_LOCK
46
47/* Commands */
48#define X_PSCR X_PRINT_SCREEN
49#define X_PAUS X_PAUSE
50#define X_BRK X_PAUSE
51#define X_INS X_INSERT
52#define X_PGUP X_PAGE_UP
53#define X_DEL X_DELETE
54#define X_PGDN X_PAGE_DOWN
55#define X_RGHT X_RIGHT
56#define X_APP X_APPLICATION
57#define X_EXEC X_EXECUTE
58#define X_SLCT X_SELECT
59#define X_AGIN X_AGAIN
60#define X_PSTE X_PASTE
61#define X_ERAS X_ALTERNATE_ERASE
62#define X_SYRQ X_SYSTEM_REQUEST
63#define X_CNCL X_CANCEL
64#define X_CLR X_CLEAR
65#define X_PRIR X_PRIOR
66#define X_RETN X_RETURN
67#define X_SEPR X_SEPARATOR
68#define X_CLAG X_CLEAR_AGAIN
69#define X_CRSL X_CRSEL
70#define X_EXSL X_EXSEL
71
72/* Keypad */
73#define X_PSLS X_KP_SLASH
74#define X_PAST X_KP_ASTERISK
75#define X_PMNS X_KP_MINUS
76#define X_PPLS X_KP_PLUS
77#define X_PENT X_KP_ENTER
78#define X_P1 X_KP_1
79#define X_P2 X_KP_2
80#define X_P3 X_KP_3
81#define X_P4 X_KP_4
82#define X_P5 X_KP_5
83#define X_P6 X_KP_6
84#define X_P7 X_KP_7
85#define X_P8 X_KP_8
86#define X_P9 X_KP_9
87#define X_P0 X_KP_0
88#define X_PDOT X_KP_DOT
89#define X_PEQL X_KP_EQUAL
90#define X_PCMM X_KP_COMMA
91
92/* Language Specific */
93#define X_INT1 X_INTERNATIONAL_1
94#define X_INT2 X_INTERNATIONAL_2
95#define X_INT3 X_INTERNATIONAL_3
96#define X_INT4 X_INTERNATIONAL_4
97#define X_INT5 X_INTERNATIONAL_5
98#define X_INT6 X_INTERNATIONAL_6
99#define X_INT7 X_INTERNATIONAL_7
100#define X_INT8 X_INTERNATIONAL_8
101#define X_INT9 X_INTERNATIONAL_9
102#define X_LNG1 X_LANGUAGE_1
103#define X_LNG2 X_LANGUAGE_2
104#define X_LNG3 X_LANGUAGE_3
105#define X_LNG4 X_LANGUAGE_4
106#define X_LNG5 X_LANGUAGE_5
107#define X_LNG6 X_LANGUAGE_6
108#define X_LNG7 X_LANGUAGE_7
109#define X_LNG8 X_LANGUAGE_8
110#define X_LNG9 X_LANGUAGE_9
111
112/* Modifiers */
113#define X_LCTL X_LEFT_CTRL
114#define X_LSFT X_LEFT_SHIFT
115#define X_LALT X_LEFT_ALT
116#define X_LOPT X_LEFT_ALT
117#define X_LGUI X_LEFT_GUI
118#define X_LCMD X_LEFT_GUI
119#define X_LWIN X_LEFT_GUI
120#define X_RCTL X_RIGHT_CTRL
121#define X_RSFT X_RIGHT_SHIFT
122#define X_RALT X_RIGHT_ALT
123#define X_ALGR X_RIGHT_ALT
124#define X_ROPT X_RIGHT_ALT
125#define X_RGUI X_RIGHT_GUI
126#define X_RCMD X_RIGHT_GUI
127#define X_RWIN X_RIGHT_GUI
128
129/* Generic Desktop Page (0x01) */
130#define X_PWR X_SYSTEM_POWER
131#define X_SLEP X_SYSTEM_SLEEP
132#define X_WAKE X_SYSTEM_WAKE
133
134/* Consumer Page (0x0C) */
135#define X_MUTE X_AUDIO_MUTE
136#define X_VOLU X_AUDIO_VOL_UP
137#define X_VOLD X_AUDIO_VOL_DOWN
138#define X_MNXT X_MEDIA_NEXT_TRACK
139#define X_MPRV X_MEDIA_PREV_TRACK
140#define X_MSTP X_MEDIA_STOP
141#define X_MPLY X_MEDIA_PLAY_PAUSE
142#define X_MSEL X_MEDIA_SELECT
143#define X_EJCT X_MEDIA_EJECT
144#define X_CALC X_CALCULATOR
145#define X_MYCM X_MY_COMPUTER
146#define X_WSCH X_WWW_SEARCH
147#define X_WHOM X_WWW_HOME
148#define X_WBAK X_WWW_BACK
149#define X_WFWD X_WWW_FORWARD
150#define X_WSTP X_WWW_STOP
151#define X_WREF X_WWW_REFRESH
152#define X_WFAV X_WWW_FAVORITES
153#define X_MFFD X_MEDIA_FAST_FORWARD
154#define X_MRWD X_MEDIA_REWIND
155#define X_BRIU X_BRIGHTNESS_UP
156#define X_BRID X_BRIGHTNESS_DOWN
157#define X_CPNL X_CONTROL_PANEL
158#define X_ASST X_ASSISTANT
159
160/* System Specific */
161#define X_BRMU X_PAUSE
162#define X_BRMD X_SCROLL_LOCK
163
164/* Mouse Keys */
165#define X_MS_U X_MS_UP
166#define X_MS_D X_MS_DOWN
167#define X_MS_L X_MS_LEFT
168#define X_MS_R X_MS_RIGHT
169#define X_BTN1 X_MS_BTN1
170#define X_BTN2 X_MS_BTN2
171#define X_BTN3 X_MS_BTN3
172#define X_BTN4 X_MS_BTN4
173#define X_BTN5 X_MS_BTN5
174#define X_BTN6 X_MS_BTN6
175#define X_BTN7 X_MS_BTN7
176#define X_BTN8 X_MS_BTN8
177#define X_WH_U X_MS_WH_UP
178#define X_WH_D X_MS_WH_DOWN
179#define X_WH_L X_MS_WH_LEFT
180#define X_WH_R X_MS_WH_RIGHT
181#define X_ACL0 X_MS_ACCEL0
182#define X_ACL1 X_MS_ACCEL1
183#define X_ACL2 X_MS_ACCEL2
184
185/* Keyboard/Keypad Page (0x07) */
186#define X_A 04
187#define X_B 05
188#define X_C 06
189#define X_D 07
190#define X_E 08
191#define X_F 09
192#define X_G 0a
193#define X_H 0b
194#define X_I 0c
195#define X_J 0d
196#define X_K 0e
197#define X_L 0f
198#define X_M 10
199#define X_N 11
200#define X_O 12
201#define X_P 13
202#define X_Q 14
203#define X_R 15
204#define X_S 16
205#define X_T 17
206#define X_U 18
207#define X_V 19
208#define X_W 1a
209#define X_X 1b
210#define X_Y 1c
211#define X_Z 1d
212#define X_1 1e
213#define X_2 1f
214#define X_3 20
215#define X_4 21
216#define X_5 22
217#define X_6 23
218#define X_7 24
219#define X_8 25
220#define X_9 26
221#define X_0 27
222#define X_ENTER 28
223#define X_ESCAPE 29
224#define X_BACKSPACE 2a
225#define X_TAB 2b
226#define X_SPACE 2c
227#define X_MINUS 2d
228#define X_EQUAL 2e
229#define X_LEFT_BRACKET 2f
230#define X_RIGHT_BRACKET 30
231#define X_BACKSLASH 31
232#define X_NONUS_HASH 32
233#define X_SEMICOLON 33
234#define X_QUOTE 34
235#define X_GRAVE 35
236#define X_COMMA 36
237#define X_DOT 37
238#define X_SLASH 38
239#define X_CAPS_LOCK 39
240#define X_F1 3a
241#define X_F2 3b
242#define X_F3 3c
243#define X_F4 3d
244#define X_F5 3e
245#define X_F6 3f
246#define X_F7 40
247#define X_F8 41
248#define X_F9 42
249#define X_F10 43
250#define X_F11 44
251#define X_F12 45
252#define X_PRINT_SCREEN 46
253#define X_SCROLL_LOCK 47
254#define X_PAUSE 48
255#define X_INSERT 49
256#define X_HOME 4a
257#define X_PAGE_UP 4b
258#define X_DELETE 4c
259#define X_END 4d
260#define X_PAGE_DOWN 4e
261#define X_RIGHT 4f
262#define X_LEFT 50
263#define X_DOWN 51
264#define X_UP 52
265#define X_NUM_LOCK 53
266#define X_KP_SLASH 54
267#define X_KP_ASTERISK 55
268#define X_KP_MINUS 56
269#define X_KP_PLUS 57
270#define X_KP_ENTER 58
271#define X_KP_1 59
272#define X_KP_2 5a
273#define X_KP_3 5b
274#define X_KP_4 5c
275#define X_KP_5 5d
276#define X_KP_6 5e
277#define X_KP_7 5f
278#define X_KP_8 60
279#define X_KP_9 61
280#define X_KP_0 62
281#define X_KP_DOT 63
282#define X_NONUS_BACKSLASH 64
283#define X_APPLICATION 65
284#define X_KB_POWER 66
285#define X_KP_EQUAL 67
286#define X_F13 68
287#define X_F14 69
288#define X_F15 6a
289#define X_F16 6b
290#define X_F17 6c
291#define X_F18 6d
292#define X_F19 6e
293#define X_F20 6f
294#define X_F21 70
295#define X_F22 71
296#define X_F23 72
297#define X_F24 73
298#define X_EXECUTE 74
299#define X_HELP 75
300#define X_MENU 76
301#define X_SELECT 77
302#define X_STOP 78
303#define X_AGAIN 79
304#define X_UNDO 7a
305#define X_CUT 7b
306#define X_COPY 7c
307#define X_PASTE 7d
308#define X_FIND 7e
309#define X_KB_MUTE 7f
310#define X_KB_VOLUME_UP 80
311#define X_KB_VOLUME_DOWN 81
312#define X_LOCKING_CAPS_LOCK 82
313#define X_LOCKING_NUM_LOCK 83
314#define X_LOCKING_SCROLL_LOCK 84
315#define X_KP_COMMA 85
316#define X_KP_EQUAL_AS400 86
317#define X_INTERNATIONAL_1 87
318#define X_INTERNATIONAL_2 88
319#define X_INTERNATIONAL_3 89
320#define X_INTERNATIONAL_4 8a
321#define X_INTERNATIONAL_5 8b
322#define X_INTERNATIONAL_6 8c
323#define X_INTERNATIONAL_7 8d
324#define X_INTERNATIONAL_8 8e
325#define X_INTERNATIONAL_9 8f
326#define X_LANGUAGE_1 90
327#define X_LANGUAGE_2 91
328#define X_LANGUAGE_3 92
329#define X_LANGUAGE_4 93
330#define X_LANGUAGE_5 94
331#define X_LANGUAGE_6 95
332#define X_LANGUAGE_7 96
333#define X_LANGUAGE_8 97
334#define X_LANGUAGE_9 98
335#define X_ALTERNATE_ERASE 99
336#define X_SYSTEM_REQUEST 9a
337#define X_CANCEL 9b
338#define X_CLEAR 9c
339#define X_PRIOR 9d
340#define X_RETURN 9e
341#define X_SEPARATOR 9f
342#define X_OUT a0
343#define X_OPER a1
344#define X_CLEAR_AGAIN a2
345#define X_CRSEL a3
346#define X_EXSEL a4
347
348/* Modifiers */
349#define X_LEFT_CTRL e0
350#define X_LEFT_SHIFT e1
351#define X_LEFT_ALT e2
352#define X_LEFT_GUI e3
353#define X_RIGHT_CTRL e4
354#define X_RIGHT_SHIFT e5
355#define X_RIGHT_ALT e6
356#define X_RIGHT_GUI e7
357
358/* Media and Function keys */
359/* Generic Desktop Page (0x01) */
360#define X_SYSTEM_POWER a5
361#define X_SYSTEM_SLEEP a6
362#define X_SYSTEM_WAKE a7
363
364/* Consumer Page (0x0C) */
365#define X_AUDIO_MUTE a8
366#define X_AUDIO_VOL_UP a9
367#define X_AUDIO_VOL_DOWN aa
368#define X_MEDIA_NEXT_TRACK ab
369#define X_MEDIA_PREV_TRACK ac
370#define X_MEDIA_STOP ad
371#define X_MEDIA_PLAY_PAUSE ae
372#define X_MEDIA_SELECT af
373#define X_MEDIA_EJECT b0
374#define X_MAIL b1
375#define X_CALCULATOR b2
376#define X_MY_COMPUTER b3
377#define X_WWW_SEARCH b4
378#define X_WWW_HOME b5
379#define X_WWW_BACK b6
380#define X_WWW_FORWARD b7
381#define X_WWW_STOP b8
382#define X_WWW_REFRESH b9
383#define X_WWW_FAVORITES ba
384#define X_MEDIA_FAST_FORWARD bb
385#define X_MEDIA_REWIND bc
386#define X_BRIGHTNESS_UP bd
387#define X_BRIGHTNESS_DOWN be
388#define X_CONTROL_PANEL bf
389#define X_ASSISTANT c0
390
391/* Mouse Buttons (unallocated range in HID spec) */
392#define X_MS_UP cd
393#define X_MS_DOWN ce
394#define X_MS_LEFT cf
395#define X_MS_RIGHT d0
396#define X_MS_BTN1 d1
397#define X_MS_BTN2 d2
398#define X_MS_BTN3 d3
399#define X_MS_BTN4 d4
400#define X_MS_BTN5 d5
401#define X_MS_BTN6 d6
402#define X_MS_BTN7 d7
403#define X_MS_BTN8 d8
404#define X_MS_WH_UP d9
405#define X_MS_WH_DOWN da
406#define X_MS_WH_LEFT db
407#define X_MS_WH_RIGHT dc
408#define X_MS_ACCEL0 dd
409#define X_MS_ACCEL1 de
410#define X_MS_ACCEL2 df
411
412// Send string macros
413#define STRINGIZE(z) #z
414#define ADD_SLASH_X(y) STRINGIZE(\x##y)
415#define SYMBOL_STR(x) ADD_SLASH_X(x)
416
417#define SS_QMK_PREFIX 1
418
419#define SS_TAP_CODE 1
420#define SS_DOWN_CODE 2
421#define SS_UP_CODE 3
422#define SS_DELAY_CODE 4
423
424#define SS_TAP(keycode) "\1\1" SYMBOL_STR(keycode)
425#define SS_DOWN(keycode) "\1\2" SYMBOL_STR(keycode)
426#define SS_UP(keycode) "\1\3" SYMBOL_STR(keycode)
427#define SS_DELAY(msecs) "\1\4" STRINGIZE(msecs) "|"
428
429// `string` arguments must not be parenthesized
430#define SS_LCTL(string) SS_DOWN(X_LCTL) string SS_UP(X_LCTL)
431#define SS_LSFT(string) SS_DOWN(X_LSFT) string SS_UP(X_LSFT)
432#define SS_LALT(string) SS_DOWN(X_LALT) string SS_UP(X_LALT)
433#define SS_LGUI(string) SS_DOWN(X_LGUI) string SS_UP(X_LGUI)
434#define SS_LOPT(string) SS_LALT(string)
435#define SS_LCMD(string) SS_LGUI(string)
436#define SS_LWIN(string) SS_LGUI(string)
437
438#define SS_RCTL(string) SS_DOWN(X_RCTL) string SS_UP(X_RCTL)
439#define SS_RSFT(string) SS_DOWN(X_RSFT) string SS_UP(X_RSFT)
440#define SS_RALT(string) SS_DOWN(X_RALT) string SS_UP(X_RALT)
441#define SS_RGUI(string) SS_DOWN(X_RGUI) string SS_UP(X_RGUI)
442#define SS_ALGR(string) SS_RALT(string)
443#define SS_ROPT(string) SS_RALT(string)
444#define SS_RCMD(string) SS_RGUI(string)
445#define SS_RWIN(string) SS_RGUI(string)