mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	Removed specialized Endpoint_ClearControl* and Pipe_ClearControl* macros in favour of the standard Endpoint_Clear* and Pipe_Clear* macros (Atmel have confirmed no effect from setting FIFOCON on control endpoints).
This commit is contained in:
		
							parent
							
								
									ba7cd3f22e
								
							
						
					
					
						commit
						e5e7eaee7a
					
				| @ -160,45 +160,45 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 		case REQ_GetLineEncoding: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				for (uint8_t i = 0; i < sizeof(LineCoding); i++) | ||||
| 				  Endpoint_Write_Byte(*(LineCodingData++));	 | ||||
| 				 | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| 		case REQ_SetLineEncoding: | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 
 | ||||
| 				for (uint8_t i = 0; i < sizeof(LineCoding); i++) | ||||
| 				  *(LineCodingData++) = Endpoint_Read_Byte(); | ||||
| 
 | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 	 | ||||
| 			break; | ||||
| 		case REQ_SetControlLineState: | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 	 | ||||
| 			break; | ||||
|  | ||||
| @ -163,7 +163,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 	switch (bRequest) | ||||
| 	{ | ||||
| 		case DFU_DNLOAD: | ||||
| 			Endpoint_ClearControlSETUP(); | ||||
| 			Endpoint_ClearSETUP(); | ||||
| 			 | ||||
| 			/* Check if bootloader is waiting to terminate */ | ||||
| 			if (WaitForExit) | ||||
| @ -235,7 +235,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 							/* Check if endpoint is empty - if so clear it and wait until ready for next packet */ | ||||
| 							if (!(Endpoint_BytesInEndpoint())) | ||||
| 							{ | ||||
| 								Endpoint_ClearControlOUT(); | ||||
| 								Endpoint_ClearOUT(); | ||||
| 								while (!(Endpoint_IsOUTReceived())); | ||||
| 							} | ||||
| 
 | ||||
| @ -279,7 +279,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 							/* Check if endpoint is empty - if so clear it and wait until ready for next packet */ | ||||
| 							if (!(Endpoint_BytesInEndpoint())) | ||||
| 							{ | ||||
| 								Endpoint_ClearControlOUT(); | ||||
| 								Endpoint_ClearOUT(); | ||||
| 								while (!(Endpoint_IsOUTReceived())); | ||||
| 							} | ||||
| 
 | ||||
| @ -296,15 +296,15 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			Endpoint_ClearControlOUT(); | ||||
| 			Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 			/* Acknowledge status stage */ | ||||
| 			while (!(Endpoint_IsINReady())); | ||||
| 			Endpoint_ClearControlIN(); | ||||
| 			Endpoint_ClearIN(); | ||||
| 				 | ||||
| 			break; | ||||
| 		case DFU_UPLOAD: | ||||
| 			Endpoint_ClearControlSETUP(); | ||||
| 			Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 			while (!(Endpoint_IsINReady())); | ||||
| 
 | ||||
| @ -343,7 +343,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 						/* Check if endpoint is full - if so clear it and wait until ready for next packet */ | ||||
| 						if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE) | ||||
| 						{ | ||||
| 							Endpoint_ClearControlIN(); | ||||
| 							Endpoint_ClearIN(); | ||||
| 							while (!(Endpoint_IsINReady())); | ||||
| 						} | ||||
| 
 | ||||
| @ -368,7 +368,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 						/* Check if endpoint is full - if so clear it and wait until ready for next packet */ | ||||
| 						if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE) | ||||
| 						{ | ||||
| 							Endpoint_ClearControlIN(); | ||||
| 							Endpoint_ClearIN(); | ||||
| 							while (!(Endpoint_IsINReady())); | ||||
| 						} | ||||
| 
 | ||||
| @ -384,15 +384,15 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				DFU_State = dfuIDLE; | ||||
| 			} | ||||
| 
 | ||||
| 			Endpoint_ClearControlIN(); | ||||
| 			Endpoint_ClearIN(); | ||||
| 
 | ||||
| 			/* Acknowledge status stage */ | ||||
| 			while (!(Endpoint_IsOUTReceived())); | ||||
| 			Endpoint_ClearControlOUT(); | ||||
| 			Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 			break; | ||||
| 		case DFU_GETSTATUS: | ||||
| 			Endpoint_ClearControlSETUP(); | ||||
| 			Endpoint_ClearSETUP(); | ||||
| 			 | ||||
| 			/* Write 8-bit status value */ | ||||
| 			Endpoint_Write_Byte(DFU_Status); | ||||
| @ -407,46 +407,46 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			/* Write 8-bit state string ID number */ | ||||
| 			Endpoint_Write_Byte(0); | ||||
| 
 | ||||
| 			Endpoint_ClearControlIN(); | ||||
| 			Endpoint_ClearIN(); | ||||
| 			 | ||||
| 			/* Acknowledge status stage */ | ||||
| 			while (!(Endpoint_IsOUTReceived())); | ||||
| 			Endpoint_ClearControlOUT(); | ||||
| 			Endpoint_ClearOUT(); | ||||
| 	 | ||||
| 			break;		 | ||||
| 		case DFU_CLRSTATUS: | ||||
| 			Endpoint_ClearControlSETUP(); | ||||
| 			Endpoint_ClearSETUP(); | ||||
| 			 | ||||
| 			/* Reset the status value variable to the default OK status */ | ||||
| 			DFU_Status = OK; | ||||
| 
 | ||||
| 			/* Acknowledge status stage */ | ||||
| 			while (!(Endpoint_IsINReady())); | ||||
| 			Endpoint_ClearControlIN(); | ||||
| 			Endpoint_ClearIN(); | ||||
| 			 | ||||
| 			break; | ||||
| 		case DFU_GETSTATE: | ||||
| 			Endpoint_ClearControlSETUP(); | ||||
| 			Endpoint_ClearSETUP(); | ||||
| 			 | ||||
| 			/* Write the current device state to the endpoint */ | ||||
| 			Endpoint_Write_Byte(DFU_State); | ||||
| 		 | ||||
| 			Endpoint_ClearControlIN(); | ||||
| 			Endpoint_ClearIN(); | ||||
| 			 | ||||
| 			/* Acknowledge status stage */ | ||||
| 			while (!(Endpoint_IsOUTReceived())); | ||||
| 			Endpoint_ClearControlOUT(); | ||||
| 			Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 			break; | ||||
| 		case DFU_ABORT: | ||||
| 			Endpoint_ClearControlSETUP(); | ||||
| 			Endpoint_ClearSETUP(); | ||||
| 			 | ||||
| 			/* Reset the current state variable to the default idle state */ | ||||
| 			DFU_State = dfuIDLE; | ||||
| 			 | ||||
| 			/* Acknowledge status stage */ | ||||
| 			while (!(Endpoint_IsINReady())); | ||||
| 			Endpoint_ClearControlIN(); | ||||
| 			Endpoint_ClearIN(); | ||||
| 
 | ||||
| 			break; | ||||
| 	} | ||||
| @ -463,7 +463,7 @@ static void DiscardFillerBytes(uint8_t NumberOfBytes) | ||||
| 	{ | ||||
| 		if (!(Endpoint_BytesInEndpoint())) | ||||
| 		{ | ||||
| 			Endpoint_ClearControlOUT(); | ||||
| 			Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 			/* Wait until next data packet received */ | ||||
| 			while (!(Endpoint_IsOUTReceived())); | ||||
|  | ||||
| @ -101,7 +101,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 		case REQ_SetReport: | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Wait until the command (report) has been sent by the host */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| @ -126,7 +126,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 						/* Check if endpoint is empty - if so clear it and wait until ready for next packet */ | ||||
| 						if (!(Endpoint_BytesInEndpoint())) | ||||
| 						{ | ||||
| 							Endpoint_ClearControlOUT(); | ||||
| 							Endpoint_ClearOUT(); | ||||
| 							while (!(Endpoint_IsOUTReceived())); | ||||
| 						} | ||||
| 
 | ||||
| @ -142,11 +142,11 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 					boot_rww_enable(); | ||||
| 				} | ||||
| 
 | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
|  | ||||
| @ -139,7 +139,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			{ | ||||
| 				uint16_t wValue = Endpoint_Read_Word_LE(); | ||||
| 				 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */ | ||||
| 				if (wValue) | ||||
| @ -155,7 +155,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 
 | ||||
| 			break; | ||||
|  | ||||
| @ -166,7 +166,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			{ | ||||
| 				uint16_t wValue = Endpoint_Read_Word_LE(); | ||||
| 				 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */ | ||||
| 				if (wValue) | ||||
| @ -182,7 +182,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 
 | ||||
| 			break; | ||||
|  | ||||
| @ -166,13 +166,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{	 | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Write the line coding data to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t)); | ||||
| 				 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -180,13 +180,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Read the line coding data in from the host into the global struct */ | ||||
| 				Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t)); | ||||
| 
 | ||||
| 				/* Finalize the stream transfer to clear the last packet from the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 	 | ||||
| 			break; | ||||
| @ -205,11 +205,11 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| #endif | ||||
| 				 | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 	 | ||||
| 			break; | ||||
|  | ||||
| @ -204,13 +204,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{	 | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Write the line coding data to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t)); | ||||
| 				 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -218,13 +218,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Read the line coding data in from the host into the global struct */ | ||||
| 				Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t)); | ||||
| 
 | ||||
| 				/* Finalize the stream transfer to clear the last packet from the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 	 | ||||
| 			break; | ||||
| @ -232,11 +232,11 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 	 | ||||
| 			break; | ||||
|  | ||||
| @ -165,7 +165,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 		case REQ_GetReport: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 	 | ||||
| 				uint8_t GenericData[GENERIC_REPORT_SIZE]; | ||||
| 				 | ||||
| @ -175,14 +175,14 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				Endpoint_Write_Control_Stream_LE(&GenericData, sizeof(GenericData)); | ||||
| 
 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 		 | ||||
| 			break; | ||||
| 		case REQ_SetReport: | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Wait until the generic report has been sent by the host */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| @ -194,13 +194,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				ProcessGenericHIDReport(GenericData); | ||||
| 			 | ||||
| 				/* Clear the endpoint data */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 				/* Wait until the host is ready to receive the request confirmation */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				 | ||||
| 				/* Handshake the request by sending an empty IN packet */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
|  | ||||
| @ -145,13 +145,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				if (wLength > sizeof(JoystickReportData)) | ||||
| 				  wLength = sizeof(JoystickReportData); | ||||
| 
 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 	 | ||||
