如何使用 Report ID 发送 HID 中的键盘值?
How to send Keyboard values in HID with Report ID?
我正在使用以下描述符通过 HID 蓝牙从键盘发送键值。
USAGE_PAGE(1), 0x01,
USAGE(1), 0x06,
COLLECTION(1), 0x01,
REPORT_ID(1), 0x02,
USAGE_PAGE(1), 0x07,
USAGE_MINIMUM(1), (byte) 0xE0,
USAGE_MAXIMUM(1), (byte) 0xE7,
LOGICAL_MINIMUM(1), 0x00,
LOGICAL_MAXIMUM(1), 0x01,
REPORT_SIZE(1), 0x01,
REPORT_COUNT(1), 0x08,
INPUT(1), 0x02,
REPORT_COUNT(1), 0x01,
REPORT_SIZE(1), 0x08,
INPUT(1), 0x01,
REPORT_COUNT(1), 0x05,
REPORT_SIZE(1), 0x01,
USAGE_PAGE(1), 0x08,
USAGE_MINIMUM(1), 0x01,
USAGE_MAXIMUM(1), 0x05,
OUTPUT(1), 0x02,
REPORT_COUNT(1), 0x01,
REPORT_SIZE(1), 0x03,
OUTPUT(1), 0x01,
REPORT_COUNT(1), 0x06,
REPORT_SIZE(1), 0x08,
LOGICAL_MINIMUM(1), 0x00,
LOGICAL_MAXIMUM(1), 0x65,
USAGE_PAGE(1), 0x07,
USAGE_MINIMUM(1), 0x00,
USAGE_MAXIMUM(1), 0x65,
INPUT(1), 0x00,
END_COLLECTION(0),
我面临的问题是我能够发送数据,但相同的数据被发送了无数次。
如果我将修饰符字节设置为 2,那么一切正常,即大写的后者被发送给特定的按键,但如果我发送小写的后者数据被发送无限次。
当您忘记松开按键时,似乎收到了 "infinite number" 次击键。该数组包含当前按下的键(在您的情况下最多 6 个)。您需要清除 "no event indicated" 索引的缓冲区,在您的例子中是 0x00。如果你不这样做,那么主机很可能会实现 "typ-o-matic" 键重复功能......即你在普通键盘上按住某个键时看到的内容。
我正在使用以下描述符通过 HID 蓝牙从键盘发送键值。
USAGE_PAGE(1), 0x01,
USAGE(1), 0x06,
COLLECTION(1), 0x01,
REPORT_ID(1), 0x02,
USAGE_PAGE(1), 0x07,
USAGE_MINIMUM(1), (byte) 0xE0,
USAGE_MAXIMUM(1), (byte) 0xE7,
LOGICAL_MINIMUM(1), 0x00,
LOGICAL_MAXIMUM(1), 0x01,
REPORT_SIZE(1), 0x01,
REPORT_COUNT(1), 0x08,
INPUT(1), 0x02,
REPORT_COUNT(1), 0x01,
REPORT_SIZE(1), 0x08,
INPUT(1), 0x01,
REPORT_COUNT(1), 0x05,
REPORT_SIZE(1), 0x01,
USAGE_PAGE(1), 0x08,
USAGE_MINIMUM(1), 0x01,
USAGE_MAXIMUM(1), 0x05,
OUTPUT(1), 0x02,
REPORT_COUNT(1), 0x01,
REPORT_SIZE(1), 0x03,
OUTPUT(1), 0x01,
REPORT_COUNT(1), 0x06,
REPORT_SIZE(1), 0x08,
LOGICAL_MINIMUM(1), 0x00,
LOGICAL_MAXIMUM(1), 0x65,
USAGE_PAGE(1), 0x07,
USAGE_MINIMUM(1), 0x00,
USAGE_MAXIMUM(1), 0x65,
INPUT(1), 0x00,
END_COLLECTION(0),
我面临的问题是我能够发送数据,但相同的数据被发送了无数次。
如果我将修饰符字节设置为 2,那么一切正常,即大写的后者被发送给特定的按键,但如果我发送小写的后者数据被发送无限次。
当您忘记松开按键时,似乎收到了 "infinite number" 次击键。该数组包含当前按下的键(在您的情况下最多 6 个)。您需要清除 "no event indicated" 索引的缓冲区,在您的例子中是 0x00。如果你不这样做,那么主机很可能会实现 "typ-o-matic" 键重复功能......即你在普通键盘上按住某个键时看到的内容。