**写该文档主要是为了,在工作的时候记录一下自己技术的进步。。。。。  不行 ,  太官方了其实就是为了使我的工作更具有条理一些,在以前,我的工作的步骤总是很杂乱,之所以说是杂乱,是因为我做一个小项目的解决方法,或者说要做完这个工作的所有步骤都不是线性的,即它是由多个部分拼接起来,不存在你必须做完这一步才能进入到下一步,这样的一种情况下,做小的东西还不会有问题,但有点复杂的项目就会捉襟见肘,即便最后完成了也会浪费时间,自己的技术也没有得到成长。第二就是自己以后应该也会接触到更多USB的东西,自己现在辛苦一些把整个过程详细地分析一下,那后面应该会很轻松,更重要的是,我写这个东西虽然最初的目的只是为了 记录,但其实在整个过程中,记录的过程和工作的进程是相互促进的,当我写这个文章时,它会指导我的工作,使我的工作更具有条例,那么这时文章能表达的深度也就更好,而为了文章的完整性,我会去更多地了解一些和完成项目无关的东西,也许此时无用,但也是为自己增加一点厚度吧,这是一个循环的过程,所以想要写这个文章在整个文章中,为了便于阅读,我会把整个文章分为几个帖子依次分享出来,
不会在一个帖子里面写完整个过程,那样实在不友好**

从2019年末到现在,新冠疫情持续了很久,这个导致芯片严重缺货,尤其是stm32,所以也必须找一个替代品,这个替代品便是esp32s2,我现在要做的便是把之前stm32的代码移植到esp32s2,其中用到了esp-idf开发,之前只在arduino上用过esp32的芯片,用到的也只是一些简单的功能,未使用过USB.
当usb触摸屏通过usb线接入电脑时,电脑通过电平会检测到有USB 设备插入,主机此时会对设备(usb触摸屏)进行复位,然后向设备请求设备描述符,配置描述符等一系列过程,当设备枚举完成,设备便会向主机报告触摸数据,由此便是一个usb多点触摸屏的基本工作过程。

USB HID

1.需要探究到的几个问题

在哪里主机识别到了这个设备是什么?
传上来的数据为何会被识别成触摸点,并作用于电脑?

2.多点触摸屏的枚举


在枚举过程中,主机会向设备请求一些描述符,通常HID会包含 设备描述符,配置描述符,接口描述符,HID描述符,端点描述符,报告描述符,字符串描述符

USB标准请求
在主机复位设备后,会发送一个8字节的USB标准请求给设备的端点0,每一类的设备主机都会去从从机获取设备描述符和配置描述符
以下是标准请求中每一个字节代表的含义
第一个字节

第二个字节
第四个字节

描述符类型 编号
设备描述符(DEVICE) 1
配置描述符(CONFIGURATION) 2
字符串描述符(STRING) 3
接口描述符(INTERFACE) 4
端点描述符(ENDPOINT) 5

1.设备描述符
host >> device 80 06 00 01 00 00 12 00 //06代表获取描述符,01 代表获取设备描述符,0x12 代表申请的长度
device >> host 12 01 10 01 00 00 00 (40 43)pid(33 10)vid 57 00 02 01 02 03 01
第一个区域是主机请求设备描述符,里面包含的信息有,描述符长度,描述符类型,usb协议版本,pid,vid,字符串索引等

2.配置描述符
其实配置描述符是一个合集里面包含了配置描述符,接口描述符,hid描述符,端点描述符
host >> device 80 06 00 02 00 00 22 00
device >> host:
配置描述符 : 09 02 22 00 01 01 00 E0 20 //该配置只有一个接口,对应多点触摸屏
接口描述符 : 09 04 00 00 01 03 00 00 00 //改接口的编号为0,使用了一个端点(不包括端点0),接口使用的类是HID类(0x03)
HID描述符 : 09 21 10 01 00 01 22 F5 00 //有一个下级描述符,类型是报告描述符(0x22),下级描述符长度为0xF5
端点描述符 : 07 05 81 03 40 00 01//使用的端点是端点1,最大包长为0x40
即数据是通过端点1上报上来
在第二个区域,usb标准请求是请求的是配置描述符,后面的三个描述符都不能单独返回,只能跟在配置描述符后面一起返回,

3.报告描述符
USB hid 是通过报告来传输数据的,例如本文中的多点触摸就是在枚举完成后不停地向主机发送报告来控制触摸点的,而报告描述符就是用来描述报告的结构和报告数据的用途的,主机通过报告描述符来分析报告里面数据的意义
这里有一个报告描述符生成工具跳转
上面的几个描述符是几乎每个HID设备都会有,有固定的格式,只需要把正确的信息回给主机便可以了

4.GET REPORT
在枚举过程中还会用 get report 和 set report的请求
主要是get report 我不知道是什么意思
host >> device A1 01 02 03 00 00 02 00
0 bmRequestType 1 A1h
4…0: Recipient …00001 Interface
6…5: Type .01… Class
7: Direction 1… Device-to-Host
1 bRequest 1 01h Get Report
2 wValue.LowByte 1 00h Report ID
3 wValue.HiByte 1 03h Feature Report
4 wIndex 2 0000h Interface
6 wLength 2 0040h Report Lengt
从图中可看出这个是为了获取触摸屏幕的一些东西 Feature Report 的编号是03
而返回的数据是
device >> host 0x02 0x0a //0x02代表数据长度为2, 0x0a代表多点触摸屏最大支持的触摸点数为10

3.报文结构


上面的报文(0x02,0x07,0x00,0x00,0x04,0x00,0x04,0x06,0x01,0x00,0x08,0x00,0x08,0x02)的意思就是0号手指被按下,其坐标点为(1024,1024),1号手指被释放,释放的位置坐标点为(2048,2048)

