读取手柄,键盘,鼠标,触摸屏等输入并转换为虚拟触屏设备输出
从release直接下载编译好的二进制程序
一般手机平板下载 go-touch-mapper_arm64
androidX86下载 go-touch-mapper_amd64
或者使用国内镜像
一般手机平板 go-touch-mapper_arm64
androidX86 go-touch-mapper_amd64
读取dev和创建uinput需要shell或者root权限
使用adb shell或者su shell运行
cd /data/local/tmp && \
curl -LJo go-touch-mapper https://vip.123pan.cn/1833788059/direct/projects/go-touch-mapper/build/go-touch-mapper_arm64 && \
chmod 777 ./go-touch-mapper && \
./go-touch-mapper -h
如果提示无curl,则需要手动下载后push到/data/local/tmp下运行
可在安卓设备的termux环境下自己编译
pkg i golang yarn -y
git clone https://github.com/RiderLty/go-touch-mapper
cd go-touch-mapper
cd go-touch-mapper-gh-pages
yarn install
yarn build
cd ..
CGO_ENABLE=0 GOOS=linux go build -ldflags="-s -w"
./go-touch-mapper -h
usage: go-touch-mapper [-h|--help] [-c|--config "<value>"] [--create-js-info]
[--pattern "<value>"] [-s|--sender "<value>"] [-m|--mode
"<value>"] [-t|--disable-mix] [-u|--disable-uinput]
[--display-id <integer>] [--tty-path "<value>"]
[--rotation <integer>] [-r|--remote-control] [-p|--port
<integer>] [-v|--v-mouse] [--v-mouse-addr "<value>"]
[--auto-release <integer>] [--measure-mode]
[-d|--debug-mode]
Arguments:
-h --help Print help information
-c --config
指定配置文件路径,如果不存在则会使用默认模板创建
--create-js-info 创建手柄配置文件模式. Default: false
--pattern 用于筛选设备名称的正则. Default: .*
-s --sender 发送本地事件到远程,输入 IP:PORT 例如
192.168.3.7:61069
或者仅输入IP使用默认端口61069. Default:
-m --mode 触摸方案,可用控制模式:
uinput: 使用uinput创建虚拟触屏
inputmanager: 通过UDS控制安卓inputManager
hid: 通过串口控制单片机模拟usb触屏
otg: 本机配置LinuxUSBgadget模拟usb触屏,设备文件为/dev/hidg0
direct: 直接写入设备真实触屏,需要root权限或者低版本安卓.
Default: uinput
-t --disable-mix
关闭触屏混合,仅在uinput与inputmanager模式生效.
Default: false
-u --disable-uinput
不再创建uinput鼠标键盘设备,仅在uinput、inputmanager与direct模式生效.
Default: false
--display-id
显示器ID,仅inputmanager模式生效,多显示器情况下可控制额外的显示器.
Default: 0
--tty-path 串口设备路径,hid模式下必须指定. Default:
--rotation
手动指定屏幕方向,仅在hid与otg模式下需要(建议使用-v).
Default: 1
-r --remote-control 是否从UDP接收远程事件. Default: false
-p --port
指定监听远程事件的UDP端口号与控制后台端口.
Default: 61069
-v --v-mouse
用触摸操作模拟鼠标,需要额光标外显示程序vPointer,同时可用于在hid与otg模式下获取屏幕方向.
Default: false
--v-mouse-addr
模拟光标显示程序地址,默认本机6533端口,输入IP:PORT,例如192.168.3.7:6533,或者仅输入IP使用默认端口6533.
Default:
--auto-release
触发视角自动释放所需的静止ms数,50ms为检查单位,置0禁用.
Default: 200
--measure-mode
显示视角移动像素计数,且可输入数值模拟滑动,方向键可微调,用于测试灵敏度.
Default: false
-d --debug-mode 打印debug信息. Default: false
./go-touch-mapper -c df.json
如果df.json不存在,会从模板创建配置文件。
默认键盘使用 ` 键,可在配置文件中手动修改,手柄固定为SELECT+RS组合键
程序运行后会显示控制后台地址http://[ip]:61070/用于编辑配置文件。
如有需要,可参照EXAMPLE.JSON手动修改配置文件
可自动检测屏幕旋转方向,始终以左上角为原点,向右为X,向下为Y
按住键盘或者手柄按键后,点击屏幕对应位置即可添加按键映射
灵敏度设置 MOUSE:SPEED:[ x , y ] float64类型,此数值也会影响右摇杆控制视角的速度
默认参数
使用uinput创建虚拟触屏,也是最推荐的模式
使用参数-m inputmanager启用
由Scrcpy修改而来,使用app_process启动
通过 Unix Domain Socket 与主程序通信控制触屏
在多显示器情况下可以使用--display-id指定displayID
只可在adb shell下使用
使用参数-m hid启用
使用ESP32-s3的HID库,创建一个外置触屏,在上位机通过串口通信的方式发送触摸指令
优点在于无需在被控设备上安装任何软件或者执行指令
-
刷入hid_touch.ino固件 点击在线烧录
-
连接设备,进入配置页面,在未配置的情况下为模拟DS5手柄,可通过短按boot简单测试,长按boot全量测试,长按5s重置。
-
DS5模式下,部分安卓设备不识别,强烈建议选择HID模式为自定义模式,然后手动配置硬件信息。写入后记得重启保存。
-
将键鼠手柄与ESP32-s3的串口连接到例如树莓派之类的linux设备上,USB口连接到被控设备
-
执行
ls /dev | grep ttyACM查看串口设备 -
使用--tty-path指定串口设备,--rotation 指定旋转方向,例如:
./go-touch-mapper -m hid --tty-path /dev/ttyACM0 -
测试回报率在1000hz以下无明显延迟,超过1000hz会出现操作丢失。
-
部分设备会出现输入迟缓的情况,建议降低输入设备的回报率到500hz或者更低。
使用参数-m otg启用
-
树莓派5,安装 pi-gadget-hid
-
通过type-c供电数据分离线,为树莓派供电同时,数据线连接主机
-
使用 --otg 参数 并且手动指定旋转方向 --rotation
-
将键鼠插在树莓派上即可控制
使用参数-m direct启用
直接写入设备的真实触屏,需要root权限
搭配-r -t -u参数,不创建任何虚拟设备,仅接收UDP事件处理后直接写入真实触屏
⚠ ⚠ ⚠ 绝对不要同时使用映射的同时手指点击屏幕
程序会识别并读取机器物理触屏输入,与键鼠混合后使用虚拟触屏输出以实现映射开启时,触摸屏幕不中断操作。
可使用-t禁用此功能
⚠ 如果是在手机端进行配置文件的修改,建议禁用,避免无法操作手机。
会将所有的设备包括远程事件混合后使用uinput创建的键鼠输出。
可使用-u禁用创建uinput键鼠
从release中下载最新的安装包,安装后授予悬浮窗权限。
运行时添加使用 -v 参数,将使用触摸操作替代鼠标,仅左键可用作点击。
适用于某些屏蔽了鼠标点击的游戏
使用串口与树莓派otg模式时候,可设置--v-mouse-addr以操控手机端显示光标
此时会忽略 --rotation 指定的方向并自动识别
joystickInfos文件夹下json文件为手柄配置文件
按照按键位置统一为XBOX手柄按键布局,可直接下载使用。
扳机键按照力度映射为5个等级的按键 BTN_LT_1 ... BTN_LT_5,等级5同时会出发BTN_LT控制信号。
没有线性扳机的手柄例如 Switch Pro controller 只有 BTN_LT 和 BTN_RT
注意⚠ :
- 手柄的按键代码在不同设备上可能有所差异
- 如果出现按键无反应的情况,建议重新创建手柄配置文件
./go-touch-mapper --create-js-info
添加 -r 参数
./go-touch-mapper -r
PC上 修改remote_control中sender("192.168.1.64:61069")为手机IP,端口默认可不修改
运行
python remote_control.py
或者下载打包的exe
在同目录创建addr.txt,写入要控制设备的IP:端口后运行
或者使用 -s 参数,将本机变为远程控制发送端
实现在另一台安卓手机或者linux设备上发送控制指令
./go-touch-mapper -s 127.0.0.1
目前开放了wasd映射轮盘的接口
编辑plugin/custom_plugin.go,实现自己的逻辑,然后编译
cd plugin
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -tags plugin -o plugin.bin
将获得的plugin.bin放在同目录下即可调用
PluginID用于指定配置文件ID,会创建pluginconfig/${pluginconfig}.json文件存储插件参数
PluginConfigTemplate指定插件需要的参数,会显示在web配置界面