#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"
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 |
Definition in file host_template_task.c.
void host_template_task_init | ( | void | ) |
This function initializes the high level host application Here initialize specific hardware ressources requirements.
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
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 }
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 }
Definition at line 207 of file host_template_task.c.
Referenced by call_back_template_1().
Definition at line 61 of file host_template_task.c.
Referenced by call_back_template_1(), host_template_task(), and host_template_task_init().
Definition at line 62 of file host_template_task.c.
Referenced by call_back_template_2(), and host_template_task().
Definition at line 64 of file host_template_task.c.
Referenced by call_back_template_1(), and host_template_task().