usb_specific_request.c File Reference

#include "config.h"
#include "conf_usb.h"
#include "lib_mcu/usb/usb_drv.h"
#include "usb_descriptors.h"
#include "modules/usb/device_chap9/usb_standard_request.h"
#include "usb_specific_request.h"
#include "lib_mcu/flash/flash_drv.h"

Include dependency graph for usb_specific_request.c:

Go to the source code of this file.

Functions

Bool usb_user_read_request (U8 type, U8 request)
 This function checks the specific request and if known then processes it
void usb_user_endpoint_init (U8 conf_nb)
U8 usb_user_interface_get (U16 wInterface)
void usb_user_interface_reset (U16 wInterface, U8 alternate_setting)
Bool usb_user_get_descriptor (U8 type, U8 string)
 This function fills the global descriptor.

Variables

U8 code * pbuffer
U8 data_to_transfer


Detailed Description

user call-back functions This file contains the user call-back functions corresponding to the application: - Compiler: IAR EWAVR and GNU GCC for AVR

Definition in file usb_specific_request.c.


Function Documentation

Bool usb_user_read_request ( U8  type,
U8  request 
)

This function checks the specific request and if known then processes it

Parameters:
type corresponding at bmRequestType (see USB specification)
request corresponding at bRequest (see USB specification)
Returns:
TRUE, when the request is processed

FALSE, if the request is'nt know (STALL handshake is managed by the main standard request function).

Definition at line 77 of file usb_specific_request.c.

Referenced by usb_process_request().

00078 {
00079    U8  wValue_msb;
00080    U8  wValue_lsb;
00081 
00082    // Read wValue
00083    wValue_lsb = Usb_read_byte();
00084    wValue_msb = Usb_read_byte();
00085 
00086    //** Specific request from Class
00087    if( USB_SETUP_GET_STAND_INTERFACE == type )
00088    {
00089       switch( request )
00090       {
00091          case SETUP_GET_DESCRIPTOR:
00092          switch( wValue_msb ) // Descriptor ID
00093          {
00094             default:
00095             // TODO
00096             break;
00097          }
00098          break;
00099       }
00100    }
00101    if( USB_SETUP_SET_CLASS_INTER == type )
00102    {
00103       switch( request )
00104       {
00105          default:
00106          break;
00107       }
00108    }
00109    if( USB_SETUP_GET_CLASS_INTER == type )
00110    {
00111       switch( request )
00112       {
00113          default:
00114          break;
00115       }
00116    }
00117    return FALSE;  // No supported request
00118 }

Here is the caller graph for this function:

void usb_user_endpoint_init ( U8  conf_nb  ) 

This function configures the endpoints

Parameters:
conf_nb configuration number choosed by USB host

Definition at line 125 of file usb_specific_request.c.

Referenced by usb_set_configuration().

00126 {
00127    usb_configure_endpoint(EP_TEMP_IN,    \
00128                           TYPE_BULK,     \
00129                           DIRECTION_IN,  \
00130                           SIZE_64,       \
00131                           ONE_BANK,      \
00132                           NYET_ENABLED);
00133    usb_configure_endpoint(EP_TEMP_OUT,   \
00134                           TYPE_BULK,     \
00135                           DIRECTION_OUT, \
00136                           SIZE_64,       \
00137                           ONE_BANK,      \
00138                           NYET_ENABLED);
00139    usb_configure_endpoint(EP_TEMP_INT_IN,\
00140                           TYPE_BULK,     \
00141                           TYPE_INTERRUPT,\
00142                           SIZE_64,       \
00143                           ONE_BANK,      \
00144                           NYET_ENABLED);
00145 }

Here is the caller graph for this function:

U8 usb_user_interface_get ( U16  wInterface  ) 

This function returns the interface alternate setting

Parameters:
wInterface Interface selected
Returns:
alternate setting configurated

Definition at line 154 of file usb_specific_request.c.

Referenced by usb_get_interface().

00155 {
00156    return 0;  // Only one alternate setting possible for all interface
00157 }

Here is the caller graph for this function:

void usb_user_interface_reset ( U16  wInterface,
U8  alternate_setting 
)

This function selects (and resets) the interface alternate setting

Parameters:
wInterface Interface selected
alternate_setting alternate setting selected

Definition at line 165 of file usb_specific_request.c.

Referenced by usb_set_interface().

00166 {  
00167    // default setting selected = reset data toggle
00168    if( INTERFACE_NB_TEMP == wInterface )
00169    {
00170       // Interface reset
00171       Usb_select_endpoint(EP_TEMP_IN);
00172       Usb_disable_stall_handshake();
00173       Usb_reset_endpoint(EP_TEMP_IN);
00174       Usb_reset_data_toggle();
00175       Usb_select_endpoint(EP_TEMP_OUT);
00176       Usb_disable_stall_handshake();
00177       Usb_reset_endpoint(EP_TEMP_OUT);
00178       Usb_reset_data_toggle();
00179    }
00180    if( INTERFACE_NB_SECOND_TEMP == wInterface )
00181    {
00182       // Interface reset
00183       Usb_select_endpoint(EP_TEMP_INT_IN);
00184       Usb_disable_stall_handshake();
00185       Usb_reset_endpoint(EP_TEMP_INT_IN);
00186       Usb_reset_data_toggle();
00187    }
00188 }

Here is the caller graph for this function:

Bool usb_user_get_descriptor ( U8  type,
U8  string 
)

This function fills the global descriptor.

Parameters:
type corresponding at MSB of wValue (see USB specification)
string corresponding at LSB of wValue (see USB specification)
Returns:
FALSE, if the global descriptor no filled

Definition at line 198 of file usb_specific_request.c.

Referenced by usb_get_descriptor().

00199 {
00200    switch(type)
00201    {
00202       case DESCRIPTOR_STRING:
00203       switch (string)
00204       {
00205          case LANG_ID:
00206          data_to_transfer = sizeof (usb_user_language_id);
00207          pbuffer = &(usb_user_language_id.bLength);
00208          return TRUE;
00209          break;
00210         
00211          case MAN_INDEX:
00212          data_to_transfer = sizeof (usb_user_manufacturer_string_descriptor);
00213          pbuffer = &(usb_user_manufacturer_string_descriptor.bLength);
00214          return TRUE;
00215          break;
00216         
00217          case PROD_INDEX:
00218          data_to_transfer = sizeof (usb_user_product_string_descriptor);
00219          pbuffer = &(usb_user_product_string_descriptor.bLength);
00220          return TRUE;
00221          break;
00222            
00223 #if (USB_DEVICE_SN_USE==ENABLE)              
00224          case SN_INDEX:
00225          data_to_transfer = sizeof (usb_user_serial_number);
00226          pbuffer = &(usb_user_serial_number.bLength);
00227 #if (USE_DEVICE_SN_UNIQUE==ENABLE)
00228          f_get_serial_string=TRUE;
00229          data_to_transfer += (SN_LENGTH*4);
00230 #endif
00231          return TRUE;
00232          break;
00233 #endif
00234       }
00235       break;
00236    }
00237    return FALSE;
00238 }

Here is the caller graph for this function:


Variable Documentation

U8 code* pbuffer

Definition at line 91 of file usb_standard_request.c.

Referenced by usb_get_descriptor(), and usb_user_get_descriptor().

U8 data_to_transfer

Definition at line 96 of file usb_standard_request.c.

Referenced by usb_get_descriptor(), and usb_user_get_descriptor().


Generated on Mon Nov 3 10:08:26 2008 for ATMEL by  doxygen 1.5.3