HID 电源设备规范示例未指明值
HID Power Device specification example doesn't indicate values
我正在尝试报告电池供电的 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), Collection(Logical), ; Changed Status collection
Usage(Good),
UsagePage(Battery System), Usage(BelowRemainingCapacityLimit),
Usage(Charging), Usage(Discharging),
ReportSize(2), ReportCount(4), Logical Minimum (0), Logical Maximum (1),
Input(Data, Variable, Absolute, Volatile),
End Collection(), ; End of Changed Status collection
我只有一个锂聚合物电池和一个为其充电的二极管,所以我打算取出大部分其他电源设备的东西,因为我认为我可以从电池系统使用页面获得我想要的一切。结果,我正在寻找更像的东西(如果这从一开始就注定要失败,请随时告诉我):
UsagePage(Battery System), Usage(BelowRemainingCapacityLimit),
Usage(Charging), Usage(Discharging),
ReportSize(1), ReportCount(3), Logical Minimum (0), Logical Maximum (1), Unit(0),
Feature(Constant, Variable, Absolute, Volatile),
看了规范的报告,我有两个问题:
为什么 CapacityMode 只有大小 1?值是 0 - 3,那不是 2 码吗?
ChangedStatus 集合中实际包含什么?我看到报告大小是 2 而不是 1 - 是否也报告旧状态?我没有在规范的其他地方看到任何给出指示的内容。事实上,规范说 ChangedStatus 元素应该是布尔值,应该是大小 1,不是吗?
CapacityMode 可以取值 0 到 3,但如果您的设备仅支持模式 0(以毫安小时为单位测量的容量)或模式 1(以毫瓦小时为单位测量的容量),那么我认为它是可以有一个 1 位宽的字段来记录这个。您甚至可以定义一个仅存储值 0 或 1 的 8 位字段,即使它最多可以容纳 255 个值。
我认为这些示例的作者可能一直在尝试通过使 4 个状态位中的每一个都为 2 位宽来将字段对齐为 8 位 - 因此 0 将存储为 00 和1 将在报表中存储为 01。也可能是打字错误 - 我在 USB 规范中看到过许多其他示例,其中有错误。
我正在尝试报告电池供电的 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), Collection(Logical), ; Changed Status collection
Usage(Good),
UsagePage(Battery System), Usage(BelowRemainingCapacityLimit),
Usage(Charging), Usage(Discharging),
ReportSize(2), ReportCount(4), Logical Minimum (0), Logical Maximum (1),
Input(Data, Variable, Absolute, Volatile),
End Collection(), ; End of Changed Status collection
我只有一个锂聚合物电池和一个为其充电的二极管,所以我打算取出大部分其他电源设备的东西,因为我认为我可以从电池系统使用页面获得我想要的一切。结果,我正在寻找更像的东西(如果这从一开始就注定要失败,请随时告诉我):
UsagePage(Battery System), Usage(BelowRemainingCapacityLimit),
Usage(Charging), Usage(Discharging),
ReportSize(1), ReportCount(3), Logical Minimum (0), Logical Maximum (1), Unit(0),
Feature(Constant, Variable, Absolute, Volatile),
看了规范的报告,我有两个问题:
为什么 CapacityMode 只有大小 1?值是 0 - 3,那不是 2 码吗?
ChangedStatus 集合中实际包含什么?我看到报告大小是 2 而不是 1 - 是否也报告旧状态?我没有在规范的其他地方看到任何给出指示的内容。事实上,规范说 ChangedStatus 元素应该是布尔值,应该是大小 1,不是吗?
CapacityMode 可以取值 0 到 3,但如果您的设备仅支持模式 0(以毫安小时为单位测量的容量)或模式 1(以毫瓦小时为单位测量的容量),那么我认为它是可以有一个 1 位宽的字段来记录这个。您甚至可以定义一个仅存储值 0 或 1 的 8 位字段,即使它最多可以容纳 255 个值。
我认为这些示例的作者可能一直在尝试通过使 4 个状态位中的每一个都为 2 位宽来将字段对齐为 8 位 - 因此 0 将存储为 00 和1 将在报表中存储为 01。也可能是打字错误 - 我在 USB 规范中看到过许多其他示例,其中有错误。