Cache the USB_DeviceState variable internally in the library core when multiple checks are required in a single loop iteration, to reduce compiled code size.
This commit is contained in:
		
							parent
							
								
									93793679c9
								
							
						
					
					
						commit
						3ae9e6042f
					
				
					 6 changed files with 30 additions and 23 deletions
				
			
		| 
						 | 
				
			
			@ -8,13 +8,14 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer,
 | 
			
		|||
	
 | 
			
		||||
	while (Length)
 | 
			
		||||
	{
 | 
			
		||||
		if (Endpoint_IsSETUPReceived())
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_HostAborted;
 | 
			
		||||
		uint8_t USB_DeviceState_LCL = USB_DeviceState;
 | 
			
		||||
 | 
			
		||||
		if (USB_DeviceState == DEVICE_STATE_Unattached)
 | 
			
		||||
		if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_DeviceDisconnected;
 | 
			
		||||
		else if (USB_DeviceState == DEVICE_STATE_Suspended)
 | 
			
		||||
		else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_BusSuspended;
 | 
			
		||||
		else if (Endpoint_IsSETUPReceived())
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_HostAborted;
 | 
			
		||||
		  
 | 
			
		||||
		if (Endpoint_IsOUTReceived())
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +31,11 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer,
 | 
			
		|||
	
 | 
			
		||||
	while (!(Endpoint_IsINReady()))
 | 
			
		||||
	{
 | 
			
		||||
		if (USB_DeviceState == DEVICE_STATE_Unattached)
 | 
			
		||||
		uint8_t USB_DeviceState_LCL = USB_DeviceState;
 | 
			
		||||
 | 
			
		||||
		if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_DeviceDisconnected;
 | 
			
		||||
		else if (USB_DeviceState == DEVICE_STATE_Suspended)
 | 
			
		||||
		else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_BusSuspended;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,17 +11,17 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
 | 
			
		|||
 | 
			
		||||
	while (Length || LastPacketFull)
 | 
			
		||||
	{
 | 
			
		||||
		if (Endpoint_IsSETUPReceived())
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_HostAborted;
 | 
			
		||||
 | 
			
		||||
		if (Endpoint_IsOUTReceived())
 | 
			
		||||
		  break;
 | 
			
		||||
		uint8_t USB_DeviceState_LCL = USB_DeviceState;
 | 
			
		||||
		
 | 
			
		||||
		if (USB_DeviceState == DEVICE_STATE_Unattached)
 | 
			
		||||
		if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_DeviceDisconnected;
 | 
			
		||||
		else if (USB_DeviceState == DEVICE_STATE_Suspended)
 | 
			
		||||
		else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_BusSuspended;
 | 
			
		||||
		  
 | 
			
		||||
		else if (Endpoint_IsSETUPReceived())
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_HostAborted;
 | 
			
		||||
		else if (Endpoint_IsOUTReceived())
 | 
			
		||||
		  break;
 | 
			
		||||
 | 
			
		||||
		if (Endpoint_IsINReady())
 | 
			
		||||
		{
 | 
			
		||||
			uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
 | 
			
		||||
| 
						 | 
				
			
			@ -40,9 +40,11 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
 | 
			
		|||
	
 | 
			
		||||
	while (!(Endpoint_IsOUTReceived()))
 | 
			
		||||
	{
 | 
			
		||||
		if (USB_DeviceState == DEVICE_STATE_Unattached)
 | 
			
		||||
		uint8_t USB_DeviceState_LCL = USB_DeviceState;
 | 
			
		||||
 | 
			
		||||
		if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_DeviceDisconnected;
 | 
			
		||||
		else if (USB_DeviceState == DEVICE_STATE_Suspended)
 | 
			
		||||
		else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
 | 
			
		||||
		  return ENDPOINT_RWCSTREAM_BusSuspended;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -115,10 +115,12 @@ uint8_t Endpoint_WaitUntilReady(void)
 | 
			
		|||
			  return ENDPOINT_READYWAIT_NoError;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if (USB_DeviceState == DEVICE_STATE_Unattached)
 | 
			
		||||
		uint8_t USB_DeviceState_LCL = USB_DeviceState;
 | 
			
		||||
 | 
			
		||||
		if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
 | 
			
		||||
		  return ENDPOINT_READYWAIT_DeviceDisconnected;
 | 
			
		||||
		else if (USB_DeviceState == DEVICE_STATE_Suspended)
 | 
			
		||||
		  return ENDPOINT_READYWAIT_BusSuspended;
 | 
			
		||||
		else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
 | 
			
		||||
		  return ENDPOINT_READYWAIT_BusSuspended;		
 | 
			
		||||
		else if (Endpoint_IsStalled())
 | 
			
		||||
		  return ENDPOINT_READYWAIT_EndpointStalled;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
  *    handling of USB Start of Frame events while in USB Host mode
 | 
			
		||||
  *  - Added new PRNT_Host_BytesReceived(), PRNT_Host_ReceiveByte(), PRNT_Host_SendByte() and PRNT_Host_Flush() functions to the
 | 
			
		||||
  *    Print Host Class driver
 | 
			
		||||
  *  - Added class specific descriptor type defines with standard USB-IF element naming
 | 
			
		||||
  *  - Added class specific descriptor alternative struct type defines with standard USB-IF element naming
 | 
			
		||||
  *  - Added new project makefile template to the library and moved board driver stub files into in a new "CodeTemplates" directory
 | 
			
		||||
  *  - Added board hardware driver support for the Linnix UDIP development board
 | 
			
		||||
  *  - Added board hardware driver support for the Busware BUI development board
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@
 | 
			
		|||
  *  - Changed over all demos, drivers and internal functions to use the current frame number over the Start of Frame flag where possible
 | 
			
		||||
  *    to free up the Start of Frame flag for interrupt use in the user application
 | 
			
		||||
  *  - All project makefiles now correctly clean intermediate build files from assembly and C++ sources (thanks to Daniel Czigany)
 | 
			
		||||
  *  - Removed the EVENT_USB_InitFailure() event, not specifying a USB mode now defaults to UID selection mode
 | 
			
		||||
  *  - Removed the EVENT_USB_InitFailure() event, not specifying a USB mode correctly now defaults to UID selection mode
 | 
			
		||||
  *  - Renamed and moved class driver common constant definitions to make the naming scheme more uniform
 | 
			
		||||
  *  - Changed default value for the reset polarity parameter in the AVRISP-MKII project so that it defaults to active low drive
 | 
			
		||||
  *  - Changed configuration descriptor parser for all host mode projects and class drivers to ensure better compatibility with devices
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@
 | 
			
		|||
 *  void Bootloader_Jump_Check(void)
 | 
			
		||||
 *  {
 | 
			
		||||
 *      // If the reset source was the bootloader and the key is correct, clear it and jump to the bootloader
 | 
			
		||||
 *      if ((MCUSR & (1<<WDRF)) && (Boot_Key == MAGIC_BOOT_KEY))
 | 
			
		||||
 *      if ((MCUSR & (1 << WDRF)) && (Boot_Key == MAGIC_BOOT_KEY))
 | 
			
		||||
 *      {
 | 
			
		||||
 *          Boot_Key = 0;
 | 
			
		||||
 *          ((void (*)(void))BOOTLOADER_START_ADDRESS)(); 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@
 | 
			
		|||
 *    into difficulties or need some advice. In addition, you can also email the library author to receive personalized
 | 
			
		||||
 *    support when you need it (subject to author's schedule).
 | 
			
		||||
 *
 | 
			
		||||
 *   <small>* Atmel Stack Mouse Device Demo 4292 bytes, LUFA Mouse Low Level Device Demo 3372 bytes, under identical build
 | 
			
		||||
 *   <small>* Atmel Stack Mouse Device Demo 4292 bytes, LUFA Mouse Low Level Device Demo 3332 bytes, under identical build
 | 
			
		||||
 *   environments</small>
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue