diff options
| author | tmk <nobody@nowhere> | 2013-02-08 00:50:51 +0900 |
|---|---|---|
| committer | tmk <nobody@nowhere> | 2013-02-10 16:11:07 +0900 |
| commit | b2aa142ee0a88ae6c38798f33cf5d833b0ae3864 (patch) | |
| tree | ad4d142929e102d3e18082df877704d81a1c0171 /common/action.h | |
| parent | aad91a30a34d61739e1261bb82a1cb1ace581afa (diff) | |
| download | qmk_firmware-b2aa142ee0a88ae6c38798f33cf5d833b0ae3864.tar.gz qmk_firmware-b2aa142ee0a88ae6c38798f33cf5d833b0ae3864.zip | |
Clean layer actions.
Diffstat (limited to 'common/action.h')
| -rw-r--r-- | common/action.h | 190 |
1 files changed, 106 insertions, 84 deletions
diff --git a/common/action.h b/common/action.h index b1e958a26..800554eb8 100644 --- a/common/action.h +++ b/common/action.h | |||
| @@ -150,42 +150,26 @@ ACT_MOUSEKEY(0110): | |||
| 150 | 150 | ||
| 151 | Layer Actions | 151 | Layer Actions |
| 152 | ------------- | 152 | ------------- |
| 153 | TODO: reconsider layer methods. | 153 | ACT_LAYER(1000): Set layer |
| 154 | 1 momemtary + tap key up: L, down: default | 154 | ACT_LAYER_BIT(1001): Bit-op layer |
| 155 | 1 bitwise + tap key up: xor B, down: xor B | 155 | |
| 156 | 3 momemtary go + tap key? up: X, down: | 156 | 1000|LLLL|0000 0000 set L to layer on press and set default on release(momentary) |
| 157 | 3 toggle(mementary back) + tap key? up: down: Y | 157 | 1000|LLLL|0000 0001 set L to layer on press |
| 158 | 3 no tap up: X, down: Y | 158 | 1000|LLLL|0000 0010 set L to layer on release |
| 159 | 159 | 1000|----|0000 0011 set default to layer on both(return to default layer) | |
| 160 | ACT_LAYER_PRESSED(1000): Set layer on key pressed | 160 | 1000|LLLL|xxxx xxxx set L to layer while hold and send key on tap |
| 161 | ACT_LAYER_RELEASED(1001): Set layer on key released | 161 | 1000|LLLL|1111 0000 set L to layer while hold and toggle on several taps |
| 162 | ACT_LAYER_BIT(1010): On/Off layer bit | 162 | 1000|LLLL|1111 1111 set L to default and layer(on press) |
| 163 | ACT_LAYER_EXT(1011): Extentions | 163 | |
| 164 | 164 | 1001|BBBB|0000 0000 (not used) | |
| 165 | 1000|LLLL|0000 0000 set layer L when pressed | 165 | 1001|BBBB|0000 0001 bit-xor layer with B on press |
| 166 | 1001|LLLL|0000 0000 set layer L when released | 166 | 1001|BBBB|0000 0010 bit-xor layer with B on release |
| 167 | 1010|BBBB|0000 0000 on/off bit B when pressed/released | 167 | 1001|BBBB|0000 0011 bit-xor layer with B on both(momentary) |
| 168 | 1011|0000|0000 0000 set default layer when pressed | 168 | 1001|BBBB|xxxx xxxx bit-xor layer with B while hold and send key on tap |
| 169 | 1011|0001|0000 0000 set default layer when released | 169 | 1001|BBBB|1111 0000 bit-xor layer with B while hold and toggle on several taps |
| 170 | 170 | 1001|BBBB|1111 1111 bit-xor default with B and set layer(on press) | |
| 171 | 1000|LLLL|1111 0000 set layer L when pressed + tap toggle | 171 | |
| 172 | 1001|LLLL|1111 0000 set layer L when released + tap toggle | 172 | |
| 173 | 1010|BBBB|1111 0000 on/off bit B when pressed/released + tap toggle | ||
| 174 | 1011|0000|1111 0000 set default layer when pressed + tap toggle | ||
| 175 | 1011|0001|1111 0000 set default layer when released + tap toggle | ||
| 176 | |||
| 177 | 1000|LLLL|1111 1111 set L to default layer when pressed | ||
| 178 | 1001|LLLL|1111 1111 set L to default layer when released | ||
| 179 | 1010|BBBB|1111 1111 on/off bit B of default layer when pressed/released | ||
| 180 | 1011|0000|1111 1111 set current to default layer when pressed | ||
| 181 | 1011|0001|1111 1111 set current to default layer when released | ||
| 182 | |||
| 183 | 1000|LLLL| keycode set layer L when pressed + tap key | ||
| 184 | 1001|LLLL| keyocde set layer L when released + tap key | ||
| 185 | 1010|BBBB| keyocde on/off bit B when pressed/released + tap key | ||
| 186 | 1011|0000| keyocde set default layer when pressed + tap key | ||
| 187 | 1011|0001| keyocde set default layer when released + tap key | ||
| 188 | |||
| 189 | 173 | ||
| 190 | Extensions(11XX) | 174 | Extensions(11XX) |
| 191 | ---------------- | 175 | ---------------- |
| @@ -212,24 +196,14 @@ enum action_kind_id { | |||
| 212 | ACT_USAGE = 0b0100, | 196 | ACT_USAGE = 0b0100, |
| 213 | ACT_MOUSEKEY = 0b0101, | 197 | ACT_MOUSEKEY = 0b0101, |
| 214 | 198 | ||
| 215 | ACT_LAYER_PRESSED = 0b1000, | 199 | ACT_LAYER = 0b1000, |
| 216 | ACT_LAYER_RELEASED = 0b1001, | 200 | ACT_LAYER_BIT = 0b1001, |
| 217 | ACT_LAYER_BIT = 0b1010, | ||
| 218 | ACT_LAYER_EXT = 0b1011, | ||
| 219 | 201 | ||
| 220 | ACT_MACRO = 0b1100, | 202 | ACT_MACRO = 0b1100, |
| 221 | ACT_COMMAND = 0b1110, | 203 | ACT_COMMAND = 0b1110, |
| 222 | ACT_FUNCTION = 0b1111 | 204 | ACT_FUNCTION = 0b1111 |
| 223 | }; | 205 | }; |
| 224 | 206 | ||
| 225 | enum params { | ||
| 226 | P_ONESHOT = 0x00, | ||
| 227 | }; | ||
| 228 | |||
| 229 | enum options { | ||
| 230 | O_TAP = 0x8, | ||
| 231 | }; | ||
| 232 | |||
| 233 | 207 | ||
| 234 | /* action utility */ | 208 | /* action utility */ |
| 235 | #define ACTION_NO 0 | 209 | #define ACTION_NO 0 |
| @@ -250,48 +224,93 @@ enum options { | |||
| 250 | #define ACTION_RMOD_KEY(mod, key) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | (key)) | 224 | #define ACTION_RMOD_KEY(mod, key) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | (key)) |
| 251 | 225 | ||
| 252 | /* Mods + Tap key */ | 226 | /* Mods + Tap key */ |
| 227 | enum mods_codes { | ||
| 228 | MODS_ONESHOT = 0x00, | ||
| 229 | }; | ||
| 253 | #define ACTION_LMODS_TAP_KEY(mods, key) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | (key)) | 230 | #define ACTION_LMODS_TAP_KEY(mods, key) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | (key)) |
| 254 | #define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | P_ONESHOT) | 231 | #define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT) |
| 255 | #define ACTION_RMODS_TAP_KEY(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key)) | 232 | #define ACTION_RMODS_TAP_KEY(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key)) |
| 256 | #define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | P_ONESHOT) | 233 | #define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT) |
| 257 | /* Mod + Tap key */ | 234 | /* Mod + Tap key */ |
| 258 | #define ACTION_LMOD_TAP_KEY(mod, key) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) | 235 | #define ACTION_LMOD_TAP_KEY(mod, key) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) |
| 259 | #define ACTION_LMOD_ONESHOT(mod) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | P_ONESHOT) | 236 | #define ACTION_LMOD_ONESHOT(mod) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT) |
| 260 | #define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) | 237 | #define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) |
| 261 | #define ACTION_RMOD_ONESHOT(mod) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | P_ONESHOT) | 238 | #define ACTION_RMOD_ONESHOT(mod) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT) |
| 262 | 239 | ||
| 263 | // TODO: contemplate about layer action | 240 | |
| 264 | /* Switch current layer */ | 241 | /* |
| 265 | #define ACTION_LAYER_SET(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) | 242 | * Switch layer |
| 266 | #define ACTION_LAYER_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) | 243 | */ |
| 267 | #define ACTION_LAYER_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0x00) | 244 | enum layer_codes { |
| 268 | #define ACTION_LAYER_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0x00) | 245 | LAYER_MOMENTARY = 0, |
| 269 | #define ACTION_LAYER_SET_DEFAULT ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00) | 246 | LAYER_ON_PRESS = 1, |
| 270 | #define ACTION_LAYER_RETURN_DEFAULT ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00) | 247 | LAYER_ON_RELEASE = 2, |
| 271 | #define ACTION_LAYER_SET_DEFAULT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00) | 248 | LAYER_DEFAULT =3, |
| 272 | #define ACTION_LAYER_SET_DEFAULT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00) | 249 | LAYER_TAP_TOGGLE = 0xF0, |
| 273 | /* Switch default layer */ | 250 | LAYER_CHANGE_DEFAULT = 0xFF |
| 274 | #define ACTION_LAYER_DEFAULT_SET(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xFF) | 251 | }; |
| 275 | #define ACTION_LAYER_DEFAULT_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xFF) | 252 | enum layer_vals_default { |
| 276 | #define ACTION_LAYER_DEFAULT_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0xFF) | 253 | DEFAULT_ON_PRESS = 1, |
| 277 | #define ACTION_LAYER_DEFAULT_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0xFF) | 254 | DEFAULT_ON_RELEASE = 2, |
| 278 | #define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0xFF) | 255 | DEFAULT_ON_BOTH = 3, |
| 279 | #define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0xFF) | 256 | }; |
| 280 | /* Layer switch with tap key */ | 257 | |
| 281 | #define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | (key)) | 258 | /* |
| 282 | #define ACTION_LAYER_BIT_TAP_KEY(bits, key) ACTION(ACT_LAYER_BIT, (bits)<<8 | (key)) | 259 | * return to default layer |
| 283 | #define ACTION_LAYER_DEFAULT_SET_TAP_KEY(key) ACTION(ACT_LAYER_EXT, 0x0<<8 | (key)) | 260 | */ |
| 284 | /* Layer switch with tap toggle */ | 261 | #define ACTION_LAYER_DEFAULT ACTION_LAYER_DEFAULT_R |
| 285 | #define ACTION_LAYER_SET_ON_PRESSED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xF0) | 262 | /* set default layer on press */ |
| 286 | #define ACTION_LAYER_SET_ON_RELEASED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0xF0) | 263 | #define ACTION_LAYER_DEFAULT_P ACTION(ACT_LAYER, DEFAULT_ON_PRESS<<8 | LAYER_DEFAULT) |
| 287 | #define ACTION_LAYER_BIT_TAP_TOGGLE(layer) ACTION(ACT_LAYER_BIT, (layer)<<8 | 0xF0) | 264 | /* set default layer on release */ |
| 288 | #define ACTION_LAYER_DEFAULT_TAP_TOGGLE ACTION(ACT_LAYER_EXT, 0x0<<8 | 0xF0) | 265 | #define ACTION_LAYER_DEFAULT_R ACTION(ACT_LAYER, DEFAULT_ON_RELEASE<<8 | LAYER_DEFAULT) |
| 266 | /* change default layer and set layer */ | ||
| 267 | |||
| 268 | /* | ||
| 269 | * Set layer | ||
| 270 | */ | ||
| 271 | /* set layer on press and set default on release */ | ||
| 272 | #define ACTION_LAYER_SET(layer) ACTION_LAYER_SET_MOMENTARY(layer) | ||
| 273 | #define ACTION_LAYER_SET_MOMENTARY(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_MOMENTARY) | ||
| 274 | /* set layer on press and none on release */ | ||
| 275 | #define ACTION_LAYER_SET_TOGGLE(layer) ACTION_LAYER_SET_R(layer) | ||
| 276 | /* set layer while hold and send key on tap */ | ||
| 277 | #define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER, (layer)<<8 | (key)) | ||
| 278 | /* set layer on press */ | ||
| 279 | #define ACTION_LAYER_SET_P(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_PRESS) | ||
| 280 | /* set layer on release */ | ||
| 281 | #define ACTION_LAYER_SET_R(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_RELEASE) | ||
| 282 | /* set layer on hold and toggle on several taps */ | ||
| 283 | #define ACTION_LAYER_SET_TAP_TOGGLE(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_TAP_TOGGLE) | ||
| 284 | /* set default layer on both press and release */ | ||
| 285 | #define ACTION_LAYER_SET_DEFAULT(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_CHANGE_DEFAULT) | ||
| 286 | |||
| 287 | /* | ||
| 288 | * Bit-op layer | ||
| 289 | */ | ||
| 290 | /* bit-xor on both press and release */ | ||
| 291 | #define ACTION_LAYER_BIT(bits) ACTION_LAYER_BIT_MOMENTARY(bits) | ||
| 292 | #define ACTION_LAYER_BIT_MOMENTARY(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_MOMENTARY) | ||
| 293 | /* bit-xor on press */ | ||
| 294 | #define ACTION_LAYER_BIT_TOGGLE(bits) ACTION_LAYER_BIT_R(bits) | ||
| 295 | /* bit-xor while hold and send key on tap */ | ||
| 296 | #define ACTION_LAYER_BIT_TAP_KEY(bits, key) ACTION(ACT_LAYER_BIT, (bits)<<8 | (key)) | ||
| 297 | /* bit-xor on press */ | ||
| 298 | #define ACTION_LAYER_BIT_P(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_PRESS) | ||
| 299 | /* bit-xor on release */ | ||
| 300 | #define ACTION_LAYER_BIT_R(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_RELEASE) | ||
| 301 | /* bit-xor while hold and toggle on several taps */ | ||
| 302 | #define ACTION_LAYER_BIT_TAP_TOGGLE(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_TAP_TOGGLE) | ||
| 303 | /* bit-xor default layer and set layer */ | ||
| 304 | #define ACTION_LAYER_BIT_DEFAULT(bits) ACTION(ACT_LAYER, (bits)<<8 | LAYER_CHANGE_DEFAULT) | ||
| 305 | |||
| 289 | 306 | ||
| 290 | /* HID Usage */ | 307 | /* HID Usage */ |
| 291 | #define ACTION_USAGE_PAGE_SYSTEM 0 | 308 | enum usage_pages { |
| 292 | #define ACTION_USAGE_PAGE_CONSUMER 1 | 309 | PAGE_SYSTEM, |
| 293 | #define ACTION_USAGE_SYSTEM(id) ACTION(ACT_USAGE, ACTION_USAGE_PAGE_SYSTEM<<10 | (id)) | 310 | PAGE_CONSUMER |
| 294 | #define ACTION_USAGE_CONSUMER(id) ACTION(ACT_USAGE, ACTION_USAGE_PAGE_CONSUMER<<10 | (id)) | 311 | }; |
| 312 | #define ACTION_USAGE_SYSTEM(id) ACTION(ACT_USAGE, PAGE_SYSTEM<<10 | (id)) | ||
| 313 | #define ACTION_USAGE_CONSUMER(id) ACTION(ACT_USAGE, PAGE_CONSUMER<<10 | (id)) | ||
| 295 | 314 | ||
| 296 | /* Mousekey */ | 315 | /* Mousekey */ |
| 297 | #define ACTION_MOUSEKEY(key) ACTION(ACT_MOUSEKEY, key) | 316 | #define ACTION_MOUSEKEY(key) ACTION(ACT_MOUSEKEY, key) |
| @@ -303,7 +322,10 @@ enum options { | |||
| 303 | #define ACTION_COMMAND(opt, id) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) | 322 | #define ACTION_COMMAND(opt, id) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) |
| 304 | 323 | ||
| 305 | /* Function */ | 324 | /* Function */ |
| 325 | enum function_opts { | ||
| 326 | FUNC_TAP = 0x8, | ||
| 327 | }; | ||
| 306 | #define ACTION_FUNCTION(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | id) | 328 | #define ACTION_FUNCTION(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | id) |
| 307 | #define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, O_TAP<<8 | id) | 329 | #define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, FUNC_TAP<<8 | id) |
| 308 | 330 | ||
| 309 | #endif /* ACTION_H */ | 331 | #endif /* ACTION_H */ |
