diff options
author | rakuco <rakuco@FreeBSD.org> | 2015-04-15 22:02:52 +0000 |
---|---|---|
committer | rakuco <rakuco@FreeBSD.org> | 2015-04-15 22:02:52 +0000 |
commit | 62386cb488bb5851e8c26f69319233cdcab89927 (patch) | |
tree | 85367f3d0f13829eb39802842187a42dd1cdd021 /lib/libc | |
parent | 77f96f7deb629f2aeb9f51a59f85b62b3fec1737 (diff) | |
download | FreeBSD-src-62386cb488bb5851e8c26f69319233cdcab89927.zip FreeBSD-src-62386cb488bb5851e8c26f69319233cdcab89927.tar.gz |
MFC r281116.
bthidd: Consider usage ranges when dealing with array inputs.
So far, we were always using HID_USAGE() to determine the Usage ID of a
certain HID report input item. This does not work as intended if a field
is an array and the allowed usages are specified with a usage range, as
HID_USAGE() will return 0. We need to use the field value as an index in
the usage range list in this case instead.
This makes the volume keys in a Microsoft Bluetooth Mobile Keyboard
5000 be properly recognized. The relevant part of the HID report looks
like this:
0xA1, 0x01, // Collection (Application)
0x85, 0x07, // Report ID (7)
0x05, 0x0C, // Usage Page (Consumer)
0x19, 0x00, // Usage Minimum (Unassigned)
0x2A, 0xFF, 0x03, // Usage Maximum (0x03FF)
0x95, 0x01, // Report Count (1)
0x75, 0x10, // Report Size (16)
0x15, 0x00, // Logical Minimum (0)
0x27, 0xFF, 0x03, 0x00, 0x00, // Logical Maximum (1023)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred
// State,No Null Position)
When a key such as "volume down" is pressed, the following data is
transferred through Interrupt In:
0x07 0xEA 0x00
Differential Revision: https://reviews.freebsd.org/D2229
Diffstat (limited to 'lib/libc')
0 files changed, 0 insertions, 0 deletions