| 				/* Write the report data to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(&JoystickReportData, wLength); | ||||
| 				 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 		 | ||||
| 			break; | ||||
|  | ||||
| @ -216,20 +216,20 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				if (wLength > sizeof(KeyboardReportData)) | ||||
| 				  wLength = sizeof(KeyboardReportData); | ||||
| 
 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 	 | ||||
| 				/* Write the report data to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(&KeyboardReportData, wLength); | ||||
| 				 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 		 | ||||
| 			break; | ||||
| 		case REQ_SetReport: | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Wait until the LED report has been sent by the host */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| @ -241,28 +241,28 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				ProcessLEDReport(LEDStatus); | ||||
| 			 | ||||
| 				/* Clear the endpoint data */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| 		case REQ_GetProtocol: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Write the current protocol flag to the host */ | ||||
| 				Endpoint_Write_Byte(UsingReportProtocol); | ||||
| 				 | ||||
| 				/* Send the flag to the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -272,14 +272,14 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				/* Read in the wValue parameter containing the new protocol mode */ | ||||
| 				uint16_t wValue = Endpoint_Read_Word_LE(); | ||||
| 								 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Set or clear the flag depending on what the host indicates that the current Protocol should be */ | ||||
| 				UsingReportProtocol = (wValue != 0x0000); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -289,31 +289,31 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				/* Read in the wValue parameter containing the idle period */ | ||||
| 				uint16_t wValue = Endpoint_Read_Word_LE(); | ||||
| 				 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Get idle period in MSB */ | ||||
| 				IdleCount = (wValue >> 8); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| 		case REQ_GetIdle: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{		 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Write the current idle duration to the host */ | ||||
| 				Endpoint_Write_Byte(IdleCount); | ||||
| 				 | ||||
| 				/* Send the flag to the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 
 | ||||
| 			break; | ||||
|  | ||||
| @ -167,7 +167,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				if (wLength > ReportSize) | ||||
| 				  wLength = ReportSize; | ||||
| 
 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 	 | ||||
| 				/* Write the report data to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(ReportData, wLength); | ||||
| @ -176,14 +176,14 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				memset(ReportData, 0, ReportSize); | ||||
| 				 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 		 | ||||
| 			break; | ||||
| 		case REQ_SetReport: | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Wait until the LED report has been sent by the host */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| @ -205,11 +205,11 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				LEDs_SetAllLEDs(LEDMask); | ||||
| 
 | ||||
| 				/* Clear the endpoint data */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
|  | ||||
| @ -153,30 +153,30 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 		case REQ_MassStorageReset: | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Indicate that the current transfer should be aborted */ | ||||
| 				IsMassStoreReset = true;			 | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 
 | ||||
| 			break; | ||||
| 		case REQ_GetMaxLUN: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Indicate to the host the number of supported LUNs (virtual disks) on the device */ | ||||
| 				Endpoint_Write_Byte(TOTAL_LUNS - 1); | ||||
| 				 | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
|  | ||||
| @ -206,7 +206,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				if (wLength > sizeof(MouseReportData)) | ||||
| 				  wLength = sizeof(MouseReportData); | ||||
| 
 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 	 | ||||
| 				/* Write the report data to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(&MouseReportData, wLength); | ||||
| @ -215,24 +215,24 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				memset(&MouseReportData, 0, sizeof(MouseReportData)); | ||||
| 
 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 		 | ||||
| 			break; | ||||
| 		case REQ_GetProtocol: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Write the current protocol flag to the host */ | ||||
| 				Endpoint_Write_Byte(UsingReportProtocol); | ||||
| 				 | ||||
| 				/* Send the flag to the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -242,14 +242,14 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				/* Read in the wValue parameter containing the new protocol mode */ | ||||
| 				uint16_t wValue = Endpoint_Read_Word_LE(); | ||||
| 				 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Set or clear the flag depending on what the host indicates that the current Protocol should be */ | ||||
| 				UsingReportProtocol = (wValue != 0x0000); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -259,31 +259,31 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				/* Read in the wValue parameter containing the idle period */ | ||||
| 				uint16_t wValue = Endpoint_Read_Word_LE(); | ||||
| 				 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Get idle period in MSB */ | ||||
| 				IdleCount = (wValue >> 8); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| 		case REQ_GetIdle: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{		 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Write the current idle duration to the host */ | ||||
| 				Endpoint_Write_Byte(IdleCount); | ||||
| 				 | ||||
| 				/* Send the flag to the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 
 | ||||
| 			break; | ||||
|  | ||||
| @ -156,13 +156,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				/* Clear the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Read in the RNDIS message into the message buffer */ | ||||
| 				Endpoint_Read_Control_Stream_LE(RNDISMessageBuffer, wLength); | ||||
| 
 | ||||
| 				/* Finalize the stream transfer to clear the last packet from the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 
 | ||||
| 				/* Process the RNDIS message */ | ||||
| 				ProcessRNDISControlMessage(); | ||||
| @ -185,13 +185,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				  wLength = MessageHeader->MessageLength; | ||||
| 
 | ||||
| 				/* Clear the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Write the message response data to the endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(RNDISMessageBuffer, wLength); | ||||
| 				 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 
 | ||||
| 				/* Reset the message header once again after transmission */ | ||||
| 				MessageHeader->MessageLength = 0; | ||||
|  | ||||
| @ -159,13 +159,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{	 | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Write the line coding data to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(LineCoding)); | ||||
| 				 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -173,13 +173,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Read the line coding data in from the host into the global struct */ | ||||
| 				Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(LineCoding)); | ||||
| 
 | ||||
| 				/* Finalize the stream transfer to clear the last packet from the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 				 | ||||
| 				/* Reconfigure the USART with the new settings */ | ||||
| 				ReconfigureUSART(); | ||||
| @ -201,11 +201,11 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| #endif | ||||
| 				 | ||||
| 				/* Acknowledge the SETUP packet, ready for data transfer */ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 	 | ||||
| 			break; | ||||
|  | ||||
| @ -36,14 +36,13 @@ | ||||
|   *  - The USB Host management task now saves and restores the currently selected pipe before and after the task completes | ||||
|   *  - Fixed GenericHIDHost demo report write routine incorrect for control type requests (thanks to Andrei Krainev) | ||||
|   *  - Removed Endpoint_ClearCurrentBank() and Pipe_ClearCurrentBank() in favour of new Endpoint_ClearIN(), Endpoint_ClearOUT(), | ||||
|   *    Endpoint_ClearControlIN(), Endpoint_ClearControlOUT(), Pipe_ClearIN(), Pipe_ClearOUT(), Pipe_ClearControlIN() and | ||||
|   *    Pipe_ClearControlOUT() macros (done to allow for the detection of packets of zero length) | ||||
|   *    Pipe_ClearIN() and Pipe_ClearOUT() macros (done to allow for the detection of packets of zero length) | ||||
|   *  - Renamed *_ReadWriteAllowed() macros to *_IsReadWriteAllowed() to remain consistent with the rest of the LUFA API | ||||
|   *  - Endpoint_IsSetupReceived() macro has been renamed to Endpoint_IsSETUPReceived(), Endpoint_ClearSetupReceived() macro has been | ||||
|   *    renamed to Endpoint_ClearControlSETUP(), the Pipe_IsSetupSent() macro has been renamed to Pipe_IsSETUPSent() and the | ||||
|   *    renamed to Endpoint_ClearSETUP(), the Pipe_IsSetupSent() macro has been renamed to Pipe_IsSETUPSent() and the | ||||
|   *    Pipe_ClearSetupSent() macro is no longer applicable and should be removed - changes made to compliment the new endpoint and pipe | ||||
|   *    bank management API | ||||
|   *  - Updated all demos, bootloaders and projects to use the new endpoint and pipe management APIs (thanks to Roman Thiel) | ||||
|   *  - Updated all demos, bootloaders and projects to use the new endpoint and pipe management APIs (thanks to Roman Thiel (Curetis AG)) | ||||
|   *  - Updated library doxygen documentation, added groups, changed documentation macro functions to real functions for clarity | ||||
|   *  - Removed old endpoint and pipe aliased read/write/discard routines which did not have an explicit endian specifier for clarity | ||||
|   *  - Removed the ButtLoadTag.h header file, as no one used for its intended purpose anyway | ||||
|  | ||||
| @ -108,7 +108,7 @@ void USB_Device_ProcessControlPacket(void) | ||||
| 	if (Endpoint_IsSETUPReceived()) | ||||
| 	{ | ||||
| 		Endpoint_StallTransaction(); | ||||
| 		Endpoint_ClearControlSETUP();		 | ||||
| 		Endpoint_ClearSETUP();		 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -116,11 +116,11 @@ static void USB_Device_SetAddress(void) | ||||
| { | ||||
| 	uint8_t wValue_LSB = Endpoint_Read_Byte(); | ||||
| 
 | ||||
| 	Endpoint_ClearControlSETUP(); | ||||
| 	Endpoint_ClearSETUP(); | ||||
| 	 | ||||
| 	while (!(Endpoint_IsINReady())); | ||||
| 	 | ||||
| 	Endpoint_ClearControlIN(); | ||||
| 	Endpoint_ClearIN(); | ||||
| 	 | ||||
| 	while (!(Endpoint_IsINReady())); | ||||
| 
 | ||||
| @ -152,11 +152,11 @@ static void USB_Device_SetConfiguration(void) | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	Endpoint_ClearControlSETUP(); | ||||
| 	Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 	USB_ConfigurationNumber = wValue_LSB; | ||||
| 
 | ||||
| 	Endpoint_ClearControlIN(); | ||||
| 	Endpoint_ClearIN(); | ||||
| 
 | ||||
| 	if (!(AlreadyConfigured) && USB_ConfigurationNumber) | ||||
| 	  RAISE_EVENT(USB_DeviceEnumerationComplete); | ||||
| @ -166,14 +166,14 @@ static void USB_Device_SetConfiguration(void) | ||||
| 
 | ||||
| void USB_Device_GetConfiguration(void) | ||||
| { | ||||
| 	Endpoint_ClearControlSETUP();	 | ||||
| 	Endpoint_ClearSETUP();	 | ||||
| 
 | ||||
| 	Endpoint_Write_Byte(USB_ConfigurationNumber); | ||||
| 	 | ||||
| 	Endpoint_ClearControlIN(); | ||||
| 	Endpoint_ClearIN(); | ||||
| 
 | ||||
| 	while (!(Endpoint_IsOUTReceived())); | ||||
| 	Endpoint_ClearControlOUT(); | ||||
| 	Endpoint_ClearOUT(); | ||||
| } | ||||
| 
 | ||||
| static void USB_Device_GetDescriptor(void) | ||||
| @ -190,7 +190,7 @@ static void USB_Device_GetDescriptor(void) | ||||
| 	if ((DescriptorSize = USB_GetDescriptor(wValue, wIndex, &DescriptorPointer)) == NO_DESCRIPTOR) | ||||
| 	  return; | ||||
| 	 | ||||
| 	Endpoint_ClearControlSETUP();	 | ||||
| 	Endpoint_ClearSETUP();	 | ||||
| 	 | ||||
| 	if (wLength > DescriptorSize) | ||||
| 	  wLength = DescriptorSize; | ||||
| @ -201,7 +201,7 @@ static void USB_Device_GetDescriptor(void) | ||||
| 		{ | ||||
| 			if (Endpoint_IsOUTReceived()) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 				return; | ||||
| 			}		 | ||||
| 		} | ||||
| @ -220,17 +220,17 @@ static void USB_Device_GetDescriptor(void) | ||||
| 		} | ||||
| 		 | ||||
| 		SendZLP = (Endpoint_BytesInEndpoint() == USB_ControlEndpointSize); | ||||
| 		Endpoint_ClearControlIN(); | ||||
| 		Endpoint_ClearIN(); | ||||
| 	} | ||||
| 	 | ||||
| 	if (SendZLP) | ||||
| 	{ | ||||
| 		while (!(Endpoint_IsINReady())); | ||||
| 		Endpoint_ClearControlIN(); | ||||
| 		Endpoint_ClearIN(); | ||||
| 	} | ||||
| 
 | ||||
