Functions

# usb_drv.c File Reference

This file contains the USB driver routines. More...

`#include "config.h"`
`#include "conf_usb.h"`
`#include "usb_drv.h"`
Include dependency graph for usb_drv.c:

Go to the source code of this file.

## 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.

## Detailed Description

This file contains the USB driver routines.

This file contains the USB driver routines.

- Compiler: IAR EWAVR and GNU GCC for AVR
- Supported devices: ATmega32U4

Author:
  Atmel Corporation: http://www.atmel.com
  Support and FAQ: http://support.atmel.no/

Definition in file usb_drv.c.

## 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 68 of file usb_drv.c.

References Is_endpoint_configured, Usb_allocate_memory, and Usb_enable_endpoint.

    {
        Usb_enable_endpoint();
        UECFG0X = config0;
        UECFG1X = (UECFG1X & (1<<ALLOC)) | config1;
        Usb_allocate_memory();
        return (Is_endpoint_configured());
    }

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.

Parameters:

  none |

Returns:
  endpoint number.

Definition at line 88 of file usb_drv.c.

References ep_num, MAX_EP_NB, and Usb_interrupt_flags.

    {
    U8 interrupt_flags;
    U8 ep_num;

       ep_num = 0;
       interrupt_flags = Usb_interrupt_flags();

       while(ep_num < MAX_EP_NB)
       {
          if (interrupt_flags & 1)
          {
             return (ep_num);
          }
          else
          {
             ep_num++;
             interrupt_flags = interrupt_flags >> 1;
          }
       }
       return 0;
    }

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_num | number of the addressed endpoint
  *tbuf | address of the first data to send
  data_length | number of bytes to send

Returns:
  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 131 of file usb_drv.c.

References Is_usb_write_enabled, Usb_select_endpoint, and Usb_write_byte.

    {
    U8 remaining_length;

       remaining_length = data_length;
       Usb_select_endpoint(ep_num);
       while(Is_usb_write_enabled() && (0 != remaining_length))
       {
          Usb_write_byte(*tbuf);
          remaining_length--;
          tbuf++;
       }
       return remaining_length;
    }

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_num | number of the addressed endpoint
  *rbuf | aaddress of the first data to write with the USB data
  data_length | number of bytes to read

Returns:
  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 166 of file usb_drv.c.

References Is_usb_read_enabled, Usb_read_byte, and Usb_select_endpoint.

    {
    U8 remaining_length;

       remaining_length = data_length;
       Usb_select_endpoint(ep_num);

       while(Is_usb_read_enabled() && (0 != remaining_length))
       {
          *rbuf = Usb_read_byte();
          remaining_length--;
          rbuf++;
       }
       return remaining_length;
    }

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_num | number of the addressed endpoint

Returns:
  none

Definition at line 192 of file usb_drv.c.

References Usb_enable_stall_handshake, and Usb_select_endpoint.

    {
       Usb_select_endpoint(ep_num);
       Usb_enable_stall_handshake();
    }

U8 usb_init_device | ( | void | ) |

usb_init_device.

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

Parameters:

  none |

Returns:
  status

Definition at line 208 of file usb_drv.c.

References DIRECTION_OUT, EP_CONTROL, FALSE, Is_usb_endpoint_enabled, NYET_DISABLED, ONE_BANK, SIZE_32, SIZE_8, TYPE_CONTROL, usb_configure_endpoint, and Usb_select_endpoint.

Referenced by usb_general_interrupt(), and usb_start_device().

    {
          Usb_select_endpoint(EP_CONTROL);
          if(!Is_usb_endpoint_enabled())
          {
    #if (USB_LOW_SPEED_DEVICE==DISABLE)
             return usb_configure_endpoint(EP_CONTROL,    \
                                    TYPE_CONTROL,  \
                                    DIRECTION_OUT, \
                                    SIZE_32,       \
                                    ONE_BANK,      \
                                    NYET_DISABLED);
    #else
             return usb_configure_endpoint(EP_CONTROL,    \
                                    TYPE_CONTROL,  \
                                    DIRECTION_OUT, \
                                    SIZE_8,       \
                                    ONE_BANK,      \
                                    NYET_DISABLED);

    #endif
          }
       return FALSE;
    }

Here is the caller graph for this function: