0x8060 · adjustableReportRate
枚举 1 ms 至 8 ms 的报告间隔,并读取或写入当前的旧版报告间隔。
adjustableReportRate 控制设备向主机发送 HID 报告的频率。此功能以毫秒表示当前间隔。提供 0x8060 的设备在 1 字节位图中声明每个支持的间隔。
规格: Logitech HID++ 2.0 —— adjustableReportRate。交叉核对: Logi Options+ 2.8(静态分析)、Solaar。用于: 回报率。
函数参考
ReportRateFeature 封装器(0x8060,版本 0+)提供旧版间隔接口。
方法
| 函数 | HID++ fn | 签名 | 返回值 |
|---|---|---|---|
get_report_rate_list | 0 | () | ReportRateList |
get_report_rate | 1 | () | u8 |
set_report_rate | 2 | (report_rate_ms: u8) | () |
所有方法均为 async,并返回 Result<…, Hidpp20Error>。
类型
ReportRateList 是 u8 位标志集。位 n 表示 n + 1 ms 的间隔。
| 标志 | 位或值 | 说明 |
|---|---|---|
MS_1 | 1 << 0 | 1 ms 间隔。 |
MS_2 | 1 << 1 | 2 ms 间隔。 |
MS_3 | 1 << 2 | 3 ms 间隔。 |
MS_4 | 1 << 3 | 4 ms 间隔。 |
MS_5 | 1 << 4 | 5 ms 间隔。 |
MS_6 | 1 << 5 | 6 ms 间隔。 |
MS_7 | 1 << 6 | 7 ms 间隔。 |
MS_8 | 1 << 7 | 8 ms 间隔。 |
事件
ReportRateFeature 未提供事件类型。OpenLogi 没有 0x8060 回报率广播路径。
线格式
所有函数都发送 3 字节短请求。OpenLogi 将函数 0 和 1 读取为 16 字节扩展响应。设置函数只检查 HID++ 确认。
get_report_rate_list(fn 0)
请求:[0x00, 0x00, 0x00]。3 个字节都是填充。
| 字节或位 | 字段 | 备注 |
|---|---|---|
| 0,位 0~7 | ReportRateList | 位 0 表示 1 ms。位 7 表示 8 ms。 |
| 1~15 | 保留 | OpenLogi 忽略这些字节。 |
get_report_rate(fn 1)
请求:[0x00, 0x00, 0x00]。3 个字节都是填充。
| 字节 | 字段 | 备注 |
|---|---|---|
| 0 | report_rate_ms | 当前间隔,单位为毫秒。OpenLogi 只接受 1..=8。其他值会返回 Hidpp20Error::UnsupportedResponse。 |
| 1~15 | 保留 | OpenLogi 忽略这些字节。 |
set_report_rate(fn 2)
| 请求字节 | 字段 | 备注 |
|---|---|---|
| 0 | report_rate_ms | 请求间隔,单位为毫秒。OpenLogi 只接受 1..=8。其他值在 I/O 前返回 Hidpp20Error::Feature(ErrorType::InvalidArgument)。 |
| 1~2 | 填充 | OpenLogi 写入 0x00。 |
响应:HID++ 确认。OpenLogi 忽略所有响应载荷字节。设备可能对范围内但不支持的间隔返回 InvalidArgument。
OpenLogi 的用法
从 v0.8.14 起,PR #1779 会在类型化封装器中拒绝无效的旧版响应和请求间隔。从 v0.8.14 起,PR #1808 将回报率连接到设备层、代理 IPC、桌面版的指针标签页和 openlogi api report-rate。
设备层优先使用 0x8061。只有 0x8061 不受支持时,设备层才回退到 0x8060。对于此功能,设备层把已声明的间隔转换为整数赫兹,并读取列表和当前速率。设备层在写入前拒绝不在列表中的值。
当前速率已是目标值时,设备层会跳过写入。否则,设备层会在确认后独立读取当前速率。不同的读回值会返回 WriteError::ReportRateNotApplied。确认后的读取失败会保留请求值,作为暂定结果。
OpenLogi 只在使用者要求持久化时保存 report_rate。重新连接时,代理只会为具有回报率能力的设备重新应用已保存的值。当前连接还必须声明该值。OpenLogi 退出时不会重置设备回报率。有关 GUI、配置和 CLI 的行为,请参阅回报率。
Rust 用法
use hidpp::{
device::Device,
feature::report_rate::{ReportRateFeature, ReportRateList},
protocol::v20::Hidpp20Error,
};
async fn set_one_millisecond(device: &mut Device) -> Result<(), Hidpp20Error> {
device.enumerate_features().await?;
if let Some(feature) = device.get_feature::<ReportRateFeature>() {
let supported = feature.get_report_rate_list().await?;
if supported.contains(ReportRateList::MS_1) {
feature.set_report_rate(1).await?;
}
}
Ok(())
}