TouchScreen协议让你的安卓手机变成蓝牙HID触摸屏

本文介绍如何利用BluetoothHIDTouchScreen协议将安卓手机模拟成触摸屏,实现对其他设备的远程控制。作者分享了在Android12中运行源码的注意事项,并展示了触摸定位准确度测试,误差不超过2个像素。该技术可用于游戏辅助和自动控制场景。

相关文章:《仅通过蓝牙HID将安卓手机模拟成鼠标和键盘》

《仅通过蓝牙HID将安卓手机模拟成鼠标和键盘》:下载链接
《蓝牙HID TouchScreen协议让你的安卓手机变成触摸屏》:下载链接
《通过蓝牙将安卓手机模拟成游戏方向盘-支持旋转轮胎》:下载链接

【2022.04.21】源码在Android 12中运行注意事项:由于Android 12对蓝牙权限做了调整,取消了位置信息,增加了扫描、广告、连接权限,并且都是运行时动态权限,具体请参考https://developer.android.google.cn/about/versions/12/features/bluetooth-permissions?hl=zh-cn

去年有个哥们找我给他做个手机游戏辅助的软件,要求很简单,自动向玩游戏的安卓手机发送触摸、滑动指令。接到这个任务,我还是挺有把握的,因为在研究HID鼠标协议的时候听说有绝对位置的鼠标这个么东西,心想只要实现绝对定位的鼠标不就行了,于是当时就答应了那哥们,说没问题。经过一段时间的折腾后,我搞出了符合绝对定位鼠标的协议的数据包,在开发机win10上测试很满意,到安卓系统上测试时怎么也不行,顿时就傻眼了。。。最后不得不接受这个事实:安卓系统不支持绝对定位的鼠标。

这里要说明一下,普通鼠标和绝对位置鼠标的区别。他们的按键和滚轮都是一样的功能,只是在坐标定位上不一样。普通鼠标是相对定位;绝对位置鼠标其实并没有这么个东西,非要说有的话就想象成扣在屏幕上的触摸屏,手指点到哪里光标就在哪里。

这件事也就不了了之了,后来过年的时候没事做又捡起来搞,经过几个月的瞎折腾还就搞成了。。。这次不是绝对位置的鼠标,而是TouchScreen。TouchScreen协议其实跟我们的手机屏幕、带触摸功能的笔记本屏幕使用的协议是一样的,只是使用的是Bluetooth HID TouchScreen。显著的特点是,触摸后在屏幕上没有像鼠标那样的光标,如果不是桌面上的图标在滑动,根本看不出来(从IOS13.4开始就不支持这个协议了)。下面看看实际效果:

BT HID TouchScreen协议让你的安卓手机变成其它设备的触摸屏


说明一下,视频中左边手机屏幕出现的白色光斑不是光标,是触摸轨迹,可以在开发者模式中打开“触摸提示”。

触摸定位准确度测试1:右侧为被控手机,屏幕分辨率1080 x 2340。绿色方框中为控制手机触摸区域的触摸点,也就是要发送给被控机的触摸点(这个点必须要经过映射后发送),右侧手机屏幕上的两个数字表示屏幕被触摸的xy坐标
触摸定位准确度测试1
触摸定位准确度测试2:右侧为被控手机,屏幕分辨率1536 x 2560。绿色方框中为控制手机触摸区域的触摸点,也就是要发送给被控机的触摸点(这个点必须要经过映射后发送),右侧手机屏幕上的两个数字表示屏幕被触摸的xy坐标。由于涉及小数点和取整运算,实际发现发送的坐标最多有不超过2个像素的误差。
触摸定位准确度测试2
上面的描述中提到,控制机的坐标要经过映射才能发送给被控机,之所以要这么做是因为操作系统的相关驱动都要根据TouchScreen的报告描述符中定义的触摸范围值和实际的屏幕尺寸进行映射。那么问题来了,难道不能一比一地映射吗,我发送(10,10)系统就定位到(10,10)?答案是不能。操作系统提供的驱动要能适配所有符合协议的不同厂家不同尺寸的触摸屏,不管触摸屏的分辨率多大,手指移动到TouchScreen的右下角那么驱动所映射的坐标也要到达桌面的右下角,要达到这样的要求系统必须要将TouchScreen的坐标均匀映射到液晶屏的坐标上。

展望:基于TouchScreen这个基础功能,开发支持手势录制,脚本控制的功能,用于游戏辅助,自动刷视频等场景