| 	while (!(Endpoint_IsOUTReceived())); | ||||
| 	Endpoint_ClearControlOUT(); | ||||
| 	Endpoint_ClearOUT(); | ||||
| } | ||||
| 
 | ||||
| static void USB_Device_GetStatus(const uint8_t bmRequestType) | ||||
| @ -264,14 +264,14 @@ static void USB_Device_GetStatus(const uint8_t bmRequestType) | ||||
| 	} | ||||
| 	 | ||||
| 	Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);			   | ||||
| 	Endpoint_ClearControlSETUP(); | ||||
| 	Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 	Endpoint_Write_Word_LE(CurrentStatus); | ||||
| 
 | ||||
| 	Endpoint_ClearControlIN(); | ||||
| 	Endpoint_ClearIN(); | ||||
| 	 | ||||
| 	while (!(Endpoint_IsOUTReceived())); | ||||
| 	Endpoint_ClearControlOUT(); | ||||
| 	Endpoint_ClearOUT(); | ||||
| } | ||||
| 
 | ||||
| #if !defined(FEATURELESS_CONTROL_ONLY_DEVICE) | ||||
| @ -306,8 +306,8 @@ static void USB_Device_ClearSetFeature(const uint8_t bRequest, const uint8_t bmR | ||||
| 					} | ||||
| 
 | ||||
