diff options
| author | tmk <nobody@nowhere> | 2013-02-15 15:34:46 +0900 |
|---|---|---|
| committer | tmk <nobody@nowhere> | 2013-02-15 15:34:46 +0900 |
| commit | f8d289e66965f99469292370c3b9200a03254f8e (patch) | |
| tree | 98b2502fd231d4916270b76632242a15bb27781d /common/action.h | |
| parent | 7a31451a077a55e1ad97cf8b31a111c7cd311a4d (diff) | |
| parent | 2b811352a1497e28b946a49f9f31dc15dbda420b (diff) | |
| download | qmk_firmware-f8d289e66965f99469292370c3b9200a03254f8e.tar.gz qmk_firmware-f8d289e66965f99469292370c3b9200a03254f8e.zip | |
Merge branch 'layer_stack'
Diffstat (limited to 'common/action.h')
| -rw-r--r-- | common/action.h | 133 |
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 */ | ||
| 240 | enum mods_codes { | 250 | enum 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 | */ |
| 257 | enum layer_codes { | 266 | enum 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 | }; |
| 265 | enum 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 | */ | ||
| 322 | enum usage_pages { | 335 | enum usage_pages { |
| 323 | PAGE_SYSTEM, | 336 | PAGE_SYSTEM, |
| 324 | PAGE_CONSUMER | 337 | PAGE_CONSUMER |
