0x8060 · adjustableReportRate
Legacy HID report rate control — enumerate supported polling intervals from 1 ms to 8 ms, then read or write the active interval.
The legacy adjustableReportRate feature controls how often the device sends
HID reports to the host, expressed in milliseconds. get_report_rate_list
(function 0) returns a ReportRateList bitfield that encodes every interval the
device supports; get_report_rate (function 1) reads the current active
interval; set_report_rate (function 2) writes a new one; the device rejects
unsupported values with InvalidArgument.
ReportRateList— one bit per supported interval:MS_1throughMS_8(1 ms–8 ms). A set bit means that interval is available on this device.
Spec: Logitech HID++ 2.0 — adjustableReportRate. Used by: Typed wrapper in
openlogi-hidpp.
Function reference
The ReportRateFeature wrapper (0x8060) exposes:
Methods
| Function | HID++ fn | Signature | Returns |
|---|---|---|---|
get_report_rate_list | 0 | () | ReportRateList |
get_report_rate | 1 | () | u8 |
set_report_rate | 2 | (report_rate_ms: u8) | () |
All methods are async and return Result<…, Hidpp20Error>.
Types
ReportRateList
Report-rate values supported by a 0x8060 device, encoded as milliseconds.
| Flag | Bit/Value | Description |
|---|---|---|
MS_1 | 1 << 0 | 1 ms report interval. |
MS_2 | 1 << 1 | 2 ms report interval. |
MS_3 | 1 << 2 | 3 ms report interval. |
MS_4 | 1 << 3 | 4 ms report interval. |
MS_5 | 1 << 4 | 5 ms report interval. |
MS_6 | 1 << 5 | 6 ms report interval. |
MS_7 | 1 << 6 | 7 ms report interval. |
MS_8 | 1 << 7 | 8 ms report interval. |
Wire format
All three functions use a 3-byte request payload and return a 16-byte long response; only the first byte of the response payload carries meaningful data for the two getters.
get_report_rate_list (fn 0)
Request: [0x00, 0x00, 0x00] (no parameters)
Response (byte → field):
| Byte | Field | Notes |
|---|---|---|
| 0 | ReportRateList bitfield | Each bit corresponds to a supported interval: bit 0 = 1 ms, bit 1 = 2 ms, …, bit 7 = 8 ms. |
get_report_rate (fn 1)
Request: [0x00, 0x00, 0x00] (no parameters)
Response (byte → field):
| Byte | Field | Notes |
|---|---|---|
| 0 | report_rate_ms: u8 | Currently active report interval in milliseconds. |
set_report_rate (fn 2)
Request: [report_rate_ms, 0x00, 0x00]
| Byte | Field | Notes |
|---|---|---|
| 0 | report_rate_ms: u8 | Desired report interval in milliseconds. Must be a value advertised by get_report_rate_list; the device returns InvalidArgument otherwise. |
Response: no meaningful payload bytes.
Usage (Rust)
use hidpp::{device::Device, feature::report_rate::ReportRateFeature};
// mut device: Device, already created via Device::new(channel, index)
device.enumerate_features().await?;
if let Some(feat) = device.get_feature::<ReportRateFeature>() {
// Query which intervals this device supports.
let supported = feat.get_report_rate_list().await?;
println!("Supported intervals: {:?}", supported);
// Read the current active interval.
let current_ms = feat.get_report_rate().await?;
println!("Current report rate: {} ms", current_ms);
// Switch to 1 ms (1000 Hz) if the device advertises it.
use hidpp::feature::report_rate::ReportRateList;
if supported.contains(ReportRateList::MS_1) {
feat.set_report_rate(1).await?;
}
}