6576|23

38

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

BlueNRG HID例程 REPORT_DESC_SIZE 不能大于117的问题 [复制链接]

 
  本帖最后由 kangear 于 2018-4-24 22:48 编辑

按照@littleshrimp 的帖子,移植HID例程到SensorTile上,鼠标和键盘能正常工作。有一个USB TouchScreen的HID例子,将其report descriptor替换到鼠标键盘里,REPORT_DESC_SIZE也改成对应的141个(鼠标原本REPORT_DESC_SIZE有是52),结果发现手机不能搜索到BL设备了。发现此问题后,就开始在52和141之前一一排查,最终锁定,当为117时正常搜索到,当为118时则不能被搜索了。请问这是什么原因呢?我想追踪到HidDevice_Init里,但是发现其在一个静态库`BLEProfilesLib.a`里,没有源码找不到具体原因了,请问这是怎么回事呢?

程序就是使用这里的https://bbs.eeworld.com.cn/thread-521965-1-1.html

重现方法很简单,直接将REPORT_DESC_SIZE改成117搜索测试;再改成118搜索测试,就能分辨出前者能被搜索到,而后者就不能被搜索到了。当然,大于118的均不能被搜索到。我初步怀疑是在BLEProfilesLib.a中作了限制导致直接就不初始化了,从而导致手机搜索不到该蓝牙信号了。
搜索了一下,这个库中确实有117字样,但是目前还不能确信。


STM32CubeExpansion_BLE1_V2.8.0(修改好的HID例程).7z (14.56 MB, 下载次数: 17)





最新回复

谢谢分享  详情 回复 发表于 2018-7-26 12:39
点赞 关注
 
 

回复
举报

9797

帖子

24

TA的资源

版主

沙发
 
HidDevice_Init的返回true还是false
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

9797

帖子

24

TA的资源

版主

板凳
 
试试下边这个描述符Sample Report Descriptor for a Touch Digitizer Device (Windows 7)
https://docs.microsoft.com/zh-cn ... ch-digitizer-device

  1. 0x05, 0x0d,                         // USAGE_PAGE (Digitizers)
  2.     0x09, 0x04,                         // USAGE (Touch Screen)
  3.     0xa1, 0x01,                         // COLLECTION (Application)
  4.     0x85, REPORTID_TOUCH,               //   REPORT_ID (Touch)
  5.     0x09, 0x20,                         //   USAGE (Stylus)
  6.     0xa1, 0x00,                         //   COLLECTION (Physical)
  7.     0x09, 0x42,                         //     USAGE (Tip Switch)
  8.     0x15, 0x00,                         //     LOGICAL_MINIMUM (0)
  9.     0x25, 0x01,                         //     LOGICAL_MAXIMUM (1)
  10.     0x75, 0x01,                         //     REPORT_SIZE (1)
  11.     0x95, 0x01,                         //     REPORT_COUNT (1)
  12.     0x81, 0x02,                         //     INPUT (Data,Var,Abs)
  13.     0x95, 0x03,                         //     REPORT_COUNT (3)
  14.     0x81, 0x03,                         //     INPUT (Cnst,Ary,Abs)
  15.     0x09, 0x32,                         //     USAGE (In Range)
  16.     0x09, 0x47,                         //     USAGE (Confidence)
  17.     0x95, 0x02,                         //     REPORT_COUNT (2)
  18.     0x81, 0x02,                         //     INPUT (Data,Var,Abs)
  19.     0x95, 0x0a,                         //     REPORT_COUNT (10)
  20.     0x81, 0x03,                         //     INPUT (Cnst,Ary,Abs)
  21.     0x05, 0x01,                         //     USAGE_PAGE (Generic Desktop)
  22.     0x26, 0xff, 0x7f,                   //     LOGICAL_MAXIMUM (32767)
  23.     0x75, 0x10,                         //     REPORT_SIZE (16)
  24.     0x95, 0x01,                         //     REPORT_COUNT (1)
  25.     0xa4,                               //     PUSH
  26.     0x55, 0x0d,                         //     UNIT_EXPONENT (-3)
  27.     0x65, 0x00,                         //     UNIT (None)
  28.     0x09, 0x30,                         //     USAGE (X)
  29.     0x35, 0x00,                         //     PHYSICAL_MINIMUM (0)
  30.     0x46, 0x00, 0x00,                   //     PHYSICAL_MAXIMUM (0)
  31.     0x81, 0x02,                         //     INPUT (Data,Var,Abs)
  32.     0x09, 0x31,                         //     USAGE (Y)
  33.     0x46, 0x00, 0x00,                   //     PHYSICAL_MAXIMUM (0)
  34.     0x81, 0x02,                         //     INPUT (Data,Var,Abs)
  35.     0xb4,                               //     POP
  36.     0x05, 0x0d,                         //     USAGE PAGE (Digitizers)
  37.     0x09, 0x48,                         //     USAGE (Width)
  38.     0x09, 0x49,                         //     USAGE (Height)
  39.     0x95, 0x02,                         //     REPORT_COUNT (2)
  40.     0x81, 0x02,                         //     INPUT (Data,Var,Abs)
  41.     0x95, 0x01,                         //     REPORT_COUNT (1)
  42.     0x81, 0x03,                         //     INPUT (Cnst,Ary,Abs)
  43.     0xc0,                               //   END_COLLECTION
  44.     0xc0,                               // END_COLLECTION
