UDP low-level driver for USB device mode.
The following UDP driver configuration must be included in the conf_usb.h file of the application.
UDD_USB_INT_LEVEL
Option to change the interrupt priority (0 to 15) by default 5 (recommended).
UDD_USB_INT_FUN
Option to fit interrupt function to what defined in exception table.
UDD_NO_SLEEP_MGR
Feature to work without sleep manager module. Default not defined. Note that with this feature defined sleep manager must not be used in application.
The USB driver is fully managed by interrupt and does not request periodic task. Thereby, the USB events use callbacks to transfer the information. The callbacks are declared in static during compilation or in variable during code execution.
Static declarations defined in conf_usb.h:
Dynamic callbacks, called "endpoint job" , are registered in udd_ep_job_t structure via the following functions:
The Sleep modes authorized :
Macros | |
#define | UDC_VBUS_EVENT(present) |
#define | UDD_USB_INT_FUN UDP_Handler |
Functions | |
ISR (UDD_USB_INT_FUN) | |
Function called by UDP interrupt to manage USB Device interrupts. More... | |
void | udd_attach (void) |
Attach device to the bus when possible. More... | |
void | udd_detach (void) |
Detaches the device from the bus. More... | |
void | udd_disable (void) |
Disables the USB Device mode. More... | |
void | udd_enable (void) |
Enables the USB Device mode. More... | |
uint16_t | udd_get_frame_number (void) |
Returns the current start of frame number. More... | |
uint16_t | udd_get_micro_frame_number (void) |
Returns the current micro start of frame number. More... | |
uint8_t | udd_getaddress (void) |
Returns the USB address of device. More... | |
bool | udd_include_vbus_monitoring (void) |
Authorizes the VBUS event. More... | |
bool | udd_is_high_speed (void) |
Test whether the USB Device Controller is running at high speed or not. More... | |
void | udd_send_remotewakeup (void) |
The USB driver sends a resume signal called Upstream Resume. More... | |
void | udd_set_address (uint8_t address) |
Changes the USB address of device. More... | |
void | udd_set_setup_payload (uint8_t *payload, uint16_t payload_size) |
Load setup payload. More... | |
Power management routine. | |
static void | udd_sleep_mode (bool b_idle) |
Control endpoint low level management routine. | |
This function performs control endpoint management. It handle the SETUP/DATA/HANDSHAKE phases of a control transaction. | |
enum | udd_ctrl_ep_state_t { UDD_EPCTRL_SETUP = 0, UDD_EPCTRL_DATA_OUT = 1, UDD_EPCTRL_DATA_IN = 2, UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP = 3, UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP = 4, UDD_EPCTRL_STALL_REQ = 5 } |
Bit definitions about endpoint control state machine for udd_ep_control_state. More... | |
COMPILER_WORD_ALIGNED udd_ctrl_request_t | udd_g_ctrlreq |
Global variable to give and record information about setup request management. More... | |
static udd_ctrl_ep_state_t | udd_ep_control_state |
State of the endpoint control management. More... | |
static uint16_t | udd_ctrl_prev_payload_nb_trans |
Total number of data received/sent during data packet phase with previous payload buffers. More... | |
static uint16_t | udd_ctrl_payload_nb_trans |
Number of data received/sent to/from udd_g_ctrlreq.payload buffer. More... | |
static void | udd_reset_ep_ctrl (void) |
Reset control endpoint. More... | |
static void | udd_ctrl_init (void) |
Reset control endpoint management. More... | |
static void | udd_ctrl_setup_received (void) |
Managed reception of SETUP packet on control endpoint. More... | |
static void | udd_ctrl_in_sent (void) |
Managed reception of IN packet on control endpoint. More... | |
static void | udd_ctrl_out_received (void) |
Managed reception of OUT packet on control endpoint. More... | |
static void | udd_ctrl_stall_data (void) |
Managed stall event of IN/OUT packet on control endpoint. More... | |
static void | udd_ctrl_send_zlp_in (void) |
Send a ZLP IN on control endpoint. More... | |
static void | udd_ctrl_send_zlp_out (void) |
Send a ZLP OUT on control endpoint. More... | |
static void | udd_ctrl_endofrequest (void) |
Call callback associated to setup request. More... | |
static bool | udd_ctrl_interrupt (void) |
Main interrupt routine for control endpoint. More... | |
UDP Device properties | |
#define | udd_get_endpoint_max_nbr() (7) |
Get maximal number of endpoints (3S 4S 4E, 0~7) More... | |
#define | UDD_MAX_PEP_NB (udd_get_endpoint_max_nbr()+1) |
#define | udd_get_endpoint_bank_max_nbr(ep) (((ep)==0||(ep)==3)?1:2) |
Get maximal number of banks of endpoint (3S, 1~2) More... | |
#define | udd_get_endpoint_size_max(ep) (((ep)==4||(ep)==5)?512:64) |
Get maximal size of endpoint (3S, 512/64) More... | |
#define | udd_is_endpoint_support_iso(ep) (((ep)==0||(ep)==3)?false:true) |
Get isochronous support (3S, endpoints 0 and 3 not support) More... | |
#define | Is_udd_endpoint_dma_supported(ep) (false) |
Get DMA support of endpoints (3S, always false) More... | |
#define | Is_udd_endpoint_high_bw_supported(ep) (false) |
Get High Band Width support of endpoints (3S, always false) More... | |
UDP Device vbus pin management | |
UDP peripheral does not support vbus management and it's monitored by a PIO pin. This feature is optional, and it is enabled if USB_VBUS_PIN is defined in board.h and CONF_BOARD_USB_VBUS_DETECT defined in conf_board.h.
| |
#define | UDD_VBUS_DETECT |
#define | UDD_VBUS_IO (defined(USB_VBUS_PIN) && UDD_VBUS_DETECT) |
#define | USB_VBUS_WKUP 0 |
#define | udd_vbus_init(handler) |
#define | Is_udd_vbus_high() ioport_get_pin_level(USB_VBUS_PIN) |
#define | Is_udd_vbus_low() (!Is_udd_vbus_high()) |
#define | udd_enable_vbus_interrupt() pio_enable_pin_interrupt(USB_VBUS_PIN) |
#define | udd_disable_vbus_interrupt() pio_disable_pin_interrupt(USB_VBUS_PIN) |
#define | udd_ack_vbus_interrupt(high) |
UDP peripheral enable/disable | |
| |
#define | udd_enable_periph_ck() pmc_enable_periph_clk(ID_UDP) |
#define | udd_disable_periph_ck() pmc_disable_periph_clk(ID_UDP) |
#define | Is_udd_periph_ck_enabled() pmc_is_periph_clk_enabled(ID_UDP) |
UDP device attach control (by Pull-up) | |
#define | udd_detach_device() ( Clr_bits(UDP->UDP_TXVC, UDP_TXVC_PUON)) |
detaches from USB bus More... | |
#define | udd_attach_device() ( Set_bits(UDP->UDP_TXVC, UDP_TXVC_PUON)) |
attaches to USB bus More... | |
#define | Is_udd_detached() (!Tst_bits(UDP->UDP_TXVC, UDP_TXVC_PUON)) |
test if the device is detached More... | |
USBB UDP transceiver management | |
#define | udd_enable_transceiver() ( Clr_bits(UDP->UDP_TXVC, UDP_TXVC_TXVDIS)) |
#define | udd_disable_transceiver() ( Set_bits(UDP->UDP_TXVC, UDP_TXVC_TXVDIS)) |
#define | Is_udd_transceiver_enabled() (!Tst_bits(UDP->UDP_TXVC, UDP_TXVC_TXVDIS)) |
UDP device bus events control | |
#define | udd_disable_all_events() (UDP->IDR = 0xFFFF) |
Manage misc events. More... | |
#define | udd_disable_endpoint_events() (UDP->IDR = 0xFF) |
#define | udd_enable_wakeups() (UDP->UDP_IER = (UDP_IER_RXRSM|UDP_IER_EXTRSM|UDP_IER_WAKEUP)) |
#define | udd_disable_wakeups() (UDP->UDP_IDR = (UDP_IDR_RXRSM|UDP_IDR_EXTRSM|UDP_IDR_WAKEUP)) |
#define | udd_ack_wakeups() (UDP->UDP_ICR = (UDP_ICR_RXRSM|UDP_ICR_EXTRSM|UDP_ICR_WAKEUP)) |
#define | Is_udd_any_wakeup() (Tst_bits(UDP->UDP_ISR, (UDP_ICR_RXRSM|UDP_ICR_EXTRSM|UDP_ICR_WAKEUP))) |
#define | Is_udd_expected_wakeup() ((UDP->UDP_ISR & (UDP_ICR_RXRSM|UDP_ICR_EXTRSM|UDP_ICR_WAKEUP)) & UDP->UDP_IMR) |
#define | udd_enable_remote_wake_up() ( Set_bits(UDP->UDP_GLB_STAT, UDP_GLB_STAT_RMWUPE)) |
Manage remote wake-up event. More... | |
#define | udd_disable_remote_wake_up() ( Clr_bits(UDP->UDP_GLB_STAT, UDP_GLB_STAT_RMWUPE)) |
#define | Is_udd_remote_wake_up_enabled() ( Tst_bits(UDP->UDP_GLB_STAT, UDP_GLB_STAT_RMWUPE)) |
#define | udd_initiate_remote_wake_up() |
#define | Is_udd_pending_remote_wake_up() ( Tst_bits(UDP->UDP_GLB_STAT, UDP_GLB_STAT_RSMINPR)) |
#define | udd_enable_ext_resume_interrupt() (UDP->UDP_IER = UDP_IER_EXTRSM) |
Manage end of resume event (ext/rx resume) The USB controller detects a valid "End of Resume" signal initiated by the host or detects a external "Resume" signal. More... | |
#define | udd_disable_ext_resume_interrupt() (UDP->UDP_IDR = UDP_IER_EXTRSM) |
#define | Is_udd_ext_resume_interrupt_enabled() (Tst_bits(UDP->UDP_IMR, UDP_IMR_EXTRSM)) |
#define | udd_ack_ext_resume() (UDP->UDP_ICR = UDP_IER_EXTRSM) |
#define | Is_udd_ext_resume() (Tst_bits(UDP->UDP_ISR, UDP_IER_EXTRSM)) |
#define | udd_enable_resume_interrupt() (UDP->UDP_IER = UDP_IER_RXRSM) |
#define | udd_disable_resume_interrupt() (UDP->UDP_IDR = UDP_IDR_RXRSM) |
#define | Is_udd_resume_interrupt_enabled() (Tst_bits(UDP->UDP_IMR, UDP_IMR_RXRSM)) |
#define | udd_ack_resume() (UDP->UDP_ICR = UDP_ICR_RXRSM) |
#define | Is_udd_resume() (Tst_bits(UDP->UDP_ISR, UDP_ISR_RXRSM)) |
#define | udd_enable_wake_up_interrupt() (UDP->UDP_IER = UDP_IER_WAKEUP) |
Manage wake-up event (=usb line activity) The USB controller is reactivated by a filtered non-idle signal from the lines. More... | |
#define | udd_disable_wake_up_interrupt() (UDP->UDP_IDR = UDP_IDR_WAKEUP) |
#define | Is_udd_wake_up_interrupt_enabled() (Tst_bits(UDP->UDP_IMR, UDP_IMR_WAKEUP)) |
#define | udd_ack_wake_up() (UDP->UDP_ICR = UDP_ICR_WAKEUP) |
#define | Is_udd_wake_up() (Tst_bits(UDP->UDP_ISR, UDP_ISR_WAKEUP)) |
#define | udd_ack_reset() (UDP->UDP_ICR = UDP_ISR_ENDBUSRES) |
Manage reset event Set when a USB "End of Reset" has been detected. More... | |
#define | Is_udd_reset() (Tst_bits(UDP->UDP_ISR, UDP_ISR_ENDBUSRES)) |
#define | udd_enable_sof_interrupt() (UDP->UDP_IER = UDP_ISR_SOFINT) |
Manage start of frame event. More... | |
#define | udd_disable_sof_interrupt() (UDP->UDP_IDR = UDP_ISR_SOFINT) |
#define | Is_udd_sof_interrupt_enabled() (Tst_bits(UDP->UDP_IMR, UDP_ISR_SOFINT)) |
#define | udd_ack_sof() (UDP->UDP_ICR = UDP_ISR_SOFINT) |
#define | Is_udd_sof() (Tst_bits(UDP->UDP_ISR, UDP_ISR_SOFINT)) |
#define | udd_frame_number() (Rd_bitfield(UDP->UDP_FRM_NUM, UDP_FRM_NUM_FRM_NUM_Msk)) |
#define | Is_udd_frame_number_crc_error() (Tst_bits(UDP->UDP_FRM_NUM, UDP_FRM_NUM_FRM_ERR)) |
#define | udd_enable_suspend_interrupt() (UDP->UDP_IER = UDP_ISR_RXSUSP) |
Manage suspend event. More... | |
#define | udd_disable_suspend_interrupt() (UDP->UDP_IDR = UDP_ISR_RXSUSP) |
#define | Is_udd_suspend_interrupt_enabled() (Tst_bits(UDP->UDP_IMR, UDP_ISR_RXSUSP)) |
#define | udd_ack_suspend() (UDP->UDP_ICR = UDP_ISR_RXSUSP) |
#define | udd_raise_suspend() (UDP->UDP_ISR = UDP_ISR_RXSUSP) |
#define | Is_udd_suspend() (Tst_bits(UDP->UDP_ISR, UDP_ISR_RXSUSP)) |
#define Is_udd_any_wakeup | ( | ) | (Tst_bits(UDP->UDP_ISR, (UDP_ICR_RXRSM|UDP_ICR_EXTRSM|UDP_ICR_WAKEUP))) |
#define Is_udd_detached | ( | ) | (!Tst_bits(UDP->UDP_TXVC, UDP_TXVC_PUON)) |
test if the device is detached
#define Is_udd_endpoint_dma_supported | ( | ep | ) | (false) |
Get DMA support of endpoints (3S, always false)
#define Is_udd_endpoint_high_bw_supported | ( | ep | ) | (false) |
Get High Band Width support of endpoints (3S, always false)
#define Is_udd_expected_wakeup | ( | ) | ((UDP->UDP_ISR & (UDP_ICR_RXRSM|UDP_ICR_EXTRSM|UDP_ICR_WAKEUP)) & UDP->UDP_IMR) |
#define Is_udd_ext_resume_interrupt_enabled | ( | ) | (Tst_bits(UDP->UDP_IMR, UDP_IMR_EXTRSM)) |
Referenced by ISR().
#define Is_udd_frame_number_crc_error | ( | ) | (Tst_bits(UDP->UDP_FRM_NUM, UDP_FRM_NUM_FRM_ERR)) |
#define Is_udd_pending_remote_wake_up | ( | ) | ( Tst_bits(UDP->UDP_GLB_STAT, UDP_GLB_STAT_RSMINPR)) |
#define Is_udd_periph_ck_enabled | ( | ) | pmc_is_periph_clk_enabled(ID_UDP) |
#define Is_udd_remote_wake_up_enabled | ( | ) | ( Tst_bits(UDP->UDP_GLB_STAT, UDP_GLB_STAT_RMWUPE)) |
#define Is_udd_resume_interrupt_enabled | ( | ) | (Tst_bits(UDP->UDP_IMR, UDP_IMR_RXRSM)) |
Referenced by ISR().
#define Is_udd_sof_interrupt_enabled | ( | ) | (Tst_bits(UDP->UDP_IMR, UDP_ISR_SOFINT)) |
Referenced by ISR().
#define Is_udd_suspend_interrupt_enabled | ( | ) | (Tst_bits(UDP->UDP_IMR, UDP_ISR_RXSUSP)) |
Referenced by ISR().
#define Is_udd_transceiver_enabled | ( | ) | (!Tst_bits(UDP->UDP_TXVC, UDP_TXVC_TXVDIS)) |
#define Is_udd_vbus_high | ( | ) | ioport_get_pin_level(USB_VBUS_PIN) |
Referenced by udd_enable().
#define Is_udd_vbus_low | ( | ) | (!Is_udd_vbus_high()) |
#define Is_udd_wake_up_interrupt_enabled | ( | ) | (Tst_bits(UDP->UDP_IMR, UDP_IMR_WAKEUP)) |
Referenced by ISR().
#define UDC_VBUS_EVENT | ( | present | ) |
#define udd_ack_ext_resume | ( | ) | (UDP->UDP_ICR = UDP_IER_EXTRSM) |
#define udd_ack_reset | ( | ) | (UDP->UDP_ICR = UDP_ISR_ENDBUSRES) |
Manage reset event Set when a USB "End of Reset" has been detected.
Referenced by ISR().
#define udd_ack_resume | ( | ) | (UDP->UDP_ICR = UDP_ICR_RXRSM) |
#define udd_ack_sof | ( | ) | (UDP->UDP_ICR = UDP_ISR_SOFINT) |
Referenced by ISR().
#define udd_ack_suspend | ( | ) | (UDP->UDP_ICR = UDP_ISR_RXSUSP) |
Referenced by ISR().
#define udd_ack_vbus_interrupt | ( | high | ) |
#define udd_ack_wake_up | ( | ) | (UDP->UDP_ICR = UDP_ICR_WAKEUP) |
#define udd_ack_wakeups | ( | ) | (UDP->UDP_ICR = (UDP_ICR_RXRSM|UDP_ICR_EXTRSM|UDP_ICR_WAKEUP)) |
Referenced by ISR().
#define udd_attach_device | ( | ) | ( Set_bits(UDP->UDP_TXVC, UDP_TXVC_PUON)) |
attaches to USB bus
Referenced by udd_attach().
#define udd_detach_device | ( | ) | ( Clr_bits(UDP->UDP_TXVC, UDP_TXVC_PUON)) |
detaches from USB bus
Referenced by udd_detach().
#define udd_disable_all_events | ( | ) | (UDP->IDR = 0xFFFF) |
Manage misc events.
#define udd_disable_endpoint_events | ( | ) | (UDP->IDR = 0xFF) |
#define udd_disable_ext_resume_interrupt | ( | ) | (UDP->UDP_IDR = UDP_IER_EXTRSM) |
#define udd_disable_periph_ck | ( | ) | pmc_disable_periph_clk(ID_UDP) |
Referenced by ISR().
#define udd_disable_remote_wake_up | ( | ) | ( Clr_bits(UDP->UDP_GLB_STAT, UDP_GLB_STAT_RMWUPE)) |
#define udd_disable_resume_interrupt | ( | ) | (UDP->UDP_IDR = UDP_IDR_RXRSM) |
#define udd_disable_sof_interrupt | ( | ) | (UDP->UDP_IDR = UDP_ISR_SOFINT) |
#define udd_disable_suspend_interrupt | ( | ) | (UDP->UDP_IDR = UDP_ISR_RXSUSP) |
Referenced by ISR().
#define udd_disable_transceiver | ( | ) | ( Set_bits(UDP->UDP_TXVC, UDP_TXVC_TXVDIS)) |
Referenced by udd_detach().
#define udd_disable_vbus_interrupt | ( | ) | pio_disable_pin_interrupt(USB_VBUS_PIN) |
#define udd_disable_wake_up_interrupt | ( | ) | (UDP->UDP_IDR = UDP_IDR_WAKEUP) |
#define udd_disable_wakeups | ( | ) | (UDP->UDP_IDR = (UDP_IDR_RXRSM|UDP_IDR_EXTRSM|UDP_IDR_WAKEUP)) |
Referenced by ISR().
#define udd_enable_ext_resume_interrupt | ( | ) | (UDP->UDP_IER = UDP_IER_EXTRSM) |
Manage end of resume event (ext/rx resume) The USB controller detects a valid "End of Resume" signal initiated by the host or detects a external "Resume" signal.
Referenced by ISR(), and udd_attach().
#define udd_enable_periph_ck | ( | ) | pmc_enable_periph_clk(ID_UDP) |
Referenced by ISR(), udd_attach(), udd_enable(), and udd_send_remotewakeup().
#define udd_enable_remote_wake_up | ( | ) | ( Set_bits(UDP->UDP_GLB_STAT, UDP_GLB_STAT_RMWUPE)) |
Manage remote wake-up event.
#define udd_enable_resume_interrupt | ( | ) | (UDP->UDP_IER = UDP_IER_RXRSM) |
Referenced by ISR(), and udd_attach().
#define udd_enable_sof_interrupt | ( | ) | (UDP->UDP_IER = UDP_ISR_SOFINT) |
Manage start of frame event.
Referenced by ISR(), and udd_attach().
#define udd_enable_suspend_interrupt | ( | ) | (UDP->UDP_IER = UDP_ISR_RXSUSP) |
Manage suspend event.
Referenced by ISR(), and udd_attach().
#define udd_enable_transceiver | ( | ) | ( Clr_bits(UDP->UDP_TXVC, UDP_TXVC_TXVDIS)) |
Referenced by udd_attach().
#define udd_enable_vbus_interrupt | ( | ) | pio_enable_pin_interrupt(USB_VBUS_PIN) |
#define udd_enable_wake_up_interrupt | ( | ) | (UDP->UDP_IER = UDP_IER_WAKEUP) |
Manage wake-up event (=usb line activity) The USB controller is reactivated by a filtered non-idle signal from the lines.
Referenced by ISR(), and udd_attach().
#define udd_enable_wakeups | ( | ) | (UDP->UDP_IER = (UDP_IER_RXRSM|UDP_IER_EXTRSM|UDP_IER_WAKEUP)) |
#define udd_frame_number | ( | ) | (Rd_bitfield(UDP->UDP_FRM_NUM, UDP_FRM_NUM_FRM_NUM_Msk)) |
Referenced by udd_get_frame_number().
#define udd_get_endpoint_bank_max_nbr | ( | ep | ) | (((ep)==0||(ep)==3)?1:2) |
Get maximal number of banks of endpoint (3S, 1~2)
#define udd_get_endpoint_max_nbr | ( | ) | (7) |
Get maximal number of endpoints (3S 4S 4E, 0~7)
#define udd_get_endpoint_size_max | ( | ep | ) | (((ep)==4||(ep)==5)?512:64) |
Get maximal size of endpoint (3S, 512/64)
#define udd_initiate_remote_wake_up | ( | ) |
Referenced by udd_send_remotewakeup().
#define udd_is_endpoint_support_iso | ( | ep | ) | (((ep)==0||(ep)==3)?false:true) |
Get isochronous support (3S, endpoints 0 and 3 not support)
#define UDD_MAX_PEP_NB (udd_get_endpoint_max_nbr()+1) |
#define udd_raise_suspend | ( | ) | (UDP->UDP_ISR = UDP_ISR_RXSUSP) |
#define UDD_USB_INT_FUN UDP_Handler |
#define UDD_VBUS_DETECT |
#define udd_vbus_init | ( | handler | ) |
Referenced by udd_enable().
#define UDD_VBUS_IO (defined(USB_VBUS_PIN) && UDD_VBUS_DETECT) |
#define USB_VBUS_WKUP 0 |
enum udd_ctrl_ep_state_t |
Bit definitions about endpoint control state machine for udd_ep_control_state.
ISR | ( | UDD_USB_INT_FUN | ) |
Function called by UDP interrupt to manage USB Device interrupts.
USB Device interrupt events are split in three parts:
References cpu_irq_disable(), Is_udd_ext_resume, Is_udd_ext_resume_interrupt_enabled, Is_udd_reset, Is_udd_resume, Is_udd_resume_interrupt_enabled, Is_udd_sof, Is_udd_sof_interrupt_enabled, Is_udd_suspend, Is_udd_suspend_interrupt_enabled, Is_udd_wake_up, Is_udd_wake_up_interrupt_enabled, udc_reset(), UDC_RESUME_EVENT, UDC_SOF_EVENT, udc_sof_notify(), UDC_SUSPEND_EVENT, udd_ack_reset, udd_ack_sof, udd_ack_suspend, udd_ack_wakeups, udd_ctrl_init(), udd_ctrl_interrupt(), udd_disable_address_state, udd_disable_configured_state, udd_disable_periph_ck, udd_disable_suspend_interrupt, udd_disable_wakeups, udd_enable_ext_resume_interrupt, udd_enable_periph_ck, udd_enable_resume_interrupt, udd_enable_sof_interrupt, udd_enable_suspend_interrupt, udd_enable_wake_up_interrupt, udd_reset_ep_ctrl(), and udd_sleep_mode().
void udd_attach | ( | void | ) |
Attach device to the bus when possible.
References cpu_irq_restore(), cpu_irq_save(), udd_attach_device, udd_enable_ext_resume_interrupt, udd_enable_periph_ck, udd_enable_resume_interrupt, udd_enable_sof_interrupt, udd_enable_suspend_interrupt, udd_enable_transceiver, udd_enable_wake_up_interrupt, and udd_sleep_mode().
Referenced by udc_attach(), and udd_enable().
|
static |
Call callback associated to setup request.
Referenced by udd_ctrl_in_sent(), udd_ctrl_out_received(), and udd_ctrl_setup_received().
|
static |
Managed reception of IN packet on control endpoint.
References Assert, cpu_irq_restore(), cpu_irq_save(), Is_udd_bank0_received, udd_ack_in_sent, udd_ctrl_endofrequest(), udd_ctrl_init(), udd_ctrl_payload_nb_trans, udd_ctrl_send_zlp_out(), udd_endpoint_fifo_write, UDD_EPCTRL_DATA_IN, UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP, UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP, udd_set_transmit_ready, and USB_DEVICE_EP_CTRL_SIZE.
Referenced by udd_ctrl_interrupt(), and udd_ctrl_setup_received().
|
static |
Reset control endpoint management.
Called after a USB line reset or at the end of SETUP request (after ZLP)
References NULL, and UDD_EPCTRL_SETUP.
Referenced by ISR(), udd_ctrl_in_sent(), udd_ctrl_out_received(), and udd_ctrl_setup_received().
|
static |
Main interrupt routine for control endpoint.
This switches control endpoint events to correct sub function.
1
if an event about control endpoint is occurred, otherwise 0
. References Is_udd_bank0_received, Is_udd_endpoint_interrupt, Is_udd_in_sent, Is_udd_setup_received, Is_udd_stall, udd_ack_stall, udd_ctrl_in_sent(), udd_ctrl_out_received(), and udd_ctrl_setup_received().
Referenced by ISR().
|
static |
Managed reception of OUT packet on control endpoint.
References NULL, udd_ack_bank0_received, udd_byte_count, udd_ctrl_endofrequest(), udd_ctrl_init(), udd_ctrl_payload_nb_trans, udd_ctrl_send_zlp_in(), udd_ctrl_stall_data(), udd_endpoint_fifo_read, UDD_EPCTRL_DATA_IN, UDD_EPCTRL_DATA_OUT, UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP, and USB_DEVICE_EP_CTRL_SIZE.
Referenced by udd_ctrl_interrupt().
|
static |
Send a ZLP IN on control endpoint.
References UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP, and udd_set_transmit_ready.
Referenced by udd_ctrl_out_received(), and udd_ctrl_setup_received().
|
static |
Send a ZLP OUT on control endpoint.
References UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP.
Referenced by udd_ctrl_in_sent().
|
static |
Managed reception of SETUP packet on control endpoint.
References le16_to_cpu, udc_process_setup(), udd_ack_setup_received, udd_byte_count, udd_ctrl_endofrequest(), udd_ctrl_in_sent(), udd_ctrl_init(), udd_ctrl_send_zlp_in(), udd_ctrl_stall_data(), udd_endpoint_fifo_read, UDD_EPCTRL_DATA_IN, UDD_EPCTRL_DATA_OUT, UDD_EPCTRL_SETUP, udd_set_endpoint_direction_in, and Udd_setup_is_in.
Referenced by udd_ctrl_interrupt().
|
static |
Managed stall event of IN/OUT packet on control endpoint.
References udd_enable_stall_handshake, and UDD_EPCTRL_STALL_REQ.
Referenced by udd_ctrl_out_received(), and udd_ctrl_setup_received().
void udd_detach | ( | void | ) |
Detaches the device from the bus.
The driver must remove pull-up on USB line D- or D+.
References udd_detach_device, udd_disable_transceiver, and udd_sleep_mode().
Referenced by udc_detach(), and udd_disable().
void udd_disable | ( | void | ) |
Disables the USB Device mode.
References cpu_irq_restore(), cpu_irq_save(), sleepmgr_unlock_mode(), and udd_detach().
Referenced by udc_stop().
void udd_enable | ( | void | ) |
Enables the USB Device mode.
References cpu_irq_restore(), cpu_irq_save(), Is_udd_vbus_high, pmc_set_fast_startup_input(), sleepmgr_lock_mode(), sysclk_enable_usb(), udd_attach(), udd_enable_periph_ck, UDD_USB_INT_LEVEL, and udd_vbus_init.
Referenced by udc_start().
uint16_t udd_get_frame_number | ( | void | ) |
Returns the current start of frame number.
References udd_frame_number.
Referenced by main_sof_action(), and udi_cdc_tx_send().
uint16_t udd_get_micro_frame_number | ( | void | ) |
Returns the current micro start of frame number.
Referenced by udi_cdc_tx_send().
uint8_t udd_getaddress | ( | void | ) |
Returns the USB address of device.
References Is_udd_address_state_enabled, and udd_get_configured_address.
Referenced by udc_req_std_dev_set_configuration().
bool udd_include_vbus_monitoring | ( | void | ) |
Authorizes the VBUS event.
Referenced by udc_include_vbus_monitoring().
bool udd_is_high_speed | ( | void | ) |
Test whether the USB Device Controller is running at high speed or not.
true
if the Device is running at high speed mode, otherwise false
. Referenced by main_vendor_iso_out_received(), udc_req_std_dev_get_descriptor(), udc_req_std_dev_set_configuration(), udc_req_std_dev_set_feature(), and udi_cdc_tx_send().
|
static |
Reset control endpoint.
Called after a USB line reset or when UDD is enabled
References cpu_irq_restore(), cpu_irq_save(), udd_configure_address, udd_configure_endpoint, udd_enable_address, udd_enable_endpoint, udd_enable_endpoint_interrupt, and USB_EP_TYPE_CONTROL.
Referenced by ISR().
void udd_send_remotewakeup | ( | void | ) |
The USB driver sends a resume signal called Upstream Resume.
References udd_enable_periph_ck, udd_initiate_remote_wake_up, and udd_sleep_mode().
Referenced by udc_remotewakeup().
void udd_set_address | ( | uint8_t | address | ) |
Changes the USB address of device.
address | New USB address |
References udd_configure_address, udd_disable_address, udd_disable_address_state, udd_enable_address, and udd_enable_address_state.
Referenced by udc_valid_address().
void udd_set_setup_payload | ( | uint8_t * | payload, |
uint16_t | payload_size | ||
) |
Load setup payload.
payload | Pointer on payload |
payload_size | Size of payload |
Referenced by udc_req_std_dev_get_configuration(), udc_req_std_dev_get_descriptor(), udc_req_std_dev_get_status(), udc_req_std_dev_get_str_desc(), and udc_req_std_iface_get_setting().
|
static |
References UNUSED.
Referenced by ISR(), udd_attach(), udd_detach(), and udd_send_remotewakeup().
|
static |
Number of data received/sent to/from udd_g_ctrlreq.payload buffer.
Referenced by udd_ctrl_in_sent(), and udd_ctrl_out_received().
|
static |
Total number of data received/sent during data packet phase with previous payload buffers.
|
static |
State of the endpoint control management.
COMPILER_WORD_ALIGNED udd_ctrl_request_t udd_g_ctrlreq |
Global variable to give and record information about setup request management.
Referenced by main_extra_string(), main_setup_in_received(), main_setup_out_received(), udc_process_setup(), udc_req_ep(), udc_req_iface(), udc_req_std_dev_clear_feature(), udc_req_std_dev_get_configuration(), udc_req_std_dev_get_descriptor(), udc_req_std_dev_get_status(), udc_req_std_dev_get_str_desc(), udc_req_std_dev_set_address(), udc_req_std_dev_set_configuration(), udc_req_std_dev_set_feature(), udc_req_std_iface_get_setting(), udc_req_std_iface_set_setting(), udc_reqstd(), udc_valid_address(), udi_cdc_comm_setup(), udi_cdc_setup_to_port(), udi_hid_generic_setfeature_valid(), udi_hid_generic_setreport(), udi_hid_kbd_setreport(), udi_hid_multi_touch_setupreport(), udi_hid_reqstdifaceget_descriptor(), udi_hid_setup(), udi_msc_setup(), udi_phdc_setup(), and udi_vendor_setup().