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.

pull/1469/head
Dean Camera 14 years ago
parent 93793679c9
commit 3ae9e6042f

@ -8,13 +8,14 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer,
while (Length) while (Length)
{ {
if (Endpoint_IsSETUPReceived()) uint8_t USB_DeviceState_LCL = USB_DeviceState;
return ENDPOINT_RWCSTREAM_HostAborted;
if (USB_DeviceState == DEVICE_STATE_Unattached) if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_RWCSTREAM_DeviceDisconnected; return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended) else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended; return ENDPOINT_RWCSTREAM_BusSuspended;
else if (Endpoint_IsSETUPReceived())
return ENDPOINT_RWCSTREAM_HostAborted;
if (Endpoint_IsOUTReceived()) if (Endpoint_IsOUTReceived())
{ {
@ -30,9 +31,11 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer,
while (!(Endpoint_IsINReady())) 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; return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended) else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended; return ENDPOINT_RWCSTREAM_BusSuspended;
} }

@ -11,17 +11,17 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
while (Length || LastPacketFull) while (Length || LastPacketFull)
{ {
if (Endpoint_IsSETUPReceived()) uint8_t USB_DeviceState_LCL = USB_DeviceState;
return ENDPOINT_RWCSTREAM_HostAborted;
if (Endpoint_IsOUTReceived())
break;
if (USB_DeviceState == DEVICE_STATE_Unattached) if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
return ENDPOINT_RWCSTREAM_DeviceDisconnected; return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended) else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended; return ENDPOINT_RWCSTREAM_BusSuspended;
else if (Endpoint_IsSETUPReceived())
return ENDPOINT_RWCSTREAM_HostAborted;
else if (Endpoint_IsOUTReceived())
break;
if (Endpoint_IsINReady()) if (Endpoint_IsINReady())
{ {
uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
@ -40,9 +40,11 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
while (!(Endpoint_IsOUTReceived())) 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; return ENDPOINT_RWCSTREAM_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended) else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_RWCSTREAM_BusSuspended; return ENDPOINT_RWCSTREAM_BusSuspended;
} }

@ -115,10 +115,12 @@ uint8_t Endpoint_WaitUntilReady(void)
return ENDPOINT_READYWAIT_NoError; 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; return ENDPOINT_READYWAIT_DeviceDisconnected;
else if (USB_DeviceState == DEVICE_STATE_Suspended) else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
return ENDPOINT_READYWAIT_BusSuspended; return ENDPOINT_READYWAIT_BusSuspended;
else if (Endpoint_IsStalled()) else if (Endpoint_IsStalled())
return ENDPOINT_READYWAIT_EndpointStalled; return ENDPOINT_READYWAIT_EndpointStalled;

@ -18,7 +18,7 @@
* handling of USB Start of Frame events while in USB Host mode * 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 * - Added new PRNT_Host_BytesReceived(), PRNT_Host_ReceiveByte(), PRNT_Host_SendByte() and PRNT_Host_Flush() functions to the
* Print Host Class driver * 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 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 Linnix UDIP development board
* - Added board hardware driver support for the Busware BUI 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 * - 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 * 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) * - 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 * - 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 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 * - 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) * 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 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; * Boot_Key = 0;
* ((void (*)(void))BOOTLOADER_START_ADDRESS)(); * ((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 * 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). * 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> * environments</small>
*/ */

Loading…
Cancel
Save