1 uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer
,
5 uint8_t* DataStream
= ((uint8_t*)Buffer
+ TEMPLATE_BUFFER_OFFSET(Length
));
8 Pipe_SetPipeToken(TEMPLATE_TOKEN
);
10 if ((ErrorCode
= Pipe_WaitUntilReady()))
13 #if defined(FAST_STREAM_TRANSFERS)
14 uint8_t BytesRemToAlignment
= (Pipe_BytesInPipe() & 0x07);
18 Length
-= BytesRemToAlignment
;
20 switch (BytesRemToAlignment
)
25 if (!(Pipe_IsReadWriteAllowed()))
27 TEMPLATE_CLEAR_PIPE();
29 #if !defined(NO_STREAM_CALLBACKS)
30 if ((Callback
!= NULL
) && (Callback() == STREAMCALLBACK_Abort
))
31 return PIPE_RWSTREAM_CallbackAborted
;
34 if ((ErrorCode
= Pipe_WaitUntilReady()))
40 TEMPLATE_TRANSFER_BYTE(DataStream
);
41 case 7: TEMPLATE_TRANSFER_BYTE(DataStream
);
42 case 6: TEMPLATE_TRANSFER_BYTE(DataStream
);
43 case 5: TEMPLATE_TRANSFER_BYTE(DataStream
);
44 case 4: TEMPLATE_TRANSFER_BYTE(DataStream
);
45 case 3: TEMPLATE_TRANSFER_BYTE(DataStream
);
46 case 2: TEMPLATE_TRANSFER_BYTE(DataStream
);
47 case 1: TEMPLATE_TRANSFER_BYTE(DataStream
);
48 } while (Length
>= 8);
55 if (!(Pipe_IsReadWriteAllowed()))
57 TEMPLATE_CLEAR_PIPE();
59 #if !defined(NO_STREAM_CALLBACKS)
60 if ((Callback
!= NULL
) && (Callback() == STREAMCALLBACK_Abort
))
61 return PIPE_RWSTREAM_CallbackAborted
;
64 if ((ErrorCode
= Pipe_WaitUntilReady()))
69 TEMPLATE_TRANSFER_BYTE(DataStream
);
74 return PIPE_RWSTREAM_NoError
;
77 #undef TEMPLATE_FUNC_NAME
78 #undef TEMPLATE_BUFFER_TYPE
80 #undef TEMPLATE_TRANSFER_BYTE
81 #undef TEMPLATE_CLEAR_PIPE
82 #undef TEMPLATE_BUFFER_OFFSET