Fixed optimization error in the HID Parser item value USB_SetHIDReportItemInfo()...
authorDean Camera <dean@fourwalledcubicle.com>
Wed, 7 Sep 2011 10:18:49 +0000 (10:18 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Wed, 7 Sep 2011 10:18:49 +0000 (10:18 +0000)
Fixed HID Parser CALLBACK_HIDParser_FilterHIDReportItem() callback function not being passed a cacheable report item pointer.

LUFA/Drivers/USB/Class/Common/HIDParser.c
LUFA/Drivers/USB/Class/Common/HIDParser.h
LUFA/ManPages/ChangeLog.txt
LUFA/ManPages/FutureChanges.txt

index bd0937b..b601d86 100644 (file)
@@ -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;
index 7b9dd9d..e491213 100644 (file)
                         *  \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
                         *  \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.
                         *
                         *  \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
index b5993fd..ae9976c 100644 (file)
@@ -80,6 +80,9 @@
   *   - 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 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:
   *   - 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
index 701938b..b3527b0 100644 (file)
@@ -27,6 +27,8 @@
   *      -# Add additional standard request helper functions to host mode
   *      -# Add Dataflash_SendCommand()
   *      -# 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
   *      -# Add detailed overviews of how each demo works
   *      -# Add board overviews