Fixed programming errors in the AVRISP-MKII project when the programming packet is...
[pub/USBasp.git] / LUFA / Drivers / USB / HighLevel / Template / Template_Pipe_RW.c
index fb64dd8..8c5d47d 100644 (file)
@@ -1,65 +1,33 @@
 uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
 uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
-                            uint16_t Length
-                            __CALLBACK_PARAM)
+                            uint16_t Length,
+                            uint16_t* const BytesProcessed)
 {
 {
-       uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
+       uint8_t* DataStream      = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
+       uint16_t BytesInTransfer = 0;
        uint8_t  ErrorCode;
        uint8_t  ErrorCode;
-       
+
        Pipe_SetPipeToken(TEMPLATE_TOKEN);
 
        if ((ErrorCode = Pipe_WaitUntilReady()))
          return ErrorCode;
 
        Pipe_SetPipeToken(TEMPLATE_TOKEN);
 
        if ((ErrorCode = Pipe_WaitUntilReady()))
          return ErrorCode;
 
-       #if defined(FAST_STREAM_TRANSFERS)
-       uint8_t BytesRemToAlignment = (Pipe_BytesInPipe() & 0x07);
-
-       if (Length >= 8)
+       if (BytesProcessed != NULL)
        {
        {
-               Length -= BytesRemToAlignment;
-
-               switch (BytesRemToAlignment)
-               {
-                       default:
-                               do
-                               {
-                                       if (!(Pipe_IsReadWriteAllowed()))
-                                       {
-                                               TEMPLATE_CLEAR_PIPE();
-
-                                               #if !defined(NO_STREAM_CALLBACKS)
-                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                                                 return PIPE_RWSTREAM_CallbackAborted;
-                                               #endif
-
-                                               if ((ErrorCode = Pipe_WaitUntilReady()))
-                                                 return ErrorCode;
-                                       }
-
-                                       Length -= 8;
-                                       
-                                       TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 7: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 6: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 5: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 4: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 3: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 2: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 1: TEMPLATE_TRANSFER_BYTE(DataStream);
-                               } while (Length >= 8);  
-               }
+               Length -= *BytesProcessed;
+               TEMPLATE_BUFFER_MOVE(DataStream, *BytesProcessed);
        }
        }
-       #endif
-
+       
        while (Length)
        {
                if (!(Pipe_IsReadWriteAllowed()))
                {
                        TEMPLATE_CLEAR_PIPE();
 
        while (Length)
        {
                if (!(Pipe_IsReadWriteAllowed()))
                {
                        TEMPLATE_CLEAR_PIPE();
 
-                       #if !defined(NO_STREAM_CALLBACKS)
-                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                         return PIPE_RWSTREAM_CallbackAborted;
-                       #endif
+                       if (BytesProcessed != NULL)
+                       {
+                               *BytesProcessed += BytesInTransfer;
+                               return PIPE_RWSTREAM_IncompleteTransfer;
+                       }
 
                        if ((ErrorCode = Pipe_WaitUntilReady()))
                          return ErrorCode;
 
                        if ((ErrorCode = Pipe_WaitUntilReady()))
                          return ErrorCode;
@@ -67,10 +35,12 @@ uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
                else
                {
                        TEMPLATE_TRANSFER_BYTE(DataStream);
                else
                {
                        TEMPLATE_TRANSFER_BYTE(DataStream);
+                       TEMPLATE_BUFFER_MOVE(DataStream, 1);
                        Length--;
                        Length--;
+                       BytesInTransfer++;
                }
        }
                }
        }
-       
+
        return PIPE_RWSTREAM_NoError;
 }
 
        return PIPE_RWSTREAM_NoError;
 }
 
@@ -80,3 +50,4 @@ uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
 #undef TEMPLATE_TRANSFER_BYTE
 #undef TEMPLATE_CLEAR_PIPE
 #undef TEMPLATE_BUFFER_OFFSET
 #undef TEMPLATE_TRANSFER_BYTE
 #undef TEMPLATE_CLEAR_PIPE
 #undef TEMPLATE_BUFFER_OFFSET
+#undef TEMPLATE_BUFFER_MOVE