这是 LowLatencyInput 安卓客户端 的配套 PC 端服务器组件。
本程序的目的是在 Windows PC 上运行,通过 TCP 连接接收来自 LowLatencyInput 安卓客户端的数据,并将处理后的输入数据(陀螺仪、加速度计、触摸屏、UI 事件)写入 Windows 共享内存,供其他应用程序(例如,输入模拟器)读取和使用。
- TCP 服务器: 监听来自安卓客户端的连接 (默认
0.0.0.0:12345)。 - 数据包解析: 严格按照安卓客户端定义的网络协议解析触摸、陀螺仪、加速度计、设备信息、UI 事件和 Ping 数据包。
- 数据处理:
- 计算客户端到服务器的 RTT (Round-Trip Time)。
- 对陀螺仪数据进行零偏自动校准。
- 对传感器数据进行缩放,转换为
i16范围。 - 过滤掉可能由 UI 点击触发的附近触摸点,以减少误操作。
- 共享内存输出 (核心): 将处理后的数据写入三个独立的 Windows 共享内存区域,并通过对应的 Windows 事件通知数据更新:
- 陀螺仪/加速度数据:
- 共享内存名称:
Global\GyroSharedMemory - 更新事件名称:
Global\GyroDataUpdatedEvent - 数据结构 (
SharedGyroData): 包含更新序列号 (i64)、缩放后的 Pitch/Yaw/Roll (i16)、缩放后的 Accel X/Y/Z (i16)、时间戳 (u16) 和一个is_aiming标志 (i64)。
- 共享内存名称:
- 触摸数据:
- 共享内存名称:
Global\TouchSharedMemory - 更新事件名称:
Global\TouchDataUpdatedEvent - 数据结构 (
SharedTouchData): 包含更新序列号 (i64)、事件时间戳 (i64)、触摸点数量 (i32)、最多 10 个触摸点的数组(id,x,y均为i32)、屏幕最大 X/Y 坐标 (i32)。
- 共享内存名称:
- UI 事件数据:
- 共享内存名称:
Global\UiSharedMemory - 更新事件名称:
Global\UiDataUpdatedEvent - 数据结构 (
SharedUiData): 包含更新序列号 (i64)、事件写入时的服务器时间戳 (i64)、最后点击的 X/Y 坐标 (i32) 和最后点击的图标类型 ID (i32)。
- 共享内存名称:
- 陀螺仪/加速度数据:
- 操作系统: Windows (因为使用了 Windows API 进行共享内存和事件操作)
- Rust 工具链: 需要安装 Rust。访问 https://www.rust-lang.org/tools/install 获取安装指南。
-
克隆仓库:
git clone https://github.com/shuakami/android_usb_listener cd android_usb_listener # 进入项目目录
-
构建:
cargo build --release
可执行文件将位于
target/release/android_usb_listener.exe。 -
运行服务器:
cargo run --release # 或者直接运行编译好的文件 # ./target/release/android_usb_listener.exe
服务器启动后会显示 "服务器启动,监听端口 12345..."。
- 确保 PC 服务器正在运行。
- 设置 ADB 反向端口转发: 将安卓设备的 12345 端口转发到 PC 的 12345 端口。将安卓设备通过 USB 连接到 PC,并执行以下命令:
adb reverse tcp:12345 tcp:12345
- 启动安卓客户端: 在安卓设备上启动
LowLatencyInput应用。它会尝试连接到127.0.0.1:12345(即通过 ADB 转发连接到 PC 服务器)。连接成功后,服务器端会显示 "新的连接: ..."。
本项目采用 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) 许可证。