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
	
	 Dean Camera
						Dean Camera