OpenLogi

0x8300 · sidetone

耳机旁音控制——读写麦克风回听音量(0–100)及各通道静音状态,使佩戴者在说话时能听到自己的声音。

耳机旁音控制——将麦克风信号回馈至耳机,让佩戴者在说话时能听到自己的声音。功能暴露两套独立的控制轴:get_sidetone_level / set_sidetone_level0..=100 的范围管理旁音音量(设备拒绝超出范围的写入),get_sidetone_mute / set_sidetone_mute 则通过位掩码管理各通道的静音状态。

  • SidetoneMuteStatus —— statuses: u8 位掩码;置位的比特表示对应通道已静音。
  • SidetoneMuteChange —— change_mask: u8 选择要操作的通道;statuses: u8 携带这些通道的目标静音状态。不在 change_mask 中的比特位在设备上保持不变。

规格: Logitech HID++ 2.0 —— Sidetone用于: openlogi-hidpp 的类型化封装。

Function reference

The SidetoneFeature wrapper (0x8300) exposes:

Methods

FunctionHID++ fnSignatureReturns
get_sidetone_level0()u8
set_sidetone_level1(level: u8)()
get_sidetone_mute2()SidetoneMuteStatus
set_sidetone_mute3(change: SidetoneMuteChange)()

All methods are async and return Result<…, Hidpp20Error>.

Types

SidetoneMuteStatus

Per-channel sidetone mute statuses.

FieldTypeDescription
statusesu8Raw mute-status bitmask. A set bit means the channel is muted.

SidetoneMuteChange

Change mask and statuses for sidetone mute settings.

FieldTypeDescription
change_masku8Channels to update. A set bit means the corresponding status bit applies.
statusesu8Desired mute statuses. A set bit means the channel should be muted.

Wire format

All four functions use a short 3-byte request payload and a 16-byte long response payload (the crate reads results from extend_payload()). The feature index byte is managed by FeatureEndpoint; only the function-specific payload bytes are shown below.

get_sidetone_level (fn 0)

Request: [0x00, 0x00, 0x00] — no parameters; all bytes are padding.

Response (byte → field):

ByteFieldNotes
0level (u8)Sidetone level in the range 0..=100.

set_sidetone_level (fn 1)

Request: [level, 0x00, 0x00]

ByteValueNotes
0levelSidetone level to write. Device rejects values outside 0..=100.
1–20x00Padding.

Response: acknowledged only; no payload fields are read.

get_sidetone_mute (fn 2)

Request: [0x00, 0x00, 0x00] — no parameters; all bytes are padding.

Response (byte → field):

ByteFieldNotes
0SidetoneMuteStatus::statuses (u8)Bitmask; a set bit means that channel is muted.

set_sidetone_mute (fn 3)

Request: [change_mask, statuses, 0x00]

ByteValueNotes
0SidetoneMuteChange::change_maskSelects which channel bits to overwrite on the device.
1SidetoneMuteChange::statusesDesired mute state for the selected channels.
20x00Padding.

Response: acknowledged only; no payload fields are read.

Usage (Rust)

use hidpp::{device::Device, feature::sidetone::{SidetoneMuteChange, SidetoneFeature}};

// device: &mut Device, already created via Device::new(channel, index).await?
device.enumerate_features().await?;
if let Some(feat) = device.get_feature::<SidetoneFeature>() {
    // Read the current sidetone level (0–100)
    let level = feat.get_sidetone_level().await?;
    println!("Sidetone level: {level}");

    // Lower it by 10, clamped to the valid range
    feat.set_sidetone_level(level.saturating_sub(10)).await?;

    // Read current per-channel mute state
    let mute = feat.get_sidetone_mute().await?;
    println!("Mute bitmask: 0b{:08b}", mute.statuses);

    // Mute channel 0 (bit 0) without touching other channels
    feat.set_sidetone_mute(SidetoneMuteChange {
        change_mask: 0b0000_0001,
        statuses:    0b0000_0001,
    }).await?;
}

本页目录