相关文章:《仅通过蓝牙HID将安卓手机模拟成鼠标和键盘》

<think>好的,我现在需要回答用户关于Windows HID触摸屏设备通信协议的问题。首先,我需要确认用户的需求,他们想要了解的是协议规范,这可能包括HID协议的结构、触摸屏设备的具体描述符、数据传输格式等。 首先,我应该回顾一下HID(Human Interface Device)协议的基本知识。HID是USB标准的一部分,用于人机接口设备如键盘、鼠标、触摸屏等。HID协议定义了设备如何与主机通信,包括描述符的格式和报告的结构。根据引用[2],I2C和SMBus可能相关,但用户的问题更直接指向HID,所以可能需要集中在USB HID部分。 接下来,用户提到的是Windows环境下的HID触摸屏设备,这意味着需要涉及Windows对HID规范的具体实现和支持。可能需要参考微软的官方文档,比如Windows Hardware Compatibility Program的要求,或者HID规范文档。 然后,触摸屏作为HID设备,其报告描述符需要符合特定的用法页(Usage Page)和用法(Usage)。例如,触摸屏可能使用“Digitizer”用法页,具体的用法如“Touch Screen”或“Touch Pad”。报告描述符会定义如何传输触摸点的坐标、压力、接触状态等信息。每个触摸点的数据通常包括X、Y坐标,可能还有Z轴(压力),以及接触标识符和触摸状态(如按下或释放)。 此外,HID协议支持多点触控,这涉及到集合(Collections)的应用,如逻辑集合和物理集合,用于组织多个触摸点的数据。例如,Windows 8及以上版本支持HID多点触控协议,需要设备报告接触ID、置信度标志等字段,以确保准确跟踪多个触点。 我还需要考虑用户可能的深层需求,比如开发或调试触摸屏驱动时需要的协议细节,或是兼容性问题。用户可能需要知道如何解析HID描述符,或者如何确保设备符合Windows的要求。这时候可能需要指导他们查阅HID规范文档或微软的硬件设计指南。 关于参考资料,引用[3]提到USB主机控制器的支持,这可能与设备如何通过USB与Windows通信有关,但具体到HID协议,可能需要更专门的资源。用户可能需要访问USB-IF的官方网站获取HID规范,或者微软的硬件开发中心获取Windows-specific的要求。 最后,生成相关问题时,需要考虑用户可能的后续疑问,比如如何解析报告描述符、如何调试HID设备、多点触控的实现细节,或者与Linux系统的对比(根据用户之前的引用涉及了Linux的RTC和I2C)。不过用户当前的问题集中在Windows,所以相关问题应围绕协议规范、开发资源、调试工具等展开。</think>关于Windows HID触摸屏设备的通信协议规范,主要涉及以下核心内容: ### 一、协议基础 1. **HID协议框架** HID设备通过USB或I2C总线与系统交互,采用**报告描述符(Report Descriptor)**定义数据结构[^3]。触摸屏作为HID设备,需在描述符中声明为`Usage Page: Digitizer (0x0D)`,具体用法为`Usage: Touch Screen (0x04)`[^2]。 2. **数据传输格式** 每个触摸事件通过输入报告传输,包含: - 触点坐标(X/Y轴,通常为12-16位精度) - 触点状态(如`Tip Switch`表示接触状态) - 压力值(可选) - 触点ID(用于多点触控跟踪) $$ \text{典型数据结构} = [ContactID][X][Y][Pressure][Status] $$ ### 二、Windows特定要求 1. **兼容性规范** Windows要求HID触摸屏设备遵循: - 必须支持`Input Report`模式 - 至少支持5点触控(Windows 8+) - 报告描述符需包含`Contact Identifier`和`Confidence`字段[^1] 2. **多点触控实现** 需使用`Logical Collection`组织多个触点数据,例如: ```cpp COLLECTION (Logical) USAGE (Finger) REPORT_ID (1) // 触点1数据 USAGE (Contact Identifier) LOGICAL_MINIMUM (0) LOGICAL_MAXIMUM (9) // X/Y坐标定义... END_COLLECTION ``` ### 三、开发资源 1. **官方文档参考** - [USB-IF HID规范](https://www.usb.org/hid)(定义基础协议) - [Microsoft HID触摸屏要求](https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/touchscreen-protocol-implementation)(Windows兼容性细则) 2. **调试工具** 使用`USBlyzer`或`Wireshark`抓取HID报告数据,或通过Windows设备管理器查看HID报告描述符
评论 54
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值