| 					Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); | ||||
| 					Endpoint_ClearControlSETUP(); | ||||
| 					Endpoint_ClearControlIN(); | ||||
| 					Endpoint_ClearSETUP(); | ||||
| 					Endpoint_ClearIN(); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
|  | ||||
| @ -307,7 +307,7 @@ uint8_t Endpoint_Write_Control_Stream_LE(const void* Buffer, uint16_t Length) | ||||
| 		} | ||||
| 		 | ||||
| 		SendZLP = (Endpoint_BytesInEndpoint() == USB_ControlEndpointSize); | ||||
| 		Endpoint_ClearControlIN(); | ||||
| 		Endpoint_ClearIN(); | ||||
| 	} | ||||
| 	 | ||||
| 	if (Endpoint_IsOUTReceived()) | ||||
| @ -316,7 +316,7 @@ uint8_t Endpoint_Write_Control_Stream_LE(const void* Buffer, uint16_t Length) | ||||
| 	if (SendZLP) | ||||
| 	{ | ||||
| 		while (!(Endpoint_IsINReady())); | ||||
| 		Endpoint_ClearControlIN(); | ||||
| 		Endpoint_ClearIN(); | ||||
| 	} | ||||
| 	 | ||||
| 	while (!(Endpoint_IsOUTReceived())); | ||||
| @ -341,7 +341,7 @@ uint8_t Endpoint_Write_Control_Stream_BE(const void* Buffer, uint16_t Length) | ||||
| 		} | ||||
| 		 | ||||
| 		SendZLP = (Endpoint_BytesInEndpoint() == USB_ControlEndpointSize); | ||||
| 		Endpoint_ClearControlIN(); | ||||
| 		Endpoint_ClearIN(); | ||||
| 	} | ||||
| 	 | ||||
| 	if (Endpoint_IsOUTReceived()) | ||||
| @ -350,7 +350,7 @@ uint8_t Endpoint_Write_Control_Stream_BE(const void* Buffer, uint16_t Length) | ||||
| 	if (SendZLP) | ||||
| 	{ | ||||
| 		while (!(Endpoint_IsINReady())); | ||||
| 		Endpoint_ClearControlIN(); | ||||
| 		Endpoint_ClearIN(); | ||||
| 	} | ||||
| 	 | ||||
| 	while (!(Endpoint_IsOUTReceived())); | ||||
| @ -373,7 +373,7 @@ uint8_t Endpoint_Read_Control_Stream_LE(void* Buffer, uint16_t Length) | ||||
| 			Length--; | ||||
| 		} | ||||
| 		 | ||||
| 		Endpoint_ClearControlOUT(); | ||||
| 		Endpoint_ClearOUT(); | ||||
| 	} | ||||
| 	 | ||||
| 	while (!(Endpoint_IsINReady())); | ||||
| @ -396,7 +396,7 @@ uint8_t Endpoint_Read_Control_Stream_BE(void* Buffer, uint16_t Length) | ||||
| 			Length--; | ||||
| 		} | ||||
| 		 | ||||
| 		Endpoint_ClearControlOUT(); | ||||
| 		Endpoint_ClearOUT(); | ||||
| 	} | ||||
| 	 | ||||
| 	while (!(Endpoint_IsINReady())); | ||||
|  | ||||
| @ -309,41 +309,19 @@ | ||||
| 				 * | ||||
| 				 *  \note This is not applicable for non CONTROL type endpoints.			  | ||||
| 				 */ | ||||
| 				static inline void Endpoint_ClearControlSETUP(void); | ||||
| 				static inline void Endpoint_ClearSETUP(void); | ||||
| 				 | ||||
| 				/** Sends an IN packet to the host on the currently selected CONTROL type endpoint, freeing up the
 | ||||
| 				 *  endpoint for the next packet. | ||||
| 				/** Sends an IN packet to the host on the currently selected endpoint, freeing up the endpoint for the
 | ||||
| 				 *  next packet and switching to the alternative endpoint bank if double banked. | ||||
| 				 * | ||||
| 				 *  \ingroup Group_EndpointPacketManagement | ||||
| 				 * | ||||
| 				 *  \note For non CONTROL type endpoints, use Endpoint_ClearIN() instead.			  | ||||
| 				 */ | ||||
| 				static inline void Endpoint_ClearControlIN(void); | ||||
| 				 | ||||
| 				/** Acknowledges an OUT packet to the host on the currently selected CONTROL type endpoint, freeing
 | ||||
| 				 *  up the endpoint for the next packet. | ||||
| 				 * | ||||
| 				 *  \ingroup Group_EndpointPacketManagement | ||||
| 				 * | ||||
| 				 *  \note For non CONTROL type endpoints, use Endpoint_ClearOUT() instead. | ||||
| 				 */ | ||||
| 				static inline void Endpoint_ClearControlOUT(void); | ||||
| 				 | ||||
| 				/** Sends an IN packet to the host on the currently selected non CONTROL type endpoint, freeing
 | ||||
| 				 *  up the endpoint for the next packet and switching to the alternative endpoint bank if double banked. | ||||
| 				 * | ||||
| 				 *  \ingroup Group_EndpointPacketManagement | ||||
| 				 * | ||||
| 				 *  \note For CONTROL type endpoints, use Endpoint_ClearControlIN() instead. | ||||
| 				 */ | ||||
| 				static inline void Endpoint_ClearIN(void); | ||||
| 				 | ||||
| 				/** Acknowledges an OUT packet to the host on the currently selected non CONTROL type endpoint, freeing
 | ||||
| 				 *  up the endpoint for the next packet and switching to the alternative endpoint bank if double banked. | ||||
| 				/** Acknowledges an OUT packet to the host on the currently selected endpoint, freeing up the endpoint
 | ||||
| 				 *  for the next packet and switching to the alternative endpoint bank if double banked. | ||||
| 				 * | ||||
| 				 *  \ingroup Group_EndpointPacketManagement | ||||
| 				 * | ||||
| 				 *  \note For CONTROL type endpoints, use Endpoint_ClearControlOUT() instead. | ||||
| 				 */ | ||||
| 				static inline void Endpoint_ClearOUT(void); | ||||
| 				 | ||||
| @ -417,11 +395,7 @@ | ||||
| 
 | ||||
| 				#define Endpoint_IsSETUPReceived()            ((UEINTX & (1 << RXSTPI)) ? true : false) | ||||
| 
 | ||||
| 				#define Endpoint_ClearControlSETUP()          MACROS{ UEINTX &= ~(1 << RXSTPI); }MACROE | ||||
| 
 | ||||
| 				#define Endpoint_ClearControlIN()             MACROS{ UEINTX &= ~(1 << TXINI); }MACROE | ||||
| 
 | ||||
| 				#define Endpoint_ClearControlOUT()            MACROS{ UEINTX &= ~(1 << RXOUTI); }MACROE | ||||
| 				#define Endpoint_ClearSETUP()                 MACROS{ UEINTX &= ~(1 << RXSTPI); }MACROE | ||||
| 
 | ||||
| 				#define Endpoint_ClearIN()                    MACROS{ uint8_t Temp = UEINTX; UEINTX = (Temp & ~(1 << TXINI)); \ | ||||
| 				                                                      UEINTX = (Temp & ~(1 << FIFOCON)); }MACROE | ||||
| @ -900,7 +874,7 @@ | ||||
| 			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,
 | ||||
| 			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared | ||||
| 			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to | ||||
| 			 *  finalize the transfer via the Endpoint_ClearControlOUT() macro. | ||||
| 			 *  finalize the transfer via the Endpoint_ClearOUT() macro. | ||||
| 			 * | ||||
| 			 *  \note This routine should only be used on CONTROL type endpoints. | ||||
| 			 * | ||||
| @ -919,7 +893,7 @@ | ||||
| 			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,
 | ||||
| 			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared | ||||
| 			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to | ||||
| 			 *  finalize the transfer via the Endpoint_ClearControlOUT() macro. | ||||
| 			 *  finalize the transfer via the Endpoint_ClearOUT() macro. | ||||
| 			 * | ||||
| 			 *  \note This routine should only be used on CONTROL type endpoints. | ||||
| 			 * | ||||
| @ -938,7 +912,7 @@ | ||||
| 			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,
 | ||||
| 			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not | ||||
| 			 *  automatically sent after success or failure states; the user is responsible for manually sending the | ||||
| 			 *  setup IN to finalize the transfer via the Endpoint_ClearControlIN() macro. | ||||
| 			 *  setup IN to finalize the transfer via the Endpoint_ClearIN() macro. | ||||
| 			 * | ||||
| 			 *  \note This routine should only be used on CONTROL type endpoints. | ||||
| 			 * | ||||
| @ -957,7 +931,7 @@ | ||||
| 			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
 | ||||
| 			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not | ||||
| 			 *  automatically sent after success or failure states; the user is responsible for manually sending the | ||||
| 			 *  setup IN to finalize the transfer via the Endpoint_ClearControlIN() macro. | ||||
| 			 *  setup IN to finalize the transfer via the Endpoint_ClearIN() macro. | ||||
| 			 * | ||||
| 			 *  \note This routine should only be used on CONTROL type endpoints. | ||||
| 			 * | ||||
|  | ||||
| @ -58,7 +58,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) | ||||
| 	for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Host_Request_Header_t); HeaderByte++) | ||||
| 	  Pipe_Write_Byte(*(HeaderStream++)); | ||||
| 
 | ||||
| 	Pipe_ClearControlSETUP(); | ||||
| 	Pipe_ClearSETUP(); | ||||
| 	 | ||||
| 	if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_SetupSent))) | ||||
| 	  goto End_Of_Control_Send; | ||||
| @ -91,7 +91,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) | ||||
| 				} | ||||
| 
 | ||||
| 				Pipe_Freeze(); | ||||
| 				Pipe_ClearControlIN(); | ||||
| 				Pipe_ClearIN(); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| @ -101,7 +101,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) | ||||
| 		if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady))) | ||||
| 		  goto End_Of_Control_Send; | ||||
| 
 | ||||
| 		Pipe_ClearControlOUT(); | ||||
| 		Pipe_ClearOUT(); | ||||
| 
 | ||||