总结

回到问题1提出的问题
1.电脑在收到配置描述符后知道这是一个hid设备
2.因为有报告描述符,主机知道怎么使用USB报告上来的数据

使用esp32-s2模拟实现usb多点触摸相关推荐

  1. STM32模拟USB多点触控屏

    STM32模拟USB多点触控屏 开发准备 STM32的USB官方例程库JoyStickMouse STM32F103RC Windows7 代码修改 1.usb_pwr.c RESULT PowerO ...

  2. 【ESP32 S2 烧录AT固件 串口与USB两种方式】

    ESP32 S2 烧录AT指令固件 串口与USB两种方式 什么是AT指令? 固件和工具下载 USB完整固件烧录 串口完整固件烧录 AT测试 本文主要介绍了对ESP32 S2进行AT指令固件烧录的具体操 ...

  3. android怎么监听多点触摸_110寸高清触摸一体机

    110寸高清触摸一体机也是叫110寸会议平板,110寸高清触控一体机,110寸教学培训触控一体机,110寸展厅触摸一体机,110寸高清交互会议机,110寸展示查询触摸一体机,110寸移动壁挂触控显示屏 ...

  4. 普通电阻触摸屏多点触摸低成本解决方 转载

    苹果公司iPhone的成功将多点触摸技术推到了一个前所未有的高度,经典的弹钢琴应用程序可以支持超过5点的同时触摸,虽然这一性能并不见得有太多的实用价值,但绝对带给了用户技术无限领先的震撼感.苹果公司的 ...

  5. Ctone T01双卡双待Android 2.2的3.5英寸电容式多点触摸的GSM智能手机带GPS无线上网

    Ctone T01双卡双待Android 2.2的3.5英寸电容式多点触摸的GSM智能手机带GPS无线上网 作为中国移动的批发,bluelans.com股你最畅销的Andr​​oid还支持一个G传感器 ...

  6. 基于windows7的usb多点触控设备

    前段时间,朋友要做一个windows7的usb多点触控设备,我就帮了个小忙,负责搞定了设备 与PC通信相关的这块.整个项目我做了两个东西,一是下位机的usb设备描述符,一个是上位机的测试软件,下面我会 ...

  7. ios实例开发精品文章推荐(8.12)11个处理触摸事件和多点触摸的JS库

    11个处理触摸事件和多点触摸的JS库 触摸屏是现在所有智能手机的标配,还包括各种平板设备,而且很多桌面也慢慢在开始支持触摸操作.要开发支持触摸屏设备的Web应用,我们需要借助浏览器的触摸事件来实现. ...

  8. Android游戏开发之单点触摸与多点触摸

    Android游戏开发之单点触摸与多点触摸的响应方式 游戏开发中的触摸事件 在游戏开发中监听屏幕触摸事件须要在View中重写父类onTouchEvent方法,在重写的方法中拦截用户触摸屏幕的一些信息, ...

  9. WPF 多点触摸开发[2]:WPF触摸的几个手势的执行顺序

    原文:WPF 多点触摸开发[2]:WPF触摸的几个手势的执行顺序 前面我讲了在win7下使用模拟器,进行调试模拟多点触摸,其实际开发中这样也比较麻烦.. 要拿几个鼠标. 所以更多的人会 买个触摸套 套 ...

  10. android+触摸绘图,GitHub - lslwsjly/touchvg: 支持多点触摸的矢量绘图框架(iOS、Android、Windows)...

    关于 TouchVG TouchVG 是一个主要由C++开发的轻量级2D矢量绘图框架,可在 iOS.Android.Windows 等多个平台构建矢量绘图应用. 作者:张云贵 rhcad@hotmai ...

最新文章

  1. node.js express项目搭建
  2. stm32f103 spi slave从机模式miso需要上拉
  3. mysql text blob_mysql的text/blob和行溢出
  4. [pytorch、学习] - 3.12 权重衰减
  5. 最全BAT前端开发面试80题:算法+html+js+css!含答案大赠送!
  6. 述职答辩提问环节一般可以问些什么_陕西省高级职称评审,90%的人都“死”在答辩上?...
  7. Cesium中HeadingPitchRoll
  8. 2020网上答题拿证书的竞赛_参赛答题拿证书—全国大学生知识竞赛
  9. vs code 开发企业级python_怎样在vs code上搭建python环境?
  10. 文本编辑器Notepad++使用技巧
  11. 改变你思维模式的书单
  12. 忙碌了一整天,终于弄好了免费电脑版的KTV点歌系统,以后可以K歌了!
  13. 谷歌浏览器不支持html2.0,谷歌浏览器不能播放视频怎么办_chrome浏览器无法播放视频的解决方法-系统城...
  14. 实对称矩阵可对角化的证明
  15. TD041S485H完全兼容ISO3080, ISO3086 ISO3082, ISO3088
  16. 用遗传算法解决无线传感器轮值问题(Duty Cycle)
  17. KeyBERT进行中文关键词提取
  18. 全球及中国淀粉行业研究及十四五规划分析报告
  19. 英语国际音标之元音发音技巧
  20. distinct返回null报错_distinct

热门文章

  1. jpg照片太大怎么压缩?三步轻松搞定
  2. 【翻唱】学习日语歌 (青鸟)火影忍者 OP
  3. 360浏览器设置语言国际化
  4. python图像检测_图像检索系列——利用 Python 检测图像相似度
  5. 显著性检测(一)Saliency Detection: A Spectral Residual Approach
  6. 物理层-宽带接入技术
  7. [LeetCode] 682. Baseball Game 棒球游戏
  8. 组策略设置桌面显示计算机图标,计算机组策略应用设置大全
  9. 7 基于matplotlib的python数据可视化——导入Excel数据制作饼图
  10. const注意点(对象赋值)