AwesomeStudioPedal
A programmable, multi-profile foot controller for DAWs, score readers, and studio automation
Loading...
Searching...
No Matches
key_lookup.cpp
Go to the documentation of this file.
1#include "key_lookup.h"
2#include <cstring>
3
4// ---- Key/action lookup tables ----
5
6namespace
7{
8
9 struct KeyEntry
10 {
11 const char* name;
12 uint8_t code;
13 };
14 struct MediaKeyEntry
15 {
16 const char* name;
17 const uint8_t* report;
18 };
19 struct ActionTypeEntry
20 {
21 const char* name;
22 Action::Type type;
23 };
24
25 static const KeyEntry KEY_TABLE[] = {
26 // Arrow keys
27 {"KEY_LEFT_ARROW", KEY_LEFT_ARROW},
28 {"KEY_RIGHT_ARROW", KEY_RIGHT_ARROW},
29 {"KEY_UP_ARROW", KEY_UP_ARROW},
30 {"KEY_DOWN_ARROW", KEY_DOWN_ARROW},
31 // Legacy names (no KEY_ prefix)
32 {"LEFT_ARROW", KEY_LEFT_ARROW},
33 {"RIGHT_ARROW", KEY_RIGHT_ARROW},
34 {"UP_ARROW", KEY_UP_ARROW},
35 {"DOWN_ARROW", KEY_DOWN_ARROW},
36 // Navigation
37 {"KEY_PAGE_UP", KEY_PAGE_UP},
38 {"KEY_PAGE_DOWN", KEY_PAGE_DOWN},
39 {"KEY_HOME", KEY_HOME},
40 {"KEY_END", KEY_END},
41 {"KEY_INSERT", KEY_INSERT},
42 {"KEY_DELETE", KEY_DELETE},
43 // Control
44 {"KEY_BACKSPACE", KEY_BACKSPACE},
45 {"KEY_TAB", KEY_TAB},
46 {"KEY_RETURN", KEY_RETURN},
47 {"KEY_ENTER", KEY_RETURN},
48 {"KEY_ESC", KEY_ESC},
49 {"KEY_CAPS_LOCK", KEY_CAPS_LOCK},
50 {"KEY_PRINTSCREEN", KEY_PRTSC},
51 // Modifiers
52 {"KEY_LEFT_CTRL", KEY_LEFT_CTRL},
53 {"KEY_LEFT_SHIFT", KEY_LEFT_SHIFT},
54 {"KEY_LEFT_ALT", KEY_LEFT_ALT},
55 {"KEY_LEFT_GUI", KEY_LEFT_GUI},
56 {"KEY_RIGHT_CTRL", KEY_RIGHT_CTRL},
57 {"KEY_RIGHT_SHIFT", KEY_RIGHT_SHIFT},
58 {"KEY_RIGHT_ALT", KEY_RIGHT_ALT},
59 {"KEY_RIGHT_GUI", KEY_RIGHT_GUI},
60 // Function keys
61 {"KEY_F1", KEY_F1},
62 {"KEY_F2", KEY_F2},
63 {"KEY_F3", KEY_F3},
64 {"KEY_F4", KEY_F4},
65 {"KEY_F5", KEY_F5},
66 {"KEY_F6", KEY_F6},
67 {"KEY_F7", KEY_F7},
68 {"KEY_F8", KEY_F8},
69 {"KEY_F9", KEY_F9},
70 {"KEY_F10", KEY_F10},
71 {"KEY_F11", KEY_F11},
72 {"KEY_F12", KEY_F12},
73 {"KEY_F13", KEY_F13},
74 {"KEY_F14", KEY_F14},
75 {"KEY_F15", KEY_F15},
76 {"KEY_F16", KEY_F16},
77 {"KEY_F17", KEY_F17},
78 {"KEY_F18", KEY_F18},
79 {"KEY_F19", KEY_F19},
80 {"KEY_F20", KEY_F20},
81 {"KEY_F21", KEY_F21},
82 {"KEY_F22", KEY_F22},
83 {"KEY_F23", KEY_F23},
84 {"KEY_F24", KEY_F24},
85 // Legacy F-key names (no KEY_ prefix)
86 {"F1", KEY_F1},
87 {"F2", KEY_F2},
88 {"F3", KEY_F3},
89 {"F4", KEY_F4},
90 {"F5", KEY_F5},
91 {"F6", KEY_F6},
92 {"F7", KEY_F7},
93 {"F8", KEY_F8},
94 {"F9", KEY_F9},
95 {"F10", KEY_F10},
96 {"F11", KEY_F11},
97 {"F12", KEY_F12},
98 // Legacy F13-F24 aliases (for consistency with F1-F12 above)
99 {"F13", KEY_F13},
100 {"F14", KEY_F14},
101 {"F15", KEY_F15},
102 {"F16", KEY_F16},
103 {"F17", KEY_F17},
104 {"F18", KEY_F18},
105 {"F19", KEY_F19},
106 {"F20", KEY_F20},
107 {"F21", KEY_F21},
108 {"F22", KEY_F22},
109 {"F23", KEY_F23},
110 {"F24", KEY_F24},
111 // Numpad
112 {"KEY_NUM_0", KEY_NUM_0},
113 {"KEY_NUM_1", KEY_NUM_1},
114 {"KEY_NUM_2", KEY_NUM_2},
115 {"KEY_NUM_3", KEY_NUM_3},
116 {"KEY_NUM_4", KEY_NUM_4},
117 {"KEY_NUM_5", KEY_NUM_5},
118 {"KEY_NUM_6", KEY_NUM_6},
119 {"KEY_NUM_7", KEY_NUM_7},
120 {"KEY_NUM_8", KEY_NUM_8},
121 {"KEY_NUM_9", KEY_NUM_9},
122 {"KEY_NUM_SLASH", KEY_NUM_SLASH},
123 {"KEY_NUM_ASTERISK", KEY_NUM_ASTERISK},
124 {"KEY_NUM_MINUS", KEY_NUM_MINUS},
125 {"KEY_NUM_PLUS", KEY_NUM_PLUS},
126 {"KEY_NUM_ENTER", KEY_NUM_ENTER},
127 {"KEY_NUM_PERIOD", KEY_NUM_PERIOD},
128 };
129
130 static const MediaKeyEntry MEDIA_KEY_TABLE[] = {
131 {"MEDIA_NEXT_TRACK", KEY_MEDIA_NEXT_TRACK},
132 {"MEDIA_PREVIOUS_TRACK", KEY_MEDIA_PREVIOUS_TRACK},
133 {"MEDIA_STOP", KEY_MEDIA_STOP},
134 {"MEDIA_PLAY_PAUSE", KEY_MEDIA_PLAY_PAUSE},
135 {"MEDIA_MUTE", KEY_MEDIA_MUTE},
136 {"MEDIA_VOLUME_UP", KEY_MEDIA_VOLUME_UP},
137 {"MEDIA_VOLUME_DOWN", KEY_MEDIA_VOLUME_DOWN},
138 // KEY_-prefixed aliases
139 {"KEY_MEDIA_NEXT_TRACK", KEY_MEDIA_NEXT_TRACK},
140 {"KEY_MEDIA_PREVIOUS_TRACK", KEY_MEDIA_PREVIOUS_TRACK},
141 {"KEY_MEDIA_STOP", KEY_MEDIA_STOP},
142 {"KEY_MEDIA_PLAY_PAUSE", KEY_MEDIA_PLAY_PAUSE},
143 {"KEY_MEDIA_MUTE", KEY_MEDIA_MUTE},
144 {"KEY_MEDIA_VOLUME_UP", KEY_MEDIA_VOLUME_UP},
145 {"KEY_MEDIA_VOLUME_DOWN", KEY_MEDIA_VOLUME_DOWN},
146 // Short aliases used in config
147 {"KEY_VOLUME_UP", KEY_MEDIA_VOLUME_UP},
148 {"KEY_VOLUME_DOWN", KEY_MEDIA_VOLUME_DOWN},
149 // Extended media keys
150 {"KEY_MEDIA_WWW_HOME", KEY_MEDIA_WWW_HOME},
151 {"KEY_MEDIA_WWW_BACK", KEY_MEDIA_WWW_BACK},
152 {"KEY_MEDIA_WWW_STOP", KEY_MEDIA_WWW_STOP},
153 {"KEY_MEDIA_WWW_SEARCH", KEY_MEDIA_WWW_SEARCH},
154 {"KEY_MEDIA_WWW_BOOKMARKS", KEY_MEDIA_WWW_BOOKMARKS},
155 {"KEY_MEDIA_CALCULATOR", KEY_MEDIA_CALCULATOR},
156 {"KEY_MEDIA_EMAIL_READER", KEY_MEDIA_EMAIL_READER},
157 {"KEY_MEDIA_LOCAL_MACHINE_BROWSER", KEY_MEDIA_LOCAL_MACHINE_BROWSER},
158 {"KEY_MEDIA_CONSUMER_CONTROL_CONFIGURATION", KEY_MEDIA_CONSUMER_CONTROL_CONFIGURATION},
159 };
160
161 static const ActionTypeEntry ACTION_TYPE_TABLE[] = {
162 {"SendStringAction", Action::Type::SendString},
163 {"SendCharAction", Action::Type::SendChar},
164 {"SendKeyAction", Action::Type::SendKey},
165 {"SendMediaKeyAction", Action::Type::SendMediaKey},
166 {"SerialOutputAction", Action::Type::SerialOutput},
167 {"DelayedAction", Action::Type::Delayed},
168 };
169
170} // namespace
171
173{
174 for (const auto& e : ACTION_TYPE_TABLE)
175 {
176 if (strcmp(e.name, name) == 0)
177 {
178 return e.type;
179 }
180 }
182}
183
184uint8_t lookupKey(const char* name)
185{
186 for (const auto& e : KEY_TABLE)
187 {
188 if (strcmp(e.name, name) == 0)
189 {
190 return e.code;
191 }
192 }
193 return 0;
194}
195
196const uint8_t* lookupMediaKey(const char* name)
197{
198 for (const auto& e : MEDIA_KEY_TABLE)
199 {
200 if (strcmp(e.name, name) == 0)
201 {
202 return e.report;
203 }
204 }
205 return nullptr;
206}
const uint8_t KEY_F12
const uint8_t KEY_F6
const uint8_t KEY_F17
const uint8_t KEY_F19
const uint8_t KEY_LEFT_GUI
const uint8_t KEY_RIGHT_SHIFT
const uint8_t KEY_LEFT_ARROW
const uint8_t KEY_NUM_2
const uint8_t KEY_NUM_PLUS
const uint8_t KEY_F15
const uint8_t KEY_F22
const uint8_t KEY_NUM_ENTER
const uint8_t KEY_RIGHT_CTRL
const uint8_t KEY_F8
const uint8_t KEY_NUM_7
const uint8_t KEY_RIGHT_ARROW
const uint8_t KEY_F18
const uint8_t KEY_RIGHT_ALT
const uint8_t KEY_F13
const uint8_t KEY_NUM_1
const uint8_t KEY_DOWN_ARROW
const uint8_t KEY_F3
const uint8_t KEY_NUM_6
const uint8_t KEY_INSERT
const uint8_t KEY_END
const uint8_t KEY_F23
const uint8_t KEY_NUM_PERIOD
const uint8_t KEY_F24
const uint8_t KEY_HOME
const uint8_t KEY_UP_ARROW
const uint8_t KEY_NUM_9
const uint8_t KEY_PAGE_DOWN
const uint8_t KEY_NUM_5
const uint8_t KEY_NUM_SLASH
const uint8_t KEY_F20
const uint8_t KEY_F9
const uint8_t KEY_F14
const uint8_t KEY_CAPS_LOCK
const uint8_t KEY_LEFT_ALT
const uint8_t KEY_ESC
const uint8_t KEY_F7
const uint8_t KEY_LEFT_CTRL
const uint8_t KEY_TAB
const uint8_t KEY_F2
const uint8_t KEY_RETURN
const uint8_t KEY_F10
const uint8_t KEY_NUM_ASTERISK
const uint8_t KEY_NUM_4
const uint8_t KEY_NUM_8
const uint8_t KEY_NUM_0
const uint8_t KEY_PRTSC
const uint8_t KEY_F5
const uint8_t KEY_RIGHT_GUI
const uint8_t KEY_DELETE
const uint8_t KEY_LEFT_SHIFT
const uint8_t KEY_PAGE_UP
const uint8_t KEY_F16
const uint8_t KEY_NUM_MINUS
const uint8_t KEY_F1
const uint8_t KEY_F4
const uint8_t KEY_BACKSPACE
const uint8_t KEY_NUM_3
const uint8_t KEY_F11
const uint8_t KEY_F21
const uint8_t * lookupMediaKey(const char *name)
Looks up a media key report by name.
uint8_t lookupKey(const char *name)
Looks up a key code by name.
Action::Type lookupActionType(const char *name)
Looks up an action type by name.
void name(uint8_t index, char *buf)
Write the letter name for a button index into buf.