0x0005 · deviceTypeAndName
读取设备市场类型和市场名称,包括 short 或 long 分块名称。
deviceTypeAndName 报告市场类型和市场名称。名称按块读取。调用方先读取报告的数量,再请求连续索引,直到取得完整字符串。
**规格:**Logitech HID++ 2.0 —— x0005 deviceTypeAndName(v2)。**交叉核对:**Logi Options+ 2.8(静态分析)。用于:受支持的设备。
函数参考
DeviceTypeAndNameFeature 实现功能版本 0。
方法
| 函数 | HID++ fn | 签名 | 返回值 |
|---|---|---|---|
get_device_name_count | 0 | () | u8 |
get_device_name | 1 | (index: u8) | Vec<u8> |
get_whole_device_name | 便捷方法 | () | String |
get_device_type | 2 | () | DeviceType |
所有方法都是异步方法,并返回 Result<…, Hidpp20Error>。get_whole_device_name 调用一次 fn 0,再调用 fn 1,直到组装的字符串达到报告数量。
类型
DeviceType
| 变体 | 值 | 说明 |
|---|---|---|
Keyboard | 0 | 键盘。 |
RemoteControl | 1 | 遥控器。 |
Numpad | 2 | 数字键盘。 |
Mouse | 3 | 鼠标。 |
Trackpad | 4 | 触摸板。 |
Trackball | 5 | 轨迹球。 |
Presenter | 6 | 演示器。 |
Receiver | 7 | 接收器。 |
Headset | 8 | 耳机。 |
Webcam | 9 | 摄像头。 |
SteeringWheel | 10 | 方向盘。 |
Joystick | 11 | 摇杆。 |
Gamepad | 12 | 游戏手柄。 |
Dock | 13 | 扩展坞。 |
Speaker | 14 | 扬声器。 |
Microphone | 15 | 麦克风。 |
IlluminationLight | 16 | 照明灯。 |
ProgrammableController | 17 | 可编程控制器。 |
CarSimPedals | 18 | 赛车模拟踏板。 |
Adapter | 19 | 适配器。 |
未知类型 byte 会返回 Hidpp20Error::UnsupportedResponse。
事件
此功能没有定义事件。
线格式
所有请求都使用 3-byte short payload。
get_device_name_count(fn 0)
请求:[0x00, 0x00, 0x00]
| 字节 | 字段 | 说明 |
|---|---|---|
| 0 | count | 报告的市场名称数量。 |
| 1–15 | 尾部 payload | 在 extend_payload() 后,OpenLogi 忽略这些字节。 |
get_device_name(fn 1)
请求:[index, 0x00, 0x00]
| 字节 | 字段 | 说明 |
|---|---|---|
| 0 | index | 名称分块开始处的偏移。 |
| 1–2 | 保留 | OpenLogi 写入 0x00。 |
响应是原始 report payload。OpenLogi 从 short 响应返回全部 3 个 payload 字节,或从 long 响应返回全部 16 个 payload 字节。它不会为该函数的 Vec<u8> 补零。
get_whole_device_name 将每个分块解码为 UTF-8 并追加,再使用组装字符串的长度作为下一个索引。它在最后一个分块后删除尾部 NUL 字符。
get_device_type(fn 2)
请求:[0x00, 0x00, 0x00]
| 字节 | 字段 | 说明 |
|---|---|---|
| 0 | device_type | DeviceType 判别值。 |
| 1–15 | 尾部 payload | 在 extend_payload() 后,OpenLogi 忽略这些字节。 |
OpenLogi 的用法
库存探测在枚举功能表后调用此功能。它分别读取市场类型和名称。读取失败时,只有相应属性不可用。
OpenLogi 将 DeviceType 映射到设备种类。类型是权威的种类信号。市场名称能补充操作系统返回的通用 HID collection 名称,例如 Windows Bluetooth 中的 Mouse。
新探测缺少类型或市场名称时,缓存回填会保留先前值。此功能没有 setter,所以不使用 read-modify-write,也不恢复设备状态。
Rust 用法
use hidpp::{
device::Device,
feature::device_type_and_name::DeviceTypeAndNameFeature,
protocol::v20::Hidpp20Error,
};
async fn read_marketing_identity(device: &mut Device) -> Result<(), Hidpp20Error> {
device.enumerate_features().await?;
let Some(feature) = device.get_feature::<DeviceTypeAndNameFeature>() else {
return Ok(());
};
println!("type: {:?}", feature.get_device_type().await?);
println!("name: {}", feature.get_whole_device_name().await?);
Ok(())
}