X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/524decdeb3a0a4c7adbeb4af906556e7bc6dd77c..4dde844e9f12bca880f88f952231a614d5d912ad:/LUFA/Drivers/USB/Class/Host/HIDParser.h?ds=sidebyside diff --git a/LUFA/Drivers/USB/Class/Host/HIDParser.h b/LUFA/Drivers/USB/Class/Host/HIDParser.h index d9adae34d..751e40e0e 100644 --- a/LUFA/Drivers/USB/Class/Host/HIDParser.h +++ b/LUFA/Drivers/USB/Class/Host/HIDParser.h @@ -99,7 +99,7 @@ * overridden by defining HID_MAX_COLLECTIONS to another value in the user project makefile, passing * the define to the compiler using the -D compiler switch. */ - #define HID_MAX_COLLECTIONS 5 + #define HID_MAX_COLLECTIONS 10 #endif #if !defined(HID_MAX_REPORTITEMS) || defined(__DOXYGEN__) @@ -120,7 +120,7 @@ * 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 + #define HID_MAX_REPORT_IDS 10 #endif /* Public Interface - May be used in end-application: */ @@ -142,8 +142,9 @@ HID_PARSE_InsufficientReportItems = 3, /**< More than \ref HID_MAX_REPORTITEMS report items in the report. */ 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_UsageListOverflow = 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. */ + HID_PARSE_NoUnfilteredReportItems = 8, /**< All report items from the device were filtered by the filtering callback routine. */ }; /* Type Defines: */ @@ -208,9 +209,9 @@ typedef struct { uint8_t ReportID; /** Report ID of the report within the HID interface */ - uint8_t BitsIn; /** Total number of IN data bits in the current report ID */ - uint8_t BitsOut; /** Total number of OUT data bits in the current report ID */ - uint8_t BitsFeature; /** Total number of FEATURE data bits in the current report ID */ + 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. */ @@ -225,8 +226,9 @@ HID_CollectionPath_t CollectionPaths[HID_MAX_COLLECTIONS]; /**< All collection items, referenced * by the report items. */ - 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 */ + 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 */ + uint16_t LargestReportSizeBits; /**< Largest report that the attached device will generate, in bits */ bool UsingReportIDs; /**< Indicates if the device has at least one REPORT ID * element in its HID report descriptor. */ @@ -269,16 +271,28 @@ 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, const uint8_t ReportID, + const uint8_t ReportType) ATTR_NON_NULL_PTR_ARG(1) ATTR_CONST; + /** 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 * no RAM is wasted storing the attributes for report items which will never be referenced by the application. * - * \param CurrentItemAttributes Pointer to the current report item attributes for user checking + * \param[in] CurrentItem Pointer to the current report item for user checking * * \return Boolean true if the item should be stored into the HID_ReportInfo_t structure, false if it should be ignored */ - bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_Attributes_t* CurrentItemAttributes); + bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem); /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__)