From aef92645b78ef8fc60f1d838b1aa506a7e9b6928 Mon Sep 17 00:00:00 2001 From: Tayllan Date: Sat, 16 Oct 2021 16:08:44 -0300 Subject: [PATCH] hidpp20: allow setting a default buttons count PR #1212 --- data/devices/data-parse-test.py | 2 +- src/driver-hidpp20.c | 4 ++++ src/libratbag-data.c | 16 ++++++++++++++++ src/libratbag-data.h | 3 +++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/data/devices/data-parse-test.py b/data/devices/data-parse-test.py index 71d4fa11..9db88e01 100755 --- a/data/devices/data-parse-test.py +++ b/data/devices/data-parse-test.py @@ -168,7 +168,7 @@ def check_section_hidpp10(section): def check_section_hidpp20(section): - permitted = ['DeviceIndex', 'Leds', 'ReportRate', 'Quirk'] + permitted = ['Buttons', 'DeviceIndex', 'Leds', 'ReportRate', 'Quirk'] for key in section.keys(): assertIn(key, permitted) diff --git a/src/driver-hidpp20.c b/src/driver-hidpp20.c index 34300328..b9a92a02 100644 --- a/src/driver-hidpp20.c +++ b/src/driver-hidpp20.c @@ -1642,6 +1642,10 @@ hidpp20drv_init_device(struct ratbag_device *device, if (num >= 0) drv_data->num_leds = num; + num = ratbag_device_data_hidpp20_get_button_count(device->data); + if (num >= 0) + drv_data->num_buttons = num; + drv_data->report_rates[0] = ratbag_device_data_hidpp20_get_report_rate(device->data);; ratbag_device_init_profiles(device, diff --git a/src/libratbag-data.c b/src/libratbag-data.c index 3109acdb..b4583a38 100644 --- a/src/libratbag-data.c +++ b/src/libratbag-data.c @@ -65,6 +65,7 @@ struct data_hidpp20 { enum hidpp20_quirk quirk; int led_count; int report_rate; + int button_count; }; struct data_hidpp10 { @@ -167,6 +168,13 @@ init_data_hidpp20(struct ratbag *ratbag, data->hidpp20.index = -1; data->hidpp20.led_count = -1; + num = g_key_file_get_integer(keyfile, group, "Buttons", &error); + if (num > 0 || !error) + data->hidpp20.button_count = num; + if (error) + g_error_free(error); + + error = NULL; num = g_key_file_get_integer(keyfile, group, "DeviceIndex", &error); if (num != 0 || !error) data->hidpp20.index = num; @@ -599,6 +607,14 @@ ratbag_device_data_hidpp20_get_index(const struct ratbag_device_data *data) return data->hidpp20.index; } +int +ratbag_device_data_hidpp20_get_button_count(const struct ratbag_device_data *data) +{ + assert(data->drivertype == HIDPP20); + + return data->hidpp20.button_count; +} + int ratbag_device_data_hidpp20_get_led_count(const struct ratbag_device_data *data) { diff --git a/src/libratbag-data.h b/src/libratbag-data.h index 38473bfd..ee7c80e3 100644 --- a/src/libratbag-data.h +++ b/src/libratbag-data.h @@ -80,6 +80,9 @@ ratbag_device_data_hidpp10_get_led_count(const struct ratbag_device_data *data); int ratbag_device_data_hidpp20_get_index(const struct ratbag_device_data *data); +int +ratbag_device_data_hidpp20_get_button_count(const struct ratbag_device_data *data); + int ratbag_device_data_hidpp20_get_led_count(const struct ratbag_device_data *data);