Finish Class Driver MouseHost demo. Update HID Host Class driver; boot protocol now works, still need to finish and test report protocol mode.
This commit is contained in:
		
							parent
							
								
									51566d1a81
								
							
						
					
					
						commit
						aa640330a1
					
				
					 6 changed files with 98 additions and 38 deletions
				
			
		| 
						 | 
				
			
			@ -75,7 +75,7 @@ uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo, uint
 | 
			
		|||
		if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
 | 
			
		||||
		                              DComp_HID_Host_NextHIDInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
 | 
			
		||||
		{
 | 
			
		||||
			if (FoundEndpoints == (1 << HID_FOUND_DATAPIPE_IN))
 | 
			
		||||
			if (FoundEndpoints & HID_FOUND_DATAPIPE_IN)
 | 
			
		||||
			  break;
 | 
			
		||||
				
 | 
			
		||||
			return HID_ENUMERROR_EndpointsNotFound;
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +199,8 @@ uint8_t HID_Host_ReceiveReport(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo, bool
 | 
			
		|||
 | 
			
		||||
		if ((ErrorCode = Pipe_Read_Stream_LE(Buffer, ReportSize, NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
 | 
			
		||||
		  return ErrorCode;
 | 
			
		||||
		
 | 
			
		||||
		 
 | 
			
		||||
		Pipe_ClearIN();		
 | 
			
		||||
		Pipe_Freeze();
 | 
			
		||||
		
 | 
			
		||||
		return PIPE_RWSTREAM_NoError;		
 | 
			
		||||
| 
						 | 
				
			
			@ -239,6 +240,7 @@ uint8_t HID_Host_SendReport(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo, uint8_t
 | 
			
		|||
		if ((ErrorCode = Pipe_Write_Stream_LE(Buffer, ReportSize, NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
 | 
			
		||||
		  return ErrorCode;
 | 
			
		||||
		
 | 
			
		||||
		Pipe_ClearOUT();
 | 
			
		||||
		Pipe_Freeze();
 | 
			
		||||
		
 | 
			
		||||
		return PIPE_RWSTREAM_NoError;
 | 
			
		||||
| 
						 | 
				
			
			@ -255,7 +257,7 @@ bool HID_Host_IsReportReceived(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo)
 | 
			
		|||
	Pipe_SelectPipe(HIDInterfaceInfo->Config.DataINPipeNumber);
 | 
			
		||||
	Pipe_Unfreeze();
 | 
			
		||||
	
 | 
			
		||||
	ReportReceived = Pipe_IsReadWriteAllowed();
 | 
			
		||||
	ReportReceived = Pipe_IsINReceived();
 | 
			
		||||
	
 | 
			
		||||
	Pipe_Freeze();
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			@ -264,16 +266,13 @@ bool HID_Host_IsReportReceived(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo)
 | 
			
		|||
 | 
			
		||||
uint8_t USB_HID_Host_SetBootProtocol(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if ((USB_HostState != HOST_STATE_Configured) || !(HIDInterfaceInfo->State.IsActive))
 | 
			
		||||
	  return false;
 | 
			
		||||
 | 
			
		||||
	uint8_t ErrorCode;
 | 
			
		||||
 | 
			
		||||
	USB_ControlRequest = (USB_Request_Header_t)
 | 
			
		||||
		{
 | 
			
		||||
			.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
 | 
			
		||||
			.bRequest      = REQ_SetProtocol,
 | 
			
		||||
			.wValue        = 1,
 | 
			
		||||
			.wValue        = 0,
 | 
			
		||||
			.wIndex        = HIDInterfaceInfo->State.InterfaceNumber,
 | 
			
		||||
			.wLength       = 0,
 | 
			
		||||
		};
 | 
			
		||||
| 
						 | 
				
			
			@ -293,9 +292,6 @@ uint8_t USB_HID_Host_SetBootProtocol(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo)
 | 
			
		|||
 | 
			
		||||
uint8_t USB_HID_Host_SetReportProtocol(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if ((USB_HostState != HOST_STATE_Configured) || !(HIDInterfaceInfo->State.IsActive))
 | 
			
		||||
	  return false;
 | 
			
		||||
 | 
			
		||||
	uint8_t ErrorCode;
 | 
			
		||||
 | 
			
		||||
	uint8_t HIDReportData[HIDInterfaceInfo->State.HIDReportSize];
 | 
			
		||||
| 
						 | 
				
			
			@ -318,7 +314,7 @@ uint8_t USB_HID_Host_SetReportProtocol(USB_ClassInfo_HID_Host_t* HIDInterfaceInf
 | 
			
		|||
		{
 | 
			
		||||
			.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
 | 
			
		||||
			.bRequest      = REQ_SetProtocol,
 | 
			
		||||
			.wValue        = 0,
 | 
			
		||||
			.wValue        = 1,
 | 
			
		||||
			.wIndex        = HIDInterfaceInfo->State.InterfaceNumber,
 | 
			
		||||
			.wLength       = 0,
 | 
			
		||||
		};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -246,21 +246,21 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
 | 
			
		|||
					{
 | 
			
		||||
						case TAG_MAIN_INPUT:
 | 
			
		||||
							NewReportItem.ItemType  = REPORT_ITEM_TYPE_In;
 | 
			
		||||
							NewReportItem.BitOffset = CurrReportIDInfo->BitsIn;
 | 
			
		||||
							NewReportItem.BitOffset = CurrReportIDInfo->ReportSizeBits[REPORT_ITEM_TYPE_In];
 | 
			
		||||
								
 | 
			
		||||
							CurrReportIDInfo->BitsIn += CurrStateTable->Attributes.BitSize;
 | 
			
		||||
							CurrReportIDInfo->ReportSizeBits[REPORT_ITEM_TYPE_In] += CurrStateTable->Attributes.BitSize;
 | 
			
		||||
							break;
 | 
			
		||||
						case TAG_MAIN_OUTPUT:
 | 
			
		||||
							NewReportItem.ItemType  = REPORT_ITEM_TYPE_Out;
 | 
			
		||||
							NewReportItem.BitOffset = CurrReportIDInfo->BitsOut;
 | 
			
		||||
							NewReportItem.BitOffset = CurrReportIDInfo->ReportSizeBits[REPORT_ITEM_TYPE_Out];
 | 
			
		||||
								
 | 
			
		||||
							CurrReportIDInfo->BitsOut += CurrStateTable->Attributes.BitSize;
 | 
			
		||||
							CurrReportIDInfo->ReportSizeBits[REPORT_ITEM_TYPE_Out] += CurrStateTable->Attributes.BitSize;
 | 
			
		||||
							break;
 | 
			
		||||
						case TAG_MAIN_FEATURE:
 | 
			
		||||
							NewReportItem.ItemType  = REPORT_ITEM_TYPE_Feature;						
 | 
			
		||||
							NewReportItem.BitOffset = CurrReportIDInfo->BitsFeature;
 | 
			
		||||
							NewReportItem.BitOffset = CurrReportIDInfo->ReportSizeBits[REPORT_ITEM_TYPE_Feature];
 | 
			
		||||
								
 | 
			
		||||
							CurrReportIDInfo->BitsFeature += CurrStateTable->Attributes.BitSize;
 | 
			
		||||
							CurrReportIDInfo->ReportSizeBits[REPORT_ITEM_TYPE_Feature] += CurrStateTable->Attributes.BitSize;
 | 
			
		||||
							break;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -347,17 +347,7 @@ uint16_t USB_GetHIDReportSize(HID_ReportInfo_t* const ParserData, uint8_t Report
 | 
			
		|||
	for (uint8_t i = 0; i < HID_MAX_REPORT_IDS; i++)
 | 
			
		||||
	{
 | 
			
		||||
		if (ParserData->ReportIDSizes[i].ReportID == ReportID)
 | 
			
		||||
		{
 | 
			
		||||
			switch (ReportType)
 | 
			
		||||
			{
 | 
			
		||||
				case REPORT_ITEM_TYPE_In:
 | 
			
		||||
					return ParserData->ReportIDSizes[i].BitsIn;
 | 
			
		||||
				case REPORT_ITEM_TYPE_Out:
 | 
			
		||||
					return ParserData->ReportIDSizes[i].BitsOut;
 | 
			
		||||
				case REPORT_ITEM_TYPE_Feature:
 | 
			
		||||
					return ParserData->ReportIDSizes[i].BitsFeature;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		  return ParserData->ReportIDSizes[i].ReportSizeBits[ReportType];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -208,9 +208,9 @@
 | 
			
		|||
			typedef struct
 | 
			
		||||
			{
 | 
			
		||||
				uint8_t                      ReportID; /** Report ID of the report within the HID interface */
 | 
			
		||||
				uint8_t                      BitsIn; /** Total number of IN data bits in the current report ID */
 | 
			
		||||
				uint8_t                      BitsOut; /** Total number of OUT data bits in the current report ID */
 | 
			
		||||
				uint8_t                      BitsFeature; /** Total number of FEATURE data bits in the current report ID */
 | 
			
		||||
				uint8_t                      ReportSizeBits[3]; /** Total number of bits in each report type for the given Report ID,
 | 
			
		||||
				                                                 *  indexed by the \ref HID_ReportItemTypes_t enum
 | 
			
		||||
																 */
 | 
			
		||||
			} HID_ReportSizeInfo_t;
 | 
			
		||||
 | 
			
		||||
			/** Type define for a complete processed HID report, including all report item data and collections. */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue