Added new Pipe_GetBusyBanks(), Endpoint_GetBusyBanks() and Endpoint_AbortPendingIN...
authorDean Camera <dean@fourwalledcubicle.com>
Fri, 29 Oct 2010 06:22:03 +0000 (06:22 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Fri, 29 Oct 2010 06:22:03 +0000 (06:22 +0000)
LUFA/Drivers/USB/LowLevel/Endpoint.h
LUFA/Drivers/USB/LowLevel/Pipe.h
LUFA/ManPages/ChangeLog.txt

index e0a45f3..75c8877 100644 (file)
                                return ((UECONX & (1 << EPEN)) ? true : false);
                        }
 
                                return ((UECONX & (1 << EPEN)) ? true : false);
                        }
 
+                       /** Aborts all pending IN transactions on the currently selected endpoint, once the bank
+                        *  has been queued for transmission to the host via \ref Endpoint_ClearIN(). This function
+                        *  will terminate all queued transactions, resetting the endpoint banks ready for a new
+                        *  packet.
+                        *
+                        *  \ingroup Group_EndpointPacketManagement
+                        */
+                       static inline void Endpoint_AbortPendingIN(void)
+                       {
+                               while (UESTA0X & (0x03 << NBUSYBK))
+                               {
+                                       UEINTX |= (1 << RXOUTI);
+                                       while (UEINTX & (1 << RXOUTI));
+                               }
+                       }
+                       
+                       /** Retrieves the number of busy banks in the currently selected endpoint, which have been queued for
+                        *  transmission via the \ref Endpoint_ClearIN() command, or are awaiting acknowledgement via the
+                        *  \ref Endpoint_ClearOUT() command.
+                        *
+                        *  \ingroup Group_EndpointPacketManagement
+                        *
+                        *  \return Total number of busy banks in the selected endpoint.
+                        */
+                       static inline uint8_t Endpoint_GetBusyBanks(void)
+                       {
+                               return (UESTA0X & (0x03 << NBUSYBK));
+                       }
+
                        /** Determines if the currently selected endpoint may be read from (if data is waiting in the endpoint
                         *  bank and the endpoint is an OUT direction, or if the bank is not yet full if the endpoint is an IN
                         *  direction). This function will return false if an error has occurred in the endpoint, if the endpoint
                        /** Determines if the currently selected endpoint may be read from (if data is waiting in the endpoint
                         *  bank and the endpoint is an OUT direction, or if the bank is not yet full if the endpoint is an IN
                         *  direction). This function will return false if an error has occurred in the endpoint, if the endpoint
index 8cf48cd..53aeb1f 100644 (file)
                                                   PIPE_ERRORFLAG_DATATGL)) |
                                        (UPSTAX & (PIPE_ERRORFLAG_OVERFLOW | PIPE_ERRORFLAG_UNDERFLOW)));
                        }
                                                   PIPE_ERRORFLAG_DATATGL)) |
                                        (UPSTAX & (PIPE_ERRORFLAG_OVERFLOW | PIPE_ERRORFLAG_UNDERFLOW)));
                        }
+                       
+                       /** Retrieves the number of busy banks in the currently selected pipe, which have been queued for
+                        *  transmission via the \ref Pipe_ClearOUT() command, or are awaiting acknowledgement via the
+                        *  \ref Pipe_ClearIN() command.
+                        *
+                        *  \ingroup Group_PipePacketManagement
+                        *
+                        *  \return Total number of busy banks in the selected pipe.
+                        */
+                       static inline uint8_t Pipe_GetBusyBanks(void)
+                       {
+                               return (UPSTAX & (0x03 << NBUSYBK));
+                       }
 
                        /** Determines if the currently selected pipe may be read from (if data is waiting in the pipe
                         *  bank and the pipe is an IN direction, or if the bank is not yet full if the pipe is an OUT
 
                        /** Determines if the currently selected pipe may be read from (if data is waiting in the pipe
                         *  bank and the pipe is an IN direction, or if the bank is not yet full if the pipe is an OUT
index cefd377..bb43b01 100644 (file)
@@ -31,6 +31,7 @@
   *  - Added new NO_CLASS_DRIVER_AUTOFLUSH compile time option to disable automatic flushing of interfaces when the USB management
   *    tasks for each driver is called
   *  - Added standard keyboard HID report scancode defines (thanks to László Monda)
   *  - Added new NO_CLASS_DRIVER_AUTOFLUSH compile time option to disable automatic flushing of interfaces when the USB management
   *    tasks for each driver is called
   *  - Added standard keyboard HID report scancode defines (thanks to László Monda)
+  *  - Added new Pipe_GetBusyBanks(), Endpoint_GetBusyBanks() and Endpoint_AbortPendingIN() functions
   *
   *  <b>Changed:</b>
   *  - Removed complicated logic for the Endpoint_ConfigureEndpoint() function to use inlined or function called versions
   *
   *  <b>Changed:</b>
   *  - Removed complicated logic for the Endpoint_ConfigureEndpoint() function to use inlined or function called versions