0x4301 · solarKeyboardDashboard
调度太阳能键盘光照报告,控制 CheckLight LED,并接收电量与环境光事件。
SolarKeyboardDashboard 服务于 Logitech 太阳能键盘,包括 K750。它可调度光照报告、控制 CheckLight LED,并解码电量与光照广播。
**规格:**Logitech HID++ 2.0——solarKeyboardDashboard。**用于:**OpenLogi 除
openlogi-hidpp封装外未使用此功能。
函数参考
SolarDashboardFeature 可为功能版本 0 创建。
方法
| 函数 | HID++ fn | 签名 | 返回值 |
|---|---|---|---|
set_light_measure | 0 | (max_reports: u8, report_period: u8) | () |
set_led | 1 | (led: LedId) | () |
listen | 事件 | () | async_channel::Receiver<SolarEvent> |
set_light_measure 和 set_led 是 async 方法。它们返回 Result<(), Hidpp20Error>。listen 来自 EmittingFeature<SolarEvent>。
类型
LedId
LedId 选择 CheckLight LED 的颜色。
| 变体 | 值 | 说明 |
|---|---|---|
Off | 0 | 关闭全部 CheckLight LED。 |
Red | 1 | 显示红色。 |
Orange | 2 | 显示橙色。 |
Green | 3 | 显示绿色。 |
SolarStatus
每个 SolarEvent 都包含一个 SolarStatus。
| 字段 | 类型 | 说明 |
|---|---|---|
battery_level | u8 | 剩余电量百分比。 |
light_level | u16 | 环境光照度,范围为 0..=511 勒克斯。 |
事件
| 变体 | 说明 |
|---|---|
Battery(SolarStatus) | 自发电量报告。光照度为 0。 |
LightMeasure(SolarStatus) | 由 set_light_measure 调度的报告。 |
CheckLightButton(SolarStatus) | 用户按下了 CheckLight 按钮。 |
固件约每 90 秒、上电时和重连时发送 Battery。收到 CheckLightButton 后,应在 250 ms 内调用 set_led,才能覆盖固件显示。
线格式
set_light_measure 和 set_led 使用 3 字节短请求。OpenLogi 等待 HID++ 响应,但不会读取两个设置方法的响应字节。
set_light_measure(fn 0)
| 字节 | 字段 | 说明 |
|---|---|---|
| 0 | max_reports | LightMeasure 报告数量。0 会取消报告。 |
| 1 | report_period | 间隔秒数。0 会取消报告。 |
| 2 | — | 填充。OpenLogi 发送 0x00。 |
set_led(fn 1)
| 字节 | 字段 | 说明 |
|---|---|---|
| 0 | led | LedId:Off = 0、Red = 1、Orange = 2、Green = 3。 |
| 1–2 | — | 填充。OpenLogi 发送 0x00。 |
事件(fn 0–2)
每个事件都使用以下载荷。light_level 是 BE u16。
| 字节 | 字段 | 说明 |
|---|---|---|
| 0 | battery_level | 剩余电量百分比。 |
| 1–2 | light_level | 环境光照度,BE u16。 |
| 3–15 | — | OpenLogi 忽略这些字节。 |
| HID++ fn | 变体 |
|---|---|
| 0 | SolarEvent::Battery |
| 1 | SolarEvent::LightMeasure |
| 2 | SolarEvent::CheckLightButton |
OpenLogi 的用法
OpenLogi 创建此功能时,类型化封装会安装广播监听器。该封装向 Rust 调用者提供调度、LED 控制和已解码的事件。
OpenLogi v0.8.15 没有设备层、代理、CLI 或用户界面调用此功能。OpenLogi 不会调度报告、覆盖 LED、跟踪结果或在退出时恢复功能状态。
Rust 用法
use hidpp::{
device::Device,
feature::{
EmittingFeature,
solar_dashboard::{LedId, SolarDashboardFeature, SolarEvent},
},
};
// `device` is a discovered HID++ device.
device.enumerate_features().await?;
if let Some(feature) = device.get_feature::<SolarDashboardFeature>() {
feature.set_light_measure(10, 30).await?;
let events = feature.listen();
while let Ok(event) = events.recv().await {
if let SolarEvent::CheckLightButton(status) = event {
println!("battery={}%, light={} lux", status.battery_level, status.light_level);
feature.set_led(LedId::Green).await?;
}
}
}