OpenLogi

0x0001 · featureSet

读取功能数量和每个从 1 开始的功能条目,以枚举设备功能表。

featureSet 列出一次设备连接期间可用的 HID++ 功能。功能表不含始终使用索引 0 的 root。客户端先读取数量,再读取条目 1 到该数量。

**规格:**Logitech HID++ 2.0 —— x0001 featureSet。**交叉核对:**Logi Options+ 2.8(静态分析)。用于:受支持的设备。

函数参考

FeatureSetFeature 实现功能版本 0。

方法

函数HID++ fn签名返回值
count0()u8
get_feature1(index: u8)FeatureInformation

两个方法都是异步方法,并返回 Result<…, Hidpp20Error>。

类型

FeatureInformation

get_feature 返回功能表中的一个条目。

字段类型说明
idu16HID++ 功能 ID。
typFeatureType功能分类标志。
versionu8最新兼容功能版本。旧功能表版本中为 0。

FeatureType

FeatureType 使用与 0x0000 root 相同的类型 byte 位字段。OpenLogi 保留未知位,并将位 7–3 公开为 obsolete、hidden、engineering、manufacturing_deactivatable 和 compliance_deactivatable。

事件

此功能没有定义事件。

线格式

两个请求都使用 3-byte short payload。OpenLogi 通过 extend_payload() 读取响应,并获得 16-byte payload。

count(fn 0)

请求:[0x00, 0x00, 0x00]

字节字段说明
0count功能表条目数。不包括索引 0 的 Root。
1–15尾部 payloadOpenLogi 忽略这些字节。

get_feature(fn 1)

请求:[index, 0x00, 0x00]

字节字段说明
0index从 1 开始的功能表索引。索引 0 是 Root,协议不允许在此使用。OpenLogi 原样传递该值。
1–2保留OpenLogi 写入 0x00。
字节字段说明
0–1id功能 ID,BE。
2typ功能类型 byte。OpenLogi 解码位 7–3,并保留其他位。
3version最新兼容功能版本。
4–15尾部 payloadOpenLogi 忽略这些字节。

OpenLogi 的用法

Device::enumerate_features() 先通过 Root 发现 0x0001。它调用一次 count(),再遍历 1..=count。它按每个返回的功能 ID 和版本注册已知封装。

功能表在连接期间不可变。因此,count() 和 get_feature() 可以接收已放弃相同请求留下的响应。设备层最多重试丢失的条目 4 次。每次尝试的期限为 700 ms,退避时间为 120 ms。

OpenLogi 在库存探测期间使用此表推导能力和事件功能索引。该遍历不修改设备状态,也不需要恢复操作。

Rust 用法

use hidpp::{device::Device, protocol::v20::Hidpp20Error};

async fn list_features(device: &mut Device) -> Result<(), Hidpp20Error> {
    let Some(features) = device.enumerate_features().await? else {
        return Ok(());
    };

    for feature in features {
        println!("0x{:04x} at index {} (v{})", feature.id, feature.index, feature.version);
    }
    Ok(())
}

本页目录