OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3195|回复: 8

有没有做过STM32的USB虚拟触摸设备

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-1-11
在线时间
7 小时
发表于 2017-2-10 15:39:15 | 显示全部楼层 |阅读模式
6金钱
本帖最后由 apple5555 于 2017-2-10 16:28 编辑

一开始找了不少USB鼠标,键盘例子代码,HID描述详解,当自己要写出多点触摸屏的HID报告描述时就蒙了,资料相当地少。

经过几天的各种摸爬滚打,终于把STM32F103C8的USB被电脑识别出多点触摸设备,现在又被一个问题卡住,发现发送触摸的X,Y坐标要用某种算法算出来的才行,比如我的笔记本屏幕分辨率是1366×768,我发送屏幕坐标(788,381),十六进制(0x0314, 0x17d),直接发送这两个数据是不对的,实际上要发送(0x4a33, 0x3f81)才是正确的,我才发现它是有某种算法,但我网上找不到这个算法的原型,但我能猜到其中一半,比如我发送0x0100, 0x0000,反映在屏幕坐标是(9,0),我猜屏幕X坐标是由1366 / 0x7f * 0x01计算得来的,但如果要触点在(13,0)位置,就不知道怎么计算了。我理解为这种算法是为了让触摸屏兼容所有不同尺寸的显示屏而设计的,网上没找到这部分资料,所以我想把问题挂上去碰碰运气。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2013-10-23
在线时间
187 小时
发表于 2017-2-10 16:02:32 | 显示全部楼层
本帖最后由 ExiBQ 于 2017-2-10 16:06 编辑

1366 / 0x8000 * 256(0x0100) = 11要触点在(13,0)位置
1366/32768*312(0x138) = 13
所以需要发送(0x138,0)





回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-1-11
在线时间
7 小时
 楼主| 发表于 2017-2-10 16:06:26 | 显示全部楼层
ExiBQ 发表于 2017-2-10 16:02
1366 / 0x8000 * 0x0100 = 11

按照机器计算,应该是10才对,余数86
回复

使用道具 举报

3

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2013-10-23
在线时间
187 小时
发表于 2017-2-10 16:10:19 | 显示全部楼层
apple5555 发表于 2017-2-10 16:06
按照机器计算,应该是10才对,余数86

试试发送(0x0138,0)
应该是(13,0)或者(14,0)
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-1-11
在线时间
7 小时
 楼主| 发表于 2017-2-10 16:24:50 | 显示全部楼层
本帖最后由 apple5555 于 2017-2-10 16:26 编辑
ExiBQ 发表于 2017-2-10 16:10
试试发送(0x0138,0)
应该是(13,0)或者(14,0)

我是用第三方软件测触点坐标的,显示(12,0),我刚刚有个想法,如果它把屏幕宽度1366平均分成1366 / 128 即每10个像素点为一段,(余数86不知道会怎么处理),每一段的每一个像素点对应计算机的值就是256 / 10 (同样余数也不知道怎么处理),等会我再测试
回复

使用道具 举报

3

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2013-10-23
在线时间
187 小时
发表于 2017-2-10 16:29:01 | 显示全部楼层
apple5555 发表于 2017-2-10 16:24
我是用第三方软件测触点坐标的,显示(12,0),我刚刚有个想法,如果它把屏幕宽度1366平均分成1366 / 128  ...

多点触摸屏分辨率为什么不是0x8000(32768)呢?
对应屏幕的像素就是屏幕长(1366)x(发送的值)/32768呀
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-1-11
在线时间
7 小时
 楼主| 发表于 2017-2-10 16:31:36 | 显示全部楼层
ExiBQ 发表于 2017-2-10 16:29
多点触摸屏分辨率为什么不是0x8000(32768)呢?
对应屏幕的像素就是屏幕长(1366)x(发送的值)/32768呀

哦,咱们的计算方式是一样的,只不过我是分开成两次计算
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-1-11
在线时间
7 小时
 楼主| 发表于 2017-2-10 16:36:42 | 显示全部楼层
这样的话,我又有问题了,触摸屏怎么知道它的USB HOST分辨率是多少
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-1-11
在线时间
7 小时
 楼主| 发表于 2017-2-10 17:04:20 | 显示全部楼层
我很蛋疼的,为了验证这计算公式去测数据,如下是我所测试的数据
STM32 发送X值范围    反映在屏幕的X坐标值        相差
0x0100-0x0107          9                                        7
0x0108-0x011f          10                                        23
0x0120-0x0137         11                                        23
0x0138-0x014f          12                                        23

这组数据反映的,跟我所想的计算公式有误差,不理解这误差代表什么意思
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 00:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表