X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/205b35d131a1cc8196786de4370cb90fec17835e..0d5e30e69fdd10cc75f62e550c32ab4baf9b0005:/LUFA/Drivers/USB/Class/Host/HIDParser.h diff --git a/LUFA/Drivers/USB/Class/Host/HIDParser.h b/LUFA/Drivers/USB/Class/Host/HIDParser.h index 8d3fbf212..74916dbb6 100644 --- a/LUFA/Drivers/USB/Class/Host/HIDParser.h +++ b/LUFA/Drivers/USB/Class/Host/HIDParser.h @@ -107,10 +107,21 @@ * in the report item descriptor and stored in the user HID Report Info structure. A large value allows * for more report items to be stored, but consumes more memory. By default this is set to 20 items, * but this can be overridden by defining HID_MAX_REPORTITEMS to another value in the user project - * makefile, passing the define to the compiler using the -D compiler switch. + * makefile, and passing the define to the compiler using the -D compiler switch. */ #define HID_MAX_REPORTITEMS 20 #endif + + #if !defined(HID_MAX_REPORT_IDS) || defined(__DOXYGEN__) + /** Constant indicating the maximum number of unique report IDs that can be processed in the report item + * descriptor for the report size information array in the user HID Report Info structure. A large value + * allows for more report ID report sizes to be stored, but consumes more memory. By default this is set + * to 5 items, but this can be overridden by defining HID_MAX_REPORT_IDS to another value in the user project + * makefile, and passing the define to the compiler using the -D compiler switch. Note that IN, OUT and FEATURE + * items sharing the same report ID consume only one size item in the array. + */ + #define HID_MAX_REPORT_IDS 5 + #endif /* Public Interface - May be used in end-application: */ /* Enums: */ @@ -132,6 +143,7 @@ HID_PARSE_UnexpectedEndCollection = 4, /**< An END COLLECTION item found without matching COLLECTION item. */ HID_PARSE_InsufficientCollectionPaths = 5, /**< More than \ref HID_MAX_COLLECTIONS collections in the report. */ HID_PARSE_UsageStackOverflow = 6, /**< More than \ref HID_USAGE_STACK_DEPTH usages listed in a row. */ + HID_PARSE_InsufficientReportIDItems = 7, /**< More than \ref HID_MAX_REPORT_IDS report IDs in the device. */ }; /* Type Defines: */ @@ -191,6 +203,15 @@ uint32_t Value; /**< Current value of the report item. */ } HID_ReportItem_t; + + /** Type define for a report item size information structure */ + typedef struct + { + uint8_t ReportID; /** Report ID of the report within the HID interface */ + uint8_t ReportSizeBits[3]; /** Total number of bits in each report type for the given Report ID, + * indexed by the \ref HID_ReportItemTypes_t enum + */ + } HID_ReportSizeInfo_t; /** Type define for a complete processed HID report, including all report item data and collections. */ typedef struct @@ -204,9 +225,11 @@ HID_CollectionPath_t CollectionPaths[HID_MAX_COLLECTIONS]; /**< All collection items, referenced * by the report items. */ - bool UsingMultipleReports; /**< Indicates if the device has at least one REPORT ID - * element in its HID report descriptor. - */ + uint8_t TotalDeviceReports; /** Number of reports within the HID interface */ + HID_ReportSizeInfo_t ReportIDSizes[HID_MAX_REPORT_IDS]; /** Report sizes for each report in the interface */ + bool UsingReportIDs; /**< Indicates if the device has at least one REPORT ID + * element in its HID report descriptor. + */ } HID_ReportInfo_t; /* Function Prototypes: */ @@ -246,6 +269,18 @@ void USB_SetHIDReportItemInfo(uint8_t* ReportData, const HID_ReportItem_t* ReportItem) ATTR_NON_NULL_PTR_ARG(1, 2); + /** Retrieves the size of a given HID report in bytes from it's Report ID. + * + * \param[in] ParserData Pointer to a \ref HID_ReportInfo_t instance containing the parser output + * \param[in] ReportID Report ID of the report whose size is to be retrieved + * \param[in] ReportType Type of the report whose size is to be determined, a valued from the + * \ref HID_ReportItemTypes_t enum + * + * \return Size of the report in bytes, or 0 if the report does not exist + */ + uint16_t USB_GetHIDReportSize(HID_ReportInfo_t* const ParserData, uint8_t ReportID, + uint8_t ReportType) ATTR_NON_NULL_PTR_ARG(1); + /** Callback routine for the HID Report Parser. This callback must be implemented by the user code when * the parser is used, to determine what report IN, OUT and FEATURE item's information is stored into the user * HID_ReportInfo_t structure. This can be used to filter only those items the application will be using, so that