|
|
|
@ -190,12 +190,12 @@
|
|
|
|
|
#define PIPE_EPNUM_MASK 0x0F
|
|
|
|
|
|
|
|
|
|
/** Endpoint direction mask, for masking against endpoint addresses to retrieve the endpoint's
|
|
|
|
|
* direction for comparing with the ENDPOINT_DESCRIPTOR_DIR_* masks.
|
|
|
|
|
* direction for comparing with the \c ENDPOINT_DESCRIPTOR_DIR_* masks.
|
|
|
|
|
*/
|
|
|
|
|
#define PIPE_EPDIR_MASK 0x80
|
|
|
|
|
|
|
|
|
|
/* Enums: */
|
|
|
|
|
/** Enum for the possible error return codes of the Pipe_WaitUntilReady function.
|
|
|
|
|
/** Enum for the possible error return codes of the \ref Pipe_WaitUntilReady() function.
|
|
|
|
|
*
|
|
|
|
|
* \ingroup Group_PipeRW
|
|
|
|
|
*/
|
|
|
|
@ -218,7 +218,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \ingroup Group_PipeRW
|
|
|
|
|
*
|
|
|
|
|
* \return Total number of bytes in the currently selected Pipe's FIFO buffer.
|
|
|
|
|
* \return Total number of bytes in the currently selected pipe's FIFO buffer.
|
|
|
|
|
*/
|
|
|
|
|
static inline uint16_t Pipe_BytesInPipe(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline uint16_t Pipe_BytesInPipe(void)
|
|
|
|
@ -281,7 +281,7 @@
|
|
|
|
|
|
|
|
|
|
/** Determines if the currently selected pipe is enabled, but not necessarily configured.
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean True if the currently selected pipe is enabled, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the currently selected pipe is enabled, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsEnabled(void)
|
|
|
|
@ -291,7 +291,7 @@
|
|
|
|
|
|
|
|
|
|
/** Gets the current pipe token, indicating the pipe's data direction and type.
|
|
|
|
|
*
|
|
|
|
|
* \return The current pipe token, as a PIPE_TOKEN_* mask.
|
|
|
|
|
* \return The current pipe token, as a \c PIPE_TOKEN_* mask.
|
|
|
|
|
*/
|
|
|
|
|
static inline uint8_t Pipe_GetPipeToken(void) ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline uint8_t Pipe_GetPipeToken(void)
|
|
|
|
@ -299,12 +299,12 @@
|
|
|
|
|
return (UPCFG0X & (0x03 << PTOKEN0));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Sets the token for the currently selected pipe to one of the tokens specified by the PIPE_TOKEN_*
|
|
|
|
|
/** Sets the token for the currently selected pipe to one of the tokens specified by the \c PIPE_TOKEN_*
|
|
|
|
|
* masks. This can be used on CONTROL type pipes, to allow for bidirectional transfer of data during
|
|
|
|
|
* control requests, or on regular pipes to allow for half-duplex bidirectional data transfer to devices
|
|
|
|
|
* which have two endpoints of opposite direction sharing the same endpoint address within the device.
|
|
|
|
|
*
|
|
|
|
|
* \param[in] Token New pipe token to set the selected pipe to, as a PIPE_TOKEN_* mask.
|
|
|
|
|
* \param[in] Token New pipe token to set the selected pipe to, as a \c PIPE_TOKEN_* mask.
|
|
|
|
|
*/
|
|
|
|
|
static inline void Pipe_SetPipeToken(const uint8_t Token) ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline void Pipe_SetPipeToken(const uint8_t Token)
|
|
|
|
@ -333,7 +333,7 @@
|
|
|
|
|
|
|
|
|
|
/** Determines if the currently selected pipe is configured.
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the selected pipe is configured, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the selected pipe is configured, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsConfigured(void)
|
|
|
|
@ -378,7 +378,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \param[in] PipeNumber Index of the pipe whose interrupt flag should be tested.
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the specified pipe has interrupted, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the specified pipe has interrupted, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_HasPipeInterrupted(const uint8_t PipeNumber) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_HasPipeInterrupted(const uint8_t PipeNumber)
|
|
|
|
@ -402,7 +402,7 @@
|
|
|
|
|
|
|
|
|
|
/** Determines if the currently selected pipe is frozen, and not able to accept data.
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the currently selected pipe is frozen, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the currently selected pipe is frozen, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsFrozen(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsFrozen(void)
|
|
|
|
@ -422,7 +422,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \see \ref Pipe_GetErrorFlags() macro for information on retrieving the exact error flag.
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if an error has occurred on the selected pipe, false otherwise.
|
|
|
|
|
* \return Boolean \c true if an error has occurred on the selected pipe, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsError(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsError(void)
|
|
|
|
@ -440,9 +440,9 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Gets a mask of the hardware error flags which have occurred on the currently selected pipe. This
|
|
|
|
|
* value can then be masked against the PIPE_ERRORFLAG_* masks to determine what error has occurred.
|
|
|
|
|
* value can then be masked against the \c PIPE_ERRORFLAG_* masks to determine what error has occurred.
|
|
|
|
|
*
|
|
|
|
|
* \return Mask comprising of PIPE_ERRORFLAG_* bits indicating what error has occurred on the selected pipe.
|
|
|
|
|
* \return Mask comprising of \c PIPE_ERRORFLAG_* bits indicating what error has occurred on the selected pipe.
|
|
|
|
|
*/
|
|
|
|
|
static inline uint8_t Pipe_GetErrorFlags(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline uint8_t Pipe_GetErrorFlags(void)
|
|
|
|
@ -476,7 +476,8 @@
|
|
|
|
|
*
|
|
|
|
|
* \ingroup Group_PipePacketManagement
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the currently selected pipe may be read from or written to, depending on its direction.
|
|
|
|
|
* \return Boolean \c true if the currently selected pipe may be read from or written to, depending
|
|
|
|
|
* on its direction.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsReadWriteAllowed(void)
|
|
|
|
@ -488,7 +489,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \ingroup Group_PipePacketManagement
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the current pipe has received an IN packet, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the current pipe has received an IN packet, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsINReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsINReceived(void)
|
|
|
|
@ -500,7 +501,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \ingroup Group_PipePacketManagement
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the current pipe is ready for an OUT packet, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the current pipe is ready for an OUT packet, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsOUTReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsOUTReady(void)
|
|
|
|
@ -513,7 +514,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \ingroup Group_PipePacketManagement
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the current pipe is ready for a SETUP packet, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the current pipe is ready for a SETUP packet, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsSETUPSent(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsSETUPSent(void)
|
|
|
|
@ -561,7 +562,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \ingroup Group_PipePacketManagement
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if an NAK has been received on the current pipe, false otherwise.
|
|
|
|
|
* \return Boolean \c true if an NAK has been received on the current pipe, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsNAKReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsNAKReceived(void)
|
|
|
|
@ -585,7 +586,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \ingroup Group_PipePacketManagement
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the current pipe has been stalled by the attached device, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the current pipe has been stalled by the attached device, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
static inline bool Pipe_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
|
|
|
|
static inline bool Pipe_IsStalled(void)
|
|
|
|
@ -843,7 +844,7 @@
|
|
|
|
|
*
|
|
|
|
|
* \param[in] Number Pipe number to configure. This must be more than 0 and less than \ref PIPE_TOTAL_PIPES.
|
|
|
|
|
*
|
|
|
|
|
* \param[in] Type Type of pipe to configure, a EP_TYPE_* mask. Not all pipe types are available on Low
|
|
|
|
|
* \param[in] Type Type of pipe to configure, an \c EP_TYPE_* mask. Not all pipe types are available on Low
|
|
|
|
|
* Speed USB devices - refer to the USB 2.0 specification.
|
|
|
|
|
*
|
|
|
|
|
* \param[in] Token Pipe data token, either \ref PIPE_TOKEN_SETUP, \ref PIPE_TOKEN_OUT or \ref PIPE_TOKEN_IN.
|
|
|
|
@ -857,11 +858,11 @@
|
|
|
|
|
* the pipe's data direction). The bank size must indicate the maximum packet size that
|
|
|
|
|
* the pipe can handle.
|
|
|
|
|
*
|
|
|
|
|
* \param[in] Banks Number of banks to use for the pipe being configured, a PIPE_BANK_* mask. More banks
|
|
|
|
|
* \param[in] Banks Number of banks to use for the pipe being configured, a \c PIPE_BANK_* mask. More banks
|
|
|
|
|
* uses more USB DPRAM, but offers better performance. Isochronous type pipes <b>must</b>
|
|
|
|
|
* have at least two banks.
|
|
|
|
|
*
|
|
|
|
|
* \note When the ORDERED_EP_CONFIG compile time option is used, Pipes <b>must</b> be configured in ascending order,
|
|
|
|
|
* \note When the \c ORDERED_EP_CONFIG compile time option is used, Pipes <b>must</b> be configured in ascending order,
|
|
|
|
|
* or bank corruption will occur.
|
|
|
|
|
* \n\n
|
|
|
|
|
*
|
|
|
|
@ -876,7 +877,7 @@
|
|
|
|
|
* \note This routine will automatically select the specified pipe upon success. Upon failure, the pipe which
|
|
|
|
|
* failed to reconfigure correctly will be selected.
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if the configuration succeeded, false otherwise.
|
|
|
|
|
* \return Boolean \c true if the configuration succeeded, \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
bool Pipe_ConfigurePipe(const uint8_t Number,
|
|
|
|
|
const uint8_t Type,
|
|
|
|
@ -899,8 +900,8 @@
|
|
|
|
|
*
|
|
|
|
|
* \param[in] EndpointAddress Address and direction mask of the endpoint within the attached device to check.
|
|
|
|
|
*
|
|
|
|
|
* \return Boolean true if a pipe bound to the given endpoint address of the specified direction is found, false
|
|
|
|
|
* otherwise.
|
|
|
|
|
* \return Boolean \c true if a pipe bound to the given endpoint address of the specified direction is found,
|
|
|
|
|
* \c false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
bool Pipe_IsEndpointBound(const uint8_t EndpointAddress);
|
|
|
|
|
|
|
|
|
|