0x8080 · perKeyLighting
旧版逐键 RGB 灯光控制,通过超长报告流式写入 HID 用法和颜色条目,再提交暂存的帧。
0x8080 是面向带可寻址 LED 键盘的早期逐键 RGB feature。
当较新的灯光路径不可用时,OpenLogi 会将它用作原始 HID++ 回退路径。
**规格:**没有公开的 Logitech 规格。布局由 Logi Options+ 2.8 静态分析逆向得出。用于:键盘灯光。
函数参考
OpenLogi 没有 0x8080 的类型化 PerKeyLightingFeature 封装。
设备写入器会解析运行时 feature index,再发送下列两个原始命令。
方法
| 函数 | HID++ fn | 签名 | 返回值 |
|---|---|---|---|
setKeyColors | 3 | 一个 64 字节的 0x12 报告,最多包含 14 个 (key_id, red, green, blue) 条目 | 原始写入长度;提交前会收集 feature 错误。 |
flushLeds | 5 | 一个普通长请求,带 16 字节全零载荷 | 收到 HID++ 回复后的 Result<(), WriteError>。 |
类型
原始写入器没有公开的 0x8080 类型、枚举或逐键状态模型。
它为每个 RGB 通道接收一个 u8 值。
事件
OpenLogi 没有 0x8080 专属的 feature 事件类型。
原始写入器只监听与流式帧匹配的 HID++ feature 错误。
线格式
setKeyColors 使用 64 字节的 HID++ 超长报告(0x12)。
flushLeds 使用普通 HID++ 长请求,并等待其回复。
setKeyColors(fn 3)
OpenLogi 为 0x00..=0xe8 HID 用法范围发送 17 个帧。
前 16 个帧各有 14 个条目,最后一个帧有 9 个条目。
| 字节 | 字段 | 值或编码 | 备注 |
|---|---|---|---|
| 0 | 报告 ID | 0x12 | HID++ 超长报告。 |
| 1 | 设备 index | 运行时值 | 设备路由提供此值。 |
| 2 | feature index | 运行时值 | OpenLogi 解析 0x8080 的 index。 |
| 3 | 函数和软件 ID | 高半字节为 3;低半字节为 0xa | 函数 3,使用 OpenLogi 软件 ID 0xa。 |
| 4–5 | key_type | BE 0x0001 | OpenLogi 固定写入此值。Options+ 2.8 |
| 6–7 | entry_count | BE u16,范围为 1..=14 | 计数等于此帧的条目数。Options+ 2.8 |
| 8–63 | 条目 | 最多 14 × (key_id, red, green, blue) | key_id 占一个字节,之后是 3 个 8-bit RGB 通道。Options+ 2.8 |
未使用的条目字节保持为零。
这些字节位于 entry_count 之外,不能作为条目处理。
自 v0.8.14 起,OpenLogi 将尾帧计数写为 BE 0x0009,而非 0x000e。
flushLeds(fn 5)
此命令会提交此前由函数 3 暂存的颜色。 只有流式报告通过错误检查后,OpenLogi 才会发送此命令。
| 字节 | 字段 | 值 | 备注 |
|---|---|---|---|
| 0–15 | 载荷 | 全部为 0x00 | OpenLogi 发送函数 5 的普通长请求,软件 ID 为 0xa。 |
OpenLogi 会等待此普通 HID++ 请求的回复。 它不为回复载荷赋予语义。
OpenLogi 的用法
LightingMethod::Auto 依次尝试 0x8070、0x8071、0x8081,最后尝试 0x8080。
LightingMethod::PerKey 会为诊断选择此原始路径。
写入器会在运行时通过 Root feature 解析 0x8080。
它没有类型化 feature 封装,也没有 feature 版本门控。
写入器会为每个 0x00 至 0xe8 的 HID 用法流式写入一种请求的 RGB 颜色。
它会检查每个原始报告都完整写入 64 字节。
超长函数 3 请求的协议回复报告 ID 尚未确认。 因此,OpenLogi 会在流式发送每个帧时记录匹配的 feature 错误。
最后一个帧之后会发送 Root ping,用作有序回复屏障。
如果设备拒绝任一帧,OpenLogi 会返回该错误,不会发送 flushLeds。
最终的函数 5 请求使用普通 HID++ 请求路径,并等待回复。 此检查在 v0.8.14 通过 PR #1764 发布。
OpenLogi 只应用纯色。 键盘灯光产品界面不会保存或公开独立键颜色映射。
未确认的细节
Options+ 2.8 会同步调用函数 3,但静态分析未能确认其回复报告 ID。 在硬件捕获确认该回复前,OpenLogi 无法等待每个帧的成功回复。
当前错误监听器和 Root-ping 屏障可阻止已知被拒绝的帧被提交。
硬件捕获必须在 0x8080 键盘上验证此行为。
Rust 用法
use openlogi_hid::{
set_keyboard_color_with, DeviceRoute, LightingMethod, WriteError,
};
async fn paint_with_legacy_per_key(
route: &DeviceRoute,
) -> Result<(), WriteError> {
set_keyboard_color_with(
route,
LightingMethod::PerKey,
0x20,
0x80,
0xff,
)
.await
}