Parent directory

send_string_keycodes.h

13404 bytes
  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)