1 uint8_t TEMPLATE_FUNC_NAME (const void* const 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
);
32 TEMPLATE_BUFFER_MOVE(DataStream
, 1);
37 LastPacketFull
= (BytesInEndpoint
== USB_ControlEndpointSize
);
42 while (!(Endpoint_IsOUTReceived()))
44 uint8_t USB_DeviceState_LCL
= USB_DeviceState
;
46 if (USB_DeviceState_LCL
== DEVICE_STATE_Unattached
)
47 return ENDPOINT_RWCSTREAM_DeviceDisconnected
;
48 else if (USB_DeviceState_LCL
== DEVICE_STATE_Suspended
)
49 return ENDPOINT_RWCSTREAM_BusSuspended
;
52 return ENDPOINT_RWCSTREAM_NoError
;
55 #undef TEMPLATE_BUFFER_OFFSET
56 #undef TEMPLATE_BUFFER_MOVE
57 #undef TEMPLATE_FUNC_NAME
58 #undef TEMPLATE_TRANSFER_BYTE