OpenLogi

0x4301 · solarKeyboardDashboard

调度太阳能键盘光照报告,控制 CheckLight LED,并接收电量与环境光事件。

SolarKeyboardDashboard 服务于 Logitech 太阳能键盘,包括 K750。它可调度光照报告、控制 CheckLight LED,并解码电量与光照广播。

**规格:**Logitech HID++ 2.0——solarKeyboardDashboard。**用于:**OpenLogi 除 openlogi-hidpp 封装外未使用此功能。

函数参考

SolarDashboardFeature 可为功能版本 0 创建。

方法

函数HID++ fn签名返回值
set_light_measure0(max_reports: u8, report_period: u8)()
set_led1(led: LedId)()
listen事件()async_channel::Receiver<SolarEvent>

set_light_measure 和 set_led 是 async 方法。它们返回 Result<(), Hidpp20Error>。listen 来自 EmittingFeature<SolarEvent>。

类型

LedId

LedId 选择 CheckLight LED 的颜色。

变体值说明
Off0关闭全部 CheckLight LED。
Red1显示红色。
Orange2显示橙色。
Green3显示绿色。

SolarStatus

每个 SolarEvent 都包含一个 SolarStatus。

字段类型说明
battery_levelu8剩余电量百分比。
light_levelu16环境光照度,范围为 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)

字节字段说明
0max_reportsLightMeasure 报告数量。0 会取消报告。
1report_period间隔秒数。0 会取消报告。
2—填充。OpenLogi 发送 0x00。

set_led(fn 1)

字节字段说明
0ledLedId:Off = 0、Red = 1、Orange = 2、Green = 3。
1–2—填充。OpenLogi 发送 0x00。

事件(fn 0–2)

每个事件都使用以下载荷。light_level 是 BE u16。

字节字段说明
0battery_level剩余电量百分比。
1–2light_level环境光照度,BE u16。
3–15—OpenLogi 忽略这些字节。
HID++ fn变体
0SolarEvent::Battery
1SolarEvent::LightMeasure
2SolarEvent::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?;
        }
    }
}

本页目录