aboutsummaryrefslogtreecommitdiff
path: root/common/action.h
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2013-02-15 15:34:46 +0900
committertmk <nobody@nowhere>2013-02-15 15:34:46 +0900
commitf8d289e66965f99469292370c3b9200a03254f8e (patch)
tree98b2502fd231d4916270b76632242a15bb27781d /common/action.h
parent7a31451a077a55e1ad97cf8b31a111c7cd311a4d (diff)
parent2b811352a1497e28b946a49f9f31dc15dbda420b (diff)
downloadqmk_firmware-f8d289e66965f99469292370c3b9200a03254f8e.tar.gz
qmk_firmware-f8d289e66965f99469292370c3b9200a03254f8e.zip
Merge branch 'layer_stack'
Diffstat (limited to 'common/action.h')
-rw-r--r--common/action.h133
1 files changed, 73 insertions, 60 deletions
diff --git a/common/action.h b/common/action.h
index b9a6cb5b4..96b8ba2ed 100644
--- a/common/action.h
+++ b/common/action.h
@@ -162,25 +162,34 @@ bool waiting_buffer_has_anykey_pressed(void);
162 * 162 *
163 * Layer Actions 163 * Layer Actions
164 * ------------- 164 * -------------
165 * ACT_LAYER(1000): Set layer 165 * ACT_LAYER(1000): Set layer
166 * ACT_LAYER_BIT(1001): Bit-op layer 166 * ACT_LAYER_BIT(1001): Bit-op layer
167 * ACT_LAYER_STACK: Layer stack
167 * 168 *
168 * 1000|LLLL|0000 0000 set L to layer on press and set default on release(momentary) 169 * 1000|LLLL|0000 0000 set current layer on press and return to default on release(momentary)
169 * 1000|LLLL|0000 0001 set L to layer on press 170 * 1000|LLLL|0000 0001 set current layer on press
170 * 1000|LLLL|0000 0010 set L to layer on release 171 * 1000|LLLL|0000 0010 set current layer on release
171 * 1000|----|0000 0011 set default to layer on both(return to default layer) 172 * 1000|LLLL|0000 0011 set current layer on both
172 * 1000|LLLL| keycode set L to layer while hold and send key on tap 173 * 1000|LLLL| keycode set current layer on hold and send key on tap
173 * 1000|LLLL|1111 0000 set L to layer while hold and toggle on several taps 174 * 1000|LLLL|1111 0000 set current layer on hold and toggle on several taps
174 * 1000|LLLL|1111 1111 set L to default and layer(on press) 175 * 1000|DDDD|1111 1111 set default layer on press
176 * L: 0 means default layer
175 * 177 *
176 * 1001|BBBB|0000 0000 (not used) 178 * 1001|BBBB|0000 0000 bit-on current layer on press and bit-off on release(momentary)
177 * 1001|BBBB|0000 0001 bit-xor layer with B on press 179 * 1001|BBBB|0000 0001 bit-xor current layer on press
178 * 1001|BBBB|0000 0010 bit-xor layer with B on release 180 * 1001|BBBB|0000 0010 bit-xor current layer on release
179 * 1001|BBBB|0000 0011 bit-xor layer with B on both(momentary) 181 * 1001|BBBB|0000 0011 bit-xor current layer on both
180 * 1001|BBBB| keycode bit-xor layer with B while hold and send key on tap 182 * 1001|BBBB| keycode bit-xor current layer on hold and send key on tap
181 * 1001|BBBB|1111 0000 bit-xor layer with B while hold and toggle on several taps 183 * 1001|BBBB|1111 0000 bit-xor current layer on hold and toggle on several taps
182 * 1001|BBBB|1111 1111 bit-xor default with B and set layer(on press) 184 * 1001|BBBB|1111 1111 bit-xor default layer on both
183 * 185 *
186 * 1011|LLLL|0000 0000 push on press and remove on release(momentary)
187 * 1011|LLLL|0000 0001 push or remove on press
188 * 1011|LLLL|0000 0010 push or remove on release
189 * 1011|LLLL|0000 0011 push or remove on both
190 * 1011|LLLL| keycode push or remove on hold and send key on tap
191 * 1011|LLLL|1111 0000 push or remove on hold and toggle on several taps
192 * 1011|LLLL|1111 1111 (not used)
184 * 193 *
185 * 194 *
186 * Extensions(11XX) 195 * Extensions(11XX)
@@ -210,6 +219,7 @@ enum action_kind_id {
210 219
211 ACT_LAYER = 0b1000, 220 ACT_LAYER = 0b1000,
212 ACT_LAYER_BIT = 0b1001, 221 ACT_LAYER_BIT = 0b1001,
222 ACT_LAYER_STACK = 0b1011,
213 223
214 ACT_MACRO = 0b1100, 224 ACT_MACRO = 0b1100,
215 ACT_COMMAND = 0b1110, 225 ACT_COMMAND = 0b1110,
@@ -223,20 +233,20 @@ enum action_kind_id {
223#define ACTION(kind, param) ((kind)<<12 | (param)) 233#define ACTION(kind, param) ((kind)<<12 | (param))
224#define MODS4(mods) (((mods)>>4 | (mods)) & 0x0F) 234#define MODS4(mods) (((mods)>>4 | (mods)) & 0x0F)
225 235
226/* Key */ 236/*
237 * Key
238 */
227#define ACTION_KEY(key) ACTION(ACT_LMODS, key) 239#define ACTION_KEY(key) ACTION(ACT_LMODS, key)
228/* Mods & key */ 240/* Mods & key */
229#define ACTION_LMODS(mods) ACTION(ACT_LMODS, MODS4(mods)<<8 | 0x00) 241#define ACTION_LMODS(mods) ACTION(ACT_LMODS, MODS4(mods)<<8 | 0x00)
230#define ACTION_LMODS_KEY(mods, key) ACTION(ACT_LMODS, MODS4(mods)<<8 | (key)) 242#define ACTION_LMODS_KEY(mods, key) ACTION(ACT_LMODS, MODS4(mods)<<8 | (key))
231#define ACTION_RMODS(mods) ACTION(ACT_RMODS, MODS4(mods)<<8 | 0x00) 243#define ACTION_RMODS(mods) ACTION(ACT_RMODS, MODS4(mods)<<8 | 0x00)
232#define ACTION_RMODS_KEY(mods, key) ACTION(ACT_RMODS, MODS4(mods)<<8 | (key)) 244#define ACTION_RMODS_KEY(mods, key) ACTION(ACT_RMODS, MODS4(mods)<<8 | (key))
233/* Mod & key */
234#define ACTION_LMOD(mod) ACTION(ACT_LMODS, MODS4(MOD_BIT(mod))<<8 | 0x00) 245#define ACTION_LMOD(mod) ACTION(ACT_LMODS, MODS4(MOD_BIT(mod))<<8 | 0x00)
235#define ACTION_LMOD_KEY(mod, key) ACTION(ACT_LMODS, MODS4(MOD_BIT(mod))<<8 | (key)) 246#define ACTION_LMOD_KEY(mod, key) ACTION(ACT_LMODS, MODS4(MOD_BIT(mod))<<8 | (key))
236#define ACTION_RMOD(mod) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | 0x00) 247#define ACTION_RMOD(mod) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | 0x00)
237#define ACTION_RMOD_KEY(mod, key) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | (key)) 248#define ACTION_RMOD_KEY(mod, key) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | (key))
238 249/* Tap key */
239/* Mods + Tap key */
240enum mods_codes { 250enum mods_codes {
241 MODS_ONESHOT = 0x00, 251 MODS_ONESHOT = 0x00,
242}; 252};
@@ -244,7 +254,6 @@ enum mods_codes {
244#define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT) 254#define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT)
245#define ACTION_RMODS_TAP_KEY(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key)) 255#define ACTION_RMODS_TAP_KEY(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key))
246#define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT) 256#define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT)
247/* Mod + Tap key */
248#define ACTION_LMOD_TAP_KEY(mod, key) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) 257#define ACTION_LMOD_TAP_KEY(mod, key) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key))
249#define ACTION_LMOD_ONESHOT(mod) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT) 258#define ACTION_LMOD_ONESHOT(mod) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT)
250#define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) 259#define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key))
@@ -252,73 +261,77 @@ enum mods_codes {
252 261
253 262
254/* 263/*
255 * Switch layer 264 * Layer switching
256 */ 265 */
257enum layer_codes { 266enum layer_codes {
258 LAYER_MOMENTARY = 0, 267 LAYER_MOMENTARY = 0,
259 LAYER_ON_PRESS = 1, 268 LAYER_ON_PRESS = 1,
260 LAYER_ON_RELEASE = 2, 269 LAYER_ON_RELEASE = 2,
261 LAYER_DEFAULT =3, 270 LAYER_ON_BOTH =3,
262 LAYER_TAP_TOGGLE = 0xF0, 271 LAYER_TAP_TOGGLE = 0xF0,
263 LAYER_CHANGE_DEFAULT = 0xFF 272 LAYER_SET_DEFAULT_ON_PRESS = 0xFD,
273 LAYER_SET_DEFAULT_ON_RELEASE = 0xFE,
274 LAYER_SET_DEFAULT_ON_BOTH = 0xFF
264}; 275};
265enum layer_vals_default {
266 DEFAULT_ON_PRESS = 1,
267 DEFAULT_ON_RELEASE = 2,
268 DEFAULT_ON_BOTH = 3,
269};
270
271/* 276/*
272 * return to default layer 277 * Default layer
278 */
279/* set default layer */
280#define ACTION_LAYER_SET_DEFAULT(layer) ACTION_LAYER_SET_DEFAULT_R(layer)
281#define ACTION_LAYER_SET_DEFAULT_P(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_SET_DEFAULT_ON_PRESS)
282#define ACTION_LAYER_SET_DEFAULT_R(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_SET_DEFAULT_ON_RELEASE)
283#define ACTION_LAYER_SET_DEFAULT_B(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_SET_DEFAULT_ON_BOTH)
284/* bit-xor default layer */
285#define ACTION_LAYER_BIT_DEFAULT(bits) ACTION_LAYER_BIT_DEFAULT_R(bits)
286#define ACTION_LAYER_BIT_DEFAULT_P(bits) ACTION(ACT_LAYER, (bits)<<8 | LAYER_SET_DEFAULT_ON_PRESS)
287#define ACTION_LAYER_BIT_DEFAULT_R(bits) ACTION(ACT_LAYER, (bits)<<8 | LAYER_SET_DEFAULT_ON_RELEASE)
288#define ACTION_LAYER_BIT_DEFAULT_B(bits) ACTION(ACT_LAYER, (bits)<<8 | LAYER_SET_DEFAULT_ON_BOTH)
289/*
290 * Current layer: Return to default layer
273 */ 291 */
274#define ACTION_LAYER_DEFAULT ACTION_LAYER_DEFAULT_R 292#define ACTION_LAYER_DEFAULT ACTION_LAYER_DEFAULT_R
275/* set default layer on press */ 293#define ACTION_LAYER_DEFAULT_P ACTION_LAYER_SET_P(0)
276#define ACTION_LAYER_DEFAULT_P ACTION(ACT_LAYER, DEFAULT_ON_PRESS<<8 | LAYER_DEFAULT) 294#define ACTION_LAYER_DEFAULT_R ACTION_LAYER_SET_R(0)
277/* set default layer on release */ 295#define ACTION_LAYER_DEFAULT_B ACTION_LAYER_SET_B(0)
278#define ACTION_LAYER_DEFAULT_R ACTION(ACT_LAYER, DEFAULT_ON_RELEASE<<8 | LAYER_DEFAULT)
279/* change default layer and set layer */
280
281/* 296/*
282 * Set layer 297 * Current layer: Set
283 */ 298 */
284/* set layer on press and none on release */
285#define ACTION_LAYER_SET(layer) ACTION_LAYER_SET_P(layer) 299#define ACTION_LAYER_SET(layer) ACTION_LAYER_SET_P(layer)
286/* set layer on press and set default on release (This is needed by legacy keymap support.) */
287#define ACTION_LAYER_SET_MOMENTARY(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_MOMENTARY) 300#define ACTION_LAYER_SET_MOMENTARY(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_MOMENTARY)
288/* set layer on press and none on release */
289#define ACTION_LAYER_SET_TOGGLE(layer) ACTION_LAYER_SET_R(layer) 301#define ACTION_LAYER_SET_TOGGLE(layer) ACTION_LAYER_SET_R(layer)
290/* set layer while hold and send key on tap */
291#define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER, (layer)<<8 | (key))
292/* set layer on press */
293#define ACTION_LAYER_SET_P(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_PRESS) 302#define ACTION_LAYER_SET_P(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_PRESS)
294/* set layer on release */
295#define ACTION_LAYER_SET_R(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_RELEASE) 303#define ACTION_LAYER_SET_R(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_RELEASE)
296/* set layer on hold and toggle on several taps */ 304#define ACTION_LAYER_SET_B(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_BOTH)
297#define ACTION_LAYER_SET_TAP_TOGGLE(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_TAP_TOGGLE) 305#define ACTION_LAYER_SET_TAP_TOGGLE(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_TAP_TOGGLE)
298/* set default layer on both press and release */ 306#define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER, (layer)<<8 | (key))
299#define ACTION_LAYER_SET_DEFAULT(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_CHANGE_DEFAULT)
300
301/* 307/*
302 * Bit-op layer 308 * Current layer: Bit-op
303 */ 309 */
304/* bit-xor on both press and release */
305#define ACTION_LAYER_BIT(bits) ACTION_LAYER_BIT_MOMENTARY(bits) 310#define ACTION_LAYER_BIT(bits) ACTION_LAYER_BIT_MOMENTARY(bits)
306#define ACTION_LAYER_BIT_MOMENTARY(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_MOMENTARY) 311#define ACTION_LAYER_BIT_MOMENTARY(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_MOMENTARY)
307/* bit-xor on press */
308#define ACTION_LAYER_BIT_TOGGLE(bits) ACTION_LAYER_BIT_R(bits) 312#define ACTION_LAYER_BIT_TOGGLE(bits) ACTION_LAYER_BIT_R(bits)
309/* bit-xor while hold and send key on tap */
310#define ACTION_LAYER_BIT_TAP_KEY(bits, key) ACTION(ACT_LAYER_BIT, (bits)<<8 | (key))
311/* bit-xor on press */
312#define ACTION_LAYER_BIT_P(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_PRESS) 313#define ACTION_LAYER_BIT_P(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_PRESS)
313/* bit-xor on release */
314#define ACTION_LAYER_BIT_R(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_RELEASE) 314#define ACTION_LAYER_BIT_R(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_RELEASE)
315/* bit-xor while hold and toggle on several taps */ 315#define ACTION_LAYER_BIT_B(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_BOTH)
316#define ACTION_LAYER_BIT_TAP_TOGGLE(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_TAP_TOGGLE) 316#define ACTION_LAYER_BIT_TAP_TOGGLE(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_TAP_TOGGLE)
317/* bit-xor default layer and set layer */ 317#define ACTION_LAYER_BIT_TAP_KEY(bits, key) ACTION(ACT_LAYER_BIT, (bits)<<8 | (key))
318#define ACTION_LAYER_BIT_DEFAULT(bits) ACTION(ACT_LAYER, (bits)<<8 | LAYER_CHANGE_DEFAULT) 318/*
319 * Layer Stack
320 */
321/* momentary */
322#define ACTION_LAYER_STACK(layer) ACTION_LAYER_STACK_MOMENTARY(layer)
323#define ACTION_LAYER_STACK_MOMENTARY(layer) ACTION(ACT_LAYER_STACK, (layer)<<8 | LAYER_MOMENTARY)
324#define ACTION_LAYER_STACK_TOGGLE(layer) ACTION_LAYER_STACK_R(layer)
325#define ACTION_LAYER_STACK_P(layer) ACTION(ACT_LAYER_STACK, (layer)<<8 | LAYER_ON_PRESS)
326#define ACTION_LAYER_STACK_R(layer) ACTION(ACT_LAYER_STACK, (layer)<<8 | LAYER_ON_RELEASE)
327#define ACTION_LAYER_STACK_B(layer) ACTION(ACT_LAYER_STACK, (layer)<<8 | LAYER_ON_BOTH)
328#define ACTION_LAYER_STACK_TAP_TOGGLE(layer) ACTION(ACT_LAYER_STACK, (layer)<<8 | LAYER_TAP_TOGGLE)
329#define ACTION_LAYER_STACK_TAP_KEY(layer, key) ACTION(ACT_LAYER_STACK, (layer)<<8 | (key))
319 330
320 331
321/* HID Usage */ 332/*
333 * HID Usage
334 */
322enum usage_pages { 335enum usage_pages {
323 PAGE_SYSTEM, 336 PAGE_SYSTEM,
324 PAGE_CONSUMER 337 PAGE_CONSUMER