2016-11-23 49 views
0

因此,我目前正在规划蓝牙低耗能设备的代码,该蓝牙低功耗设备将使用蓝牙规范中的HID over GATT配置文件进行操作。我已经阅读了HID规范1.11和使用表格1.12,但我找不到任何关于Usage_pages和Usages的最低要求使用情况。在报告描述符中HID用法的裸要求是什么?

由于我们正在实施主机和设备,因此我们的计划是为报告描述符使用供应商定义的使用页面,但由于我们的目标是快速连接和低功耗,因此我不想在GATT上的HID的报告定义阶段发送比我必须多的字节。因此,我正在考虑删除通常会标记输入/输出的所有用法,因为它们看起来只有语义。

这里是我考虑的一个样本:

Usage_Page(Vendor Defined) 
    Usage(Vendor 1) 
    Collection(Application) 
     Collection(Logical) ; First Collection and Report 
     Report_ID(1) 
     Usage_Page(Button) ; This is what the Specification seems to encourage 
     Usage_Minimum(Button 1) 
     Usage_Maximum(Button 3) 
     Logical_Minimum(0)   ; Logical Limits 
     Logical_Maximum(1) 
     Report_Size(3)  ; 3 Bits corresponding to the Buttons 
     Report_Count(1)  ; 1 of the 3 Bit set 
     Input(Data, Variable, Absolute) ;Make it an input 
     Report_Size(5) 
     Report_Count(1) 
     Input(Constant)  ; Pad the transmitted Byte 
     Collection End 
    Collection End 

当我看这个,我看到了很多,因为我不使用本地解析器,什么也不做额外的字节。这些范围从用途到甚至逻辑最小/最大值。 业内人士或者对标准有更好的认识(无论是HID或GATT还是USB HID)都会告诉我,如果我只是将报告描述符定义为仅使用顶级用法并且不使用逻辑最高配置?

回答

0

柔顺解析器应接受下列优化的描述符:

0x85, 0x01,     // ReportID (1) 
0x05, 0xff,     // UsagePage (255) 
0x09, 0x01,     // Usage (1) 
0xa1, 0x01,     // Collection (Application) 
0x25, 0x01,     //  LogicalMaximum (1) 
0x75, 0x01,     //  ReportSize (1) 
0x05, 0x09,     //  UsagePage (Button) 
0x19, 0x01,     //  UsageMinimum (Button(1)) 
0x29, 0x03,     //  UsageMaximum (Button(3)) 
0x95, 0x03,     //  ReportCount (3) 
0x81, 0x02,     //  Input (Variable) 
0xc0,       // EndCollection 
  • 逻辑最小缺省值为0,
  • 填充在最后字节的结束来免费的。

另请注意,HoG的所有中央端实现(Win,Bluez,CoreBluetooth,Bluedroid)实际上在配对发生时缓存报告描述符,以最大限度地减少重新连接时间。因此,报告描述符的实际大小并不那么重要:配对只需要一次,并且可能永远不会再次(直到设备再次配对)。

还要考虑报告描述符读取代表中央和外围设备之间交换的一些数据包(每20个字节有1个默认MTU),每往返花费2个间隔(如果两个堆栈实现都不算太差),这将围绕60ms(大多数中央连接的默认间隔为〜30ms)。因此,当您的报告描述符长度超过60个字节时,实际的发现延迟时间将会少于200毫秒......对于在设备生命周期中仅发生一次的事情而言,这并不重要。

最后,附注:您应该不要使用特定于供应商的集合类型,而是尝试使用标准类型。在大多数情况下,它将允许您的设备无人驾驶操作。

不要忘记,即使您只预见了您的硬件的应用程序特定用法,但有些人可能真的很乐意将其用于其他用途,如果是这样,无人驾驶更好,除非您想禁止第三方使用所有,但首先使用HID没有意义。 (HID是为无人驾驶操作而设计的,我仍然不明白因为制造商的懒惰而看到鼠标和游戏手柄,遥控器和按钮的驱动程序。)

+0

谢谢!这里所关心的是尽量减少配对时间,所以这完全回答了我关于报告描述符的问题。作为一个方面说明,我不介意使用预先定义的使用说明,但是,因为我真的想为单个指示器LED发送RGB数据,所以我没有发现任何内容(除了字母数字使用情况页面)预期的情况。如果有一种解决方法不涉及在数据中传输矩阵索引,我很乐意听到它。 – hanseltime

+0

事实上,RGB LED在95年似乎是科幻小说。太糟糕了,他们没有把它包含在Led页面中。我的旁注与上面发布的报告描述符相关,只有3个按钮。我必须同意字母数字显示看起来像过去没有人实现过的规范,即使[HUTRR29b](http://www.usb.org/developers/hidpage/HUTRR29b.pdf)可能允许声明一个1x1显示器,我不会推荐它。 – Nipo

相关问题