0x4522 · disableKeysByUsage
按 8 位 HID Usage 禁用或重新启用键盘按键,并使用累积式长报告请求。
DisableKeysByUsage 控制任意 8 位键盘 HID Usage。与 0x4521 不同,每个禁用或启用请求都会向现有禁用集合中添加或移除 Usage。
**规格:**Logitech HID++ 2.0——disableKeysByUsage。**用于:**OpenLogi 除
openlogi-hidpp封装外未使用此功能。
函数参考
DisableKeysByUsageFeature 可为功能版本 0 创建。
方法
| 函数 | HID++ fn | 签名 | 返回值 |
|---|---|---|---|
get_capabilities | 0 | () | u8 |
disable_keys | 1 | (usages: &[u8]) | () |
enable_keys | 2 | (usages: &[u8]) | () |
enable_all_keys | 3 | () | () |
每个方法都是 async 方法,并返回 Result<…, Hidpp20Error>。
类型
此功能没有公开的专用类型。usages 中的每个元素都是 8 位键盘 HID Usage。
事件
OpenLogi v0.8.15 不为此功能提供事件类型或 listen() 方法。
线格式
get_capabilities 和 enable_all_keys 使用 3 字节短请求。disable_keys 和 enable_keys 使用 16 字节长请求。
OpenLogi 会拒绝 usages 中的 0x00,并返回 Hidpp20Error::Feature(ErrorType::InvalidArgument)。该值是线上的列表终止符,不能表示禁用按键。
get_capabilities(fn 0)
请求:0x00, 0x00, 0x00。
| 字节 | 字段 | 说明 |
|---|---|---|
| 0 | max_usages | 设备可同时保持禁用的 Usage 最大数量。 |
| 1–15 | — | OpenLogi 忽略这些字节。 |
disable_keys(fn 1)
OpenLogi 将输入切分为最多 16 个 Usage 的顺序数据包。设备将每个数据包累积到禁用集合中。
| 字节 | 字段 | 说明 |
|---|---|---|
| 0–15 | usages | 最多 16 个 Usage 字节。部分数据包以 0x00 填充,这也是终止符。 |
完整的 16 字节数据包没有终止符。OpenLogi 等待每个响应,但会忽略全部响应字节。
enable_keys(fn 2)
此函数使用与 disable_keys 相同的 16 字节数据包布局。每个 Usage 会从禁用集合中移除对应按键。启用已经启用的按键是设备的无操作。
| 字节 | 字段 | 说明 |
|---|---|---|
| 0–15 | usages | 最多 16 个 Usage 字节。部分数据包以 0x00 填充。 |
OpenLogi 等待每个响应,但会忽略全部响应字节。
enable_all_keys(fn 3)
请求:0x00, 0x00, 0x00。
此函数清除完整的禁用 Usage 集合。OpenLogi 等待响应,但会忽略响应字节。
OpenLogi 的用法
OpenLogi v0.8.15 只提供类型化封装。设备层、代理、CLI 和用户界面都不会调用此功能。
空 Usage 切片有效,并且不会发送请求。封装不缓存禁用集合,因此退出时没有状态需要恢复。
Rust 用法
use hidpp::{
device::Device,
feature::disable_keys_by_usage::DisableKeysByUsageFeature,
};
// `device` is a discovered HID++ device.
device.enumerate_features().await?;
if let Some(feature) = device.get_feature::<DisableKeysByUsageFeature>() {
let capacity = feature.get_capabilities().await?;
println!("maximum disabled usages: {capacity}");
feature.disable_keys(&[0x3a, 0x3b, 0x3c]).await?;
feature.enable_keys(&[0x3b]).await?;
feature.enable_all_keys().await?;
}