0x6110 · touchMouseRawTouchPoints
查询触控鼠标,并选择原始模式以每个事件接收四个原始触点槽位。
0x6110 公开触控鼠标表面的原始触点。它报告表面几何参数、分辨率、原点和触点限制。选择原始模式会启用原始数据,而状态事件仍是独立事件类型。
规格: Logitech HID++ 2.0 —— touchMouseRawTouchPoints(v0)。用于: OpenLogi 只提供类型化
openlogi-hidpp包装器。
函数参考
TouchMouseRawFeature 实现 feature 版本 0。
方法
| 函数 | HID++ fn | 签名 | 返回值 |
|---|---|---|---|
get_touchpad_info | 0 | () | TouchMouseInfo |
get_raw_mode | 1 | () | RawMode |
set_raw_mode | 2 | (mode: RawMode) | () |
listen | event | () | async_channel::Receiver<TouchMouseRawEvent> |
前三个方法是 async,并返回 Result<…, Hidpp20Error>。listen 是同步方法。
类型
TouchMouseInfo
| 字段 | 类型 | 说明 |
|---|---|---|
x_max_count | u16 | 以点为单位的最大 X 计数。 |
y_max_count | u16 | 以点为单位的最大 Y 计数。 |
resolution_dpi | u16 | 传感器 DPI。包装器假定 X 和 Y 分辨率相同。 |
origin | Origin | 坐标原点。 |
max_finger_count | u8 | 最大报告触点数。 |
width_height_data_range | u8 | 最大宽度或高度数据值。 |
RawMode
| 变体 | 值 | 说明 |
|---|---|---|
NativeGestures | 0 | 仅原生手势。 |
RawFiltered | 1 | 过滤后的原始数据。 |
RawUnfilteredAndGestures | 2 | 未过滤的原始数据和原生手势。 |
RawUnfilteredAlways | 3 | 未过滤的数据,包括抬起或按键激活时。 |
RawUnfilteredWithZ | 4 | 模式 2,但用 Z 数据代替宽度。 |
Origin
| 变体 | 值 | 说明 |
|---|---|---|
LowerLeft | 1 | 左下角。 |
LowerRight | 2 | 右下角。 |
UpperLeft | 3 | 左上角。 |
UpperRight | 4 | 右上角。 |
TouchMousePoint 和 TouchMouseStatus
| 字段 | 类型 | 说明 |
|---|---|---|
x | u16 | 12 位 X 坐标。 |
y | u16 | 12 位 Y 坐标。 |
width_x | u8 | 四位 X 宽度,或 RawUnfilteredWithZ 中的 Z。 |
width_y | u8 | 四位 Y 宽度。 |
MOUSE_LIFTED | 1 << 0 | 鼠标已抬起。 |
BUTTON_DOWN | 1 << 1 | 鼠标按钮已按下。 |
TouchMouseStatus 会保留事件中的未知标志位。
常量
| 字段 | 值 | 说明 |
|---|---|---|
TOUCH_POINT_COUNT | 4 | 单个事件中的原始触点槽位数。 |
事件
TouchMouseRawFeature 实现 EmittingFeature<TouchMouseRawEvent>。它接受事件子 ID 0 和 1。
| 变体 | 说明 |
|---|---|
RawData { touches } | 按手指 ID 0–3 索引的四个 Option<TouchMousePoint> 槽位。 |
StatusChanged(TouchMouseStatus) | 一条原始鼠标状态标志更新。 |
线格式
读取方法发送三个零字节。设置方法发送模式和两个零字节。OpenLogi 读取扩展响应负载,并忽略未在下表列出的字节。
get_touchpad_info(fn 0)
| 字节 | 字段 | 备注 |
|---|---|---|
| 0–1 | x_max_count | u16,BE。 |
| 2–3 | y_max_count | u16,BE。 |
| 4–5 | resolution_dpi | u16,BE。 |
| 6 | origin | 值 1–4 映射到 Origin。其他值返回 Hidpp20Error::UnsupportedResponse。 |
| 7 | max_finger_count | 原始 u8。 |
| 8 | width_height_data_range | 原始 u8。 |
| 9–15 | — | OpenLogi 忽略这些字节。 |
get_raw_mode(fn 1)
| 字节 | 字段 | 备注 |
|---|---|---|
| 0 | RawMode | 值 0–4 映射到命名变体。其他值返回 Hidpp20Error::UnsupportedResponse。 |
| 1–15 | — | OpenLogi 忽略这些字节。 |
set_raw_mode(fn 2)
| 字节 | 字段 | 备注 |
|---|---|---|
| 0 | mode | RawMode 值。 |
| 1–2 | — | OpenLogi 写入 0x00。 |
OpenLogi 接受成功的传输响应,但不解码响应负载。
RawData 事件(fn 0)
事件有四个连续的四字节槽位。槽位 i 从 i * 4 开始。x_high 值为 0xff 时,该槽位为 None。
| 偏移 | 字段 | 备注 |
|---|---|---|
| 0 | x_high | X 位 11:4,除非 0xff 表示触点已抬起。 |
| 1 | y_high | Y 位 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:?}");
}
}