Skip to content

PC server component for LowLatencyInput Android client. Receives input data via TCP and shares it via Windows Shared Memory.

Notifications You must be signed in to change notification settings

shuakami/android_usb_listener

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

LowLatencyInput - PC 端服务器 (Rust)

Rust License: CC BY-NC-SA 4.0

这是 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)。

要求

如何构建和运行

  1. 克隆仓库:

    git clone https://github.com/shuakami/android_usb_listener
    cd android_usb_listener       # 进入项目目录
  2. 构建:

    cargo build --release

    可执行文件将位于 target/release/android_usb_listener.exe

  3. 运行服务器:

    cargo run --release
    # 或者直接运行编译好的文件
    # ./target/release/android_usb_listener.exe

    服务器启动后会显示 "服务器启动,监听端口 12345..."。

与安卓客户端连接

  1. 确保 PC 服务器正在运行。
  2. 设置 ADB 反向端口转发: 将安卓设备的 12345 端口转发到 PC 的 12345 端口。将安卓设备通过 USB 连接到 PC,并执行以下命令:
    adb reverse tcp:12345 tcp:12345
  3. 启动安卓客户端: 在安卓设备上启动 LowLatencyInput 应用。它会尝试连接到 127.0.0.1:12345 (即通过 ADB 转发连接到 PC 服务器)。连接成功后,服务器端会显示 "新的连接: ..."。

许可证

本项目采用 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) 许可证。

About

PC server component for LowLatencyInput Android client. Receives input data via TCP and shares it via Windows Shared Memory.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages