OpenLogi

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_1 through MS_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

FunctionHID++ fnSignatureReturns
get_report_rate_list0()ReportRateList
get_report_rate1()u8
set_report_rate2(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.

FlagBit/ValueDescription
MS_11 << 01 ms report interval.
MS_21 << 12 ms report interval.
MS_31 << 23 ms report interval.
MS_41 << 34 ms report interval.
MS_51 << 45 ms report interval.
MS_61 << 56 ms report interval.
MS_71 << 67 ms report interval.
MS_81 << 78 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):

ByteFieldNotes
0ReportRateList bitfieldEach 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):

ByteFieldNotes
0report_rate_ms: u8Currently active report interval in milliseconds.

set_report_rate (fn 2)

Request: [report_rate_ms, 0x00, 0x00]

ByteFieldNotes
0report_rate_ms: u8Desired 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?;
    }
}

On this page