Data Structures | |
struct | S_interface |
Interface. More... | |
struct | S_usb_setup_data |
USB Setup Data. More... | |
Macros | |
#define | CONTROL_CRC16 0x10 |
#define | CONTROL_DATA_PID 0x02 |
#define | CONTROL_DATA_TOGGLE 0x01 |
#define | CONTROL_GOOD 0x00 |
#define | CONTROL_NO_DEVICE 0x40 |
#define | CONTROL_PID 0x04 |
#define | CONTROL_STALL 0x20 |
#define | CONTROL_TIMEOUT 0x08 |
#define | Get_altset_nb(s_interface) (interface_supported[(s_interface)].altset_nb) |
Number of alternate settings associated with a supported interface. More... | |
#define | Get_class(s_interface) (interface_supported[(s_interface)].uclass) |
USB class associated with the supported interface. More... | |
#define | Get_ep_nbr(s_interface, n_ep) (Host_get_pipe_endpoint_number(Get_ep_pipe(s_interface, n_ep))) |
Endpoint number associated with the supported interface. More... | |
#define | Get_ep_pipe(s_interface, n_ep) (interface_supported[(s_interface)].ep_pipe[(n_ep)]) |
Endpoint pipe associated with the supported interface. More... | |
#define | Get_ep_type(s_interface, n_ep) (Host_get_pipe_type(Get_ep_pipe(s_interface, n_ep))) |
Endpoint type associated with the supported interface. More... | |
#define | Get_interface_number(s_interface) (interface_supported[(s_interface)].interface_nb) |
Number of interfaces associated with a supported interface. More... | |
#define | Get_maxpower() (maxpower) |
Maximal power consumption ot the connected device (unit is 2 mA) More... | |
#define | Get_nb_ep(s_interface) (interface_supported[(s_interface)].nb_ep) |
Number of endpoints associated with a supported interface. More... | |
#define | Get_nb_supported_interface() (nb_interface_supported) |
Number of supported interfaces in the connected device. More... | |
#define | Get_PID() (device_PID) |
PID of the connected device. More... | |
#define | Get_pipe_token(ep_addr) ((Get_desc_ep_dir(ep_addr)) ? TOKEN_IN : TOKEN_OUT) |
Extract token information from endpoint address. More... | |
#define | Get_protocol(s_interface) (interface_supported[(s_interface)].protocol) |
USB protocol associated with the supported interface. More... | |
#define | Get_subclass(s_interface) (interface_supported[(s_interface)].subclass) |
USB subclass associated with the supported interface. More... | |
#define | Get_VID() (device_VID) |
VID of the connected device. More... | |
#define | host_clear_endpoint_feature(ep) |
Send a "clear endpoint feature" request. More... | |
#define | host_get_configuration() |
Send a "get configuration" request. More... | |
#define | host_get_configuration_descriptor(cfg_ix) |
Send a "get device configuration descriptor" request The configuration descriptor received is stored in the data_stage array. More... | |
#define | host_get_device_descriptor() |
Send a "get device descriptor" request The descriptor received is stored in the data_stage array. More... | |
#define | host_get_device_descriptor_incomplete() |
Send an incomplete "get device descriptor" request The descriptor received is stored in the data_stage array. More... | |
#define | host_ms_get_max_lun() |
Send the mass-storage specific request "get max LUN". More... | |
#define | host_set_address(addr) |
Send a "set address" request. More... | |
#define | host_set_configuration(cfg_nb) |
Send a "set configuration" request. More... | |
#define | host_set_feature_remote_wakeup() |
Send a "set feature" "device remote wake-up". More... | |
#define | host_set_interface(interface_nb, alt_setting) |
Send a "set interface" request to specify an alternate setting for an interface. More... | |
#define | Is_device_self_powered() (Tst_bits(bmattributes, SELF_POWERED_MASK)) |
true if the connected device is self-powered More... | |
#define | Is_device_supports_remote_wakeup() (Tst_bits(bmattributes, REMOTE_WAKEUP_MASK)) |
true if the connected device supports remote wake-up More... | |
#define | Is_ep_in(s_interface, n_ep) (Host_get_pipe_token(Get_ep_pipe(s_interface, n_ep)) == TOKEN_IN) |
true if the endpoint direction associated with the supported interface is IN More... | |
#define | OFFSET_DESCRIPTOR_LENGTH 0 |
Offsets common to all descriptor types. More... | |
#define | OFFSET_FIELD_ALT 3 |
#define | OFFSET_FIELD_BMATTRIBUTES 7 |
#define | OFFSET_FIELD_CLASS 5 |
#define | OFFSET_FIELD_CONFIGURATION_NB 5 |
#define | OFFSET_FIELD_DESCRIPTOR_TYPE 1 |
#define | OFFSET_FIELD_EP_ADDR 2 |
Offsets in endpoint descriptors. More... | |
#define | OFFSET_FIELD_EP_INTERVAL 6 |
#define | OFFSET_FIELD_EP_SIZE 4 |
#define | OFFSET_FIELD_EP_TYPE 3 |
#define | OFFSET_FIELD_INTERFACE_NB 2 |
Offsets in interface descriptors. More... | |
#define | OFFSET_FIELD_MAXPACKETSIZE 7 |
Offsets in device descriptors. More... | |
#define | OFFSET_FIELD_MAXPOWER 8 |
#define | OFFSET_FIELD_NB_CONFIGURATION 17 |
#define | OFFSET_FIELD_NB_INTERFACE 4 |
#define | OFFSET_FIELD_NB_OF_EP 4 |
#define | OFFSET_FIELD_PID 10 |
#define | OFFSET_FIELD_PROTOCOL 7 |
#define | OFFSET_FIELD_SUB_CLASS 6 |
#define | OFFSET_FIELD_TOTAL_LENGTH 2 |
Offsets in configuration descriptors. More... | |
#define | OFFSET_FIELD_VID 8 |
#define | REMOTE_WAKEUP_BIT 5 |
#define | REMOTE_WAKEUP_MASK (1 << REMOTE_WAKEUP_BIT) |
#define | SELF_POWERED_BIT 6 |
#define | SELF_POWERED_MASK (1 << SELF_POWERED_BIT) |
Functions | |
bool | host_check_class (void) |
This function checks if the device class is supported. More... | |
bool | host_check_VID_PID (void) |
This function checks if the VID and the PID are supported (if the VID & PID belong to the VID_PID table). More... | |
Status_t | host_transfer_control (void *data_pointer) |
This function is the generic control pipe management function. More... | |
Variables | |
volatile U8 | bmattributes |
bmAttributes byte of connected device More... | |
volatile U16 | device_PID |
PID of connected device. More... | |
volatile U16 | device_VID |
VID of connected device. More... | |
volatile S_interface | interface_supported [MAX_INTERFACE_SUPPORTED] |
Supported interfaces. More... | |
volatile U8 | maxpower |
maxpower byte of connected device (unit is 2 mA) More... | |
volatile U8 | nb_interface_supported |
Number of interfaces the host is able to support in the connected device. More... | |
#define CONTROL_CRC16 0x10 |
#define CONTROL_DATA_PID 0x02 |
#define CONTROL_DATA_TOGGLE 0x01 |
#define CONTROL_GOOD 0x00 |
Referenced by host_transfer_control(), and usb_host_task().
#define CONTROL_NO_DEVICE 0x40 |
#define CONTROL_PID 0x04 |
#define CONTROL_STALL 0x20 |
Referenced by host_transfer_control().
#define CONTROL_TIMEOUT 0x08 |
Referenced by host_transfer_control().
#define Get_altset_nb | ( | s_interface | ) | (interface_supported[(s_interface)].altset_nb) |
Number of alternate settings associated with a supported interface.
s_interface | U8: The supported interface number |
#define Get_class | ( | s_interface | ) | (interface_supported[(s_interface)].uclass) |
USB class associated with the supported interface.
s_interface | U8: The supported interface number |
Referenced by host_cdc_task().
#define Get_ep_nbr | ( | s_interface, | |
n_ep | |||
) | (Host_get_pipe_endpoint_number(Get_ep_pipe(s_interface, n_ep))) |
Endpoint number associated with the supported interface.
s_interface | U8: The supported interface number |
n_ep | U8: The endpoint number in this interface |
#define Get_ep_pipe | ( | s_interface, | |
n_ep | |||
) | (interface_supported[(s_interface)].ep_pipe[(n_ep)]) |
Endpoint pipe associated with the supported interface.
s_interface | U8: The supported interface number |
n_ep | U8: The endpoint number in this interface |
Referenced by host_cdc_task().
#define Get_ep_type | ( | s_interface, | |
n_ep | |||
) | (Host_get_pipe_type(Get_ep_pipe(s_interface, n_ep))) |
Endpoint type associated with the supported interface.
s_interface | U8: The supported interface number |
n_ep | U8: The endpoint number in this interface |
#define Get_interface_number | ( | s_interface | ) | (interface_supported[(s_interface)].interface_nb) |
Number of interfaces associated with a supported interface.
s_interface | U8: The supported interface number |
#define Get_maxpower | ( | ) | (maxpower) |
Maximal power consumption ot the connected device (unit is 2 mA)
#define Get_nb_ep | ( | s_interface | ) | (interface_supported[(s_interface)].nb_ep) |
Number of endpoints associated with a supported interface.
s_interface | U8: The supported interface number |
#define Get_nb_supported_interface | ( | ) | (nb_interface_supported) |
Number of supported interfaces in the connected device.
Referenced by host_cdc_task().
#define Get_PID | ( | ) | (device_PID) |
PID of the connected device.
#define Get_pipe_token | ( | ep_addr | ) | ((Get_desc_ep_dir(ep_addr)) ? TOKEN_IN : TOKEN_OUT) |
Extract token information from endpoint address.
ep_addr | U8: Endpoint address |
Referenced by host_check_class().
#define Get_protocol | ( | s_interface | ) | (interface_supported[(s_interface)].protocol) |
USB protocol associated with the supported interface.
s_interface | U8: The supported interface number |
Referenced by host_cdc_task().
#define Get_subclass | ( | s_interface | ) | (interface_supported[(s_interface)].subclass) |
USB subclass associated with the supported interface.
s_interface | U8: The supported interface number |
#define Get_VID | ( | ) | (device_VID) |
VID of the connected device.
#define host_clear_endpoint_feature | ( | ep | ) |
Send a "clear endpoint feature" request.
ep | U8: Target endpoint |
#define host_get_configuration | ( | ) |
Send a "get configuration" request.
#define host_get_configuration_descriptor | ( | cfg_ix | ) |
Send a "get device configuration descriptor" request The configuration descriptor received is stored in the data_stage array.
cfg_ix | U8: Index of the configuration descriptor to get |
Referenced by usb_host_task().
#define host_get_device_descriptor | ( | ) |
Send a "get device descriptor" request The descriptor received is stored in the data_stage array.
Referenced by usb_host_task().
#define host_get_device_descriptor_incomplete | ( | ) |
Send an incomplete "get device descriptor" request The descriptor received is stored in the data_stage array.
The received descriptors are limited to the length of the control pipe.
Referenced by usb_host_task().
#define host_ms_get_max_lun | ( | ) |
Send the mass-storage specific request "get max LUN".
#define host_set_address | ( | addr | ) |
Send a "set address" request.
addr | U8: Address assigned to the device |
Referenced by usb_host_task().
#define host_set_configuration | ( | cfg_nb | ) |
Send a "set configuration" request.
cfg_nb | U8: Configuration to activate |
Referenced by usb_host_task().
#define host_set_feature_remote_wakeup | ( | ) |
Send a "set feature" "device remote wake-up".
Referenced by usb_host_task().
#define host_set_interface | ( | interface_nb, | |
alt_setting | |||
) |
Send a "set interface" request to specify an alternate setting for an interface.
interface_nb | U8: Interface |
alt_setting | U8: Alternate setting |
#define Is_device_self_powered | ( | ) | (Tst_bits(bmattributes, SELF_POWERED_MASK)) |
true if the connected device is self-powered
#define Is_device_supports_remote_wakeup | ( | ) | (Tst_bits(bmattributes, REMOTE_WAKEUP_MASK)) |
true if the connected device supports remote wake-up
Referenced by usb_host_task().
#define Is_ep_in | ( | s_interface, | |
n_ep | |||
) | (Host_get_pipe_token(Get_ep_pipe(s_interface, n_ep)) == TOKEN_IN) |
true if the endpoint direction associated with the supported interface is IN
s_interface | U8: The supported interface number |
n_ep | U8: The endpoint number in this interface |
Referenced by host_cdc_task().
#define OFFSET_DESCRIPTOR_LENGTH 0 |
Offsets common to all descriptor types.
Referenced by host_check_class().
#define OFFSET_FIELD_ALT 3 |
Referenced by host_check_class().
#define OFFSET_FIELD_BMATTRIBUTES 7 |
Referenced by host_check_class().
#define OFFSET_FIELD_CLASS 5 |
Referenced by host_check_class().
#define OFFSET_FIELD_CONFIGURATION_NB 5 |
#define OFFSET_FIELD_DESCRIPTOR_TYPE 1 |
Referenced by host_check_class().
#define OFFSET_FIELD_EP_ADDR 2 |
Offsets in endpoint descriptors.
Referenced by host_check_class().
#define OFFSET_FIELD_EP_INTERVAL 6 |
Referenced by host_check_class().
#define OFFSET_FIELD_EP_SIZE 4 |
Referenced by host_check_class().
#define OFFSET_FIELD_EP_TYPE 3 |
Referenced by host_check_class().
#define OFFSET_FIELD_INTERFACE_NB 2 |
Offsets in interface descriptors.
Referenced by host_check_class().
#define OFFSET_FIELD_MAXPACKETSIZE 7 |
Offsets in device descriptors.
Referenced by usb_host_task().
#define OFFSET_FIELD_MAXPOWER 8 |
Referenced by host_check_class().
#define OFFSET_FIELD_NB_CONFIGURATION 17 |
#define OFFSET_FIELD_NB_INTERFACE 4 |
#define OFFSET_FIELD_NB_OF_EP 4 |
Referenced by host_check_class().
#define OFFSET_FIELD_PID 10 |
Referenced by host_check_VID_PID().
#define OFFSET_FIELD_PROTOCOL 7 |
Referenced by host_check_class().
#define OFFSET_FIELD_SUB_CLASS 6 |
Referenced by host_check_class().
#define OFFSET_FIELD_TOTAL_LENGTH 2 |
Offsets in configuration descriptors.
Referenced by host_check_class().
#define OFFSET_FIELD_VID 8 |
Referenced by host_check_VID_PID().
#define REMOTE_WAKEUP_BIT 5 |
#define REMOTE_WAKEUP_MASK (1 << REMOTE_WAKEUP_BIT) |
#define SELF_POWERED_BIT 6 |
#define SELF_POWERED_MASK (1 << SELF_POWERED_BIT) |
bool host_check_class | ( | void | ) |
This function checks if the device class is supported.
The function looks in all interfaces declared in the received descriptors if one of them matches an entry of the CLASS/SUB_CLASS/PROTOCOL table. If HOST_AUTO_CFG_ENDPOINT is enabled, a pipe is configured for each endpoint of supported interfaces.
References S_interface::altset_nb, bmattributes, CONFIGURATION_DESCRIPTOR, data_stage, Disable_global_interrupt, DOUBLE_BANK, Enable_global_interrupt, ENDPOINT_DESCRIPTOR, S_interface::ep_pipe, Get_desc_ep_nbr, Get_pipe_token, Host_clear_configured, Host_configure_pipe, Host_configure_pipe_int_req_freq, Host_disable_pipe, Host_enable_ping, Host_enable_pipe, Host_get_pipe_token, Host_get_pipe_type, Host_set_configured, Host_unallocate_memory, Host_user_check_class_action, INTERFACE_DESCRIPTOR, S_interface::interface_nb, Is_host_pipe_enabled, Is_usb_full_speed_mode, MAX_EP_PER_INTERFACE, MAX_INTERFACE_SUPPORTED, MAX_PEP_NB, maxpower, min, S_interface::nb_ep, nb_interface_supported, OFFSET_DESCRIPTOR_LENGTH, OFFSET_FIELD_ALT, OFFSET_FIELD_BMATTRIBUTES, OFFSET_FIELD_CLASS, OFFSET_FIELD_DESCRIPTOR_TYPE, OFFSET_FIELD_EP_ADDR, OFFSET_FIELD_EP_INTERVAL, OFFSET_FIELD_EP_SIZE, OFFSET_FIELD_EP_TYPE, OFFSET_FIELD_INTERFACE_NB, OFFSET_FIELD_MAXPOWER, OFFSET_FIELD_NB_OF_EP, OFFSET_FIELD_PROTOCOL, OFFSET_FIELD_SUB_CLASS, OFFSET_FIELD_TOTAL_LENGTH, P_1, S_interface::protocol, REG_CLASS_CNT, registered_class, SINGLE_BANK, SIZEOF_DATA_STAGE, S_interface::subclass, TOKEN_OUT, TRANSFER_TYPE_MASK, TYPE_BULK, TYPE_INTERRUPT, TYPE_ISOCHRONOUS, S_interface::uclass, and usb_format_usb_to_mcu_data.
Referenced by usb_host_task().
bool host_check_VID_PID | ( | void | ) |
This function checks if the VID and the PID are supported (if the VID & PID belong to the VID_PID table).
References data_stage, device_PID, device_VID, OFFSET_FIELD_PID, OFFSET_FIELD_VID, REG_VID_PID_CNT, registered_VID_PID, and usb_format_usb_to_mcu_data.
Referenced by usb_host_task().
Status_t host_transfer_control | ( | void * | data_pointer | ) |
This function is the generic control pipe management function.
This function is used to send and receive control requests over control pipe.
data_pointer | void *: Pointer to data to transfer |
References S_usb_setup_data::bmRequestType, S_usb_setup_data::bRequest, CONTROL_GOOD, CONTROL_STALL, CONTROL_TIMEOUT, Disable_global_interrupt, Enable_global_interrupt, EVT_HOST_SOF, Host_ack_all_errors, Host_ack_control_in_received, Host_ack_control_in_received_free, Host_ack_control_out_ready, Host_ack_control_out_ready_send, Host_ack_setup_ready, Host_ack_sof, Host_ack_stall, Host_byte_count, Host_configure_pipe_token, Host_disable_continuous_in_mode, Host_disable_sof_interrupt, Host_enable_sof_interrupt, Host_error_status, Host_free_control_in, Host_freeze_pipe, Host_get_pipe_size, host_get_timeout(), host_read_p_rxpacket(), Host_reset_pipe, Host_reset_pipe_fifo_access, Host_send_control_out, Host_send_setup, Host_unfreeze_pipe, host_write_p_txpacket(), Host_write_pipe_data, S_usb_setup_data::incomplete_read, Is_global_interrupt_enabled, Is_host_control_in_received, Is_host_control_out_ready, Is_host_emergency_exit, Is_host_pipe_error, Is_host_setup_ready, Is_host_sof_interrupt_enabled, Is_host_stall, Is_usb_event, Is_usb_low_speed_mode, P_CONTROL, private_sof_counter, TOKEN_IN, TOKEN_OUT, TOKEN_SETUP, Usb_ack_event, usb_format_mcu_to_usb_data, usb_request, S_usb_setup_data::wIndex, S_usb_setup_data::wLength, and S_usb_setup_data::wValue.
Referenced by host_cdc_get_encapsulated_response(), host_cdc_get_line_coding(), host_cdc_send_encapsulated_command(), and host_cdc_set_line_coding().
volatile U8 bmattributes |
bmAttributes byte of connected device
Referenced by host_check_class().
volatile U16 device_PID |
PID of connected device.
Referenced by host_check_VID_PID().
volatile U16 device_VID |
VID of connected device.
Referenced by host_check_VID_PID().
volatile S_interface interface_supported[MAX_INTERFACE_SUPPORTED] |
Supported interfaces.
volatile U8 maxpower |
maxpower byte of connected device (unit is 2 mA)
Referenced by host_check_class().
volatile U8 nb_interface_supported |
Number of interfaces the host is able to support in the connected device.
Referenced by host_check_class(), and usb_host_task().