1 uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer
, uint16_t Length __CALLBACK_PARAM
)
3 uint8_t* DataStream
= ((uint8_t*)Buffer
+ TEMPLATE_BUFFER_OFFSET(Length
));
6 if ((ErrorCode
= Endpoint_WaitUntilReady()))
9 #if defined(FAST_STREAM_TRANSFERS)
10 uint8_t BytesRemToAlignment
= (Endpoint_BytesInEndpoint() & 0x07);
14 Length
-= BytesRemToAlignment
;
16 switch (BytesRemToAlignment
)
21 if (!(Endpoint_IsReadWriteAllowed()))
23 TEMPLATE_CLEAR_ENDPOINT();
25 #if !defined(NO_STREAM_CALLBACKS)
26 if ((Callback
!= NULL
) && (Callback() == STREAMCALLBACK_Abort
))
27 return ENDPOINT_RWSTREAM_CallbackAborted
;
30 if ((ErrorCode
= Endpoint_WaitUntilReady()))
36 TEMPLATE_TRANSFER_BYTE(DataStream
);
37 case 7: TEMPLATE_TRANSFER_BYTE(DataStream
);
38 case 6: TEMPLATE_TRANSFER_BYTE(DataStream
);
39 case 5: TEMPLATE_TRANSFER_BYTE(DataStream
);
40 case 4: TEMPLATE_TRANSFER_BYTE(DataStream
);
41 case 3: TEMPLATE_TRANSFER_BYTE(DataStream
);
42 case 2: TEMPLATE_TRANSFER_BYTE(DataStream
);
43 case 1: TEMPLATE_TRANSFER_BYTE(DataStream
);
44 } while (Length
>= 8);
51 if (!(Endpoint_IsReadWriteAllowed()))
53 TEMPLATE_CLEAR_ENDPOINT();
55 #if !defined(NO_STREAM_CALLBACKS)
56 if ((Callback
!= NULL
) && (Callback() == STREAMCALLBACK_Abort
))
57 return ENDPOINT_RWSTREAM_CallbackAborted
;
60 if ((ErrorCode
= Endpoint_WaitUntilReady()))
65 TEMPLATE_TRANSFER_BYTE(DataStream
);
70 return ENDPOINT_RWSTREAM_NoError
;
73 #undef TEMPLATE_FUNC_NAME
74 #undef TEMPLATE_BUFFER_TYPE
75 #undef TEMPLATE_TRANSFER_BYTE
76 #undef TEMPLATE_CLEAR_ENDPOINT
77 #undef TEMPLATE_BUFFER_OFFSET