diff options
Diffstat (limited to 'common/action.h')
| -rw-r--r-- | common/action.h | 161 |
1 files changed, 81 insertions, 80 deletions
diff --git a/common/action.h b/common/action.h index 942ce191a..3115c67f4 100644 --- a/common/action.h +++ b/common/action.h | |||
| @@ -5,55 +5,57 @@ | |||
| 5 | 5 | ||
| 6 | 6 | ||
| 7 | /* Key Action(16bit code) | 7 | /* Key Action(16bit code) |
| 8 | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 | 8 | |
| 9 | ------------------------------------------------ | 9 | Keyboard Keys |
| 10 | ACT_LMODS(0000) | 10 | ------------- |
| 11 | 0 0 0 0| 0 0 0 0| 0 0 0 0 0 0| 0 0 No action | 11 | ACT_LMODS(0000): |
| 12 | 0 0 0 0| 0 0 0 0| keycode(8) Key | 12 | 0000|0000|000000|00 No action |
| 13 | 0 0 0 0| mods(4) | 0 0 0 0 0 0| 0 0 Lmods Momentary | 13 | 0000|mods|000000|00 Left mods Momentary |
| 14 | 0 0 0 0| mods(4) | 0 0 0 0 0 0| 0 1 Lmods OneShot | 14 | 0000|mods|000000|01 Left mods OneShot |
| 15 | 0 0 0 0| mods(4) | 0 0 0 0 0 0| 1 0 (reserved) | 15 | 0000|mods|000000|10 (reserved) |
| 16 | 0 0 0 0| mods(4) | 0 0 0 0 0 0| 1 1 (reserved) | 16 | 0000|mods|000000|11 (reserved) |
| 17 | 0 0 0 0| mods(4) | keycode(8) Key+Lmods | 17 | 0000|0000| keycode Key |
| 18 | 18 | 0000|mods| keycode Key+Left mods | |
| 19 | ACT_RMODS(0001) | 19 | |
| 20 | 0 0 0 1| 0 0 0 0| 0 0 0 0 0 0 0 0 No action(not used) | 20 | ACT_RMODS(0001): |
| 21 | 0 0 0 1| 0 0 0 0| keycode(8) Key(not used) | 21 | 0001|0000|000000|00 No action |
| 22 | 0 0 0 1| mods(4) | 0 0 0 0 0 0| 0 0 Rmods Momentary | 22 | 0001|mods|000000|00 Right mods Momentary |
| 23 | 0 0 0 1| mods(4) | 0 0 0 0 0 0| 0 1 Rmods OneShot | 23 | 0001|mods|000000|01 Right mods OneShot |
| 24 | 0 0 0 1| mods(4) | 0 0 0 0 0 0| 1 0 (reserved) | 24 | 0001|mods|000000|10 (reserved) |
| 25 | 0 0 0 1| mods(4) | 0 0 0 0 0 0| 1 1 (reserved) | 25 | 0001|mods|000000|11 (reserved) |
| 26 | 0 0 0 1| mods(4) | keycode(8) Key+Rmod | 26 | 0001|0000| keycode Key |
| 27 | 27 | 0001|mods| keycode Key+Right mods | |
| 28 | ACT_LMODS_TAP(0010) | 28 | |
| 29 | 0 0 1 0| 0 0 0 0| X X X X X X X X (reserved)[00-FF] | 29 | ACT_LMODS_TAP(0010): |
| 30 | 0 0 1 0| mods(4) | 0 0 0 0 0 0| X X (reserved) | 30 | 0010|mods| keycode Left mods+tap Key |
| 31 | 0 0 1 0| mods(4) | keycode(8) Lmods+tap Key | 31 | |
| 32 | 0 0 1 0| mods(4) | 1 1 1 1| X X X X (reserved)[F0-FF] | 32 | ACT_RMODS_TAP(0011): |
| 33 | 33 | 0011|mods| keycode Right mods+tap Key | |
| 34 | ACT_RMODS_TAP(0011) | ||
| 35 | 0 0 1 1| 0 0 0 0| X X X X X X X X (reserved)[00-FF] | ||
| 36 | 0 0 1 1| mods(4) | 0 0 0 0 0 0| X X (reserved) | ||
| 37 | 0 0 1 1| mods(4) | keycode(8) Rmods+tap Key | ||
| 38 | 0 0 1 1| mods(4) | 1 1 1 1| X X X X (reserved)[F0-FF] | ||
| 39 | 34 | ||
| 40 | ACT_USAGE - other HID usage than keyboard | 35 | |
| 41 | 0 1 0 0| 0 0| usage(10) System usage | 36 | Other HID Usage |
| 42 | 0 1 0 0| 0 1| usage(10) Consumer usage | 37 | --------------- |
| 43 | 0 1 0 0| 1 0| usage(10) (reserved) | 38 | This action handles other usages than keyboard. |
| 44 | 0 1 0 0| 1 1| usage(10) (reserved) | 39 | ACT_USAGE(0100): |
| 45 | 40 | 0100|00| usage(10) System control(0x80) - General Desktop page(0x01) | |
| 46 | ACT_MOUSEKEY(0110) | 41 | 0100|01| usage(10) Consumer control(0x01) - Consumer page(0x0C) |
| 47 | 0 1 0 1| X X X X| keycode(8) Mouse key | 42 | 0100|10| usage(10) (reserved) |
| 48 | ??? TODO: refactor | 43 | 0100|11| usage(10) (reserved) |
| 49 | 0 1 0 1| 0 0 X X| accel(5) |cursor(3) Mouse key | 44 | |
| 50 | 0 1 0 1| 0 1 X X| accel(5) |wheel(3) Mouse key | 45 | |
| 51 | 0 1 0 1| 1 0 X X| button(8) Mouse key | 46 | Mouse Keys |
| 52 | 0 1 0 1| 1 1 X X| button(8) Mouse key | 47 | ---------- |
| 53 | ??? | 48 | ACT_MOUSEKEY(0110): |
| 54 | 49 | 0101|XXXX| keycode Mouse key | |
| 55 | Layer Action | 50 | |
| 56 | ------------ | 51 | |
| 52 | Layer Actions | ||
| 53 | ------------- | ||
| 54 | ACT_LAYER_PRESSED(1000): Set layer on key pressed | ||
| 55 | ACT_LAYER_RELEASED(1001): Set layer on key released | ||
| 56 | ACT_LAYER_BIT(1010): On/Off layer bit | ||
| 57 | ACT_LAYER_EXT(1011): Extentions | ||
| 58 | |||
| 57 | 1000|LLLL|0000 0000 set layer L when pressed | 59 | 1000|LLLL|0000 0000 set layer L when pressed |
| 58 | 1001|LLLL|0000 0000 set layer L when released | 60 | 1001|LLLL|0000 0000 set layer L when released |
| 59 | 1010|BBBB|0000 0000 on/off bit B when pressed/released | 61 | 1010|BBBB|0000 0000 on/off bit B when pressed/released |
| @@ -79,16 +81,19 @@ Layer Action | |||
| 79 | 1011|0001| keyocde set default layer when released[tap is ignored/not used] | 81 | 1011|0001| keyocde set default layer when released[tap is ignored/not used] |
| 80 | 82 | ||
| 81 | 83 | ||
| 82 | ACT_MACRO(1100) | 84 | Extensions(11XX) |
| 83 | 1 1 0 0| option(4) | macro-table id(8) Macro play(Flash) | 85 | ---------------- |
| 84 | 1 1 0 0| option(4) | macro-table id(8) Macro play(EEPROM) | 86 | NOTE: NOT FIXED |
| 85 | 1 1 0 0| 1 1 1 1| macro-table id(8) Macro record | 87 | |
| 88 | ACT_MACRO(1100): | ||
| 89 | 1100|opt | id(8) Macro play | ||
| 90 | 1100|1111| id(8) Macro record | ||
| 86 | 91 | ||
| 87 | ACT_COMMAND(1110) | 92 | ACT_COMMAND(1110): |
| 88 | 1 1 1 0| option(4) | comamnd id(8) Built-in Command exec | 93 | 1110|opt | id(8) Built-in Command exec |
| 89 | 94 | ||
| 90 | ACT_FUNCTION(1111) | 95 | ACT_FUNCTION(1111): |
| 91 | 1 1 1 1| function address(4K range) Function | 96 | 1111| address(12) Function |
| 92 | Macro record(dynamicly) | 97 | Macro record(dynamicly) |
| 93 | Macro play(dynamicly) | 98 | Macro play(dynamicly) |
| 94 | TODO: modifier + [tap key /w mod] | 99 | TODO: modifier + [tap key /w mod] |
| @@ -98,19 +103,22 @@ TODO: modifier + [tap key /w mod] | |||
| 98 | */ | 103 | */ |
| 99 | 104 | ||
| 100 | enum action_id { | 105 | enum action_id { |
| 101 | ACT_LMODS = 0b0000, | 106 | ACT_LMODS = 0b0000, |
| 102 | ACT_RMODS = 0b0001, | 107 | ACT_RMODS = 0b0001, |
| 103 | ACT_LMOD_TAP = 0b0010, | 108 | ACT_LMODS_TAP = 0b0010, |
| 104 | ACT_RMOD_TAP = 0b0011, | 109 | ACT_RMODS_TAP = 0b0011, |
| 105 | ACT_USAGE = 0b0100, | 110 | |
| 106 | ACT_MOUSEKEY = 0b0101, | 111 | ACT_USAGE = 0b0100, |
| 107 | ACT_LAYER_PRESSED = 0b1000, | 112 | ACT_MOUSEKEY = 0b0101, |
| 108 | ACT_LAYER_RELEASED = 0b1001, | 113 | |
| 109 | ACT_LAYER_BIT = 0b1010, | 114 | ACT_LAYER_PRESSED = 0b1000, |
| 110 | ACT_LAYER_EXT = 0b1011, | 115 | ACT_LAYER_RELEASED = 0b1001, |
| 111 | ACT_MACRO = 0b1100, | 116 | ACT_LAYER_BIT = 0b1010, |
| 112 | ACT_COMMAND = 0b1110, | 117 | ACT_LAYER_EXT = 0b1011, |
| 113 | ACT_FUNCTION = 0b1111 | 118 | |
| 119 | ACT_MACRO = 0b1100, | ||
| 120 | ACT_COMMAND = 0b1110, | ||
| 121 | ACT_FUNCTION = 0b1111 | ||
| 114 | }; | 122 | }; |
| 115 | 123 | ||
| 116 | // TODO: not portable across compiler/endianness? | 124 | // TODO: not portable across compiler/endianness? |
| @@ -169,20 +177,13 @@ typedef struct { | |||
| 169 | 177 | ||
| 170 | 178 | ||
| 171 | void action_exec(keyevent_t event); | 179 | void action_exec(keyevent_t event); |
| 172 | /* | ||
| 173 | void key_action(uint8_t code, keyevent_t event); | ||
| 174 | void mod_action(uint8_t code, keyevent_t event); | ||
| 175 | void fn_action(uint8_t code, keyevent_t event); | ||
| 176 | */ | ||
| 177 | 180 | ||
| 178 | 181 | ||
| 182 | // TODO: proper names | ||
| 179 | /* action_t utility */ | 183 | /* action_t utility */ |
| 180 | /* | ||
| 181 | #define ACTION_NO { .code = 0 } | ||
| 182 | #define ACTION(kind, param) { .code = ((kind)<<12 | (param)) } | ||
| 183 | */ | ||
| 184 | #define ACTION_NO 0 | 184 | #define ACTION_NO 0 |
| 185 | #define ACTION(kind, param) ((kind)<<12 | (param)) | 185 | #define ACTION(kind, param) ((kind)<<12 | (param)) |
| 186 | #define MOD_BITS(mods) (((mods)>>4 | (mods)) & 0x0F) | ||
| 186 | 187 | ||
| 187 | /* Key & Mods */ | 188 | /* Key & Mods */ |
| 188 | #define ACTION_KEY(key) ACTION(ACT_LMODS, key) | 189 | #define ACTION_KEY(key) ACTION(ACT_LMODS, key) |
| @@ -197,8 +198,8 @@ void fn_action(uint8_t code, keyevent_t event); | |||
| 197 | #define ACTION_RMODS_SWITCH(mods, tap) ACTION(ACT_RMODS, (mods)<<8 | 0xF0 | (tap)) | 198 | #define ACTION_RMODS_SWITCH(mods, tap) ACTION(ACT_RMODS, (mods)<<8 | 0xF0 | (tap)) |
| 198 | #define ACTION_RMODS_TOGGLE(mods, tap) ACTION(ACT_RMODS, (mods)<<8 | 0xF1 | (tap)) | 199 | #define ACTION_RMODS_TOGGLE(mods, tap) ACTION(ACT_RMODS, (mods)<<8 | 0xF1 | (tap)) |
| 199 | /* Mods + Tap key */ | 200 | /* Mods + Tap key */ |
| 200 | #define ACTION_LMODS_TAP(mods, key) ACTION(ACT_LMODS_TAP,(mods)<<8 | (key)) | 201 | #define ACTION_LMODS_TAP(mods, key) ACTION(ACT_LMODS_TAP, MOD_BITS(mods)<<8 | (key)) |
| 201 | #define ACTION_RMODS_TAP(mods, key) ACTION(ACT_RMODS_TAP,(mods)<<8 | (key)) | 202 | #define ACTION_RMODS_TAP(mods, key) ACTION(ACT_RMODS_TAP, MOD_BITS(mods)<<8 | (key)) |
| 202 | 203 | ||
| 203 | /* Layer Switch */ | 204 | /* Layer Switch */ |
| 204 | #define ACTION_LAYER_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) | 205 | #define ACTION_LAYER_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) |
