OpenLogi

0x1D4B · wirelessDeviceStatus

接收设备重连广播,让 OpenLogi 重新装备捕获控件并重新应用易失设置。

wirelessDeviceStatus 是用于无线设备的纯事件 feature。OpenLogi 将已接受的广播视为重连信号,然后重新装备捕获会话,并安排重新应用配置。

**规格:**没有公开的 Logitech 规格。线格式来自 Logi Options+ 2.8(静态分析)。**交叉核对:**G HUB(静态分析)、Solaar。**用于:**OpenLogi inventory 和 capture session。

函数参考

WirelessDeviceStatusFeature 实现 feature version 0。它不发送 HID++ 请求。事件源绑定一个设备和 feature-table index,listen 为已解码的广播创建接收器。

方法

函数HID++ fn签名返回值
listenevent(&self)async_channel::Receiver<WirelessDeviceStatusEvent>
WirelessDeviceStatusEvent::decodeevent(function_id: u8, payload: &[u8; 16])Option<WirelessDeviceStatusEvent>

listen 来自 EmittingFeature。如果 function_id 不为 0,decode 返回 None。

类型

WirelessDeviceStatusBroadcast

字段类型说明
statusWirelessDeviceStatus设备上报的状态。
requestWirelessDeviceStatusRequest设备请求的主机操作。
reasonWirelessDeviceStatusReason广播的原因。

WirelessDeviceStatus

变体值说明
Unknown0x00未知无线设备状态。
Reconnection0x01设备正在重连。
Other(u8)其他值未建模的原始值。

WirelessDeviceStatusRequest

变体值说明
NoRequest0x00不请求主机操作。
SoftwareReconfigurationNeeded0x01主机必须重新配置设备。
Other(u8)其他值未建模的原始值。

WirelessDeviceStatusReason

变体值说明
Unknown0x00未知广播原因。
PowerSwitchActivated0x01电源开关操作导致广播。
Other(u8)其他值未建模的原始值。

事件

变体载荷说明
WirelessDeviceStatusEvent::StatusBroadcastWirelessDeviceStatusBroadcast已解码的 function-0 状态广播。

线格式

设备发送未经请求的状态广播。OpenLogi 不为这个 feature 发送请求。它的 decoder 接收 16 字节扩展载荷,读取字节 0 到 2,并忽略其余字节。

StatusBroadcast(事件,fn 0)

字节字段类型值备注
0statusWirelessDeviceStatus0x00 = Unknown;0x01 = Reconnection其他值变为 Other(u8)。
1requestWirelessDeviceStatusRequest0x00 = NoRequest;0x01 = SoftwareReconfigurationNeeded其他值变为 Other(u8)。
2reasonWirelessDeviceStatusReason0x00 = Unknown;0x01 = PowerSwitchActivated其他值变为 Other(u8)。
3~15未建模的尾部—含义未确定OpenLogi 忽略这些字节。

OpenLogi 的用法

Inventory 在枚举 0x1d4b 时记录 feature-table index。只有 software ID 为 0、feature index 匹配且 WirelessDeviceStatusEvent::decode 接受 function 0 时,Inventory 才接受事件。事件被接受后,Inventory 会清除缓存的锁定键状态,并请求重新协调。

Agent 将产生的 device-wake 事件视为重新配置信号。即使下一个 inventory snapshot 从未看到设备离线,Agent 也会在这个 snapshot 上安排重新应用配置。

Capture session 会在设置期间查询这个 feature。如果 feature 存在,session 会保留 listener。每个已解码的广播都会重置捕获输入状态,等待 re-arm settle delay;如果 I/O 仍被允许,session 会重新装备。session 不会按 status、request 或 reason 分支。

这个 feature 不拥有可写状态。它没有 read-modify-write 操作、read-back 检查或状态恢复。丢弃 feature 会移除受保护的 channel listener。

未确认的细节

OpenLogi 和 Solaar 只接受 function 0。Options+ 和 Linux HID++ driver 将 0x1d4b feature index 上的任意报告视为重连信号。没有 capture 或 field report 确定非零 function 的布局,因此 OpenLogi 保留 function-0 gate。

现有证据没有为载荷字节 3 到 15 指定含义。OpenLogi 忽略这些字节。

Rust 用法

use hidpp::{
    device::Device,
    feature::{
        EmittingFeature,
        wireless_device_status::{WirelessDeviceStatusEvent, WirelessDeviceStatusFeature},
    },
};

// `device` is `&mut Device`, created with `Device::new`.
device.enumerate_features().await?;
if let Some(feature) = device.get_feature::<WirelessDeviceStatusFeature>() {
    let events = feature.listen();
    while let Ok(WirelessDeviceStatusEvent::StatusBroadcast(status)) = events.recv().await {
        println!("{status:?}");
    }
}

本页目录