sinowealth: add support for reading current report rate

This commit is contained in:
staticssleever668
2021-04-30 17:11:47 +03:00
committed by Filipe Laíns
parent 8d7cbcba4f
commit dd1c72a1d0

View File

@@ -77,7 +77,10 @@ struct sinowealth_config_report {
*/
uint8_t config_write;
uint8_t unknown2[6];
/* 0x80 - SINOWEALTH_XY_INDEPENDENT */
/*
* 0x1/2/3/4 - report rate (125, 250, 500, 1000 hz).
* 0x80 - SINOWEALTH_XY_INDEPENDENT.
*/
uint8_t config;
uint8_t dpi_count:4;
uint8_t active_dpi:4;
@@ -242,7 +245,6 @@ sinowealth_read_profile(struct ratbag_profile *profile)
struct sinowealth_config_report *config = &drv_data->config;
struct ratbag_resolution *resolution;
struct ratbag_led *led;
unsigned int hz = 1000; /* TODO */
int rc;
/* Print firmware version */
@@ -274,8 +276,27 @@ sinowealth_read_profile(struct ratbag_profile *profile)
return -1;
}
/* TODO */
ratbag_profile_set_report_rate_list(profile, &hz, 1);
/* Report rate */
const uint8_t reported_rate = config->config & 0b111U;
unsigned int hz = 0;
switch (reported_rate) {
case 0x01:
hz = 125;
break;
case 0x02:
hz = 250;
break;
case 0x03:
hz = 500;
break;
case 0x04:
hz = 1000;
break;
default:
hz = 0;
log_error(device->ratbag, "read incorrect report rate (%u)\n", reported_rate);
break;
}
ratbag_profile_set_report_rate(profile, hz);
ratbag_profile_for_each_resolution(profile, resolution) {
@@ -356,6 +377,10 @@ sinowealth_init_profile(struct ratbag_device *device)
ratbag_resolution_set_cap(resolution, RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION);
}
/* Set up available report rates. */
unsigned int report_rates[] = { 125, 250, 500, 1000 };
ratbag_profile_set_report_rate_list(profile, report_rates, ARRAY_LENGTH(report_rates));
/* Set up LED capabilities */
led = ratbag_profile_get_led(profile, 0);
led->type = RATBAG_LED_TYPE_SIDE;