1 uint8_t TEMPLATE_FUNC_NAME (void* Buffer
, uint16_t Length _CALLBACK_PARAM
)
3 uint8_t* DataStream
= (uint8_t*)(Buffer
+ TEMPLATE_BUFFER_OFFSET(Length
));
6 Pipe_SetToken(TEMPLATE_TOKEN
);
8 if ((ErrorCode
= Pipe_WaitUntilReady()))
11 #if defined(FAST_STREAM_TRANSFERS)
12 uint8_t BytesRemToAlignment
= (Pipe_BytesInPipe() & 0x07);
16 Length
-= BytesRemToAlignment
;
18 switch (BytesRemToAlignment
)
23 if (!(Pipe_IsReadWriteAllowed()))
25 TEMPLATE_CLEAR_PIPE();
27 #if !defined(NO_STREAM_CALLBACKS)
28 if ((Callback
!= NULL
) && (Callback() == STREAMCALLBACK_Abort
))
29 return PIPE_RWSTREAM_CallbackAborted
;
32 if ((ErrorCode
= Pipe_WaitUntilReady()))
38 TEMPLATE_TRANSFER_BYTE(DataStream
);
39 case 7: TEMPLATE_TRANSFER_BYTE(DataStream
);
40 case 6: TEMPLATE_TRANSFER_BYTE(DataStream
);
41 case 5: TEMPLATE_TRANSFER_BYTE(DataStream
);
42 case 4: TEMPLATE_TRANSFER_BYTE(DataStream
);
43 case 3: TEMPLATE_TRANSFER_BYTE(DataStream
);
44 case 2: TEMPLATE_TRANSFER_BYTE(DataStream
);
45 case 1: TEMPLATE_TRANSFER_BYTE(DataStream
);
46 } while (Length
>= 8);
53 if (!(Pipe_IsReadWriteAllowed()))
55 TEMPLATE_CLEAR_PIPE();
57 #if !defined(NO_STREAM_CALLBACKS)
58 if ((Callback
!= NULL
) && (Callback() == STREAMCALLBACK_Abort
))
59 return PIPE_RWSTREAM_CallbackAborted
;
62 if ((ErrorCode
= Pipe_WaitUntilReady()))
67 TEMPLATE_TRANSFER_BYTE(DataStream
);
72 return PIPE_RWSTREAM_NoError
;
75 #undef TEMPLATE_FUNC_NAME
77 #undef TEMPLATE_TRANSFER_BYTE
78 #undef TEMPLATE_CLEAR_PIPE
79 #undef TEMPLATE_BUFFER_OFFSET