Fixed programming errors in the AVRISP-MKII project when the programming packet is...
[pub/USBasp.git] / LUFA / Drivers / USB / HighLevel / Template / Template_Endpoint_RW.c
index 8a97e15..4077279 100644 (file)
@@ -1,22 +1,34 @@
 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;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
+       if (BytesProcessed != NULL)
+       {
+               Length -= *BytesProcessed;
+               TEMPLATE_BUFFER_MOVE(DataStream, *BytesProcessed);
+       }
+
        while (Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
                        TEMPLATE_CLEAR_ENDPOINT();
 
-                       #if !defined(NO_STREAM_CALLBACKS)
-                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                         return ENDPOINT_RWSTREAM_CallbackAborted;
+                       if (BytesProcessed != NULL)
+                       {
+                               *BytesProcessed += BytesInTransfer;
+                               return ENDPOINT_RWSTREAM_IncompleteTransfer;
+                       }
+
+                       #if !defined(INTERRUPT_CONTROL_ENDPOINT)
+                       USB_USBTask();
                        #endif
 
                        if ((ErrorCode = Endpoint_WaitUntilReady()))
@@ -25,7 +37,9 @@ uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
                else
                {
                        TEMPLATE_TRANSFER_BYTE(DataStream);
+                       TEMPLATE_BUFFER_MOVE(DataStream, 1);
                        Length--;
+                       BytesInTransfer++;
                }
        }
 
@@ -37,3 +51,4 @@ uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
 #undef TEMPLATE_TRANSFER_BYTE
 #undef TEMPLATE_CLEAR_ENDPOINT
 #undef TEMPLATE_BUFFER_OFFSET
+#undef TEMPLATE_BUFFER_MOVE