Cache the USB_DeviceState variable internally in the library core when multiple check...
[pub/lufa.git] / LUFA / Drivers / USB / HighLevel / Template / Template_Endpoint_Control_W.c
index c9d81f3..0ae7feb 100644 (file)
@@ -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;
        }