复制代码






点评

高人,我就没有换着思路试试。主要手上有一个USB的Touch Digitizer设备,就一直想着非得和那个一样的描述符,您这直接提供了微软的DEMO,我得赶快试试。 另外:HidDevice_Init好像一直都是false呢,无论功能是  详情 回复 发表于 2018-5-4 10:49
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

4
 
littleshrimp 发表于 2018-4-25 12:22
试试下边这个描述符Sample Report Descriptor for a Touch Digitizer Device (Windows 7)
https://docs.mi ...

高人,我就没有换着思路试试。主要手上有一个USB的Touch Digitizer设备,就一直想着非得和那个一样的描述符,您这直接提供了微软的DEMO,我得赶快试试。

另外:HidDevice_Init好像一直都是false呢,无论功能是否正常。

点评

功能调出来了没  详情 回复 发表于 2018-5-12 08:13
 
 
 

回复

9797

帖子

24

TA的资源

版主

5
 
kangear 发表于 2018-5-4 10:49
高人,我就没有换着思路试试。主要手上有一个USB的Touch Digitizer设备,就一直想着非得和那个一样的描述 ...

功能调出来了没

点评

目前进度: 1. 改用你贴的描述符,其中REPORTID_TOUCH这个宏不知具体是几,我使用04,系统上已经识别到了设备 对比系统上识别到的描述符,和程序填写的一致。 2. 下一步计划能发送一些触摸事件到系统中,比如一  详情 回复 发表于 2018-7-6 11:29
之前有别的项目在做,这个项目搁置到了现在,还会接着搞。:)  详情 回复 发表于 2018-7-2 22:41
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

6
 

之前有别的项目在做,这个项目搁置到了现在,还会接着搞。:)
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

7
 

目前进度:
1. 改用你贴的描述符,其中REPORTID_TOUCH这个宏不知具体是几,我使用04,系统上已经识别到了设备
对比系统上识别到的描述符,和程序填写的一致。

2. 下一步计划能发送一些触摸事件到系统中,比如一直点击某个坐标,看系统能否收到。

点评

触摸调好了能干很多事,别踩白块流行时看网上有用继电器触点做的“外挂”挺有意思 我试过用CC2541做蓝牙触摸板没成功,后来用鼠标实现的 鼠标是相对坐标控制起来比较麻烦速度也慢  详情 回复 发表于 2018-7-6 21:41
 
 
 

回复

9797

帖子

24

TA的资源

版主

8
 
kangear 发表于 2018-7-6 11:29
目前进度:
1. 改用你贴的描述符,其中REPORTID_TOUCH这个宏不知具体是几,我使用04,系统上已经识别到 ...

触摸调好了能干很多事,别踩白块流行时看网上有用继电器触点做的“外挂”挺有意思
我试过用CC2541做蓝牙触摸板没成功,后来用鼠标实现的
鼠标是相对坐标控制起来比较麻烦速度也慢

点评

@你一下 ;}  详情 回复 发表于 2018-7-8 10:27
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

9
 
littleshrimp 发表于 2018-7-6 21:41
触摸调好了能干很多事,别踩白块流行时看网上有用继电器触点做的“外挂”挺有意思
我试过用CC2541做蓝牙 ...

目前进度:
单点触摸Demo ok了
详细见这里:https://www.jianshu.com/p/7d48111723c7效果图:

 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

10
 
本帖最后由 kangear 于 2018-7-8 10:26 编辑

呃。。。昨天回复了一下,一直没有显示出来,着实有点奇怪。回帖还要审核
可能是上一个回复里有链接有图片的原因吧,一直没有显示。目前的进度就是已经可以模拟触摸屏一个点击事件了。
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

11
 
littleshrimp 发表于 2018-7-6 21:41
触摸调好了能干很多事,别踩白块流行时看网上有用继电器触点做的“外挂”挺有意思
我试过用CC2541做蓝牙 ...

@你一下 ;}

点评

这一步特别关键 能发送点击事件后边的工作就相对简单了  详情 回复 发表于 2018-7-8 14:43
 
 
 

回复

9797

帖子

24

TA的资源

版主

12
 
kangear 发表于 2018-7-8 10:27
@你一下 ;}

这一步特别关键 能发送点击事件后边的工作就相对简单了

点评

学你搞了一下GIF,目前这个效果。:) [attachimg]362968[/attachimg]  详情 回复 发表于 2018-7-9 09:13
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

