uart_usb_lib.c File Reference

#include "config.h"
#include "lib_mcu/usb/usb_drv.h"
#include "usb_descriptors.h"
#include "uart_usb_lib.h"

Include dependency graph for uart_usb_lib.c:

Go to the source code of this file.

Functions

void uart_usb_init (void)
bit uart_usb_test_hit (void)
char uart_usb_getchar (void)
bit uart_usb_tx_ready (void)
int uart_usb_putchar (int data_to_send)
void uart_usb_send_buffer (U8 *buffer, U8 nb_data)

Variables

Uchar rx_counter


Detailed Description

This file controls the UART USB functions.

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

Definition in file uart_usb_lib.c.


Function Documentation

void uart_usb_init ( void   ) 

Initializes the uart_usb library

Definition at line 64 of file uart_usb_lib.c.

00065 {
00066   rx_counter = 0;
00067 }

bit uart_usb_test_hit ( void   ) 

This function checks if a character has been received on the USB bus.

Returns:
bit (true if a byte is ready to be read)

Definition at line 74 of file uart_usb_lib.c.

Referenced by cdc_task(), and uart_usb_getchar().

00075 {
00076   if(!Is_device_enumerated())
00077      return FALSE;
00078 
00079   if (!rx_counter)
00080   {
00081     Usb_select_endpoint(RX_EP);
00082     if (Is_usb_receive_out())
00083     {
00084       rx_counter = Usb_byte_counter();
00085       if (!rx_counter)
00086       {
00087         Usb_ack_receive_out();
00088       }
00089     }
00090   }
00091   return (rx_counter!=0);
00092 }

Here is the caller graph for this function:

char uart_usb_getchar ( void   ) 

This function reads one byte from the USB bus If one byte is present in the USB fifo, this byte is returned. If no data is present in the USB fifo, this function waits for USB data.

Returns:
U8 byte received

Definition at line 102 of file uart_usb_lib.c.

Referenced by cdc_task(), and cdc_task_init().

00103 {
00104   register Uchar data_rx;
00105 
00106   Usb_select_endpoint(RX_EP);
00107   if (!rx_counter) while (!uart_usb_test_hit());
00108   data_rx=Usb_read_byte();
00109   rx_counter--;
00110   if (!rx_counter) Usb_ack_receive_out();
00111   return data_rx;
00112 }

Here is the caller graph for this function:

bit uart_usb_tx_ready ( void   ) 

This function checks if the USB emission buffer is ready to accept at at least 1 byte

Returns:
Boolean. TRUE if the firmware can write a new byte to transmit.

Definition at line 121 of file uart_usb_lib.c.

00122 {
00123   if(!Is_device_enumerated())
00124      return FALSE;
00125 
00126   if (!Is_usb_write_enabled())
00127   {
00128     return FALSE;
00129   }
00130   return TRUE;
00131 }

int uart_usb_putchar ( int  data_to_send  ) 

This function fills the USB transmit buffer with the new data. This buffer is sent if complete. To flush this buffer before waiting full, launch the uart_usb_flush() function.

Parameters:
data_to_send 
Returns:

Definition at line 142 of file uart_usb_lib.c.

00143 {
00144    uart_usb_send_buffer((U8*)&data_to_send, 1);
00145    return data_to_send;
00146 }

void uart_usb_send_buffer ( U8 buffer,
U8  nb_data 
)

This function transmits a ram buffer content to the USB. This function is mode efficient in term of USB bandwith transfer.

Parameters:
U8 *buffer : the pointer to the RAM buffer to be sent
data_to_send : the number of data to be sent

Definition at line 157 of file uart_usb_lib.c.

Referenced by uart_usb_putchar(), and usart_receive_interrupt().

00158 {
00159    U8 zlp;
00160    
00161   if(!Is_device_enumerated())
00162      return;
00163    
00164    // Compute if zlp required
00165    if(nb_data%TX_EP_SIZE) 
00166    { zlp=FALSE;} 
00167    else { zlp=TRUE; }
00168    
00169    Usb_select_endpoint(TX_EP);
00170    while (nb_data)
00171    {
00172       while(Is_usb_write_enabled()==FALSE); // Wait Endpoint ready
00173       while(Is_usb_write_enabled() && nb_data)
00174       {
00175          Usb_write_byte(*buffer);
00176          buffer++;
00177          nb_data--;
00178    }
00179       Usb_ack_in_ready();
00180    }
00181    if(zlp)
00182    {
00183       while(Is_usb_write_enabled()==FALSE); // Wait Endpoint ready 
00184       Usb_ack_in_ready();
00185 }
00186 }

Here is the caller graph for this function:


Variable Documentation

Uchar rx_counter

Definition at line 57 of file uart_usb_lib.c.


Generated on Fri Sep 11 14:46:06 2009 for ATMEL by  doxygen 1.5.3