OpenLogi

0x4220 · LockKeyState

读取 Num Lock、Caps Lock 和 Scroll Lock 状态,或解码非请求锁定键报告。

LockKeyState 为具有 0x4220 功能的键盘上报已开启的锁定键。OpenLogi 读取此状态,并将后续广播用于锁定键提示。

**规格:**Logitech 没有公开此功能的规格。布局根据 Logi Options+ 2.8(静态分析)逆向得出。用于:锁定键提示。

函数参考

LockKeyStateFeature 可为功能版本 0 创建。

方法

函数HID++ fn签名返回值
get_lock_state0()LockKeys
decode_broadcast事件解码器(&[u8; 16])LockKeys

get_lock_state 是 async 方法,返回 Result<LockKeys, Hidpp20Error>。decode_broadcast 是不会失败的关联函数。

类型

LockKeys

LockKeys 是保留未知位的 u8 位字段。OpenLogi 保留未命名位,不会拒绝新键盘的未知状态。

字段位说明
NUM_LOCK1 << 0Num Lock 已开启。
CAPS_LOCK1 << 1Caps Lock 已开启。
SCROLL_LOCK1 << 2Scroll Lock 已开启。

事件

OpenLogi 不为此功能提供 listen() 方法。库存路径会先筛选软件 ID 0,再对这个功能索引的报告调用 decode_broadcast。

事件载荷说明
锁定键状态LockKeys完整的当前锁定键位掩码。

线格式

get_lock_state 使用 3 字节短请求载荷。OpenLogi 将响应规范化为 16 字节,再解码字节 0。

get_lock_state(fn 0)

请求:

字节字段说明
0–2—没有参数。OpenLogi 发送 0x00, 0x00, 0x00。

响应:

字节字段说明
0lock_keysLockKeys 位掩码。
1–15—OpenLogi 忽略这些字节。

锁定键广播

Logi Options+ 2.8 从此功能的任意非请求报告读取字节 0。OpenLogi 遵循此规则,不验证报告函数。

字节字段说明
0lock_keys与 get_lock_state 相同的 LockKeys 位掩码。Options+ 2.8
1–15—OpenLogi 忽略这些字节。

OpenLogi 的用法

从 v0.8.15 起,OpenLogi 为每个在线连接读取一次锁定键状态。这个基线让 OpenLogi 能识别后续广播中变化的每个已命名位。

OpenLogi 为每个变化的已命名键排入一项提示更新。此类瞬时状态不会触发库存重新协调,也不会增加设置修订号。

代理会检查 lock_key_notifications。此设置默认是 true。OpenLogi 在 macOS、Linux 和 Windows 上显示 Caps Lock,在 Linux 和 Windows 上显示 Num Lock 与 Scroll Lock。

OpenLogi 不会写入 0x4220,也不会在退出时恢复状态。可查看屏幕提示了解可见行为。

Rust 用法

use hidpp::{
    device::Device,
    feature::lock_key_state::{LockKeyStateFeature, LockKeys},
};

// `device` is a discovered HID++ device.
device.enumerate_features().await?;
if let Some(feature) = device.get_feature::<LockKeyStateFeature>() {
    let keys = feature.get_lock_state().await?;
    if keys.contains(LockKeys::CAPS_LOCK) {
        println!("Caps Lock is on");
    }
}

本页目录