OpenLogi

0x6110 · touchMouseRawTouchPoints

查询触控鼠标,并选择原始模式以每个事件接收四个原始触点槽位。

0x6110 公开触控鼠标表面的原始触点。它报告表面几何参数、分辨率、原点和触点限制。选择原始模式会启用原始数据,而状态事件仍是独立事件类型。

规格: Logitech HID++ 2.0 —— touchMouseRawTouchPoints(v0)。用于: OpenLogi 只提供类型化 openlogi-hidpp 包装器。

函数参考

TouchMouseRawFeature 实现 feature 版本 0。

方法

函数HID++ fn签名返回值
get_touchpad_info0()TouchMouseInfo
get_raw_mode1()RawMode
set_raw_mode2(mode: RawMode)()
listenevent()async_channel::Receiver<TouchMouseRawEvent>

前三个方法是 async,并返回 Result<…, Hidpp20Error>。listen 是同步方法。

类型

TouchMouseInfo

字段类型说明
x_max_countu16以点为单位的最大 X 计数。
y_max_countu16以点为单位的最大 Y 计数。
resolution_dpiu16传感器 DPI。包装器假定 X 和 Y 分辨率相同。
originOrigin坐标原点。
max_finger_countu8最大报告触点数。
width_height_data_rangeu8最大宽度或高度数据值。

RawMode

变体值说明
NativeGestures0仅原生手势。
RawFiltered1过滤后的原始数据。
RawUnfilteredAndGestures2未过滤的原始数据和原生手势。
RawUnfilteredAlways3未过滤的数据,包括抬起或按键激活时。
RawUnfilteredWithZ4模式 2,但用 Z 数据代替宽度。

Origin

变体值说明
LowerLeft1左下角。
LowerRight2右下角。
UpperLeft3左上角。
UpperRight4右上角。

TouchMousePoint 和 TouchMouseStatus

字段类型说明
xu1612 位 X 坐标。
yu1612 位 Y 坐标。
width_xu8四位 X 宽度,或 RawUnfilteredWithZ 中的 Z。
width_yu8四位 Y 宽度。
MOUSE_LIFTED1 << 0鼠标已抬起。
BUTTON_DOWN1 << 1鼠标按钮已按下。

TouchMouseStatus 会保留事件中的未知标志位。

常量

字段值说明
TOUCH_POINT_COUNT4单个事件中的原始触点槽位数。

事件

TouchMouseRawFeature 实现 EmittingFeature<TouchMouseRawEvent>。它接受事件子 ID 0 和 1。

变体说明
RawData { touches }按手指 ID 0–3 索引的四个 Option<TouchMousePoint> 槽位。
StatusChanged(TouchMouseStatus)一条原始鼠标状态标志更新。

线格式

读取方法发送三个零字节。设置方法发送模式和两个零字节。OpenLogi 读取扩展响应负载,并忽略未在下表列出的字节。

get_touchpad_info(fn 0)

字节字段备注
0–1x_max_countu16,BE。
2–3y_max_countu16,BE。
4–5resolution_dpiu16,BE。
6origin值 1–4 映射到 Origin。其他值返回 Hidpp20Error::UnsupportedResponse。
7max_finger_count原始 u8。
8width_height_data_range原始 u8。
9–15—OpenLogi 忽略这些字节。

get_raw_mode(fn 1)

字节字段备注
0RawMode值 0–4 映射到命名变体。其他值返回 Hidpp20Error::UnsupportedResponse。
1–15—OpenLogi 忽略这些字节。

set_raw_mode(fn 2)

字节字段备注
0modeRawMode 值。
1–2—OpenLogi 写入 0x00。

OpenLogi 接受成功的传输响应,但不解码响应负载。

RawData 事件(fn 0)

事件有四个连续的四字节槽位。槽位 i 从 i * 4 开始。x_high 值为 0xff 时,该槽位为 None。

偏移字段备注
0x_highX 位 11:4,除非 0xff 表示触点已抬起。
1y_highY 位 11:4。
2 bits[3:0]X 低半字节与 x_high 组合。
2 bits[7:4]Y 低半字节与 y_high 组合。
3 bits[3:0]width_x四位宽度或 Z。
3 bits[7:4]width_y四位宽度。

坐标为 x = (x_high << 4) | low_nibble 和 y = (y_high << 4) | high_nibble。

StatusChanged 事件(fn 1)

字节字段备注
0 bit[0]MOUSE_LIFTED鼠标抬起状态。
0 bit[1]BUTTON_DOWN按钮按下状态。
0 bits[7:2]—TouchMouseStatus 保留这些位,但没有命名语义。
1–15—OpenLogi 忽略这些字节。

OpenLogi 的用法

v0.8.15 的设备层和代理层没有使用 TouchMouseRawFeature。类型化包装器不会为 OpenLogi 用户选择原始模式、读回原始模式或恢复原始模式。

Rust 用法

use hidpp::{
    device::Device,
    feature::{
        EmittingFeature,
        touch_mouse_raw::{RawMode, TouchMouseRawFeature},
    },
};

// device: &mut Device, already created via Device::new(channel, index)
device.enumerate_features().await?;
if let Some(feature) = device.get_feature::<TouchMouseRawFeature>() {
    println!("{:?}", feature.get_touchpad_info().await?);
    feature.set_raw_mode(RawMode::RawFiltered).await?;

    let receiver = feature.listen();
    while let Ok(event) = receiver.recv().await {
        println!("{event:?}");
    }
}

本页目录