00001
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
00051 #include "conf_usb.h"
00052
00053
00054 #if USB_DEVICE_FEATURE == ENABLED
00055
00056 #include "usb_drv.h"
00057 #include "usb_descriptors.h"
00058 #include "usb_standard_request.h"
00059 #include "usb_specific_request.h"
00060 #include "hid.h"
00061 #include "audio_example.h"
00062
00063
00064
00065
00066
00067
00068
00069
00070 const S_usb_device_descriptor usb_dev_desc =
00071 {
00072 sizeof(S_usb_device_descriptor),
00073 DEVICE_DESCRIPTOR,
00074 Usb_format_mcu_to_usb_data(16, USB_SPECIFICATION),
00075 DEVICE_CLASS,
00076 DEVICE_SUB_CLASS,
00077 DEVICE_PROTOCOL,
00078 EP_CONTROL_LENGTH,
00079 Usb_format_mcu_to_usb_data(16, VENDOR_ID),
00080 Usb_format_mcu_to_usb_data(16, PRODUCT_ID),
00081 Usb_format_mcu_to_usb_data(16, RELEASE_NUMBER),
00082 MAN_INDEX,
00083 PROD_INDEX,
00084 SN_INDEX,
00085 NB_CONFIGURATION
00086 };
00087
00088
00089
00090 const S_usb_user_configuration_descriptor usb_conf_desc =
00091 {
00092 { sizeof(S_usb_configuration_descriptor)
00093 , CONFIGURATION_DESCRIPTOR
00094 , Usb_format_mcu_to_usb_data(16, sizeof(S_usb_user_configuration_descriptor))
00095 , NB_INTERFACE
00096 , CONF_NB
00097 , CONF_INDEX
00098 , CONF_ATTRIBUTES
00099 , MAX_POWER
00100 }
00101 ,
00102
00103
00104
00105 { sizeof(S_usb_interface_descriptor)
00106 , INTERFACE_DESCRIPTOR
00107 , AC_INTERFACE_NB
00108 , AC_ALTERNATE
00109 , AC_NB_ENDPOINT
00110 , AC_INTERFACE_CLASS
00111 , AC_INTERFACE_SUB_CLASS
00112 , AC_INTERFACE_PROTOCOL
00113 , AC_INTERFACE_INDEX
00114 }
00115 ,
00116
00117 { sizeof(S_usb_ac_interface_descriptor)
00118 ,DESCRIPTOR_AUDIO_INTERFACE
00119 ,DESCRIPTOR_SUBTYPE_AUDIO_AC_HEADER
00120 ,Usb_format_mcu_to_usb_data(16, AUDIO_CLASS_REVISION)
00121 ,Usb_format_mcu_to_usb_data(16, sizeof(S_usb_ac_interface_descriptor)\
00122 +sizeof(S_usb_in_ter_descriptor)
00123 +sizeof(S_usb_feature_unit_descriptor_speaker)
00124 +sizeof(S_usb_out_ter_descriptor)\
00125 +sizeof(S_usb_in_ter_descriptor)
00126 +sizeof(S_usb_feature_unit_descriptor_micro)
00127 +sizeof(S_usb_out_ter_descriptor))
00128 ,NB_OF_STREAMING_INTERFACE
00129 ,STD_AS_IN_INTERFACE_NB
00130 ,STD_AS_OUT_INTERFACE_NB
00131 }
00132 ,
00133
00134
00135
00136 { sizeof(S_usb_in_ter_descriptor)
00137 ,DESCRIPTOR_AUDIO_INTERFACE
00138 ,DESCRIPTOR_SUBTYPE_AUDIO_AC_INPUT_TERMINAL
00139 ,SPEAKER_INPUT_TERMINAL_ID
00140 ,Usb_format_mcu_to_usb_data(16, SPEAKER_INPUT_TERMINAL_TYPE)
00141 ,SPEAKER_INPUT_TERMINAL_ASSOCIATION
00142 ,SPEAKER_INPUT_TERMINAL_NB_CHANNELS
00143 ,SPEAKER_INPUT_TERMINAL_CHANNEL_CONF
00144 ,SPEAKER_INPUT_TERMINAL_CH_NAME_ID
00145 ,SPEAKER_INPUT_TERMINAL_NAME_ID
00146 }
00147 ,
00148
00149 { sizeof(S_usb_feature_unit_descriptor_speaker)
00150 ,DESCRIPTOR_AUDIO_INTERFACE
00151 ,DESCRIPTOR_SUBTYPE_AUDIO_AC_FEATURE_UNIT
00152 ,SPEAKER_FEATURE_UNIT_ID
00153 ,SPEAKER_FEATURE_UNIT_SOURCE_ID
00154 ,0x01
00155 ,SPEAKER_FEATURE_UNIT_CTRL_CH_MASTER
00156 ,SPEAKER_FEATURE_UNIT_CTRL_CH_1
00157 }
00158 ,
00159
00160 { sizeof(S_usb_out_ter_descriptor)
00161 ,DESCRIPTOR_AUDIO_INTERFACE
00162 ,DESCRIPTOR_SUBTYPE_AUDIO_AC_OUTPUT_TERMINAL
00163 ,SPEAKER_OUTPUT_TERMINAL_ID
00164 ,Usb_format_mcu_to_usb_data(16, SPEAKER_OUTPUT_TERMINAL_TYPE)
00165 ,SPEAKER_OUTPUT_TERMINAL_ASSOCIATION
00166 ,SPEAKER_OUTPUT_TERMINAL_SOURCE_ID
00167 ,SPEAKER_OUTPUT_TERMINAL_NAME_ID
00168 }
00169 ,
00170
00171
00172 { sizeof(S_usb_in_ter_descriptor)
00173 ,DESCRIPTOR_AUDIO_INTERFACE
00174 ,DESCRIPTOR_SUBTYPE_AUDIO_AC_INPUT_TERMINAL
00175 ,MICRO_INPUT_TERMINAL_ID
00176 ,Usb_format_mcu_to_usb_data(16, MICRO_INPUT_TERMINAL_TYPE)
00177 ,MICRO_INPUT_TERMINAL_ASSOCIATION
00178 ,MICRO_INPUT_TERMINAL_NB_CHANNELS
00179 ,MICRO_INPUT_TERMINAL_CHANNEL_CONF
00180 ,MICRO_INPUT_TERMINAL_CH_NAME_ID
00181 ,MICRO_INPUT_TERMINAL_NAME_ID
00182 }
00183 ,
00184
00185 { sizeof(S_usb_feature_unit_descriptor_micro)
00186 ,DESCRIPTOR_AUDIO_INTERFACE
00187 ,DESCRIPTOR_SUBTYPE_AUDIO_AC_FEATURE_UNIT
00188 ,MICRO_FEATURE_UNIT_ID
00189 ,MICRO_FEATURE_UNIT_SOURCE_ID
00190 ,0x01
00191 ,MICRO_FEATURE_UNIT_CTRL_CH_MASTER
00192 ,MICRO_FEATURE_UNIT_CTRL_CH_1
00193 }
00194 ,
00195
00196 { sizeof(S_usb_out_ter_descriptor)
00197 ,DESCRIPTOR_AUDIO_INTERFACE
00198 ,DESCRIPTOR_SUBTYPE_AUDIO_AC_OUTPUT_TERMINAL
00199 ,MICRO_OUTPUT_TERMINAL_ID
00200 ,Usb_format_mcu_to_usb_data(16, MICRO_OUTPUT_TERMINAL_TYPE)
00201 ,MICRO_OUTPUT_TERMINAL_ASSOCIATION
00202 ,MICRO_OUTPUT_TERMINAL_SOURCE_ID
00203 ,MICRO_OUTPUT_TERMINAL_NAME_ID
00204 }
00205 ,
00206
00207
00208
00209 { sizeof(S_usb_interface_descriptor)
00210 ,INTERFACE_DESCRIPTOR
00211 ,STD_AS_OUT_INTERFACE_NB
00212 ,ALT0_AS_OUT_INTERFACE_INDEX
00213 ,ALT0_AS_OUT_NB_ENDPOINT
00214 ,ALT0_AS_OUT_INTERFACE_CLASS
00215 ,ALT0_AS_OUT_INTERFACE_SUB_CLASS
00216 ,ALT0_AS_OUT_INTERFACE_PROTOCOL
00217 ,0x00
00218 }
00219 ,
00220
00221 { sizeof(S_usb_interface_descriptor)
00222 ,INTERFACE_DESCRIPTOR
00223 ,STD_AS_OUT_INTERFACE_NB
00224 ,ALT1_AS_OUT_INTERFACE_INDEX
00225 ,ALT1_AS_OUT_NB_ENDPOINT
00226 ,ALT1_AS_OUT_INTERFACE_CLASS
00227 ,ALT1_AS_OUT_INTERFACE_SUB_CLASS
00228 ,ALT1_AS_OUT_INTERFACE_PROTOCOL
00229 ,0x00
00230 }
00231 ,
00232
00233 { sizeof(S_usb_as_interface_descriptor)
00234 ,DESCRIPTOR_AUDIO_INTERFACE
00235 ,DESCRIPTOR_SUBTYPE_AUDIO_AS_GENERAL
00236 ,AS_OUT_TERMINAL_LINK
00237 ,AS_OUT_DELAY
00238 ,Usb_format_mcu_to_usb_data(16, AS_OUT_FORMAT_TAG)
00239 }
00240 ,
00241 { sizeof(S_usb_format_type_speaker)
00242 ,DESCRIPTOR_AUDIO_INTERFACE
00243 ,DESCRIPTOR_SUBTYPE_AUDIO_AS_FORMAT_TYPE
00244 ,OUT_FORMAT_TYPE
00245 ,OUT_FORMAT_NB_CHANNELS
00246 ,OUT_FORMAT_FRAME_SIZE
00247 ,OUT_FORMAT_BIT_RESOLUTION
00248 ,OUT_FORMAT_SAMPLE_FREQ_NB
00249 #if (defined USB_RESYNC_METHOD) && ((USB_RESYNC_METHOD == USB_RESYNC_METHOD_SOFT_ADD_DEL_SAMPLES) || (USB_RESYNC_METHOD == USB_RESYNC_METHOD_SOFT_ADAPTIF_SRC))
00250 ,Usb_format_mcu_to_usb_data(16, SPEAKER_FREQUENCY)
00251 ,OUT_FORMAT_MSBYTE_SAMPLE_FREQ
00252 #else // USB_RESYNC_METHOD_EXT_CLOCK_SYNTHESIZER
00253 ,Usb_format_mcu_to_usb_data(16, 48000)
00254 ,OUT_FORMAT_MSBYTE_SAMPLE_FREQ
00255 ,Usb_format_mcu_to_usb_data(16, 44100)
00256 ,OUT_FORMAT_MSBYTE_SAMPLE_FREQ
00257 ,Usb_format_mcu_to_usb_data(16, 32000)
00258 ,OUT_FORMAT_MSBYTE_SAMPLE_FREQ
00259 #endif
00260 }
00261 ,
00262 { sizeof(S_usb_endpoint_audio_descriptor)
00263 , ENDPOINT_DESCRIPTOR
00264 , ENDPOINT_NB_OUT
00265 , EP_ATTRIBUTES_OUT
00266 , Usb_format_mcu_to_usb_data(16, EP_SIZE_OUT)
00267 , EP_INTERVAL_OUT
00268 , 0x00
00269 , 0x00
00270 }
00271 ,
00272 { sizeof(S_usb_endpoint_audio_specific)
00273 ,DESCRIPTOR_AUDIO_ENDPOINT
00274 ,DESCRIPTOR_SUBTYPE_AUDIO_ENDP_GENERAL
00275 ,AUDIO_EP_OUT_ATRIBUTES
00276 ,AUDIO_EP_OUT_DELAY_UNIT
00277 ,Usb_format_mcu_to_usb_data(16, AUDIO_EP_OUT_LOCK_DELAY)
00278 }
00279 ,
00280
00281
00282
00283 { sizeof(S_usb_interface_descriptor)
00284 ,INTERFACE_DESCRIPTOR
00285 ,STD_AS_IN_INTERFACE_NB
00286 ,ALT0_AS_IN_INTERFACE_INDEX
00287 ,ALT0_AS_IN_NB_ENDPOINT
00288 ,ALT0_AS_IN_INTERFACE_CLASS
00289 ,ALT0_AS_IN_INTERFACE_SUB_CLASS
00290 ,ALT0_AS_IN_INTERFACE_PROTOCOL
00291 ,0x00
00292 }
00293 ,
00294
00295 { sizeof(S_usb_interface_descriptor)
00296 ,INTERFACE_DESCRIPTOR
00297 ,STD_AS_IN_INTERFACE_NB
00298 ,ALT1_AS_IN_INTERFACE_INDEX
00299 ,ALT1_AS_IN_NB_ENDPOINT
00300 ,ALT1_AS_IN_INTERFACE_CLASS
00301 ,ALT1_AS_IN_INTERFACE_SUB_CLASS
00302 ,ALT1_AS_IN_INTERFACE_PROTOCOL
00303 ,0x00
00304 }
00305 ,
00306
00307 { sizeof(S_usb_as_interface_descriptor)
00308 ,DESCRIPTOR_AUDIO_INTERFACE
00309 ,DESCRIPTOR_SUBTYPE_AUDIO_AS_GENERAL
00310 ,AS_IN_TERMINAL_LINK
00311 ,AS_IN_DELAY
00312 ,Usb_format_mcu_to_usb_data(16, AS_IN_FORMAT_TAG)
00313 }
00314 ,
00315 { sizeof(S_usb_format_type_microphone)
00316 ,DESCRIPTOR_AUDIO_INTERFACE
00317 ,DESCRIPTOR_SUBTYPE_AUDIO_AS_FORMAT_TYPE
00318 ,IN_FORMAT_TYPE
00319 ,IN_FORMAT_NB_CHANNELS
00320 ,IN_FORMAT_FRAME_SIZE
00321 ,IN_FORMAT_BIT_RESOLUTION
00322 ,IN_FORMAT_SAMPLE_FREQ_NB
00323 ,Usb_format_mcu_to_usb_data(16, IN_FORMAT_LSBYTE_SAMPLE_FREQ)
00324 ,IN_FORMAT_MSBYTE_SAMPLE_FREQ
00325 }
00326 ,
00327 { sizeof(S_usb_endpoint_audio_descriptor)
00328 , ENDPOINT_DESCRIPTOR
00329 , ENDPOINT_NB_IN
00330 , EP_ATTRIBUTES_IN
00331 , Usb_format_mcu_to_usb_data(16, EP_SIZE_IN)
00332 , EP_INTERVAL_IN
00333 , 0x00
00334 , 0x00
00335 }
00336 ,
00337 { sizeof(S_usb_endpoint_audio_specific)
00338 , DESCRIPTOR_AUDIO_ENDPOINT
00339 , DESCRIPTOR_SUBTYPE_AUDIO_ENDP_GENERAL
00340 , AUDIO_EP_IN_ATRIBUTES
00341 , AUDIO_EP_IN_DELAY_UNIT
00342 , Usb_format_mcu_to_usb_data(16, AUDIO_EP_IN_LOCK_DELAY)
00343 }
00344
00345
00346 ,
00347 { sizeof(S_usb_interface_descriptor)
00348 , INTERFACE_DESCRIPTOR
00349 , INTERFACE_NB_KBD
00350 , ALTERNATE_KBD
00351 , NB_ENDPOINT_KBD
00352 , INTERFACE_CLASS_KBD
00353 , INTERFACE_SUB_CLASS_KBD
00354 , INTERFACE_PROTOCOL_KBD
00355 , INTERFACE_INDEX_KBD
00356 }
00357 ,
00358 { sizeof(S_usb_hid_descriptor)
00359 , HID_DESCRIPTOR
00360 , HID_BDC
00361 , HID_COUNTRY_CODE_NOT_SUPPORTED
00362 , HID_CLASS_DESC_NB_DEFAULT
00363 , HID_REPORT_DESCRIPTOR
00364 , Usb_format_mcu_to_usb_data(16, sizeof(usb_hid_report_descriptor_kbd))
00365 }
00366 ,
00367 { sizeof(S_usb_endpoint_descriptor)
00368 , ENDPOINT_DESCRIPTOR
00369 , ENDPOINT_NB_KBD
00370 , EP_ATTRIBUTES_KBD
00371 , Usb_format_mcu_to_usb_data(16, (EP_SIZE_KBD))
00372 , EP_INTERVAL_KBD
00373 }
00374 };
00375
00376
00377
00378 const S_usb_language_id usb_user_language_id =
00379 {
00380 sizeof(S_usb_language_id),
00381 STRING_DESCRIPTOR,
00382 Usb_format_mcu_to_usb_data(16, LANGUAGE_ID)
00383 };
00384
00385
00386
00387 const S_usb_manufacturer_string_descriptor usb_user_manufacturer_string_descriptor =
00388 {
00389 sizeof(S_usb_manufacturer_string_descriptor),
00390 STRING_DESCRIPTOR,
00391 USB_MANUFACTURER_NAME
00392 };
00393
00394
00395
00396 const S_usb_product_string_descriptor usb_user_product_string_descriptor =
00397 {
00398 sizeof(S_usb_product_string_descriptor),
00399 STRING_DESCRIPTOR,
00400 USB_PRODUCT_NAME
00401 };
00402
00403
00404
00405 const S_usb_serial_number usb_user_serial_number =
00406 {
00407 sizeof(S_usb_serial_number),
00408 STRING_DESCRIPTOR,
00409 USB_SERIAL_NUMBER
00410 };
00411
00412
00413 const U8 usb_hid_report_descriptor_kbd[USB_HID_REPORT_DESC_KBD] =
00414 {
00415 0x05, 0x0c,
00416 0x09, 0x01,
00417 0xa1, 0x01,
00418 0x15, 0x00,
00419 0x25, 0x01,
00420 0x09, 0xE9,
00421 0x09, 0xEA,
00422 0x75, 0x01,
00423 0x95, 0x02,
00424 0x81, 0x02,
00425 0x09, 0xCD,
00426 0x09, 0xB5,
00427 0x09, 0xB6,
00428 0x09, 0xB3,
00429 0x09, 0xB4,
00430 0x95, 0x05,
00431 0x81, 0x06,
00432 0x95, 0x01,
00433 0x81, 0x01,
00434 0xc0
00435 };
00436
00437
00438 #endif // USB_DEVICE_FEATURE == ENABLED