先不说废话,资料先甩上来:
ATouch安卓APP源码:https://gitee.com/guanglunking/ATouch 【开发环境:AndroidStudio】
ATouch板子源码:https://gitee.com/guanglunking/ESP32_CH374U 【开发环境:Linux SDK:ESP-DIF3.2】
ATouch安卓后台程序源码: https://gitee.com/guanglunking/ATouchService 【开发环境:android-ndk-r13b】
APP下载地址: https://gitee.com/guanglunking/ATouch/blob/master/app/release/ATouchV1.0.apk
淘宝店铺:https://item.taobao.com/item.htm?id=595635571591
演示视频:https://www.bilibili.com/video/av53687214
说起这个项目的起源,可能大概也许是源于自己用手搓手机菜的抠脚吧,也或许是因为对开发的热情大过于玩的热情哈哈,反正这个东西反反复复得折腾了半年之久了,对这个东西的定位也渐渐从做一个人人都能玩的商品到单纯做一个有吃鸡功能的开发板。现在把他开源出来,也算是回报互联网上良多开源的资料教程吧!
从上面的资料可以看到有三份源码,其中两份(APP和板子源码)还可以理解,另外那个后台源码是啥东西?干啥的?这个还要从实现安卓模拟触屏的功能谈起,主要是因为手机APP无法实现触摸非己界面的功能,而我们有需要在游戏运行的时候触摸屏幕该怎么办呢?解决办法是使用android的ndk开发实现一段后台程序来对触屏文件/dev/input/event进行写操作来实现,所以相对要复杂一些,下面是整个交互的流程概括:
流程说明:
1.CH374U是一个支持8位并口或者SPI的3端USBHUB芯片,将他通过8位并口与ESP32连起来为ESP32实现了3个USB端口的操作。
2.ESP32通过CH374U模拟ADB协议与手机连接,手机需要打开开发者模式。连接成功后使用端口映射 adb forward tcp:local_port tcp:remote_port 来将安卓后台程序ATouchService与开发板ESP32_CH374U建立socket的通讯连接。
3.ESP32通过CH374U采集键盘鼠标数据(USB HID协议),如果已连接手机就将数据打包发送至手机后台程序ATouchService。
4.后台程序ATouchService将接收到的键鼠信息进行处理,如果此时APPATouch配置并开启了键鼠映射就将其键鼠对应的控制信息发送至手机的 /dev/input/event 文件模拟触摸操作。
其实东西早就做好开源出来了,后来感觉不发论坛的话没几个人看得到所以补发一下哈哈。。
更多详细的内容请看上面的博客地址和演示视频。
最近编辑记录 guanglun (2019-08-12 12:43:39)
离线
666,吃鸡手游刚出来的时候我也想过做这个,不过还是没有动手,没想到楼主实现了。支持支持
离线
劲爆好贴, 认真学习!
离线
三个 USB HOST 口?这是要控制三台手机吗?
离线
新出来的 ESP32S2据说自带 usb otg,这样是不是更容易了
离线
咱俩这想法撞的死死的, 没想到实物都做出来了
离线
"使用android的ndk开发实现一段后台程序来对触屏文件/dev/input/event进行写操作来实现",
--- 为什么不直接借用 adb 实现?
离线
"使用android的ndk开发实现一段后台程序来对触屏文件/dev/input/event进行写操作来实现",
--- 为什么不直接借用 adb 实现?
原因是adb的touch命令执行速度太慢,无法实现快速的多点触控模拟
离线
三个 USB HOST 口?这是要控制三台手机吗?
键盘鼠标插上去占用两个,手机插上去占用一个
离线
新出来的 ESP32S2据说自带 usb otg,这样是不是更容易了
就工作量来说差不多,从思路上说就简单了
离线
楼主威武
离线
我擦 牛
离线
离线
scrcpy 好像是通过ADB的机制,不需要ROOT
不知道楼主的直接读写DEV的文件方式需要ROOT吗?
离线
可以通过 f1c100s 这种 usb otg 接口,安装 adb 操作安卓手机吗?
离线
scrcpy 好像是通过ADB的机制,不需要ROOT
不知道楼主的直接读写DEV的文件方式需要ROOT吗?
我这也是ADB操作的啊,无需ROOT
离线
可以通过 f1c100s 这种 usb otg 接口,安装 adb 操作安卓手机吗?
可以的
离线
这种投屏的的模拟触摸方式太慢,没有直接写event的方式速度快
离线
触摸事件和你的原理应该一样,延迟高的是图像,scrcpy不只是投屏
移植不难,这是移植到v3s上的效果:https://whycan.cn/t_2736.html
最近编辑记录 checkout (2019-08-20 20:36:58)
离线
firstman 说:可以通过 f1c100s 这种 usb otg 接口,安装 adb 操作安卓手机吗?
可以的
请教这个驱动里面要开启哪一项呢? 然后移植一个 adb 进来?
离线
adb只是个协议
离线
adb只是个协议
buildroot 里面有 adb tools, 勾上编译一下就可以, 但是不知道USB驱动怎么弄
离线
adb的话需要主机模式,直接执行就行了,adbd是从机模式下的,另外还需配置内核,选择configfs和fuctionfs,
checkout 说:adb只是个协议
buildroot 里面有 adb tools, 勾上编译一下就可以, 但是不知道USB驱动怎么弄
离线
弄了一个 adb 执行程序进去, 然而, 并不能连到我的小米手机.
总觉得还有一个协议没有勾选.
最近编辑记录 firstman (2019-08-20 22:36:43)
离线
貌似要打上这几个补丁才行:
In kernel .config, the Android gadget drivers are enabled:
CONFIG_USB_ANDROID=y
CONFIG_USB_ANDROID_ADB=y
CONFIG_USB_ANDROID_MASS_STORAGE=y
CONFIG_USB_ANDROID_RNDIS=y
CONFIG_USB_ANDROID_RNDIS_WCEIS=y
https://community.nxp.com/thread/256677
最近编辑记录 firstman (2019-08-20 22:50:17)
离线
https://android.googlesource.com/kernel/msm/+/android-5.1.0_r0.6/drivers/usb/gadget/f_adb.c
https://android.googlesource.com/kernel/msm/+/android-5.1.0_r0.6/drivers/usb/gadget/f_mtp.c
https://android.googlesource.com/kernel/msm/+/android-5.1.0_r0.6/drivers/usb/gadget/android.c
应该就是这些文件了, 要 patch 进来才行, 改天继续.
离线
你首先要分清adb和adbd的区别。adbd是手机里面跑的那种,需要支持gadget,adb是主机模式下跑的,用来连接手机
https://whycan.cn/files/members/1574/QQ20190820223450.png
弄了一个 adb 执行程序进去, 然而, 并不能连到我的小米手机.
总觉得还有一个协议没有勾选.
离线
触摸事件和你的原理应该一样,延迟高的是图像,scrcpy不只是投屏
移植不难,这是移植到v3s上的效果:https://whycan.cn/t_2736.html
这个应该是只读了event吧?
离线
还可以远程控制的,反向控制手机
checkout 说:触摸事件和你的原理应该一样,延迟高的是图像,scrcpy不只是投屏
移植不难,这是移植到v3s上的效果:https://whycan.cn/t_2736.html这个应该是只读了event吧?
最近编辑记录 checkout (2019-08-21 09:52:02)
离线
还可以远程控制的,反向控制手机
guanglun 说:checkout 说:触摸事件和你的原理应该一样,延迟高的是图像,scrcpy不只是投屏
移植不难,这是移植到v3s上的效果:https://whycan.cn/t_2736.html这个应该是只读了event吧?
那不错 如果能多点控制就更好了
离线
能直接从USB 获得屏幕图像吗?
离线
楼主是用ESP32实现了adb协议吗 那针对不同手机驱动如何解决
离线
没在手机上玩过吃鸡,就想知道都用键盘和鼠标了,何不直接在电脑上玩andorid游戏模拟器
离线
好贴。值得MARK一下。
离线
看来起很不错,加油~
离线