aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Class/Common
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-09-07 10:18:49 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-09-07 10:18:49 +0000
commit4b229cb5efbf80295432a52973b5708f54cba748 (patch)
tree676a6d3ffda6595cef85b6715dd7e048e2a11ddb /LUFA/Drivers/USB/Class/Common
parent94e0a0058a33d09cc83be94d32dcc7ab9e2eb61a (diff)
downloadlufa-4b229cb5efbf80295432a52973b5708f54cba748.tar.gz
lufa-4b229cb5efbf80295432a52973b5708f54cba748.tar.bz2
lufa-4b229cb5efbf80295432a52973b5708f54cba748.zip
Fixed optimization error in the HID Parser item value USB_SetHIDReportItemInfo() and USB_GetHIDReportItemInfo() routines if the report item was NULL (which should be allowable according to the API).
Fixed HID Parser CALLBACK_HIDParser_FilterHIDReportItem() callback function not being passed a cacheable report item pointer.
Diffstat (limited to 'LUFA/Drivers/USB/Class/Common')
-rw-r--r--LUFA/Drivers/USB/Class/Common/HIDParser.c18
-rw-r--r--LUFA/Drivers/USB/Class/Common/HIDParser.h8
2 files changed, 14 insertions, 12 deletions
diff --git a/LUFA/Drivers/USB/Class/Common/HIDParser.c b/LUFA/Drivers/USB/Class/Common/HIDParser.c
index bd0937ba8..b601d8638 100644
--- a/LUFA/Drivers/USB/Class/Common/HIDParser.c
+++ b/LUFA/Drivers/USB/Class/Common/HIDParser.c
@@ -258,16 +258,14 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData,
if (ParserData->LargestReportSizeBits < NewReportItem.BitOffset)
ParserData->LargestReportSizeBits = NewReportItem.BitOffset;
- if (!(ReportItemData & HID_IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&NewReportItem))
- {
- if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS)
- return HID_PARSE_InsufficientReportItems;
+ if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS)
+ return HID_PARSE_InsufficientReportItems;
- memcpy(&ParserData->ReportItems[ParserData->TotalReportItems],
- &NewReportItem, sizeof(HID_ReportItem_t));
+ memcpy(&ParserData->ReportItems[ParserData->TotalReportItems],
+ &NewReportItem, sizeof(HID_ReportItem_t));
- ParserData->TotalReportItems++;
- }
+ if (!(ReportItemData & HID_IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&NewReportItem))
+ ParserData->TotalReportItems++;
}
break;
@@ -291,7 +289,7 @@ bool USB_GetHIDReportItemInfo(const uint8_t* ReportData,
HID_ReportItem_t* const ReportItem)
{
if (ReportItem == NULL)
- return false;
+ return false;
uint16_t DataBitsRem = ReportItem->Attributes.BitSize;
uint16_t CurrentBit = ReportItem->BitOffset;
@@ -324,7 +322,7 @@ void USB_SetHIDReportItemInfo(uint8_t* ReportData,
HID_ReportItem_t* const ReportItem)
{
if (ReportItem == NULL)
- return;
+ return;
uint16_t DataBitsRem = ReportItem->Attributes.BitSize;
uint16_t CurrentBit = ReportItem->BitOffset;
diff --git a/LUFA/Drivers/USB/Class/Common/HIDParser.h b/LUFA/Drivers/USB/Class/Common/HIDParser.h
index 7b9dd9dba..e49121332 100644
--- a/LUFA/Drivers/USB/Class/Common/HIDParser.h
+++ b/LUFA/Drivers/USB/Class/Common/HIDParser.h
@@ -295,7 +295,7 @@
* \returns Boolean \c true if the item to retrieve was located in the given report, \c false otherwise.
*/
bool USB_GetHIDReportItemInfo(const uint8_t* ReportData,
- HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+ HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1);
/** Retrieves the given report item's value out of the \c Value member of the report item's
* \ref HID_ReportItem_t structure and places it into the correct position in the HID report
@@ -311,7 +311,7 @@
* \param[in] ReportItem Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array.
*/
void USB_SetHIDReportItemInfo(uint8_t* ReportData,
- HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+ HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1);
/** Retrieves the size of a given HID report in bytes from its Report ID.
*
@@ -331,6 +331,10 @@
* \ref 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.
*
+ * Report item pointers passed to this callback function may be cached by the user application for later use
+ * when processing report items. This provides faster report processing in the user application than would
+ * a search of the entire parsed report item table for each received or sent report.
+ *
* \param[in] CurrentItem Pointer to the current report item for user checking.
*
* \return Boolean \c true if the item should be stored into the \ref HID_ReportInfo_t structure, \c false if