问题描述
我正在尝试报告电池供电的 HID 设备的电池信息(插入时为 USB,否则为 BLE)。通读 Usage Tables for HID Power Devices (v1.1) 附录 A 示例中的报告描述符,我看到两个集合用于向主机报告有关电池的数据:
UsagePage(Power Device),Unit(none),Usage(PresentStatus),Collection(Logical),; Present status collection
Usage(Good),UsagePage(Battery System),Usage(BelowRemainingCapacityLimit),Usage(Charging),Usage(discharging),ReportSize(1),ReportCount(4),Logical Minimum (0),Logical Maximum (1),Unit(0),Feature(Constant,Variable,Absolute,Volatile),End Collection(),; End of Present Status collection
UsagePage(Power Device),Usage(ChangedStatus),; Changed Status collection
Usage(Good),ReportSize(2),Input(Data,; End of Changed Status collection
我只有一个 LiPo 电池和一个二极管来为其充电,所以我计划取出大部分其他电源设备的东西,因为我认为我可以从电池系统使用页面获得我想要的一切。因此,我正在寻找更像的东西(请随时告诉我这是否注定要从一开始):
UsagePage(Battery System),ReportCount(3),
查看规范中的报告,我有两个问题:
-
为什么CapacityMode 的大小只有1?值是 0 - 3,那不是大小 2 吗?
-
ChangedStatus 集合中实际包含哪些内容?我看到报告大小是 2 而不是 1 - 报告的旧状态是否也在那里?我在规范中的其他地方没有看到任何指示的内容。事实上,规范说 ChangedStatus 元素应该是布尔值,应该是大小 1,不是吗?
解决方法
-
CapacityMode 可以有 0 到 3 的值,但如果您的设备仅支持模式 0(以毫安时为单位测量的容量)或模式 1(以毫瓦时为单位测量的容量),那么我认为可以使用1 位宽字段来记录这个。您甚至可以定义一个 8 位字段,它只存储值 0 或 1,即使它最多可以保存 255 个值。
-
我认为示例的作者可能一直试图通过将 4 个状态位中的每一个设置为 2 位宽来将字段对齐为 8 位 - 因此 0 将存储为 00,而 1 将被存储作为报告中的 01。或者它可能是一个错字 - 我在 USB 规范中看到了许多其他例子,其中有错误。