Optimize Endpoint_Discard_Stream() and Endpoint_Null_Stream().
authorDean Camera <dean@fourwalledcubicle.com>
Sat, 8 Dec 2018 00:10:28 +0000 (11:10 +1100)
committerDean Camera <dean@fourwalledcubicle.com>
Sat, 8 Dec 2018 00:10:28 +0000 (11:10 +1100)
LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c
LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c
LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c

index 0364c60..bf6fee4 100644 (file)
@@ -43,15 +43,12 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
                                 uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
@@ -59,7 +56,7 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
@@ -69,8 +66,6 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
                else
                {
                        Endpoint_Discard_8();
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
@@ -82,15 +77,12 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
                              uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
@@ -98,7 +90,7 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
@@ -108,8 +100,6 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
                else
                {
                        Endpoint_Write_8(0);
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
index 214edd7..5a6131f 100644 (file)
@@ -43,15 +43,12 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
                                 uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
@@ -59,7 +56,7 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
@@ -69,8 +66,6 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
                else
                {
                        Endpoint_Discard_8();
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
@@ -82,15 +77,12 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
                              uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
@@ -98,7 +90,7 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
@@ -108,8 +100,6 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
                else
                {
                        Endpoint_Write_8(0);
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
index a24f624..e8ee7e6 100644 (file)
@@ -43,15 +43,12 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
                                 uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
@@ -59,7 +56,7 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
@@ -69,8 +66,6 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length,
                else
                {
                        Endpoint_Discard_8();
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
@@ -82,15 +77,12 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
                              uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
@@ -98,7 +90,7 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
@@ -108,8 +100,6 @@ uint8_t Endpoint_Null_Stream(uint16_t Length,
                else
                {
                        Endpoint_Write_8(0);
-
-                       Length--;
                        BytesInTransfer++;
                }
        }