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 77 of file host_template_task.c.

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

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

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

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

Here is the call graph for this function:

void call_back_template_1 ( U8  status,
U16  nb_byte 
)

Definition at line 198 of file host_template_task.c.

Referenced by host_template_task().

00199 {
00200    if (status==PIPE_GOOD)
00201    {
00202       host_get_data_interrupt(pipe_in,64,tab,call_back_template_2);
00203    }
00204 
00205 }

Here is the caller graph for this function:

void call_back_template_2 ( U8  status,
U16  nb_byte 
)

Definition at line 207 of file host_template_task.c.

Referenced by call_back_template_1().

00208 {
00209    if (status==PIPE_GOOD)
00210    {
00211       busy=FALSE;
00212    }
00213 }

Here is the caller graph for this function:


Variable Documentation

U8 tab[64]

Definition at line 61 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 62 of file host_template_task.c.

Referenced by call_back_template_2(), and host_template_task().

U8 pipe_out

Definition at line 63 of file host_template_task.c.

Referenced by host_template_task().

U8 pipe_in

Definition at line 64 of file host_template_task.c.

Referenced by call_back_template_1(), and host_template_task().

U8 pipe_interrupt_in

Definition at line 65 of file host_template_task.c.

Referenced by host_template_task().


Generated on Mon Sep 14 13:24:11 2009 for ATMEL by  doxygen 1.5.3