This file contains the USB driver routines. More...
#include "config.h"#include "conf_usb.h"#include "usb_drv.h"
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. | |
This file contains the USB driver routines.
This file contains the USB driver routines.
Definition in file usb_drv.c.
usb_configure_endpoint.
This function configures an endpoint with the selected type.
| config0 | |
| config1 |
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.
| none |
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;
}
usb_send_packet.
This function moves the data pointed by tbuf to the selected endpoint fifo and sends it through the USB.
| ep_num | number of the addressed endpoint |
| *tbuf | address of the first data to send |
| data_length | number of bytes 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;
}
usb_read_packet.
This function moves the data stored in the selected endpoint fifo to the address specified by *rbuf.
| 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 |
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.
| ep_num | number of the addressed endpoint |
Definition at line 192 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.
| none |
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;
}

1.7.2