| 		if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady))) | ||||
| 		  goto End_Of_Control_Send; | ||||
| @ -124,7 +124,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) | ||||
| 					DataLen--; | ||||
| 				} | ||||
| 				 | ||||
| 				Pipe_ClearControlOUT(); | ||||
| 				Pipe_ClearOUT(); | ||||
| 			} | ||||
| 
 | ||||
| 			if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady))) | ||||
| @ -139,7 +139,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) | ||||
| 		if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived))) | ||||
| 		  goto End_Of_Control_Send; | ||||
| 
 | ||||
| 		Pipe_ClearControlIN(); | ||||
| 		Pipe_ClearIN(); | ||||
| 	} | ||||
| 
 | ||||
| End_Of_Control_Send: | ||||
|  | ||||
| @ -420,38 +420,16 @@ | ||||
| 				 */ | ||||
| 				static inline bool Pipe_IsSETUPSent(void); | ||||
| 				 | ||||
| 				/** Acknowledges the reception of a setup IN request from the attached device on the currently selected
 | ||||
| 				 *  CONTROL type pipe, freeing the bank ready for the next packet. | ||||
| 				 * | ||||
| 				 *  \ingroup Group_PipePacketManagement | ||||
| 				 * | ||||
| 				 *  \note For non CONTROL type pipes, use Pipe_ClearIN() instead.			  | ||||
| 				 */ | ||||
| 				static inline void Pipe_ClearControlIN(void); | ||||
| 
 | ||||
| 				/** Sends the currently selected pipe's contents to the device as an OUT packet on the selected pipe, freeing
 | ||||
| 				 *  the bank ready for the next packet. | ||||
| 				 * | ||||
| 				 *  \ingroup Group_PipePacketManagement | ||||
| 				 * | ||||
| 				 *  \note For non CONTROL type pipes, use Pipe_ClearOUT() instead.	 | ||||
| 				 */ | ||||
| 				static inline void Pipe_ClearControlOUT(void); | ||||
| 
 | ||||
| 				/** Sends the currently selected CONTROL type pipe's contents to the device as a SETUP packet.
 | ||||
| 				 * | ||||
| 				 *  \ingroup Group_PipePacketManagement		 | ||||
| 				 * | ||||
| 				 *  \note This is not applicable for non CONTROL type pipes.			 | ||||
| 				 */ | ||||
| 				static inline void Pipe_ClearControlSETUP(void); | ||||
| 				static inline void Pipe_ClearSETUP(void); | ||||
| 
 | ||||
| 				/** Acknowledges the reception of a setup IN request from the attached device on the currently selected
 | ||||
| 				 *  pipe, freeing the bank ready for the next packet. | ||||
| 				 * | ||||
| 				 *  \ingroup Group_PipePacketManagement | ||||
| 				 * | ||||
| 				 *  \note For CONTROL type pipes, use Pipe_ClearControlIN() instead.	 | ||||
| 				 */ | ||||
| 				static inline void Pipe_ClearIN(void); | ||||
| 
 | ||||
| @ -459,8 +437,6 @@ | ||||
| 				 *  the bank ready for the next packet. | ||||
| 				 * | ||||
| 				 *  \ingroup Group_PipePacketManagement | ||||
| 				 * | ||||
| 				 *  \note For CONTROL type pipes, use Pipe_ClearControlOUT() instead.	 | ||||
| 				 */ | ||||
| 				static inline void Pipe_ClearOUT(void); | ||||
| 
 | ||||
| @ -554,16 +530,10 @@ | ||||
| 				#define Pipe_ClearIN()                 MACROS{ uint8_t Temp = UPINTX; UPINTX = (Temp & ~(1 << RXINI)); \ | ||||
| 				                                               UPINTX = (Temp & ~(1 << FIFOCON)); }MACROE | ||||
| 
 | ||||
| 				#define Pipe_ClearControlIN()          MACROS{ uint8_t Temp = UPINTX; UPINTX = (Temp & ~(1 << RXINI)); \ | ||||
| 				                                               UPINTX = (Temp & ~(1 << FIFOCON)); }MACROE | ||||
| 
 | ||||
| 				#define Pipe_ClearOUT()                MACROS{ uint8_t Temp = UPINTX; UPINTX = (Temp & ~(1 << TXOUTI)); \ | ||||
| 				                                               UPINTX = (Temp & ~(1 << FIFOCON)); }MACROE | ||||
| 				 | ||||
| 				#define Pipe_ClearControlOUT()         MACROS{ uint8_t Temp = UPINTX; UPINTX = (Temp & ~(1 << TXOUTI)); \ | ||||
| 				                                               UPINTX = (Temp & ~(1 << FIFOCON)); }MACROE | ||||
| 
 | ||||
| 				#define Pipe_ClearControlSETUP()       MACROS{ uint8_t Temp = UPINTX; UPINTX = (Temp & ~(1 << TXSTPI)); \ | ||||
| 				#define Pipe_ClearSETUP()              MACROS{ uint8_t Temp = UPINTX; UPINTX = (Temp & ~(1 << TXSTPI)); \ | ||||
| 				                                               UPINTX = (Temp & ~(1 << FIFOCON)); }MACROE | ||||
| 
 | ||||
