Contiki 2.6

USB Driver

Modules

 Configuration macros for endpoints
 

List of the standard macro used to configure pipes and endpoints.


 USB Pads Regulator drivers
 

Turns ON/OFF USB pads regulator.


 USB common management drivers
 

These macros manage the USB controller.


 USB device controller drivers
 

These macros manage the USB Device controller.


 USB endpoint drivers
 

These macros manage the common features of the endpoints.


 USB host controller drivers
 

These macros manage the USB Host controller.


 USB pipe drivers
 

These macros manage the common features of the pipes.


Defines

#define wSWAP(x)
 wSWAP This macro swaps the U8 order in words.
#define Usb_write_word_enum_struc(x)   (wSWAP(x))
 Usb_write_word_enum_struc This macro help to fill the U16 fill in USB enumeration struct.

Functions

U8 usb_config_ep (U8 config0, U8 config1)
 usb_configure_endpoint.
U8 usb_select_enpoint_interrupt (void)
 usb_select_endpoint_interrupt.
U8 usb_send_packet (U8 ep_num, U8 *tbuf, U8 data_length)
 usb_send_packet.
U8 usb_read_packet (U8 ep_num, U8 *rbuf, U8 data_length)
 usb_read_packet.
void usb_halt_endpoint (U8 ep_num)
 usb_halt_endpoint.
U8 usb_init_device (void)
 usb_init_device.
void usb_start_device (void)
 This function initializes the USB device controller.

Variables

volatile uint16_t g_usb_event
 Public : U16 g_usb_event usb_connected is used to store USB events detected upon USB general interrupt subroutine Its value is managed by the following macros (See usb_task.h file) Usb_send_event(x) Usb_ack_event(x) Usb_clear_all_event() Is_usb_event(x) Is_not_usb_event(x)

USB Events

#define Usb_send_event(x)   (g_usb_event |= (1<<x))
 Send event.
#define Usb_ack_event(x)   (g_usb_event &= ~(1<<x))
 Ack event processed.
#define Usb_clear_all_event()   (g_usb_event = 0)
 Clear all events.
#define Is_usb_event(x)   ((g_usb_event & (1<<x)) ? TRUE : FALSE)
 Check for USB event.
#define Is_not_usb_event(x)   ((g_usb_event & (1<<x)) ? FALSE: TRUE)
 Check for USB event NOT occuring.
#define Is_usb_device()   (g_usb_mode==USB_MODE_DEVICE ? TRUE : FALSE)
 Check if USB is device.
#define EVT_USB_POWERED   1
 USB Event: USB plugged.
#define EVT_USB_UNPOWERED   2
 USB Event: USB un-plugged.
#define EVT_USB_DEVICE_FUNCTION   3
 USB Event: USB in device.
#define EVT_USB_HOST_FUNCTION   4
 USB Event: USB in host.
#define EVT_USB_SUSPEND   5
 USB Event: USB suspend.
#define EVT_USB_WAKE_UP   6
 USB Event: USB wake up.
#define EVT_USB_RESUME   7
 USB Event: USB resume.
#define EVT_USB_RESET   8
 USB Event: USB reset.
#define EVT_USB_SETUP_RX   9
 USB Event: USB setup received.

Standard requests defines

#define GET_STATUS   0x00
#define GET_DEVICE   0x01
#define CLEAR_FEATURE   0x01
 see FEATURES below
#define GET_STRING   0x03
#define SET_FEATURE   0x03
 see FEATURES below
#define SET_ADDRESS   0x05
#define GET_DESCRIPTOR   0x06
#define SET_DESCRIPTOR   0x07
#define GET_CONFIGURATION   0x08
#define SET_CONFIGURATION   0x09
#define GET_INTERFACE   0x0A
#define SET_INTERFACE   0x0B
#define SYNCH_FRAME   0x0C
#define GET_DEVICE_DESCRIPTOR   1
#define GET_CONFIGURATION_DESCRIPTOR   4
#define REQUEST_DEVICE_STATUS   0x80
#define REQUEST_INTERFACE_STATUS   0x81
#define REQUEST_ENDPOINT_STATUS   0x82
#define ZERO_TYPE   0x00
#define INTERFACE_TYPE   0x01
#define ENDPOINT_TYPE   0x02
#define DEVICE_DESCRIPTOR   0x01
#define CONFIGURATION_DESCRIPTOR   0x02
#define STRING_DESCRIPTOR   0x03
#define INTERFACE_DESCRIPTOR   0x04
#define ENDPOINT_DESCRIPTOR   0x05
#define DEVICE_QUALIFIER_DESCRIPTOR   0x06
#define OTHER_SPEED_CONFIGURATION_DESCRIPTOR   0x07
#define FEATURE_DEVICE_REMOTE_WAKEUP   0x01
#define FEATURE_ENDPOINT_HALT   0x00
#define TEST_J   0x01
#define TEST_K   0x02
#define TEST_SEO_NAK   0x03
#define TEST_PACKET   0x04
#define TEST_FORCE_ENABLE   0x05
#define BUS_POWERED   0
#define SELF_POWERED   1

