00001
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
00047
00048
00049
00050 #include "conf_usb.h"
00051
00052
00053 #if USB_DEVICE_FEATURE == ENABLED
00054
00055 #include "usb_drv.h"
00056 #include "usb_descriptors.h"
00057 #include "usb_standard_request.h"
00058 #include "usb_specific_request.h"
00059 #if( EVK1101_CTRL_PANEL_PID==EVK1101_CTRL_PANEL_DEMO_HID_MS_PID )
00060 #include "ctrl_access.h"
00061 #endif
00062
00063
00064
00065
00066
00067
00068
00069 volatile Bool ms_multiple_drive;
00070
00071
00072
00073
00074 extern const void *pbuffer;
00075 extern U16 data_to_transfer;
00076
00077
00078
00079
00083 void usb_user_endpoint_init(U8 conf_nb)
00084 {
00085 ms_multiple_drive = FALSE;
00086
00087 (void)Usb_configure_endpoint(EP_FC_IN,
00088 EP_ATTRIBUTES_1,
00089 DIRECTION_IN,
00090 EP_SIZE_1,
00091 SINGLE_BANK);
00092
00093 (void)Usb_configure_endpoint(EP_FC_OUT,
00094 EP_ATTRIBUTES_2,
00095 DIRECTION_OUT,
00096 EP_SIZE_2,
00097 SINGLE_BANK);
00098
00099 #if( EVK1101_CTRL_PANEL_PID==EVK1101_CTRL_PANEL_DEMO_HID_MS_PID )
00100 (void)Usb_configure_endpoint(EP_MS_IN,
00101 EP_ATTRIBUTES_3,
00102 DIRECTION_IN,
00103 EP_SIZE_3,
00104 SINGLE_BANK);
00105
00106 (void)Usb_configure_endpoint(EP_MS_OUT,
00107 EP_ATTRIBUTES_4,
00108 DIRECTION_OUT,
00109 EP_SIZE_4,
00110 SINGLE_BANK);
00111 #endif
00112 }
00113
00114
00121 Bool usb_user_read_request(U8 type, U8 request)
00122 {
00123 Usb_read_endpoint_data(EP_CONTROL, 8);
00124 Usb_read_endpoint_data(EP_CONTROL, 8);
00125
00126 switch (request)
00127 {
00128 #if( EVK1101_CTRL_PANEL_PID==EVK1101_CTRL_PANEL_DEMO_HID_MS_PID )
00129 case MASS_STORAGE_RESET:
00130 Usb_ack_setup_received_free();
00131 Usb_ack_control_in_ready_send();
00132 return TRUE;
00133
00134 case GET_MAX_LUN:
00135 Usb_ack_setup_received_free();
00136 Usb_reset_endpoint_fifo_access(EP_CONTROL);
00137 Usb_write_endpoint_data(EP_CONTROL, 8, get_nb_lun() - 1);
00138 Usb_ack_control_in_ready_send();
00139 while (!Is_usb_control_in_ready());
00140
00141 while(!Is_usb_control_out_received());
00142 Usb_ack_control_out_received_free();
00143 ms_multiple_drive = TRUE;
00144 return TRUE;
00145 #endif
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 default:
00172 break;
00173 }
00174
00175 return FALSE;
00176 }
00177
00178
00182 Bool usb_user_get_descriptor(U8 type, U8 string)
00183 {
00184 pbuffer = NULL;
00185
00186 switch (type)
00187 {
00188 case STRING_DESCRIPTOR:
00189 switch (string)
00190 {
00191 case LANG_ID:
00192 data_to_transfer = sizeof(usb_user_language_id);
00193 pbuffer = &usb_user_language_id;
00194 break;
00195
00196 case MAN_INDEX:
00197 data_to_transfer = sizeof(usb_user_manufacturer_string_descriptor);
00198 pbuffer = &usb_user_manufacturer_string_descriptor;
00199 break;
00200
00201 case PROD_INDEX:
00202 data_to_transfer = sizeof(usb_user_product_string_descriptor);
00203 pbuffer = &usb_user_product_string_descriptor;
00204 break;
00205
00206 case SN_INDEX:
00207 data_to_transfer = sizeof(usb_user_serial_number);
00208 pbuffer = &usb_user_serial_number;
00209 break;
00210
00211 default:
00212 break;
00213 }
00214 break;
00215
00216 default:
00217 break;
00218 }
00219
00220 return pbuffer != NULL;
00221 }
00222
00223
00224 #endif // USB_DEVICE_FEATURE == ENABLED