From 268ccab1111cd9db4f4c17439dd2771584aa371d Mon Sep 17 00:00:00 2001 From: Yaroslav Chvanov Date: Fri, 28 Jan 2022 07:12:19 +0300 Subject: [PATCH] sinowealth: add profile index getter Thank you so much, @araghon007! --- src/driver-sinowealth.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/driver-sinowealth.c b/src/driver-sinowealth.c index d8100d55..357e721b 100644 --- a/src/driver-sinowealth.c +++ b/src/driver-sinowealth.c @@ -34,6 +34,7 @@ _Static_assert(sizeof(enum sinowealth_report_id) == sizeof(uint8_t), "Invalid si enum sinowealth_command_id { SINOWEALTH_CMD_FIRMWARE_VERSION = 0x1, + SINOWEALTH_CMD_PROFILE = 0x2, SINOWEALTH_CMD_GET_CONFIG = 0x11, } __attribute__((packed)); @@ -372,6 +373,27 @@ sinowealth_led_to_rgb_mode(const struct ratbag_led *led) return mode; } +/* @return Active profile index or a negative error. */ +static int +sinowealth_get_active_profile(struct ratbag_device *device) +{ + int rc = 0; + + uint8_t buf[6] = { SINOWEALTH_REPORT_ID_CMD, SINOWEALTH_CMD_PROFILE }; + rc = ratbag_hidraw_set_feature_report(device, SINOWEALTH_REPORT_ID_CMD, buf, sizeof(buf)); + if (rc != sizeof(buf)) { + log_error(device->ratbag, "Couldn't send profile index read command: %d\n", rc); + return -1; + } + rc = ratbag_hidraw_get_feature_report(device, SINOWEALTH_REPORT_ID_CMD, (uint8_t*) buf, sizeof(buf)); + if (rc != sizeof(buf)) { + log_error(device->ratbag, "Couldn't read profile index: %d\n", rc); + return -1; + } + + return buf[2] - 1; +} + static int sinowealth_get_fw_version(struct ratbag_device *device, char buf[4]) {