Detailed Description

Author:
Atmel Corporation: http://www.atmel.com
Support email: avr@atmel.com

Define Documentation

#define Usb_write_word_enum_struc (   x)    (wSWAP(x))

Usb_write_word_enum_struc This macro help to fill the U16 fill in USB enumeration struct.

Depending on the CPU architecture, the macro swap or not the nibbles

Parameters:
x(U16) the 16 bit word to be written
Returns:
(U16) the 16 bit word written

Definition at line 914 of file usb_drv.h.

#define wSWAP (   x)
Value:
(   (((x)>>8)&0x00FF) \
   |   (((x)<<8)&0xFF00) \
   )

wSWAP This macro swaps the U8 order in words.

Parameters:
x(U16) the 16 bit word to swap
Returns:
(U16) the 16 bit word x with the 2 bytes swaped

Definition at line 895 of file usb_drv.h.


Function Documentation

U8 usb_config_ep ( U8  config0,
U8  config1 
)

usb_configure_endpoint.

This function configures an endpoint with the selected type.

Parameters:
config0
config1
Returns:
Is_endpoint_configured().

Definition at line 170 of file usb_drv.c.

References Is_endpoint_configured, Usb_allocate_memory, and Usb_enable_endpoint.

void usb_halt_endpoint ( U8  ep_num)

usb_halt_endpoint.

This function sends a STALL handshake for the next Host request. A STALL handshake will be send for each next request untill a SETUP or a Clear Halt Feature occurs for this endpoint.

Parameters:
ep_numnumber of the addressed endpoint

Definition at line 289 of file usb_drv.c.

References Usb_enable_stall_handshake, and Usb_select_endpoint.

U8 usb_init_device ( void  )

usb_init_device.

This function initializes the USB device controller and configures the Default Control Endpoint.

Return values:
FALSEif not Is_usb_id_device() returns FALSE
Returns:
usb_configure_endpoint() status

Definition at line 303 of file usb_drv.c.

References FALSE, Is_usb_endpoint_enabled, and Usb_select_endpoint.

Referenced by ISR(), and usb_start_device().

U8 usb_read_packet ( U8  ep_num,
U8 *  rbuf,
U8  data_length 
)

usb_read_packet.

This function moves the data stored in the selected endpoint fifo to the address specified by *rbuf.

Parameters:
ep_numnumber of the addressed endpoint
rbufaaddress of the first data to write with the USB data
data_lengthnumber of bytes to read
Returns:
remaining_length address of the next U8 to send.

Example: while(!(Usb_rx_complete)); // wait new packet received usb_read_packet(4,&first_data,usb_get_nb_byte); // read packet from ep 4 Usb_clear_rx(); // acknowledge the transmit

Note: rbuf is incremented of 'data_length'.

Definition at line 265 of file usb_drv.c.

References Is_usb_read_enabled, Usb_read_byte, and Usb_select_endpoint.

U8 usb_select_enpoint_interrupt ( void  )

usb_select_endpoint_interrupt.

This function select the endpoint where an event occurs and returns the number of this endpoint. If no event occurs on the endpoints, this function returns 0.

Returns:
0 endpoint number.

Definition at line 187 of file usb_drv.c.

References Usb_interrupt_flags.

U8 usb_send_packet ( U8  ep_num,
U8 *  tbuf,
U8  data_length 
)

usb_send_packet.

This function moves the data pointed by tbuf to the selected endpoint fifo and sends it through the USB.

Parameters:
ep_numnumber of the addressed endpoint
tbufaddress of the first data to send
data_lengthnumber of bytes to send
Returns:
remaining_length address of the next U8 to send.

Example: usb_send_packet(3,&first_data,0x20); // send packet on the endpoint #3 while(!(Usb_tx_complete)); // wait packet ACK'ed by the Host Usb_clear_tx_complete(); // acknowledge the transmit

Note: tbuf is incremented of 'data_length'.

Definition at line 230 of file usb_drv.c.

References Is_usb_write_enabled, Usb_select_endpoint, and Usb_write_byte.

void usb_start_device ( void  )

This function initializes the USB device controller.

This function enables the USB controller and init the USB interrupts. The aim is to allow the USB connection detection in order to send the appropriate USB event to the operating mode manager. Start device function is executed once VBUS connection has been detected either by the VBUS change interrupt either by the VBUS high level

Definition at line 149 of file usb_task.c.

References Usb_attach, Usb_enable_reset_interrupt, usb_init_device(), and Wait_pll_ready.

Referenced by ISR(), and PROCESS_THREAD().