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.
This commit is contained in:
		
							parent
							
								
									94e0a0058a
								
							
						
					
					
						commit
						4b229cb5ef
					
				
					 4 changed files with 20 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -258,16 +258,14 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData,
 | 
			
		|||
					if (ParserData->LargestReportSizeBits < NewReportItem.BitOffset)
 | 
			
		||||
					  ParserData->LargestReportSizeBits = NewReportItem.BitOffset;
 | 
			
		||||
 | 
			
		||||
					if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS)
 | 
			
		||||
					  return HID_PARSE_InsufficientReportItems;
 | 
			
		||||
 | 
			
		||||
					memcpy(&ParserData->ReportItems[ParserData->TotalReportItems],
 | 
			
		||||
					       &NewReportItem, sizeof(HID_ReportItem_t));
 | 
			
		||||
 | 
			
		||||
					if (!(ReportItemData & HID_IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&NewReportItem))
 | 
			
		||||
					{
 | 
			
		||||
						if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS)
 | 
			
		||||
						  return HID_PARSE_InsufficientReportItems;
 | 
			
		||||
 | 
			
		||||
						memcpy(&ParserData->ReportItems[ParserData->TotalReportItems],
 | 
			
		||||
						       &NewReportItem, sizeof(HID_ReportItem_t));
 | 
			
		||||
 | 
			
		||||
						ParserData->TotalReportItems++;
 | 
			
		||||
					}
 | 
			
		||||
					  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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue