Pipe management definitions.
This module contains functions, macros and enums related to pipe management when in USB Host mode. This module contains the pipe management macros, as well as pipe interrupt and data send/receive functions for various data types.
|
| static uint8_t | Pipe_GetCurrentPipe (const uint8_t corenum) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Returns the pipe address of the currently selected pipe. This is typically used to save the currently selected pipe number so that it can be restored after another pipe has been manipulated.
|
| |
| static void | Pipe_SelectPipe (const uint8_t corenum, const uint8_t PipeNumber) ATTR_ALWAYS_INLINE |
| | Selects the given pipe number. Any pipe operations which do not require the pipe number to be indicated will operate on the currently selected pipe.
|
| |
| static void | Pipe_ResetPipe (const uint8_t corenum, const uint8_t PipeNumber) ATTR_ALWAYS_INLINE |
| | Resets the desired pipe, including the pipe banks and flags.
|
| |
| static void | Pipe_EnablePipe (void) ATTR_ALWAYS_INLINE |
| |
| static void | Pipe_DisablePipe (void) ATTR_ALWAYS_INLINE |
| |
| static bool | Pipe_IsEnabled (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Determines if the currently selected pipe is enabled, but not necessarily configured.
|
| |
| static uint8_t | Pipe_GetPipeToken (const uint8_t corenum) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Gets the current pipe token, indicating the pipe's data direction and type.
|
| |
| static void | Pipe_SetPipeToken (const uint8_t Token) ATTR_DEPRECATED ATTR_ALWAYS_INLINE |
| | Sets the token for the currently selected pipe to one of the tokens specified by the 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.
|
| |
| static void | Pipe_SetInfiniteINRequests (void) ATTR_DEPRECATED ATTR_ALWAYS_INLINE |
| |
| static void | Pipe_SetFiniteINRequests (const uint8_t TotalINRequests) ATTR_DEPRECATED ATTR_ALWAYS_INLINE |
| | Configures the currently selected pipe to only allow the specified number of IN requests to be accepted by the pipe before it is automatically frozen.
|
| |
| static bool | Pipe_IsConfigured (const uint8_t corenum) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Determines if the currently selected pipe is configured.
|
| |
| static uint8_t | Pipe_GetBoundEndpointAddress (const uint8_t corenum) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Retrieves the endpoint address of the endpoint within the attached device that the currently selected pipe is bound to.
|
| |
| static void | Pipe_SetInterruptPeriod (const uint8_t Milliseconds) ATTR_ALWAYS_INLINE |
| | Sets the period between interrupts for an INTERRUPT type pipe to a specified number of milliseconds.
|
| |
| static uint8_t | Pipe_GetPipeInterrupts (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Returns a mask indicating which pipe's interrupt periods have elapsed, indicating that the pipe should be serviced.
|
| |
| static bool | Pipe_HasPipeInterrupted (const uint8_t PipeNumber) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Determines if the specified pipe number has interrupted (valid only for INTERRUPT type pipes).
|
| |
| static void | Pipe_Unfreeze (void) ATTR_ALWAYS_INLINE |
| |
| static void | Pipe_Freeze (void) ATTR_ALWAYS_INLINE |
| |
| static bool | Pipe_IsFrozen (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Determines if the currently selected pipe is frozen, and not able to accept data.
|
| |
| static void | Pipe_ClearError (void) ATTR_ALWAYS_INLINE |
| |
| static bool | Pipe_IsError (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | Determines if the master pipe error flag is set for the currently selected pipe, indicating that some sort of hardware error has occurred on the pipe.
|
| |
| static uint8_t | Pipe_GetErrorFlags (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
| | 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.
|
| |
| bool | Pipe_ConfigurePipe (const uint8_t corenum, const uint8_t Number, const uint8_t Type, const uint8_t Token, const uint8_t EndpointNumber, const uint16_t Size, const uint8_t Banks) |
| | Configures the specified pipe number with the given pipe type, token, target endpoint number in the attached device, bank size and banking mode.
|
| |
| void | Pipe_ClosePipe (const uint8_t corenum, uint8_t pipenum) |
| |
| bool | Pipe_IsEndpointBound (const uint8_t EndpointAddress) ATTR_WARN_UNUSED_RESULT |
| | Determines if a pipe has been bound to the given device endpoint address. If a pipe which is bound to the given endpoint is found, it is automatically selected.
|
| |
| bool Pipe_ConfigurePipe |
( |
const uint8_t |
corenum, |
|
|
const uint8_t |
Number, |
|
|
const uint8_t |
Type, |
|
|
const uint8_t |
Token, |
|
|
const uint8_t |
EndpointNumber, |
|
|
const uint16_t |
Size, |
|
|
const uint8_t |
Banks |
|
) |
| |
Configures the specified pipe number with the given pipe type, token, target endpoint number in the attached device, bank size and banking mode.
Global indicating the maximum packet size of the default control pipe located at address 0 in the device. This value is set to the value indicated in the attached device's device descriptor once the USB interface is initialized into host mode and a device is attached to the USB bus.
- Note
- This variable should be treated as read-only in the user application, and never manually changed in value. A newly configured pipe is frozen by default, and must be unfrozen before use via the Pipe_Unfreeze() before being used. Pipes should be kept frozen unless waiting for data from a device while in IN mode, or sending data to the device in OUT mode. IN type pipes are also automatically configured to accept infinite numbers of IN requests without automatic freezing - this can be overridden by a call to Pipe_SetFiniteINRequests().
- Parameters
-
| corenum | : USB port number |
| Number | : Pipe number to configure. This must be more than 0 and less than PIPE_TOTAL_PIPES. |
| Type | : Type of pipe to configure, an EP_TYPE_* mask. Not all pipe types are available on Low Speed USB devices - refer to the USB 2.0 specification. |
| Token | : Pipe data token, either PIPE_TOKEN_SETUP, PIPE_TOKEN_OUT or PIPE_TOKEN_IN. All pipes (except Control type) are unidirectional - data may only be read from or written to the pipe bank based on its direction, not both. |
| EndpointNumber | : Endpoint index within the attached device that the pipe should interface to. |
| Size | : Size of the pipe's bank, where packets are stored before they are transmitted to the USB device, or after they have been received from the USB device (depending on the pipe's data direction). The bank size must indicate the maximum packet size that the pipe can handle. |
| Banks | : Number of banks to use for the pipe being configured, a PIPE_BANK_* mask. More banks uses more USB DPRAM, but offers better performance. Isochronous type pipes must have at least two banks. |
- Note
- When the
ORDERED_EP_CONFIG compile time option is used, Pipes must be configured in ascending order, or bank corruption will occur.
-
Certain microcontroller model's pipes may have different maximum packet sizes based on the pipe's index - refer to the chosen microcontroller's datasheet to determine the maximum bank size for each pipe.
-
The default control pipe should not be manually configured by the user application, as it is automatically configured by the library internally.
-
This routine will automatically select the specified pipe upon success. Upon failure, the pipe which failed to reconfigure correctly will be selected.
- Returns
- Boolean
true if the configuration succeeded, false otherwise.
Definition at line 45 of file Pipe.c.