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