Skip to content
Snippets Groups Projects
Commit 4b229cb5 authored by Dean Camera's avatar Dean Camera
Browse files

Fixed optimization error in the HID Parser item value...

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.
parent 94e0a005
No related branches found
No related tags found
No related merge requests found
...@@ -258,17 +258,15 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, ...@@ -258,17 +258,15 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData,
if (ParserData->LargestReportSizeBits < NewReportItem.BitOffset) if (ParserData->LargestReportSizeBits < NewReportItem.BitOffset)
ParserData->LargestReportSizeBits = NewReportItem.BitOffset; ParserData->LargestReportSizeBits = NewReportItem.BitOffset;
if (!(ReportItemData & HID_IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&NewReportItem))
{
if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS) if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS)
return HID_PARSE_InsufficientReportItems; return HID_PARSE_InsufficientReportItems;
memcpy(&ParserData->ReportItems[ParserData->TotalReportItems], memcpy(&ParserData->ReportItems[ParserData->TotalReportItems],
&NewReportItem, sizeof(HID_ReportItem_t)); &NewReportItem, sizeof(HID_ReportItem_t));
if (!(ReportItemData & HID_IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&NewReportItem))
ParserData->TotalReportItems++; ParserData->TotalReportItems++;
} }
}
break; break;
} }
......
...@@ -295,7 +295,7 @@ ...@@ -295,7 +295,7 @@
* \returns Boolean \c true if the item to retrieve was located in the given report, \c false otherwise. * \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, 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 /** 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 * \ref HID_ReportItem_t structure and places it into the correct position in the HID report
...@@ -311,7 +311,7 @@ ...@@ -311,7 +311,7 @@
* \param[in] ReportItem Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array. * \param[in] ReportItem Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array.
*/ */
void USB_SetHIDReportItemInfo(uint8_t* ReportData, 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. /** Retrieves the size of a given HID report in bytes from its Report ID.
* *
...@@ -331,6 +331,10 @@ ...@@ -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 * \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. * 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. * \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 * \return Boolean \c true if the item should be stored into the \ref HID_ReportInfo_t structure, \c false if
......
...@@ -80,6 +80,9 @@ ...@@ -80,6 +80,9 @@
* - Fixed USB_USBTask not being called internally in stream transfers between packets when Partial Stream Transfers are used * - Fixed USB_USBTask not being called internally in stream transfers between packets when Partial Stream Transfers are used
* - Fixed swapped TWI_ADDRESS_READ and TWI_ADDRESS_WRITE values * - Fixed swapped TWI_ADDRESS_READ and TWI_ADDRESS_WRITE values
* - Fixed TWI_ReadPacket() not releasing the TWI bus on read completion * - Fixed TWI_ReadPacket() not releasing the TWI bus on read completion
* - Fixed optimization error in the HID Parser item value USB_SetHIDReportItemInfo() and USB_GetHIDReportItemInfo() routines if the report item was
* \c 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
* - Library Applications: * - Library Applications:
* - Fixed incorrect signature in the CDC and DFU class bootloaders for the ATMEGA8U2 * - Fixed incorrect signature in the CDC and DFU class bootloaders for the ATMEGA8U2
* - Fixed KeyboardHost and KeyboardHostWithParser demos displaying incorrect values when numerical keys were pressed * - Fixed KeyboardHost and KeyboardHostWithParser demos displaying incorrect values when numerical keys were pressed
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
* -# Add additional standard request helper functions to host mode * -# Add additional standard request helper functions to host mode
* -# Add Dataflash_SendCommand() * -# Add Dataflash_SendCommand()
* -# Make HOST_DEVICE_SETTLE_DELAY_MS a global variable that can be changed * -# Make HOST_DEVICE_SETTLE_DELAY_MS a global variable that can be changed
* -# Add MANDATORY_EVENT_FUNCTIONS compile time option
* -# Add watchdog support to the library and apps/bootloaders
* - Documentation/Support * - Documentation/Support
* -# Add detailed overviews of how each demo works * -# Add detailed overviews of how each demo works
* -# Add board overviews * -# Add board overviews
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment