Fixed PDI/TPI programming speed of ~250KHz in the AVRISP-MKII Clone project, instead...
[pub/USBasp.git] / LUFA / Drivers / USB / HighLevel / Template / Template_Endpoint_Control_W.c
index c9d81f3..16fe399 100644 (file)
@@ -3,7 +3,7 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
 {
        uint8_t* DataStream     = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
        bool     LastPacketFull = false;
-       
+
        if (Length > USB_ControlRequest.wLength)
          Length = USB_ControlRequest.wLength;
        else if (!(Length))
@@ -11,38 +11,40 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
 
        while (Length || LastPacketFull)
        {
-               if (Endpoint_IsSETUPReceived())
-                 return ENDPOINT_RWCSTREAM_HostAborted;
+               uint8_t USB_DeviceState_LCL = USB_DeviceState;
 
-               if (Endpoint_IsOUTReceived())
-                 break;
-               
-               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();
-               
+
                        while (Length && (BytesInEndpoint < USB_ControlEndpointSize))
                        {
                                TEMPLATE_TRANSFER_BYTE(DataStream);
                                Length--;
                                BytesInEndpoint++;
                        }
-                       
+
                        LastPacketFull = (BytesInEndpoint == USB_ControlEndpointSize);
                        Endpoint_ClearIN();
                }
        }
-       
+
        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;
        }
 
@@ -51,4 +53,4 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
 
 #undef TEMPLATE_BUFFER_OFFSET
 #undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_TRANSFER_BYTE
\ No newline at end of file
+#undef TEMPLATE_TRANSFER_BYTE