13
 
littleshrimp 发表于 2018-7-8 14:43
这一步特别关键 能发送点击事件后边的工作就相对简单了

学你搞了一下GIF,目前这个效果。:)

点评

不错,下一步准备怎么玩?  详情 回复 发表于 2018-7-9 13:45
 
 
 

回复

9797

帖子

24

TA的资源

版主

14
 
kangear 发表于 2018-7-9 09:13
学你搞了一下GIF,目前这个效果。:)

不错,下一步准备怎么玩?

点评

下一步做一个「无线触摸屏」,类似无线鼠标键盘。但是描述符不能大于117的问题需要避开有点苦恼,版主知道怎么办吗?  详情 回复 发表于 2018-7-10 13:33
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

15
 
littleshrimp 发表于 2018-7-9 13:45
不错,下一步准备怎么玩?

下一步做一个「无线触摸屏」,类似无线鼠标键盘。但是描述符不能大于117的问题需要避开有点苦恼,版主知道怎么办吗?

点评

大于117的描述符你在别的设备上试过吗? 有可能没配置正确吗?  详情 回复 发表于 2018-7-10 14:15
 
 
 

回复

9797

帖子

24

TA的资源

版主

16
 
kangear 发表于 2018-7-10 13:33
下一步做一个「无线触摸屏」,类似无线鼠标键盘。但是描述符不能大于117的问题需要避开有点苦恼,版主知 ...

大于117的描述符你在别的设备上试过吗?
有可能没配置正确吗?

点评

我这里只有一个SensorTile,没有别模块可编程测试(我看你提到过CC2541),这个SensorTile描述符多于117个就不行了,其他设备就搜索不到它了。基本确定这个SensorTile如果超过117个描述符就不能正常工作了。而多点触  详情 回复 发表于 2018-7-10 15:25
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

17
 
本帖最后由 kangear 于 2018-7-10 18:32 编辑
littleshrimp 发表于 2018-7-10 14:15
大于117的描述符你在别的设备上试过吗?
有可能没配置正确吗?

我这里只有一个SensorTile,没有别模块可编程测试(我看你提到过CC2541),这个SensorTile描述符多于117个就不行了,其他设备就搜索不到它了。基本确定这个SensorTile如果超过117个描述符就不能正常工作了。而多点触控屏的描述符一般都要大于这个数,我想拿多点触摸屏的描述符直接来用,目前还是没有办法的。
应该配置没有什么问题,只在ST提供的.a库中有搜索到“117”字样,有可能是在.a库中直接写死了吧,我猜想是这样的。
补充:我这有一个USB的多点触摸屏,其描述符是大于"117"个的。

点评

hid大于117是很正常的情况 厂家没有把库写死的理由啊 你在哪个库里搜到的?截个图看下  详情 回复 发表于 2018-7-11 19:34
 
 
 

回复

9797

帖子

24

TA的资源

版主

18
 
kangear 发表于 2018-7-10 15:25
我这里只有一个SensorTile,没有别模块可编程测试(我看你提到过CC2541),这个SensorTile描述符多于117 ...

hid大于117是很正常的情况 厂家没有把库写死的理由啊
你在哪个库里搜到的?截个图看下

点评

在这个库中搜索到的,路径如下: STM32CubeExpansion_BLE1_V2.8.0/Middlewares/ST/STM32_BlueNRG/Prof_Periph_Lib/MDK-ARM/F4/BLEProfilesLib.lib  详情 回复 发表于 2018-7-15 16:31
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

19
 
本帖最后由 kangear 于 2018-7-15 16:34 编辑
littleshrimp 发表于 2018-7-11 19:34
hid大于117是很正常的情况 厂家没有把库写死的理由啊
你在哪个库里搜到的?截个图看下

在这个库中搜索到的,路径如下:
STM32CubeExpansion_BLE1_V2.8.0/Middlewares/ST/STM32_BlueNRG/Prof_Periph_Lib/MDK-ARM/F4/BLEProfilesLib.lib使用的命令是
  1. grep 117 ./ -rn
复制代码

以二进制的方式搜索到的,感觉意义一般。
(1楼就有图,这里不贴图了,最近贴图帖子需要一直审核)




点评

一个文件里出现几个117太正常了 你试过在调试模式跟踪一下代码没?  详情 回复 发表于 2018-7-16 17:28
 
 
 

回复

9797

帖子

24

TA的资源

版主

20
 
kangear 发表于 2018-7-15 16:31
在这个库中搜索到的,路径如下:
STM32CubeExpansion_BLE1_V2.8.0/Middlewares/ST/STM32_BlueNRG/Prof_P ...

一个文件里出现几个117太正常了 你试过在调试模式跟踪一下代码没?

点评

版主大,触摸屏完整实现了,看这里:https://bbs.eeworld.com.cn/thread-651454-1-1.html  详情 回复 发表于 2018-7-20 00:12
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表