00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #include "config.h"
00044 #include "conf_usb.h"
00045 #include "host_template_task.h"
00046 #include "modules/usb/host_chap9/usb_host_task.h"
00047 #include "modules/usb/host_chap9/usb_host_enum.h"
00048 #include "lib_mcu/usb/usb_drv.h"
00049 #include "lib_mcu/uart/uart_lib.h"
00050
00051
00052
00053
00054
00055
00056
00057
00058 U8 tab[64];
00059 U8 busy=FALSE;
00060 U8 pipe_out;
00061 U8 pipe_in;
00062 U8 pipe_interrupt_in;
00063
00064
00074 void host_template_task_init(void)
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 }
00085
00096 void host_template_task(void)
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
00108
00109 if(Is_host_ready())
00110 {
00111
00112
00113
00114 if(Is_new_device_connection_event())
00115 {
00116 for(i=0;i<Get_nb_supported_interface();i++)
00117 {
00118
00119 if(Get_class(i)==0x00 && Get_subclass(i)==0x00 && Get_protocol(i)==0x00)
00120 {
00121
00122 if(Is_ep_addr_in(Get_ep_addr(i,0)))
00123 {
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 {
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
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
00146
00147 #if (USB_HOST_PIPE_INTERRUPT_TRANSFER == DISABLE)
00148
00149 sta=host_send_data(pipe_out,64,tab);
00150
00151
00152 *ptr_nb=64;
00153 sta=host_get_data(pipe_in,ptr_nb,tab);
00154 #else
00155
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
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
00177 if(Is_hwb())
00178 {
00179 Host_request_suspend();
00180 }
00181 }
00182
00183 if(Is_host_suspended() && Is_btn_middle())
00184 {
00185 Host_request_resume();
00186 }
00187
00188
00189 if(Is_device_disconnection_event())
00190 {
00191
00192 }
00193 }
00194
00195 void call_back_template_1(U8 status, U16 nb_byte)
00196 {
00197 if (status==PIPE_GOOD)
00198 {
00199 host_get_data_interrupt(pipe_in,64,tab,call_back_template_2);
00200 }
00201
00202 }
00203
00204 void call_back_template_2(U8 status, U16 nb_byte)
00205 {
00206 if (status==PIPE_GOOD)
00207 {
00208 busy=FALSE;
00209 }
00210 }