host_template_task.c File Reference

#include "config.h"
#include "conf_usb.h"
#include "host_template_task.h"
#include "modules/usb/host_chap9/usb_host_task.h"
#include "modules/usb/host_chap9/usb_host_enum.h"
#include "lib_mcu/usb/usb_drv.h"
#include "lib_mcu/uart/uart_lib.h"

Include dependency graph for host_template_task.c:

Go to the source code of this file.

Functions

void host_template_task_init (void)
void host_template_task (void)
void call_back_template_1 (U8 status, U16 nb_byte)
void call_back_template_2 (U8 status, U16 nb_byte)

Variables

U8 tab [64]
U8 busy = FALSE
U8 pipe_out
U8 pipe_in
U8 pipe_interrupt_in


Detailed Description

This file manages the high level USB Host application.

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

Definition in file host_template_task.c.


Function Documentation

void host_template_task_init ( void   ) 

This function initializes the high level host application Here initialize specific hardware ressources requirements.

Parameters:
none 
Returns:
none

Definition at line 74 of file host_template_task.c.

References Hwb_button_init, i, Joy_init, Leds_init, and tab.

00075 {
00076    U8 i;
00077    for(i=0;i<sizeof(tab);i++)
00078    {
00079       tab[i]=i;
00080    }
00081    Leds_init();
00082    Joy_init();
00083    Hwb_button_init();
00084 }

void host_template_task ( void   ) 

High level host application task entry point Put here the code of your host application. The sample code just sends and receives 64bytes from IN and OUT pipes

Parameters:
none 
Returns:
none

Definition at line 96 of file host_template_task.c.

References busy, call_back_template_1(), FALSE, Get_class, Get_ep_addr, Get_nb_supported_interface, Get_protocol, Get_subclass, Host_ack_in_received, Host_continuous_in_mode, host_get_data(), host_get_hwd_pipe_nb(), Host_read_byte, Host_request_resume, Host_request_suspend, Host_select_pipe, host_send_data(), host_send_data_interrupt(), Host_send_in, Host_unfreeze_pipe, i, Is_btn_middle, Is_device_disconnection_event, Is_ep_addr_in, Is_host_in_received, Is_host_ready, Is_host_stall, Is_host_suspended, Is_hwb, Is_new_device_connection_event, pipe_in, pipe_interrupt_in, pipe_out, tab, and TRUE.

00097 {
00098    #if (USB_HOST_PIPE_INTERRUPT_TRANSFER == DISABLE)
00099    U8 sta;
00100    #endif
00101    U16 *ptr_nb;
00102    U16 nb;
00103    U8 i;
00104 
00105    ptr_nb=&nb;
00106 
00107    // First check the host controller is in full operating mode with the B device attached
00108    // and enumerated
00109    if(Is_host_ready())
00110    {
00111       //Put here the code to do in host mode
00112 
00113       // New device connection (executed  only one time after device connection)
00114       if(Is_new_device_connection_event())
00115       {
00116          for(i=0;i<Get_nb_supported_interface();i++)
00117          {
00118             // First interface with two bulk IN/OUT pipes
00119             if(Get_class(i)==0x00 && Get_subclass(i)==0x00 && Get_protocol(i)==0x00)
00120             {
00121                //Get correct physical pipes associated to IN/OUT Endpoints
00122                if(Is_ep_addr_in(Get_ep_addr(i,0)))
00123                {  //Yes associate it to the IN pipe
00124                   pipe_in=host_get_hwd_pipe_nb(Get_ep_addr(i,0));
00125                   pipe_out=host_get_hwd_pipe_nb(Get_ep_addr(i,1));
00126                }
00127                else
00128                {  //No, invert...
00129                   pipe_in=host_get_hwd_pipe_nb(Get_ep_addr(i,1));
00130                   pipe_out=host_get_hwd_pipe_nb(Get_ep_addr(i,0));
00131                }
00132             }
00133             // Seconf interface with interrupt IN pipe
00134             if(Get_class(i)==0x00 && Get_subclass(i)==0x55 && Get_protocol(i)==0xAA)
00135             {
00136                pipe_interrupt_in=host_get_hwd_pipe_nb(Get_ep_addr(i,0));
00137                Host_select_pipe(pipe_interrupt_in);
00138                Host_continuous_in_mode();
00139                Host_unfreeze_pipe();
00140             }
00141          }
00142       }
00143 
00144 
00145      // Firt interface (bulk IN/OUT) management
00146      // In polling mode
00147 #if (USB_HOST_PIPE_INTERRUPT_TRANSFER == DISABLE)
00148       // The sample task sends 64 byte through pipe nb2...
00149       sta=host_send_data(pipe_out,64,tab);
00150 
00151       // And receives 64bytes from pipe nb 1...
00152       *ptr_nb=64;
00153       sta=host_get_data(pipe_in,ptr_nb,tab);
00154 #else
00155       // similar applicative task under interrupt mode...
00156       if (busy==FALSE)
00157       {
00158          busy=TRUE;
00159          host_send_data_interrupt(pipe_out,64,tab,call_back_template_1);
00160       }
00161 
00162 #endif
00163 
00164       // Second interface management (USB interrupt IN pipe)
00165       Host_select_pipe(pipe_interrupt_in);
00166       if(Is_host_in_received())
00167       {
00168          if(Is_host_stall()==FALSE)
00169          {
00170             i=Host_read_byte();
00171             Host_read_byte();
00172          }
00173          Host_ack_in_received(); Host_send_in();
00174       }
00175 
00176       // Here an example of an applicative request to go to USB suspend ...
00177       if(Is_hwb())
00178       {
00179          Host_request_suspend();
00180       }
00181    }
00182    // Here an applicative example of resume request...
00183    if(Is_host_suspended() && Is_btn_middle())
00184    {
00185       Host_request_resume();
00186    }
00187 
00188    //Device disconnection...
00189    if(Is_device_disconnection_event())
00190    {
00191       //Put here code to be executed upon device disconnection...
00192    }
00193 }

Here is the call graph for this function:

void call_back_template_1 ( U8  status,
U16  nb_byte 
)

Definition at line 195 of file host_template_task.c.

Referenced by host_template_task().

00196 {
00197    if (status==PIPE_GOOD)
00198    {
00199       host_get_data_interrupt(pipe_in,64,tab,call_back_template_2);
00200    }
00201 
00202 }

Here is the caller graph for this function:

void call_back_template_2 ( U8  status,
U16  nb_byte 
)

Definition at line 204 of file host_template_task.c.

Referenced by call_back_template_1().

00205 {
00206    if (status==PIPE_GOOD)
00207    {
00208       busy=FALSE;
00209    }
00210 }

Here is the caller graph for this function:


Variable Documentation

U8 tab[64]

Definition at line 58 of file host_template_task.c.

Referenced by call_back_template_1(), host_template_task(), and host_template_task_init().

U8 busy = FALSE

Definition at line 59 of file host_template_task.c.

Referenced by call_back_template_2(), and host_template_task().

U8 pipe_out

Definition at line 60 of file host_template_task.c.

Referenced by host_template_task().

U8 pipe_in

Definition at line 61 of file host_template_task.c.

Referenced by call_back_template_1(), and host_template_task().

U8 pipe_interrupt_in

Definition at line 62 of file host_template_task.c.

Referenced by host_template_task().


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