1 uint8_t TEMPLATE_FUNC_NAME (const void* Buffer
, 
   4         uint8_t* DataStream     
= ((uint8_t*)Buffer 
+ TEMPLATE_BUFFER_OFFSET(Length
)); 
   5         bool     LastPacketFull 
= false; 
   7         if (Length 
> USB_ControlRequest
.wLength
) 
   8           Length 
= USB_ControlRequest
.wLength
; 
  12         while (Length 
|| LastPacketFull
) 
  14                 uint8_t USB_DeviceState_LCL 
= USB_DeviceState
; 
  16                 if (USB_DeviceState_LCL 
== DEVICE_STATE_Unattached
) 
  17                   return ENDPOINT_RWCSTREAM_DeviceDisconnected
; 
  18                 else if (USB_DeviceState_LCL 
== DEVICE_STATE_Suspended
) 
  19                   return ENDPOINT_RWCSTREAM_BusSuspended
; 
  20                 else if (Endpoint_IsSETUPReceived()) 
  21                   return ENDPOINT_RWCSTREAM_HostAborted
; 
  22                 else if (Endpoint_IsOUTReceived()) 
  25                 if (Endpoint_IsINReady()) 
  27                         uint16_t BytesInEndpoint 
= Endpoint_BytesInEndpoint(); 
  29                         while (Length 
&& (BytesInEndpoint 
< USB_ControlEndpointSize
)) 
  31                                 TEMPLATE_TRANSFER_BYTE(DataStream
); 
  36                         LastPacketFull 
= (BytesInEndpoint 
== USB_ControlEndpointSize
); 
  41         while (!(Endpoint_IsOUTReceived())) 
  43                 uint8_t USB_DeviceState_LCL 
= USB_DeviceState
; 
  45                 if (USB_DeviceState_LCL 
== DEVICE_STATE_Unattached
) 
  46                   return ENDPOINT_RWCSTREAM_DeviceDisconnected
; 
  47                 else if (USB_DeviceState_LCL 
== DEVICE_STATE_Suspended
) 
  48                   return ENDPOINT_RWCSTREAM_BusSuspended
; 
  51         return ENDPOINT_RWCSTREAM_NoError
; 
  54 #undef TEMPLATE_BUFFER_OFFSET 
  55 #undef TEMPLATE_FUNC_NAME 
  56 #undef TEMPLATE_TRANSFER_BYTE