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
00044
00045
00046 #include "config.h"
00047 #include "conf_usb.h"
00048 #include "host_template_task.h"
00049 #include "modules/usb/host_chap9/usb_host_task.h"
00050 #include "modules/usb/host_chap9/usb_host_enum.h"
00051 #include "lib_mcu/usb/usb_drv.h"
00052 #include "lib_mcu/uart/uart_lib.h"
00053
00054
00055
00056
00057
00058
00059
00060
00061 U8 tab[64];
00062 U8 busy=FALSE;
00063 U8 pipe_out;
00064 U8 pipe_in;
00065 U8 pipe_interrupt_in;
00066
00067
00077 void host_template_task_init(void)
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 }
00088
00099 void host_template_task(void)
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
00111
00112 if(Is_host_ready())
00113 {
00114
00115
00116
00117 if(Is_new_device_connection_event())
00118 {
00119 for(i=0;i<Get_nb_supported_interface();i++)
00120 {
00121
00122 if(Get_class(i)==0x00 && Get_subclass(i)==0x00 && Get_protocol(i)==0x00)
00123 {
00124
00125 if(Is_ep_addr_in(Get_ep_addr(i,0)))
00126 {
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 {
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
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
00149
00150 #if (USB_HOST_PIPE_INTERRUPT_TRANSFER == DISABLE)
00151
00152 sta=host_send_data(pipe_out,64,tab);
00153
00154
00155 *ptr_nb=64;
00156 sta=host_get_data(pipe_in,ptr_nb,tab);
00157 #else
00158
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
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
00180 if(Is_hwb())
00181 {
00182 Host_request_suspend();
00183 }
00184 }
00185
00186 if(Is_host_suspended() && Is_btn_middle())
00187 {
00188 Host_request_resume();
00189 }
00190
00191
00192 if(Is_device_disconnection_event())
00193 {
00194
00195 }
00196 }
00197
00198 void call_back_template_1(U8 status, U16 nb_byte)
00199 {
00200 if (status==PIPE_GOOD)
00201 {
00202 host_get_data_interrupt(pipe_in,64,tab,call_back_template_2);
00203 }
00204
00205 }
00206
00207 void call_back_template_2(U8 status, U16 nb_byte)
00208 {
00209 if (status==PIPE_GOOD)
00210 {
00211 busy=FALSE;
00212 }
00213 }