Add new HID_DESCRIPTOR_VENDOR() macro, change over all projects and Device ClassDriver demos to use it.
Fix reversed byte ordering of multi-byte HID data. Added support to the HID parser for extended USAGE items that contain the usage page as well as the usage index. Removed the HID_IOF_NON_VOLATILE and HID_IOF_VOLATILE flags from HID INPUT items where the flag is invalid. Changed over HID OUTPUT items to use HID_IOF_NON_VOLATILE. Change over MagStripe project to use HID_DESCRIPTOR_KEYBOARD() for its HID report. Change over MouseHostDevice demo to use HID_DESCRIPTOR_MOUSE() for its HID report.
This commit is contained in:
parent
a852ea8e43
commit
e6dc951630
24 changed files with 257 additions and 286 deletions
|
@ -348,28 +348,28 @@
|
|||
* \param[in] Buttons Total number of buttons in the device
|
||||
*/
|
||||
#define HID_DESCRIPTOR_JOYSTICK(MinAxisVal, MaxAxisVal, Buttons) \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x04), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x01), \
|
||||
HID_RI_COLLECTION(8, 0x00), \
|
||||
HID_RI_USAGE(8, 0x30), \
|
||||
HID_RI_USAGE(8, 0x31), \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x04), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x01), \
|
||||
HID_RI_COLLECTION(8, 0x00), \
|
||||
HID_RI_USAGE(8, 0x30), \
|
||||
HID_RI_USAGE(8, 0x31), \
|
||||
HID_RI_REPORT_SIZE(8, (((((uint16_t)MinAxisVal > 0xFF) && ((uint16_t)MaxAxisVal < 0xFF)) ? 8 : 16))), \
|
||||
HID_RI_REPORT_COUNT(8, 0x02), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_END_COLLECTION(0), \
|
||||
HID_RI_USAGE_PAGE(8, 0x09), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, Buttons), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, Buttons), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x02), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
|
||||
HID_RI_END_COLLECTION(0), \
|
||||
HID_RI_USAGE_PAGE(8, 0x09), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, Buttons), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, Buttons), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
|
||||
HID_RI_REPORT_SIZE(8, (8 - (Buttons % 8))), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_END_COLLECTION(0)
|
||||
|
||||
/** \hideinitializer
|
||||
|
@ -389,38 +389,38 @@
|
|||
* \param[in] MaxKeys Number of simultaneous keys that can be reported at the one time (a value between 1 and
|
||||
* (ENDPOINT_SIZE - 2) )
|
||||
*/
|
||||
#define HID_DESCRIPTOR_KEYBOARD(MaxKeys) \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x06), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE_PAGE(8, 0x07), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0xE0), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0xE7), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_USAGE_PAGE(8, 0x08), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x05), \
|
||||
HID_RI_REPORT_COUNT(8, 0x05), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
#define HID_DESCRIPTOR_KEYBOARD(MaxKeys) \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x06), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE_PAGE(8, 0x07), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0xE0), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0xE7), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_USAGE_PAGE(8, 0x08), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x05), \
|
||||
HID_RI_REPORT_COUNT(8, 0x05), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x03), \
|
||||
HID_RI_OUTPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x65), \
|
||||
HID_RI_USAGE_PAGE(8, 0x07), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x00), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x65), \
|
||||
HID_RI_REPORT_COUNT(8, MaxKeys), \
|
||||
HID_RI_REPORT_SIZE(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x03), \
|
||||
HID_RI_OUTPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x65), \
|
||||
HID_RI_USAGE_PAGE(8, 0x07), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x00), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x65), \
|
||||
HID_RI_REPORT_COUNT(8, MaxKeys), \
|
||||
HID_RI_REPORT_SIZE(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), \
|
||||
HID_RI_END_COLLECTION(0)
|
||||
|
||||
/** \hideinitializer
|
||||
|
@ -448,34 +448,63 @@
|
|||
* \param[in] AbsoluteCoords Boolean true to use absolute X/Y coordinates (e.g. touchscreen)
|
||||
*/
|
||||
#define HID_DESCRIPTOR_MOUSE(MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons, AbsoluteCoords) \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x02), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x01), \
|
||||
HID_RI_COLLECTION(8, 0x00), \
|
||||
HID_RI_USAGE_PAGE(8, 0x09), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, Buttons), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, Buttons), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_VOLATILE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, (8 - (Buttons % 8))), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x30), \
|
||||
HID_RI_USAGE(8, 0x31), \
|
||||
HID_RI_LOGICAL_MINIMUM(16, MinAxisVal), \
|
||||
HID_RI_LOGICAL_MAXIMUM(16, MaxAxisVal), \
|
||||
HID_RI_PHYSICAL_MINIMUM(16, MinPhysicalVal), \
|
||||
HID_RI_PHYSICAL_MAXIMUM(16, MaxPhysicalVal), \
|
||||
HID_RI_REPORT_COUNT(8, 0x02), \
|
||||
HID_RI_REPORT_SIZE(8, (((((uint16_t)MinAxisVal > 0xFF) && ((uint16_t)MaxAxisVal < 0xFF)) ? 8 : 16))), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | (AbsoluteCoords ? HID_IOF_ABSOLUTE : HID_IOF_RELATIVE) | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_END_COLLECTION(0), \
|
||||
HID_RI_END_COLLECTION(0)
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x02), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x01), \
|
||||
HID_RI_COLLECTION(8, 0x00), \
|
||||
HID_RI_USAGE_PAGE(8, 0x09), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, Buttons), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, Buttons), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, (8 - (Buttons % 8))), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x30), \
|
||||
HID_RI_USAGE(8, 0x31), \
|
||||
HID_RI_LOGICAL_MINIMUM(16, MinAxisVal), \
|
||||
HID_RI_LOGICAL_MAXIMUM(16, MaxAxisVal), \
|
||||
HID_RI_PHYSICAL_MINIMUM(16, MinPhysicalVal), \
|
||||
HID_RI_PHYSICAL_MAXIMUM(16, MaxPhysicalVal), \
|
||||
HID_RI_REPORT_COUNT(8, 0x02), \
|
||||
HID_RI_REPORT_SIZE(8, (((((uint16_t)MinAxisVal > 0xFF) && ((uint16_t)MaxAxisVal < 0xFF)) ? 8 : 16))), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | (AbsoluteCoords ? HID_IOF_ABSOLUTE : HID_IOF_RELATIVE)), \
|
||||
HID_RI_END_COLLECTION(0), \
|
||||
HID_RI_END_COLLECTION(0)
|
||||
|
||||
/** \hideinitializer
|
||||
* A list of HID report item array elements that describe a typical Vendor Defined byte array HID report descriptor,
|
||||
* used for transporting abitrary data between the USB host and device via HID reports. The resulting report should be
|
||||
* a uint8_t byte array of the specified length in both Device to Host (IN) and Host to Device (OUT) directions.
|
||||
*
|
||||
* \param[in] VendorPageNum Vendor Defined HID Usage Page index, ranging from 0x00 to 0xFF
|
||||
* \param[in] CollectionUsage Vendor Usage for the encompasing report IN and OUT collection, ranging from 0x00 to 0xFF
|
||||
* \param[in] DataINUsage Vendor Usage for the IN report data, ranging from 0x00 to 0xFF
|
||||
* \param[in] DataOUTUsage Vendor Usage for the OUT report data, ranging from 0x00 to 0xFF
|
||||
* \param[in] NumBytes Length of the data IN and OUT reports
|
||||
*/
|
||||
#define HID_DESCRIPTOR_VENDOR(VendorPageNum, CollectionUsage, DataINUsage, DataOUTUsage, NumBytes) \
|
||||
HID_RI_USAGE_PAGE(16, (0xFF00 | VendorPageNum)), \
|
||||
HID_RI_USAGE(8, CollectionUsage), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE(8, DataINUsage), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0xFF), \
|
||||
HID_RI_REPORT_SIZE(8, 0x08), \
|
||||
HID_RI_REPORT_COUNT(8, NumBytes), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
|
||||
HID_RI_USAGE(8, DataOUTUsage), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0xFF), \
|
||||
HID_RI_REPORT_SIZE(8, 0x08), \
|
||||
HID_RI_REPORT_COUNT(8, NumBytes), \
|
||||
HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_END_COLLECTION(0)
|
||||
//@}
|
||||
|
||||
/* Type Defines: */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue