Fixed HID host Class driver report send/receive report broken when issued through the control pipe.
Make Mass Storage device Class driver accept resets at any time, rather than just after a command block has been processed. Remove the HID device parser from the boot protocol Keyboard/Mouse demos.
This commit is contained in:
		
							parent
							
								
									4dde844e9f
								
							
						
					
					
						commit
						8bb007f80b
					
				
					 9 changed files with 32 additions and 32 deletions
				
			
		| 
						 | 
				
			
			@ -87,6 +87,14 @@
 | 
			
		|||
		#define HID_BOOT_KEYBOARD_PROTOCOL   0x01
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Enum for the different types of HID reports. */
 | 
			
		||||
		enum HID_ReportItemTypes_t
 | 
			
		||||
		{
 | 
			
		||||
			REPORT_ITEM_TYPE_In                   = 1, /**< Indicates that the item is an IN report type. */
 | 
			
		||||
			REPORT_ITEM_TYPE_Out                  = 2, /**< Indicates that the item is an OUT report type. */
 | 
			
		||||
			REPORT_ITEM_TYPE_Feature              = 3, /**< Indicates that the item is a FEATURE report type. */
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		/** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID
 | 
			
		||||
		 *  specification for details on the structure elements.
 | 
			
		||||
		 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -120,21 +120,21 @@ void MS_Device_USBTask(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		|||
			}
 | 
			
		||||
			
 | 
			
		||||
			MS_Device_ReturnCommandStatus(MSInterfaceInfo);
 | 
			
		||||
			
 | 
			
		||||
			if (MSInterfaceInfo->State.IsMassStoreReset)
 | 
			
		||||
			{
 | 
			
		||||
				Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataOUTEndpointNumber);
 | 
			
		||||
				Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataINEndpointNumber);
 | 
			
		||||
				
 | 
			
		||||
				Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);
 | 
			
		||||
				Endpoint_ClearStall();
 | 
			
		||||
				Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);
 | 
			
		||||
				Endpoint_ClearStall();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	MSInterfaceInfo->State.IsMassStoreReset = false;
 | 
			
		||||
	if (MSInterfaceInfo->State.IsMassStoreReset)
 | 
			
		||||
	{
 | 
			
		||||
		Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataOUTEndpointNumber);
 | 
			
		||||
		Endpoint_ResetFIFO(MSInterfaceInfo->Config.DataINEndpointNumber);
 | 
			
		||||
		
 | 
			
		||||
		Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber);
 | 
			
		||||
		Endpoint_ClearStall();
 | 
			
		||||
		Endpoint_SelectEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber);
 | 
			
		||||
		Endpoint_ClearStall();
 | 
			
		||||
 | 
			
		||||
		MSInterfaceInfo->State.IsMassStoreReset = false;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
| 
						 | 
				
			
			@ -165,11 +165,8 @@ static bool MS_Device_ReadInCommandBlock(USB_ClassInfo_MS_Device_t* const MSInte
 | 
			
		|||
	                        StreamCallback_MS_Device_AbortOnMassStoreReset);
 | 
			
		||||
							
 | 
			
		||||
	Endpoint_ClearOUT();
 | 
			
		||||
	  
 | 
			
		||||
	if (MSInterfaceInfo->State.IsMassStoreReset)
 | 
			
		||||
	  return false;
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
	
 | 
			
		||||
	return !(MSInterfaceInfo->State.IsMassStoreReset);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void MS_Device_ReturnCommandStatus(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,7 +162,7 @@ uint8_t HID_Host_ReceiveReportByID(USB_ClassInfo_HID_Host_t* const HIDInterfaceI
 | 
			
		|||
	{
 | 
			
		||||
		.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
 | 
			
		||||
		.bRequest      = REQ_SetReport,
 | 
			
		||||
		.wValue        = ReportID,
 | 
			
		||||
		.wValue        = (REPORT_ITEM_TYPE_In << 8) | ReportID,
 | 
			
		||||
		.wIndex        = HIDInterfaceInfo->State.InterfaceNumber,
 | 
			
		||||
		.wLength       = USB_GetHIDReportSize(HIDInterfaceInfo->Config.HIDParserData, ReportID, REPORT_ITEM_TYPE_In),
 | 
			
		||||
	};
 | 
			
		||||
| 
						 | 
				
			
			@ -249,7 +249,7 @@ uint8_t HID_Host_SendReportByID(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
 | 
			
		|||
			.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
 | 
			
		||||
			.bRequest      = REQ_SetReport,
 | 
			
		||||
#if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
 | 
			
		||||
			.wValue        = ReportID,
 | 
			
		||||
			.wValue        = (REPORT_ITEM_TYPE_Out << 8) | ReportID,
 | 
			
		||||
#else
 | 
			
		||||
			.wValue        = 0,
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -158,6 +158,9 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
			/** Receives a HID IN report from the attached HID device, when a report has been received on the HID IN Data pipe.
 | 
			
		||||
			 *  
 | 
			
		||||
			 *  \note The destination buffer should be large enough to accomodate the largest report that the attached device
 | 
			
		||||
			 *        can generate.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class host configuration and state
 | 
			
		||||
			 *  \param[in] Buffer  Buffer to store the received report into
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +170,7 @@
 | 
			
		|||
			uint8_t HID_Host_ReceiveReport(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo, void* Buffer) ATTR_NON_NULL_PTR_ARG(1, 2);
 | 
			
		||||
 | 
			
		||||
			#if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
 | 
			
		||||
			/** Received a HID IN report from the attached device, by the report ID.
 | 
			
		||||
			/** Receives a HID IN report from the attached device, by the report ID.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note When the HID_HOST_BOOT_PROTOCOL_ONLY compile time token is defined, this method is unavailable.
 | 
			
		||||
			 *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,6 +62,7 @@
 | 
			
		|||
		#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
		#include "HIDReportData.h"
 | 
			
		||||
		#include "../Common/HID.h"
 | 
			
		||||
 | 
			
		||||
		#include "../../../../Common/Common.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -124,15 +125,7 @@
 | 
			
		|||
		#endif
 | 
			
		||||
 | 
			
		||||
	/* Public Interface - May be used in end-application: */
 | 
			
		||||
		/* Enums: */
 | 
			
		||||
			/** Enum for indicating what type of report item an entry in a \ref HID_ReportInfo_t ReportItem array is */
 | 
			
		||||
			enum HID_ReportItemTypes_t
 | 
			
		||||
			{
 | 
			
		||||
				REPORT_ITEM_TYPE_In                   = 0, /**< Indicates that the item is an IN report type. */
 | 
			
		||||
				REPORT_ITEM_TYPE_Out                  = 1, /**< Indicates that the item is an OUT report type. */
 | 
			
		||||
				REPORT_ITEM_TYPE_Feature              = 2, /**< Indicates that the item is a FEATURE report type. */
 | 
			
		||||
			};
 | 
			
		||||
			
 | 
			
		||||
		/* Enums: */			
 | 
			
		||||
			/** Enum for the possible error codes in the return value of the \ref USB_ProcessHIDReport() function */
 | 
			
		||||
			enum HID_Parse_ErrorCodes_t
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue