X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=common%2Faction.h;h=ead917983cb646c20430ceb486b8f451fa60fc00;hb=de8ef18a534163b40e307418b3af603142d5d6b0;hp=4892cc7fd9bb7dc74f0b2e24045c1ee2d25fa2ae;hpb=0368936060fbc32395508b09c76b620828d36db1;p=max%2Ftmk_keyboard.git diff --git a/common/action.h b/common/action.h index 4892cc7f..ead91798 100644 --- a/common/action.h +++ b/common/action.h @@ -19,12 +19,23 @@ along with this program. If not, see . #include "keyboard.h" #include "keycode.h" +#include "action_macro.h" /* Struct to record event and tap count */ +typedef union { + struct { + bool interrupted :1; + bool reserved2 :1; + bool reserved1 :1; + bool reserved0 :1; + uint8_t count :4; + }; +} tap_t; + typedef struct { keyevent_t event; - uint8_t tap_count; + tap_t tap; } keyrecord_t; /* Action struct. @@ -82,6 +93,9 @@ void action_exec(keyevent_t event); /* action for key */ action_t action_for_key(uint8_t layer, key_t key); +/* macro */ +const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt); + /* user defined special function */ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt); @@ -107,8 +121,8 @@ bool waiting_buffer_has_anykey_pressed(void); * ============ * 16bit code: action_kind(4bit) + action_parameter(12bit) * - * Keyboard Keys - * ------------- + * Keyboard Keys(00XX) + * ------------------- * ACT_LMODS(0000): * 0000|0000|000000|00 No action * 0000|0000|000000|01 Transparent @@ -138,8 +152,8 @@ bool waiting_buffer_has_anykey_pressed(void); * 0011|mods| keycode Right mods + tap Key * * - * Other HID Usage - * --------------- + * Other keys(01XX) + * -------------------- * This action handles other usages than keyboard. * ACT_USAGE(0100): * 0100|00| usage(10) System control(0x80) - General Desktop page(0x01) @@ -147,15 +161,12 @@ bool waiting_buffer_has_anykey_pressed(void); * 0100|10| usage(10) (reserved) * 0100|11| usage(10) (reserved) * - * - * Mouse Keys - * ---------- * ACT_MOUSEKEY(0110): * 0101|XXXX| keycode Mouse key * * - * Layer Actions - * ------------- + * Layer Actions(10XX) + * ------------------- * ACT_KEYMAP: * 1000|--xx|0000 0000 Clear keyamp and overlay * 1000|LLLL|0000 00xx Reset default layer and clear keymap and overlay @@ -189,8 +200,6 @@ bool waiting_buffer_has_anykey_pressed(void); * * Extensions(11XX) * ---------------- - * NOTE: NOT FIXED - * * ACT_MACRO(1100): * 1100|opt | id(8) Macro play? * 1100|1111| id(8) Macro record? @@ -253,8 +262,20 @@ enum mods_codes { #define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) #define ACTION_RMOD_ONESHOT(mod) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT) +/* HID Usage */ +enum usage_pages { + PAGE_SYSTEM, + PAGE_CONSUMER +}; +#define ACTION_USAGE_SYSTEM(id) ACTION(ACT_USAGE, PAGE_SYSTEM<<10 | (id)) +#define ACTION_USAGE_CONSUMER(id) ACTION(ACT_USAGE, PAGE_CONSUMER<<10 | (id)) + +/* Mousekey */ +#define ACTION_MOUSEKEY(key) ACTION(ACT_MOUSEKEY, key) + -/* Layer Operation: + +/* Layer Actions: * Invert layer ^= (1<