| 				#define Pipe_IsNAKReceived()           ((UPINTX & (1 << NAKEDI)) ? true : false) | ||||
|  | ||||
| @ -23,15 +23,14 @@ | ||||
|  *      library demos should update to the latest versions. | ||||
|  * | ||||
|  *  <b>Device Mode</b> | ||||
|  *    - The Endpoint_ClearCurrentBank() macro has been removed, and is now replaced with the Endpoint_ClearIN(), Endpoint_ClearOUT(), | ||||
|  *      Endpoint_ClearControlIN(), Endpoint_ClearControlOUT() and other related macros. See Endpoint.h documentation for more details | ||||
|  *      on the new endpoint management macros. | ||||
|  *    - The Endpoint_ClearCurrentBank() macro has been removed, and is now replaced with the Endpoint_ClearIN(), Endpoint_ClearOUT()  | ||||
|  *      macros. See Endpoint.h documentation for more details on the new endpoint management macros. | ||||
|  *    - The Endpoint_ReadWriteAllowed() macro has been renamed to Endpoint_IsReadWriteAllowed() to be more consistent with the rest of | ||||
|  *      the API naming scheme. | ||||
|  *    - The Endpoint_IsSetupINReady() and Endpoint_IsSetupOutReceived() macros have been renamed to Endpoint_IsINReady() and | ||||
|  *      Endpoint_IsOUTReceived() respectively. | ||||
|  *    - The Endpoint_IsSetupReceived() macro has been renamed to Endpoint_IsSETUPReceived(). | ||||
|  *    - The Endpoint_ClearSetupReceived() macro has been renamed to Endpoint_ClearControlSETUP(). | ||||
|  *    - The Endpoint_ClearSetupReceived() macro has been renamed to Endpoint_ClearSETUP(). | ||||
|  *    - All endpoint read/write/discard aliases which did not have an explicitly endianness specifier (such as Endpoint_Read_Word()) have | ||||
|  *      been removed for clarity. Existing projects should use the "_LE" suffix on such calls to use the explicit Little Endian versions. | ||||
|  * | ||||
| @ -41,14 +40,13 @@ | ||||
|  *      in existing projects where the Control pipe is to be operated on. | ||||
|  *    - The USB Host management task now saves and restores the currently selected pipe before and after the task runs. Projects no longer | ||||
|  *      need to manage this manually when calling the USB management task. | ||||
|  *    - The Pipe_ClearCurrentBank() macro has been removed, and is now replaced with the Pipe_ClearIN(), Pipe_ClearOUT(), | ||||
|  *      Pipe_ClearControlIN(), Pipe_ClearControlOUT() and other related macros. See Pipe.h documentation for more details on the new pipe | ||||
|  *      management macros. | ||||
|  *    - The Pipe_ClearCurrentBank() macro has been removed, and is now replaced with the Pipe_ClearIN(), Pipe_ClearOUT() macros. See | ||||
|  *      Pipe.h documentation for more details on the new pipe management macros. | ||||
|  *    - The Pipe_ReadWriteAllowed() macro has been renamed to Pipe_IsReadWriteAllowed() to be more consistent with the rest of the API | ||||
|  *      naming scheme. | ||||
|  *    - The Pipe_IsSetupINReceived() and Pipe_IsOutReady() macros have been renamed to Pipe_IsINReceived() and Pipe_IsOUTReady() | ||||
|  *      respectively. | ||||
|  *    - The new Pipe_ClearControlSETUP() macro should be used to send CONTROL transactions, rather than the previous Pipe_ClearSetupOUT() macro. | ||||
|  *    - The new Pipe_ClearSETUP() macro should be used to send SETUP transactions, rather than the previous Pipe_ClearSetupOUT() macro. | ||||
|  *    - The Pipe_IsSetupSent() macro has been renamed to Pipe_IsSETUPSent(). | ||||
|  *    - The Pipe_ClearSetupSent() macro is no longer applicable and should be removed. | ||||
|  *    - All pipe read/write/discard aliases which did not have an explicitly endianness specifier (such as Pipe_Read_Word()) have | ||||
|  | ||||
| @ -178,30 +178,30 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				if (wLength > sizeof(KeyboardReportData)) | ||||
| 				  wLength = sizeof(KeyboardReportData); | ||||
| 
 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 	 | ||||
| 				/* Write the report data to the control endpoint */ | ||||
| 				Endpoint_Write_Control_Stream_LE(&KeyboardReportData, wLength); | ||||
| 				 | ||||
| 				/* Finalize the stream transfer to send the last packet or clear the host abort */ | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 		 | ||||
| 			break; | ||||
| 		case REQ_GetProtocol: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Write the current protocol flag to the host */ | ||||
| 				Endpoint_Write_Byte(UsingReportProtocol); | ||||
| 				 | ||||
| 				/* Send the flag to the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -211,14 +211,14 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				/* Read in the wValue parameter containing the new protocol mode */ | ||||
| 				uint16_t wValue = Endpoint_Read_Word_LE(); | ||||
| 				 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				/* Set or clear the flag depending on what the host indicates that the current Protocol should be */ | ||||
| 				UsingReportProtocol = (wValue != 0x0000); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| @ -228,31 +228,31 @@ EVENT_HANDLER(USB_UnhandledControlPacket) | ||||
| 				/* Read in the wValue parameter containing the idle period */ | ||||
| 				uint16_t wValue = Endpoint_Read_Word_LE(); | ||||
| 				 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Get idle period in MSB */ | ||||
| 				IdleCount = (wValue >> 8); | ||||
| 				 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 			} | ||||
| 			 | ||||
| 			break; | ||||
| 		case REQ_GetIdle: | ||||
| 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{		 | ||||
| 				Endpoint_ClearControlSETUP(); | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				 | ||||
| 				/* Write the current idle duration to the host */ | ||||
| 				Endpoint_Write_Byte(IdleCount); | ||||
| 				 | ||||
| 				/* Send the flag to the host */ | ||||
| 				Endpoint_ClearControlIN(); | ||||
| 				Endpoint_ClearIN(); | ||||
| 
 | ||||
| 				/* Acknowledge status stage */ | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 				Endpoint_ClearControlOUT(); | ||||
| 				Endpoint_ClearOUT(); | ||||
| 			} | ||||
| 
 | ||||
| 			break; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera