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 #include "ctrl_access.h"
00060
00061
00062
00063
00064
00065
00066
00067 volatile Bool ms_multiple_drive;
00068
00069
00070
00071
00072 extern const void *pbuffer;
00073 extern U16 data_to_transfer;
00074
00075
00076
00077
00083 void usb_user_endpoint_init(U8 conf_nb)
00084 {
00085 ms_multiple_drive = FALSE;
00086
00087 (void)Usb_configure_endpoint(EP_MS_IN,
00088 EP_ATTRIBUTES_1,
00089 DIRECTION_IN,
00090 EP_SIZE_1,
00091 DOUBLE_BANK);
00092
00093 (void)Usb_configure_endpoint(EP_MS_OUT,
00094 EP_ATTRIBUTES_2,
00095 DIRECTION_OUT,
00096 EP_SIZE_2,
00097 DOUBLE_BANK);
00098 }
00099
00100
00110 Bool usb_user_read_request(U8 type, U8 request)
00111 {
00112 U8 descriptor_type;
00113 U8 string_type;
00114
00115 string_type = Usb_read_endpoint_data(EP_CONTROL, 8);
00116 descriptor_type = Usb_read_endpoint_data(EP_CONTROL, 8);
00117
00118 switch (request)
00119 {
00120 case GET_DESCRIPTOR:
00121 switch (descriptor_type)
00122 {
00123 default:
00124 break;
00125 }
00126 break;
00127
00128 case SET_CONFIGURATION:
00129 switch (descriptor_type)
00130 {
00131 default:
00132 break;
00133 }
00134 break;
00135
00136 case MASS_STORAGE_RESET:
00137 Usb_ack_setup_received_free();
00138 Usb_ack_control_in_ready_send();
00139 return TRUE;
00140
00141 case GET_MAX_LUN:
00142 Usb_ack_setup_received_free();
00143 Usb_reset_endpoint_fifo_access(EP_CONTROL);
00144 Usb_write_endpoint_data(EP_CONTROL, 8, get_nb_lun() - 1);
00145 Usb_ack_control_in_ready_send();
00146 while (!Is_usb_control_in_ready());
00147
00148 while(!Is_usb_control_out_received());
00149 Usb_ack_control_out_received_free();
00150
00151 ms_multiple_drive = TRUE;
00152 return TRUE;
00153
00154 default:
00155 break;
00156 }
00157
00158 return FALSE;
00159 }
00160
00161
00168 Bool usb_user_get_descriptor(U8 type, U8 string)
00169 {
00170 pbuffer = NULL;
00171
00172 switch (type)
00173 {
00174 case STRING_DESCRIPTOR:
00175 switch (string)
00176 {
00177 case LANG_ID:
00178 data_to_transfer = sizeof(usb_user_language_id);
00179 pbuffer = &usb_user_language_id.bLength;
00180 break;
00181
00182 case MAN_INDEX:
00183 data_to_transfer = sizeof(usb_user_manufacturer_string_descriptor);
00184 pbuffer = &usb_user_manufacturer_string_descriptor.bLength;
00185 break;
00186
00187 case PROD_INDEX:
00188 data_to_transfer = sizeof(usb_user_product_string_descriptor);
00189 pbuffer = &usb_user_product_string_descriptor.bLength;
00190 break;
00191
00192 case SN_INDEX:
00193 data_to_transfer = sizeof(usb_user_serial_number);
00194 pbuffer = &usb_user_serial_number.bLength;
00195 break;
00196
00197 default:
00198 break;
00199 }
00200 break;
00201
00202 default:
00203 break;
00204 }
00205
00206 return pbuffer != NULL;
00207 }
00208
00209
00210 #endif // USB_DEVICE_FEATURE == ENABLED