1
0
forked from drath/libratbag

steelseries: add support for Rival 650 Wireless

This commit is contained in:
Matt Coffin
2023-02-04 16:25:12 -07:00
committed by Yaroslav Chvanov
parent ada99fb72e
commit f20686b296
2 changed files with 26 additions and 3 deletions

View File

@@ -0,0 +1,13 @@
[Device]
# Wired mode; 2.4 Ghz wireless mode.
DeviceMatch=usb:1038:172b;usb:1038:1726
DeviceType=mouse
Driver=steelseries
Name=SteelSeries Rival 650 Wireless
[Driver/steelseries]
Buttons=0
DeviceVersion=4
DpiRange=100:12000@100
Leds=0
MacroLength=0

View File

@@ -74,6 +74,9 @@
#define STEELSERIES_ID_FIRMWARE_PROTOCOL3 0x10
#define STEELSERIES_ID_SETTINGS_PROTOCOL3 0x16
#define STEELSERIES_ID_DPI_PROTOCOL4 0x15
#define STEELSERIES_ID_REPORT_RATE_PROTOCOL4 0x17
#define STEELSERIES_BUTTON_OFF 0x00
#define STEELSERIES_BUTTON_RES_CYCLE 0x30
#define STEELSERIES_BUTTON_WHEEL_UP 0x31
@@ -219,6 +222,7 @@ steelseries_get_firmware_version(struct ratbag_device *device, int *major_out, i
msg.msg.parameters[0] = STEELSERIES_ID_FIRMWARE_PROTOCOL3;
msg_len = STEELSERIES_REPORT_SIZE;
break;
case 4:
default:
return -ENOTSUP;
}
@@ -265,7 +269,6 @@ steelseries_read_settings(struct ratbag_device *device)
case 3:
msg.msg.parameters[0] = STEELSERIES_ID_SETTINGS_PROTOCOL3;
break;
case 1:
default:
return -ENOTSUP;
}
@@ -483,6 +486,12 @@ steelseries_write_dpi(struct ratbag_resolution *resolution)
msg.msg.parameters[3] = resolution->dpi_x / dpirange->step - 1;
msg.msg.parameters[5] = 0x42; /* not sure if needed */
break;
case 4:
buf_len = STEELSERIES_REPORT_SIZE;
msg.msg.parameters[0] = STEELSERIES_ID_DPI_PROTOCOL4;
msg.msg.parameters[1] = resolution->index + 1;
msg.msg.parameters[2] = resolution->dpi_x / dpirange->step - 1;
break;
default:
return -ENOTSUP;
}
@@ -510,6 +519,7 @@ steelseries_write_report_rate(struct ratbag_profile *profile)
};
switch (device_version) {
case 4:
case 1:
if (profile->hz >= 1000) {
profile->hz = 1000;
@@ -526,7 +536,7 @@ steelseries_write_report_rate(struct ratbag_profile *profile)
}
buf_len = STEELSERIES_REPORT_SIZE_SHORT;
msg.msg.parameters[0] = STEELSERIES_ID_REPORT_RATE_SHORT;
msg.msg.parameters[0] = device_version == 1 ? STEELSERIES_ID_REPORT_RATE_SHORT : STEELSERIES_ID_REPORT_RATE_PROTOCOL4;
msg.msg.parameters[2] = reported_rate;
break;
case 2:
@@ -980,7 +990,7 @@ steelseries_write_save(struct ratbag_device *device)
} else if (device_version == 2) {
buf_len = STEELSERIES_REPORT_SIZE;
msg.msg.parameters[0] = STEELSERIES_ID_SAVE;
} else if (device_version == 3) {
} else if (device_version == 3 || device_version == 4) {
buf_len = STEELSERIES_REPORT_SIZE;
msg.msg.parameters[0] = STEELSERIES_ID_SAVE_PROTOCOL3;
} else {