diff --git a/DBusInterface.md b/DBusInterface.md index 39ffaf3a..f5471057 100644 --- a/DBusInterface.md +++ b/DBusInterface.md @@ -219,9 +219,11 @@ org.freedesktop.ratbag1.Button Index of the button #### `Type` -- type: `s`, read-only, constant +- type: `u`, read-only, constant -String describing the button type +Enum describing the button physical type. This type is unrelated to the +logical button mapping and serves to easily identify the button on the +device. #### `ButtonMapping` - type: `u`, read-only, mutable diff --git a/ratbagd/ratbagd-button.c b/ratbagd/ratbagd-button.c index 4e7043e1..a0eef4dd 100644 --- a/ratbagd/ratbagd-button.c +++ b/ratbagd/ratbagd-button.c @@ -53,90 +53,11 @@ static int ratbagd_button_get_type(sd_bus *bus, sd_bus_error *error) { struct ratbagd_button *button = userdata; - const char *type = NULL; enum ratbag_button_type t; t = ratbag_button_get_type(button->lib_button); - switch(t) { - default: - log_error("Unknown button type %d\n", t); - /* fallthrough */ - case RATBAG_BUTTON_TYPE_UNKNOWN: - type = "unknown"; - break; - case RATBAG_BUTTON_TYPE_LEFT: - type = "left"; - break; - case RATBAG_BUTTON_TYPE_MIDDLE: - type = "middle"; - break; - case RATBAG_BUTTON_TYPE_RIGHT: - type = "right"; - break; - case RATBAG_BUTTON_TYPE_THUMB: - type = "thumb"; - break; - case RATBAG_BUTTON_TYPE_THUMB2: - type = "thumb2"; - break; - case RATBAG_BUTTON_TYPE_THUMB3: - type = "thumb3"; - break; - case RATBAG_BUTTON_TYPE_THUMB4: - type = "thumb4"; - break; - case RATBAG_BUTTON_TYPE_WHEEL_LEFT: - type = "wheel-left"; - break; - case RATBAG_BUTTON_TYPE_WHEEL_RIGHT: - type = "wheel-right"; - break; - case RATBAG_BUTTON_TYPE_WHEEL_CLICK: - type = "wheel-click"; - break; - case RATBAG_BUTTON_TYPE_WHEEL_UP: - type = "wheel-up"; - break; - case RATBAG_BUTTON_TYPE_WHEEL_DOWN: - type = "wheel-down"; - break; - case RATBAG_BUTTON_TYPE_WHEEL_RATCHET_MODE_SHIFT: - type = "wheel-ratchet_mode_shift"; - break; - case RATBAG_BUTTON_TYPE_EXTRA: - type = "extra"; - break; - case RATBAG_BUTTON_TYPE_SIDE: - type = "side"; - break; - case RATBAG_BUTTON_TYPE_PINKIE: - type = "pinkie"; - break; - case RATBAG_BUTTON_TYPE_PINKIE2: - type = "pinkie2"; - break; - case RATBAG_BUTTON_TYPE_RESOLUTION_CYCLE_UP: - type = "resolution-cycle-up"; - break; - case RATBAG_BUTTON_TYPE_RESOLUTION_UP: - type = "resolution-up"; - break; - case RATBAG_BUTTON_TYPE_RESOLUTION_DOWN: - type = "resolution-down"; - break; - case RATBAG_BUTTON_TYPE_PROFILE_CYCLE_UP: - type = "profile-cycle-up"; - break; - case RATBAG_BUTTON_TYPE_PROFILE_UP: - type = "profile-up"; - break; - case RATBAG_BUTTON_TYPE_PROFILE_DOWN: - type = "profile-down"; - break; - } - - return sd_bus_message_append(reply, "s", type); + return sd_bus_message_append(reply, "u", t); } static int ratbagd_button_get_button(sd_bus *bus, @@ -558,7 +479,7 @@ static int ratbagd_button_disable(sd_bus_message *m, const sd_bus_vtable ratbagd_button_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_PROPERTY("Index", "u", NULL, offsetof(struct ratbagd_button, index), SD_BUS_VTABLE_PROPERTY_CONST), - SD_BUS_PROPERTY("Type", "s", ratbagd_button_get_type, 0, SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("Type", "u", ratbagd_button_get_type, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("ButtonMapping", "u", ratbagd_button_get_button, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_PROPERTY("SpecialMapping", "s", ratbagd_button_get_special, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_PROPERTY("KeyMapping", "au", ratbagd_button_get_key, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), diff --git a/tools/ratbagctl.in b/tools/ratbagctl.in index 948c18d2..c7f3c0db 100755 --- a/tools/ratbagctl.in +++ b/tools/ratbagctl.in @@ -135,8 +135,36 @@ def print_led(d, p, l, level): def print_button(d, p, b, level): + types = { + RatbagdButton.TYPE_UNKNOWN : "unknown", + RatbagdButton.TYPE_LEFT : "left", + RatbagdButton.TYPE_MIDDLE : "middle", + RatbagdButton.TYPE_RIGHT : "right", + RatbagdButton.TYPE_THUMB : "thumb", + RatbagdButton.TYPE_THUMB2 : "thumb2", + RatbagdButton.TYPE_THUMB3 : "thumb3", + RatbagdButton.TYPE_THUMB4 : "thumb4", + RatbagdButton.TYPE_WHEEL_LEFT : "wheel-left", + RatbagdButton.TYPE_WHEEL_RIGHT : "wheel-right", + RatbagdButton.TYPE_WHEEL_CLICK : "wheel-click", + RatbagdButton.TYPE_WHEEL_UP : "wheel-up", + RatbagdButton.TYPE_WHEEL_DOWN : "wheel-down", + RatbagdButton.TYPE_WHEEL_RATCHET_MODE_SHIFT : "wheel-ratchet-mode-shift", + RatbagdButton.TYPE_EXTRA : "extra", + RatbagdButton.TYPE_SIDE : "side", + RatbagdButton.TYPE_PINKIE : "pinkie", + RatbagdButton.TYPE_PINKIE2 : "pinkie2", + RatbagdButton.TYPE_RESOLUTION_CYCLE_UP : "resolution-cycle-up", + RatbagdButton.TYPE_RESOLUTION_UP : "resolution-up", + RatbagdButton.TYPE_RESOLUTION_DOWN : "resolution-down", + RatbagdButton.TYPE_PROFILE_CYCLE_UP : "profile-cycle-up", + RatbagdButton.TYPE_PROFILE_UP : "profile-up", + RatbagdButton.TYPE_PROFILE_DOWN : "profile-down", + } + + t = types[b.type] header = " " * level + "Button: {} type {} is mapped to ".format(b.index, - b.type) + t) if b.action_type == RatbagdButton.ACTION_TYPE_BUTTON: print("{}'button {}'".format(header, b.mapping)) diff --git a/tools/ratbagd.py b/tools/ratbagd.py index fd83f2c0..94a66cfe 100644 --- a/tools/ratbagd.py +++ b/tools/ratbagd.py @@ -440,6 +440,32 @@ class RatbagdButton(_RatbagdDBus): MACRO_KEY_RELEASE = 2 MACRO_WAIT = 3 + TYPE_UNKNOWN = 0 + TYPE_LEFT = 1 + TYPE_MIDDLE = 2 + TYPE_RIGHT= 3 + TYPE_THUMB = 4 + TYPE_THUMB2 = 5 + TYPE_THUMB3 = 6 + TYPE_THUMB4 = 7 + TYPE_WHEEL_LEFT = 8 + TYPE_WHEEL_RIGHT = 9 + TYPE_WHEEL_CLICK = 10 + TYPE_WHEEL_UP = 11 + TYPE_WHEEL_DOWN = 12 + TYPE_WHEEL_RATCHET_MODE_SHIFT = 13 + TYPE_EXTRA = 14 + TYPE_SIDE = 15 + TYPE_PINKIE = 16 + TYPE_PINKIE2 = 17 + TYPE_RESOLUTION_CYCLE_UP = 18 + TYPE_RESOLUTION_UP = 19 + TYPE_RESOLUTION_DOWN = 20 + TYPE_PROFILE_CYCLE_UP = 21 + TYPE_PROFILE_UP = 22 + TYPE_PROFILE_DOWN = 23 + + def __init__(self, object_path): _RatbagdDBus.__init__(self, "Button", object_path) @@ -450,7 +476,7 @@ class RatbagdButton(_RatbagdDBus): @GObject.Property def type(self): - """A string describing this button's type.""" + """An enum describing this button's type.""" return self._get_dbus_property("Type") @GObject.Property