mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	Completion of initial CDC host mode class driver.
Adjustments to the CDC and MIDI device class drivers to use sizeof() on the actual variable being transmitted or received rather than its datatype to reduce possible mistakes.
This commit is contained in:
		
							parent
							
								
									8711dc7ced
								
							
						
					
					
						commit
						f4814771d2
					
				| @ -195,11 +195,13 @@ void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* const CDC | |||||||
| 			.bRequest      = NOTIF_SerialState, | 			.bRequest      = NOTIF_SerialState, | ||||||
| 			.wValue        = 0, | 			.wValue        = 0, | ||||||
| 			.wIndex        = 0, | 			.wIndex        = 0, | ||||||
| 			.wLength       = sizeof(uint16_t), | 			.wLength       = sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost), | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
| 	Endpoint_Write_Stream_LE(&Notification, sizeof(Notification), NO_STREAM_CALLBACK); | 	Endpoint_Write_Stream_LE(&Notification, sizeof(Notification), NO_STREAM_CALLBACK); | ||||||
| 	Endpoint_Write_Stream_LE(&CDCInterfaceInfo->State.ControlLineStates.DeviceToHost, sizeof(uint8_t), NO_STREAM_CALLBACK); | 	Endpoint_Write_Stream_LE(&CDCInterfaceInfo->State.ControlLineStates.DeviceToHost, | ||||||
|  | 	                         sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost), | ||||||
|  | 	                         NO_STREAM_CALLBACK); | ||||||
| 	Endpoint_ClearIN(); | 	Endpoint_ClearIN(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -79,7 +79,7 @@ void MIDI_Device_SendEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInterfac | |||||||
| 
 | 
 | ||||||
| 	if (Endpoint_IsReadWriteAllowed()); | 	if (Endpoint_IsReadWriteAllowed()); | ||||||
| 	{ | 	{ | ||||||
| 		Endpoint_Write_Stream_LE(Event, sizeof(MIDI_EventPacket_t), NO_STREAM_CALLBACK); | 		Endpoint_Write_Stream_LE(Event, sizeof(Event), NO_STREAM_CALLBACK); | ||||||
| 		Endpoint_ClearIN(); | 		Endpoint_ClearIN(); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @ -94,7 +94,7 @@ bool MIDI_Device_ReceiveEventPacket(USB_ClassInfo_MIDI_Device_t* const MIDIInter | |||||||
| 	if (!(Endpoint_IsReadWriteAllowed())) | 	if (!(Endpoint_IsReadWriteAllowed())) | ||||||
| 	  return false; | 	  return false; | ||||||
| 
 | 
 | ||||||
| 	Endpoint_Read_Stream_LE(Event, sizeof(MIDI_EventPacket_t), NO_STREAM_CALLBACK); | 	Endpoint_Read_Stream_LE(Event, sizeof(Event), NO_STREAM_CALLBACK); | ||||||
| 	Endpoint_ClearOUT(); | 	Endpoint_ClearOUT(); | ||||||
| 	 | 	 | ||||||
| 	return true; | 	return true; | ||||||
|  | |||||||
| @ -34,8 +34,6 @@ | |||||||
| #define  INCLUDE_FROM_CDC_CLASS_HOST_C | #define  INCLUDE_FROM_CDC_CLASS_HOST_C | ||||||
| #include "CDC.h" | #include "CDC.h" | ||||||
| 
 | 
 | ||||||
| #warning The CDC Host mode Class driver is currently incomplete and is for preview purposes only. |  | ||||||
| 
 |  | ||||||
| uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, uint16_t ConfigDescriptorSize, | uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, uint16_t ConfigDescriptorSize, | ||||||
|                                 uint8_t* ConfigDescriptorData) |                                 uint8_t* ConfigDescriptorData) | ||||||
| { | { | ||||||
| @ -198,15 +196,40 @@ static uint8_t DComp_CDC_Host_NextInterfaceCDCDataEndpoint(void* CurrentDescript | |||||||
| 
 | 
 | ||||||
| void CDC_Host_USBTask(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo) | void CDC_Host_USBTask(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo) | ||||||
| { | { | ||||||
|  | 	if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.Active)) | ||||||
|  | 	  return; | ||||||
|  | 	 | ||||||
|  | 	Pipe_SelectPipe(CDCInterfaceInfo->Config.NotificationPipeNumber);	 | ||||||
|  | 	Pipe_Unfreeze(); | ||||||
|  | 
 | ||||||
|  | 	if (Pipe_IsINReceived()) | ||||||
|  | 	{ | ||||||
|  | 		USB_Request_Header_t Notification; | ||||||
|  | 		Pipe_Read_Stream_LE(&Notification, sizeof(Notification), NO_STREAM_CALLBACK); | ||||||
|  | 		 | ||||||
|  | 		if ((Notification.bRequest      == NOTIF_SerialState) && | ||||||
|  | 		    (Notification.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))) | ||||||
|  | 		{ | ||||||
|  | 			Pipe_Read_Stream_LE(&CDCInterfaceInfo->State.ControlLineStates.DeviceToHost, | ||||||
|  | 			                    sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost), | ||||||
|  | 			                    NO_STREAM_CALLBACK); | ||||||
|  | 			 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		Pipe_ClearIN(); | ||||||
|  | 
 | ||||||
| 		EVENT_CDC_Host_ControLineStateChanged(CDCInterfaceInfo); | 		EVENT_CDC_Host_ControLineStateChanged(CDCInterfaceInfo); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|  | 	Pipe_Freeze(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| uint8_t CDC_Host_SetLineEncoding(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo) | uint8_t CDC_Host_SetLineEncoding(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo) | ||||||
| { | { | ||||||
| 	USB_ControlRequest = (USB_Request_Header_t) | 	USB_ControlRequest = (USB_Request_Header_t) | ||||||
| 	{ | 	{ | ||||||
| 		.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), | 		.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), | ||||||
| 		.bRequest      = REQ_SetControlLineState, | 		.bRequest      = REQ_SetLineEncoding, | ||||||
| 		.wValue        = 0, | 		.wValue        = 0, | ||||||
| 		.wIndex        = CDCInterfaceInfo->State.ControlInterfaceNumber, | 		.wIndex        = CDCInterfaceInfo->State.ControlInterfaceNumber, | ||||||
| 		.wLength       = sizeof(CDCInterfaceInfo->State.LineEncoding), | 		.wLength       = sizeof(CDCInterfaceInfo->State.LineEncoding), | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera