社区导航

 
查看: 964|回复: 23

[蓝牙BLE] BlueNRG HID例程 REPORT_DESC_SIZE 不能大于117的问题

[复制链接]

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-24 22:10:33 | 显示全部楼层 |阅读模式
本帖最后由 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`里,没有源码找不到具体原因了,请问这是怎么回事呢?

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

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

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


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-25 11:47:59 | 显示全部楼层
HidDevice_Init的返回true还是false
虾扯蛋


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-25 12:22:01 | 显示全部楼层
试试下边这个描述符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
虾扯蛋


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-5-4 10:49:56 | 显示全部楼层
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


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-5-12 08:13:09 来自手机 | 显示全部楼层
kangear 发表于 2018-5-4 10:49
高人,我就没有换着思路试试。主要手上有一个USB的Touch Digitizer设备,就一直想着非得和那个一样的描述 ...

功能调出来了没

点评

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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-2 22:41:44 | 显示全部楼层

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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-6 11:29:06 | 显示全部楼层

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

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

点评

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


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

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

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

点评

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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-8 10:23:35 | 显示全部楼层
本帖最后由 kangear 于 2018-7-8 10:26 编辑

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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

@你一下 ;}

点评

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


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-7-8 14:43:55 来自手机 | 显示全部楼层
kangear 发表于 2018-7-8 10:27
@你一下 ;}

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

点评

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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-9 09:13:40 | 显示全部楼层
littleshrimp 发表于 2018-7-8 14:43
这一步特别关键 能发送点击事件后边的工作就相对简单了

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

点评

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


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-7-9 13:45:58 | 显示全部楼层
kangear 发表于 2018-7-9 09:13
学你搞了一下GIF,目前这个效果。:)

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

点评

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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-10 13:33:46 | 显示全部楼层
littleshrimp 发表于 2018-7-9 13:45
不错,下一步准备怎么玩?

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

点评

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


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

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

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

点评

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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-10 15:25:04 | 显示全部楼层
本帖最后由 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


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-7-11 19:34:29 来自手机 | 显示全部楼层
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


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-15 16:31:42 | 显示全部楼层
本帖最后由 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


回复

使用道具 举报

5146

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-7-16 17:28:49 来自手机 | 显示全部楼层
kangear 发表于 2018-7-15 16:31
在这个库中搜索到的,路径如下:
STM32CubeExpansion_BLE1_V2.8.0/Middlewares/ST/STM32_BlueNRG/Prof_P ...

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

点评

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


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-8-21 06:55 , Processed in 0.503498 second(s), 16 queries , Gzip On, Redis On.

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