diff --git a/src/driver-sinowealth.c b/src/driver-sinowealth.c index b8cc5994..4b2eedf7 100644 --- a/src/driver-sinowealth.c +++ b/src/driver-sinowealth.c @@ -114,6 +114,9 @@ _Static_assert(sizeof(enum sinowealth_command_id) == sizeof(uint8_t), "Invalid s #define SINOWEALTH_NUM_PROFILES_MAX 3 _Static_assert(SINOWEALTH_NUM_PROFILES_MAX <= 3, "Too many profiles enabled"); +/* How much buttons we can support for a mouse. Arbitrary number. */ +#define SINOWEALTH_NUM_BUTTONS_MAX 64 + /* Maximum amount of real events in a macro. */ #define SINOWEALTH_MACRO_LENGTH_MAX 168 @@ -312,6 +315,27 @@ enum sinowealth_button_key_modifiers { } __attribute__((packed)); _Static_assert(sizeof(enum sinowealth_button_key_modifiers) == sizeof(uint8_t), "Invalid size"); +/* @return A single sinowealth_button_key_modifiers or -1. */ +static int +sinowealth_button_key_modifier_from_evcode(unsigned int modifier_evcode) +{ + switch (modifier_evcode) { + case KEY_LEFTCTRL: + return SINOWEALTH_BUTTON_KEY_MODIFIER_LEFTCTRL; + case KEY_LEFTSHIFT: + return SINOWEALTH_BUTTON_KEY_MODIFIER_LEFTSHIFT; + case KEY_LEFTMETA: + return SINOWEALTH_BUTTON_KEY_MODIFIER_LEFTMETA; + case KEY_LEFTALT: + return SINOWEALTH_BUTTON_KEY_MODIFIER_LEFTALT; + default: + /* Handled below. */ + break; + } + // TODO: should log a warning here. + return -1; +} + enum sinowealth_button_macro_mode { /* Repeat