OpenLogi

0x8310 · equalizer

HID++ 0x8310 协议封装中的逐频段耳机均衡器和麦克风降噪控制。

0x8310 控制音频设备的逐频段均衡器和麦克风降噪。OpenLogi 提供版本 2 的类型化封装。OpenLogi 没有将该功能接入设备、agent、CLI 或桌面控制路径。

**规格:**Logitech HID++ 2.0 —— x8310 equalizer。**交叉核对:**G HUB 2026.6(静态分析)。用于:openlogi-hidpp 中的类型化封装;没有设备层路径。

函数参考

EqualizerFeature 从版本 2 起实现 HID++ 0x8310。每个方法都是异步方法,并返回 Result<…, Hidpp20Error>。

方法

函数HID++ fn签名返回值
get_eq_info0(&self)EqInfo
get_frequencies1(&self, band_count: u8)Vec<u16>
get_frequency_gains2(&self, location: GainLocation, band_count: u8)Vec<i8>
set_frequency_gains3(&self, persistence: GainPersistence, gains: &[i8])Vec<i8>
get_mic_noise_reduction4(&self)bool
set_mic_noise_reduction5(&self, enabled: bool)()

类型

EqInfo

字段类型说明
band_countu8频段数量。
db_rangeu8两个显式边界均为零时的对称增益范围,单位为 dB。
capabilitiesEqCapabilities设备如何存储均衡器值。
db_mini8最小增益,单位为 dB;0 表示对称范围简写。
db_maxi8最大增益,单位为 dB;0 表示对称范围简写。

EqInfo 带有 #[non_exhaustive]。当两个显式边界均为 0 时,effective_range(&self) -> (i8, i8) 返回 (-db_range, db_range)。

EqCapabilities

标志位说明
STORED_AS_GAINS0设备将均衡器值存为增益。
STORED_AS_COEFFICIENTS1设备将均衡器值存为系数。

封装读取这个 u8 位字段时会保留未知能力位。

GainLocation

变体值说明
Eeprom0读取 EEPROM 中存储的自定义均衡器。
Ram1读取 RAM 中生效的均衡器。

GainLocation 带有 #[non_exhaustive]。

GainPersistence

变体值说明
Volatile0只将增益应用到 RAM。
VolatileAndNonVolatile1将增益应用到 RAM 和 EEPROM。
NonVolatileOnly2只将增益存入 EEPROM。

GainPersistence 带有 #[non_exhaustive]。

事件

OpenLogi v0.8.15 没有定义均衡器事件类型。EqualizerFeature 没有实现 EmittingFeature。

线格式

函数 0、1、2、4 和 5 发送 3 字节短请求。函数 3 发送 16 字节长请求。封装将每个响应转换为 16 字节缓冲区,并以零扩展短回复。

频率是 BE u16 值。增益是有符号 i8 值。封装会检查函数 1 回显的页索引。它不会验证函数 3 回显的持久化选择器。

get_eq_info(fn 0)

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

字节字段备注
0band_count频段数量。
1db_range字节 3~4 为零时的对称范围,单位为 dB。
2capabilitiesEqCapabilities 标志。
3db_min有符号 i8 最小增益,单位为 dB。
4db_max有符号 i8 最大增益,单位为 dB。

get_frequencies(fn 1)

封装对每页发送一个请求。每页最多包含 7 个频率。

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

字节字段备注
0start_index请求的第一个频段索引。
响应字节字段备注
0回显的 start_index如果不匹配,OpenLogi 返回 UnsupportedResponse。
1~2频率 0BE u16,单位为 Hz。
3~4频率 1BE u16,单位为 Hz。
5~14频率 2~6该页需要时,包含另外 5 个 BE u16 值。
15未使用OpenLogi 忽略此字节。

get_frequency_gains(fn 2)

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

字节字段备注
0locationGainLocation:0 为 Eeprom,1 为 Ram。
响应字节字段备注
从 0 开始增益每个请求的频段使用一个有符号 i8。

set_frequency_gains(fn 3)

请求是 16 字节长负载。OpenLogi 拒绝超过 15 个增益值。

字节字段备注
0persistenceGainPersistence:0、1 或 2。
1~15增益有符号 i8 值编码为原始字节。

封装跳过响应字节 0,并返回与请求数量相同的有符号增益字节。它不比较跳过的字节和 persistence。

get_mic_noise_reduction(fn 4)

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

字节字段备注
0启用状态零为 false;任意非零值为 true。

set_mic_noise_reduction(fn 5)

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

字节字段备注
0enabledOpenLogi 为 false 写入 0,为 true 写入 1。
1~2填充OpenLogi 写入零。

OpenLogi 等待响应,但忽略响应负载。

OpenLogi 的用法

功能注册表为版本 2 及更高版本的 0x8310 创建 EqualizerFeature。v0.8.15 的设备层、agent、CLI 和桌面路径都不会打开该封装。因此,OpenLogi 没有均衡器状态模型、能力门控、读-改-写操作、读回检查或退出时恢复行为。

未确认的细节

G HUB 2026.6 的静态分析发现了相同的六个 getter 和 setter 名称,以及一个事件处理器。现有证据没有给出函数编号、事件子 ID、回复宽度或完整协议布局。需要硬件抓包或 Logitech 的功能专用规格才能验证这些细节。

OpenLogi 对每个均衡器 getter 的短回复都作零扩展。这是实现事实,不证明短回复可以用于多字节响应。现有证据没有确认所需的回复长度。

Rust 用法

use hidpp::{
    feature::equalizer::{EqualizerFeature, GainLocation},
    protocol::v20::Hidpp20Error,
};

async fn active_gains(feature: &EqualizerFeature) -> Result<Vec<i8>, Hidpp20Error> {
    let info = feature.get_eq_info().await?;
    feature
        .get_frequency_gains(GainLocation::Ram, info.band_count)
        .await
}

本页目录