OpenLogi

0x8040 · brightnessControl

显示屏或背光的亮度范围、数值和独立照明控制,适用于 feature 版本 1。

此功能控制通告 BrightnessControl 的设备显示屏或背光亮度。它报告亮度范围和能力位。当设备通告该能力时,它也可独立读取或设置照明状态。

**规格:**Logitech HID++ 2.0 —— brightnessControl。用于:openlogi-hidpp 中的类型化封装;v0.8.15 没有设备层路径。

函数参考

BrightnessControlFeature(0x8040,版本 1)提供以下方法。

方法

函数HID++ fn签名返回值
get_info0()BrightnessInfo
get_brightness1()u16
set_brightness2(brightness: u16)()
get_illumination3()bool
set_illumination4(enabled: bool)()

所有方法都是 async,并返回 Result<…, Hidpp20Error>。

类型

BrightnessInfo

字段类型说明
min_brightnessu16最低可接受亮度。
max_brightnessu16最高可接受亮度。
stepsu16设备通告的亮度步数。
capabilitiesBrightnessCapabilitiesfeature 能力位。

BrightnessCapabilities

OpenLogi 解码能力字节时会保留未知位。

字段位说明
HARDWARE_BRIGHTNESS0硬件可直接改变亮度。
EVENTS1设备可发送亮度或照明变更。
ILLUMINATION2可独立查询和控制照明。
HARDWARE_ON_OFF3硬件可直接开关照明。
TRANSIENT4亮度不会在电源循环后保留。

事件

BrightnessControlFeature 不提供事件类型或监听器。因此,OpenLogi 没有使用 EVENTS 能力的事件消费者。

线格式

请求使用 3 字节短载荷。所有多字节字段均为 BE。OpenLogi 会在解码前将短回复扩展为 16 字节载荷。

get_info(fn 0)

请求:[0x00, 0x00, 0x00]

字节字段备注
0–1max_brightnessBE u16。
2steps 的低字节与字节 6 组合。
3capabilitiesBrightnessCapabilities 位字段。
4–5min_brightnessBE u16。
6steps 的高字节steps 按字节 6、2 的顺序读取为 BE 值。

get_brightness(fn 1)

请求:[0x00, 0x00, 0x00]

字节字段备注
0–1亮度BE u16。

set_brightness(fn 2)

请求:[brightness_hi, brightness_lo, 0x00],其中亮度为 BE u16。

回复是确认。OpenLogi 不检查回复载荷。

get_illumination(fn 3)

请求:[0x00, 0x00, 0x00]

字节字段备注
0照明状态位 0 置位表示 true。

set_illumination(fn 4)

请求:[enabled, 0x00, 0x00],其中 enabled 为 0x00 或 0x01。

回复是确认。OpenLogi 不检查回复载荷。

OpenLogi 的用法

OpenLogi 在 HID++ feature 注册表中注册 BrightnessControlFeature。在 v0.8.15 中,没有 openlogi-device、代理、CLI、库存或面向用户的路径会打开此 feature。

因此,OpenLogi 不读取其范围,不应用能力门控,不读回写入,不恢复其状态,也不订阅通告的事件。直接调用方应先调用 get_info(),并在调用 fn 3 或 fn 4 前确认 ILLUMINATION。

Rust 用法

use hidpp::{
    device::Device,
    feature::brightness_control::{BrightnessCapabilities, BrightnessControlFeature},
};

// `device` 已为 HID++ 通道和设备索引创建。
device.enumerate_features().await?;
if let Some(feature) = device.get_feature::<BrightnessControlFeature>() {
    let info = feature.get_info().await?;
    let current = feature.get_brightness().await?;
    println!("brightness: {current} of {}", info.max_brightness);

    if info.capabilities.contains(BrightnessCapabilities::ILLUMINATION) {
        feature.set_illumination(true).await?;
    }
}

本页目录