00001 #include "config.h" 00002 #include "..\usb\usb_task.h" 00003 #include "usb_hid_generic_api.h" 00004 #include "lib_mcu\usb\usb_drv.h" 00005 00006 00007 /*_____ D E F I N I T I O N ________________________________________________*/ 00008 00009 U16 data_state = 0; 00010 U8 send_data[15]={'a','b','c','d','e','f','g','h','k','l','m','n'}; 00011 U8 get_data[8]; 00012 U8 *pointer; 00013 bit reset_to_bootloader = FALSE; 00014 extern volatile bit usb_continuous_mode; 00015 extern U8 send_free = 1; 00016 extern S_hid_set_control SetControlBytes; 00017 extern _MEM_TYPE_SLOW_ U8 usb_configuration_nb; 00018 00019 00020 00021 00022 /*F************************************************************************** 00023 * NAME: usb_read_continuous 00024 *---------------------------------------------------------------------------- 00025 * PARAMS: 00026 * delay: none 00027 * return: none 00028 *---------------------------------------------------------------------------- 00029 * PURPOSE: 00030 * This function gets data from USB bus with the continuous tansfer mode 00031 *---------------------------------------------------------------------------- 00032 * EXAMPLE: 00033 *---------------------------------------------------------------------------- 00034 * NOTE: 00035 *---------------------------------------------------------------------------- 00036 * REQUIREMENTS: 00037 *****************************************************************************/ 00038 U8 usb_read_continuous(U8 *buffer) 00039 { 00040 U8 number_of_byte; 00041 if (usb_configuration_nb != 0) 00042 { 00043 number_of_byte = 0; 00044 if (Is_new_data_read()) 00045 { 00046 number_of_byte = Usb_byte_counter_8(); 00047 usb_read_packet(EP_HID_OUT,buffer,number_of_byte); 00048 Usb_ack_receive_out_hid(); 00049 } 00050 return number_of_byte; 00051 } 00052 else 00053 { 00054 return 0; 00055 } 00056 } 00057 00058 /*F************************************************************************** 00059 * NAME: usb_write_continuous 00060 *---------------------------------------------------------------------------- 00061 * PARAMS: 00062 * delay: none 00063 * return: none 00064 *---------------------------------------------------------------------------- 00065 * PURPOSE: 00066 * This function sends data through USB bus with the continuous tansfer mode 00067 *---------------------------------------------------------------------------- 00068 * EXAMPLE: 00069 *---------------------------------------------------------------------------- 00070 * NOTE: 00071 *---------------------------------------------------------------------------- 00072 * REQUIREMENTS: 00073 *****************************************************************************/ 00074 U8 usb_write_continuous(U8 *buffer, U8 data_length) 00075 { 00076 U8 remaining; 00077 U8 c; 00078 if (usb_configuration_nb != 0) 00079 { 00080 if (data_length > LENGTH_OF_REPORT) 00081 { 00082 data_length = LENGTH_OF_REPORT; 00083 } 00084 c = data_length; 00085 remaining = LENGTH_OF_REPORT - data_length; 00086 send_free=0; 00087 Usb_select_endpoint(EP_HID_IN); 00088 while(0 != c) // send data contained in buffer 00089 { 00090 Usb_write_byte(*buffer); 00091 c--; 00092 buffer++; 00093 } 00094 while(0!=remaining) // complete the report if necessary with 0xFF 00095 { 00096 Usb_write_byte(0xFF); 00097 remaining--; 00098 } 00099 00100 Usb_send_control_in(); 00101 return data_length; 00102 } 00103 else 00104 { 00105 return 0; 00106 } 00107 } 00108 00109 /*F************************************************************************** 00110 * NAME: usb_transfer_data 00111 *---------------------------------------------------------------------------- 00112 * PARAMS: 00113 * delay: none 00114 * return: none 00115 *---------------------------------------------------------------------------- 00116 * PURPOSE: 00117 * This function sends data through USB bus with the chosen tansfer mode 00118 *---------------------------------------------------------------------------- 00119 * EXAMPLE: 00120 *---------------------------------------------------------------------------- 00121 * NOTE: 00122 *---------------------------------------------------------------------------- 00123 * REQUIREMENTS: 00124 *****************************************************************************/ 00125 /*void usb_standard_transfer(void) 00126 { 00127 switch (data_state){ 00128 case USB_HID_WAIT_MODE: 00129 if(usb_continuous_mode == 0) 00130 { 00131 pointer=&send_data; 00132 data_state = USB_HID_WAIT_REPORT; 00133 } 00134 break; 00135 case USB_HID_WAIT_REPORT: 00136 if (SetControlBytes.arrived == 1) 00137 { 00138 if (SetControlBytes.direction == DIR_OUT) 00139 data_state = USB_HID_RECEIVE_DATA_STANDARD; 00140 if (SetControlBytes.direction == DIR_IN) 00141 data_state = USB_HID_SEND_DATA_STANDARD; 00142 } 00143 break; 00144 case USB_HID_RECEIVE_DATA_STANDARD : 00145 Usb_select_endpoint(EP_HID_OUT); 00146 if (Is_usb_receive_out_hid()) 00147 { 00148 usb_read_packet(EP_HID_OUT, &get_data, LENGTH_OF_REPORT); 00149 Usb_ack_receive_out_hid(); 00150 SetControlBytes.length -= LENGTH_OF_REPORT; 00151 } 00152 if (SetControlBytes.length <= 0) 00153 { 00154 SetControlBytes.arrived = 0; 00155 data_state = USB_HID_WAIT_REPORT; 00156 } 00157 break; 00158 case USB_HID_SEND_DATA_STANDARD : 00159 if (SetControlBytes.length > 0) 00160 { 00161 pointer += usb_send_packet(EP_HID_IN, pointer, LENGTH_OF_REPORT); 00162 SetControlBytes.length -= LENGTH_OF_REPORT; 00163 data_state = USB_HID_WAIT_SEND_DATA_STANDARD; 00164 } 00165 else 00166 { 00167 data_state = USB_HID_WAIT_REPORT; 00168 SetControlBytes.arrived = 0; 00169 pointer = &send_data; 00170 } 00171 //don't put 'break' here 00172 case USB_HID_WAIT_SEND_DATA_STANDARD : 00173 Usb_select_endpoint(EP_HID_IN); 00174 if(Is_usb_read_control_enabled()) 00175 { 00176 Usb_ack_in_ready(); 00177 data_state = USB_HID_SEND_DATA_STANDARD; 00178 } 00179 break; 00180 default : 00181 data_state = USB_HID_WAIT_MODE; 00182 break; 00183 } 00184 } 00185 */ 00186 00187 00188
1.3.7