Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
usb_lib.c
00001 /** 00002 * @file usb_lib.c 00003 * @brief USB library 00004 * 00005 * DAPLink Interface Firmware 00006 * Copyright (c) 2009-2016, ARM Limited, All Rights Reserved 00007 * SPDX-License-Identifier: Apache-2.0 00008 * 00009 * Licensed under the Apache License, Version 2.0 (the "License"); you may 00010 * not use this file except in compliance with the License. 00011 * You may obtain a copy of the License at 00012 * 00013 * http://www.apache.org/licenses/LICENSE-2.0 00014 * 00015 * Unless required by applicable law or agreed to in writing, software 00016 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00017 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00018 * See the License for the specific language governing permissions and 00019 * limitations under the License. 00020 */ 00021 00022 #include <string.h> 00023 #include "rl_usb.h" 00024 #include "usb.h" 00025 #include "settings.h" 00026 00027 #pragma thumb 00028 #pragma O3 00029 00030 00031 /*------------------------------------------------------------------------------ 00032 * Library for usb_config.c 00033 *----------------------------------------------------------------------------*/ 00034 00035 #ifdef __USB_CONFIG__ 00036 00037 /*------------------------------------------------------------------------------ 00038 * USB Device Configuration 00039 *----------------------------------------------------------------------------*/ 00040 00041 #if (USBD_ENABLE) 00042 00043 U8 USBD_AltSetting[USBD_IF_NUM_MAX]; 00044 U8 USBD_EP0Buf[USBD_MAX_PACKET0]; 00045 const U8 usbd_power = USBD_POWER; 00046 const U8 usbd_hs_enable = USBD_HS_ENABLE; 00047 const U8 usbd_bos_enable = USBD_BOS_ENABLE; 00048 U16 usbd_if_num = USBD_IF_NUM_MAX; 00049 const U8 usbd_ep_num = USBD_EP_NUM; 00050 const U8 usbd_max_packet0 = USBD_MAX_PACKET0; 00051 00052 00053 /*------------------------------------------------------------------------------ 00054 * USB Device Class Configuration 00055 *----------------------------------------------------------------------------*/ 00056 00057 #if (!USBD_HID_BINTERVAL) 00058 #define USBD_HID_INTERVAL 1 00059 #else 00060 #define USBD_HID_INTERVAL USBD_HID_BINTERVAL 00061 #endif 00062 #if (!USBD_HID_HS_BINTERVAL) 00063 #define USBD_HID_HS_INTERVAL 1 00064 #else 00065 #define USBD_HID_HS_INTERVAL (2 << ((USBD_HID_HS_BINTERVAL & 0x0F)-1)) 00066 #endif 00067 00068 #if (USBD_HID_ENABLE) 00069 U8 usbd_hid_if_num; //assigned during runtime init 00070 const U8 usbd_hid_ep_intin = USBD_HID_EP_INTIN; 00071 const U8 usbd_hid_ep_intout = USBD_HID_EP_INTOUT; 00072 const U16 usbd_hid_interval[2] = {USBD_HID_INTERVAL, USBD_HID_HS_INTERVAL}; 00073 const U16 usbd_hid_maxpacketsize[2] = {USBD_HID_WMAXPACKETSIZE, USBD_HID_HS_WMAXPACKETSIZE}; 00074 const U8 usbd_hid_inreport_num = USBD_HID_INREPORT_NUM; 00075 const U8 usbd_hid_outreport_num = USBD_HID_OUTREPORT_NUM; 00076 const U16 usbd_hid_inreport_max_sz = USBD_HID_INREPORT_MAX_SZ; 00077 const U16 usbd_hid_outreport_max_sz = USBD_HID_OUTREPORT_MAX_SZ; 00078 const U16 usbd_hid_featreport_max_sz = USBD_HID_FEATREPORT_MAX_SZ; 00079 U16 USBD_HID_PollingCnt; 00080 U8 USBD_HID_IdleCnt[USBD_HID_INREPORT_NUM]; 00081 U8 USBD_HID_IdleReload[USBD_HID_INREPORT_NUM]; 00082 U8 USBD_HID_IdleSet[USBD_HID_INREPORT_NUM]; 00083 U8 USBD_HID_InReport[USBD_HID_INREPORT_MAX_SZ + 1]; 00084 U8 USBD_HID_OutReport[USBD_HID_OUTREPORT_MAX_SZ + 1]; 00085 U8 USBD_HID_FeatReport[USBD_HID_FEATREPORT_MAX_SZ + 1]; 00086 #endif 00087 00088 #if (USBD_MSC_ENABLE) 00089 U8 usbd_msc_if_num; //assigned during runtime init 00090 const U8 usbd_msc_ep_bulkin = USBD_MSC_EP_BULKIN; 00091 const U8 usbd_msc_ep_bulkout = USBD_MSC_EP_BULKOUT; 00092 const U16 usbd_msc_maxpacketsize[2] = {USBD_MSC_WMAXPACKETSIZE, USBD_MSC_HS_WMAXPACKETSIZE}; 00093 const U8 *usbd_msc_inquiry_data = USBD_MSC_INQUIRY_DATA; 00094 const U16 USBD_MSC_BulkBufSize = USBD_MSC_MAX_PACKET; 00095 U8 USBD_MSC_BulkBuf[USBD_MSC_MAX_PACKET]; 00096 #endif 00097 00098 #if (USBD_ADC_ENABLE) 00099 const U8 usbd_adc_cif_num = USBD_ADC_CIF_NUM; 00100 const U8 usbd_adc_sif1_num = USBD_ADC_SIF1_NUM; 00101 const U8 usbd_adc_sif2_num = USBD_ADC_SIF2_NUM; 00102 const U8 usbd_adc_ep_isoout = USBD_ADC_EP_ISOOUT; 00103 const U32 usbd_adc_cfg_datafreq = USBD_ADC_TSAMFREQ; 00104 const U32 usbd_adc_cfg_p_s = USBD_ADC_CFG_P_S; 00105 const U32 usbd_adc_cfg_p_c = USBD_ADC_CFG_P_C; 00106 const U32 usbd_adc_cfg_b_s = (8 * USBD_ADC_CFG_P_C *USBD_ADC_CFG_P_S); 00107 S16 USBD_ADC_DataBuf[8 * USBD_ADC_CFG_P_C * USBD_ADC_CFG_P_S]; 00108 #endif 00109 00110 #ifndef USBD_CDC_ACM_ENABLE 00111 #if (USBD_CDC_ENABLE == 1) 00112 #error "Please update usb_config.c file with new definitions for CDC, as new CDC is incompatible with the old one!" 00113 #else 00114 #define USBD_CDC_ACM_ENABLE 0 00115 #endif 00116 #endif 00117 00118 #if (USBD_CDC_ACM_ENABLE) 00119 U8 usbd_cdc_acm_cif_num = 0; //assigned during runtime init 00120 U8 usbd_cdc_acm_dif_num = 0; //assigned during runtime init 00121 const U8 usbd_cdc_acm_ep_intin = USBD_CDC_ACM_EP_INTIN; 00122 const U8 usbd_cdc_acm_ep_bulkin = USBD_CDC_ACM_EP_BULKIN; 00123 const U8 usbd_cdc_acm_ep_bulkout = USBD_CDC_ACM_EP_BULKOUT; 00124 const U16 usbd_cdc_acm_sendbuf_sz = USBD_CDC_ACM_SENDBUF_SIZE; 00125 const U16 usbd_cdc_acm_receivebuf_sz = USBD_CDC_ACM_RECEIVEBUF_SIZE; 00126 const U16 usbd_cdc_acm_maxpacketsize[2] = {USBD_CDC_ACM_WMAXPACKETSIZE, USBD_CDC_ACM_HS_WMAXPACKETSIZE}; 00127 const U16 usbd_cdc_acm_maxpacketsize1[2] = {USBD_CDC_ACM_WMAXPACKETSIZE1, USBD_CDC_ACM_HS_WMAXPACKETSIZE1}; 00128 U8 USBD_CDC_ACM_SendBuf[USBD_CDC_ACM_SENDBUF_SIZE]; 00129 U8 USBD_CDC_ACM_ReceiveBuf[USBD_CDC_ACM_RECEIVEBUF_SIZE]; 00130 U8 USBD_CDC_ACM_NotifyBuf[10]; 00131 #endif 00132 00133 #if (USBD_WEBUSB_ENABLE) 00134 U8 usbd_webusb_if_num; //assigned during runtime init 00135 const U8 usbd_webusb_vendor_code = USBD_WEBUSB_VENDOR_CODE; 00136 #else 00137 const U8 usbd_webusb_vendor_code; 00138 #endif 00139 00140 #if (USBD_WINUSB_ENABLE) 00141 const U8 usbd_winusb_vendor_code = USBD_WINUSB_VENDOR_CODE; 00142 #else 00143 const U8 usbd_winusb_vendor_code; 00144 #endif 00145 00146 #if (USBD_BULK_ENABLE) 00147 U8 usbd_bulk_if_num = 0; //assigned during runtime init 00148 const U8 usbd_bulk_ep_bulkin = USBD_BULK_EP_BULKIN; 00149 const U8 usbd_bulk_ep_bulkout = USBD_BULK_EP_BULKOUT; 00150 const U16 usbd_bulk_maxpacketsize[2] = {USBD_BULK_WMAXPACKETSIZE, USBD_BULK_HS_WMAXPACKETSIZE}; 00151 const U16 USBD_Bulk_BulkBufSize = USBD_BULK_MAX_PACKET; 00152 U8 USBD_Bulk_BulkInBuf[USBD_BULK_MAX_PACKET]; 00153 U8 USBD_Bulk_BulkOutBuf[USBD_BULK_MAX_PACKET]; 00154 #endif 00155 00156 /*------------------------------------------------------------------------------ 00157 * USB Device Override Event Handler Fuctions 00158 *----------------------------------------------------------------------------*/ 00159 00160 #if (USBD_HID_ENABLE) 00161 #ifndef __RTX 00162 void USBD_Configure_Event(void) 00163 { 00164 USBD_HID_Configure_Event(); 00165 } 00166 #endif 00167 #ifdef __RTX 00168 #if ((USBD_HID_EP_INTOUT != 0) && (USBD_HID_EP_INTIN != USBD_HID_EP_INTOUT)) 00169 #if (USBD_HID_EP_INTIN == 1) 00170 #define USBD_RTX_EndPoint1 USBD_RTX_HID_EP_INTIN_Event 00171 #elif (USBD_HID_EP_INTIN == 2) 00172 #define USBD_RTX_EndPoint2 USBD_RTX_HID_EP_INTIN_Event 00173 #elif (USBD_HID_EP_INTIN == 3) 00174 #define USBD_RTX_EndPoint3 USBD_RTX_HID_EP_INTIN_Event 00175 #elif (USBD_HID_EP_INTIN == 4) 00176 #define USBD_RTX_EndPoint4 USBD_RTX_HID_EP_INTIN_Event 00177 #elif (USBD_HID_EP_INTIN == 5) 00178 #define USBD_RTX_EndPoint5 USBD_RTX_HID_EP_INTIN_Event 00179 #elif (USBD_HID_EP_INTIN == 6) 00180 #define USBD_RTX_EndPoint6 USBD_RTX_HID_EP_INTIN_Event 00181 #elif (USBD_HID_EP_INTIN == 7) 00182 #define USBD_RTX_EndPoint7 USBD_RTX_HID_EP_INTIN_Event 00183 #elif (USBD_HID_EP_INTIN == 8) 00184 #define USBD_RTX_EndPoint8 USBD_RTX_HID_EP_INTIN_Event 00185 #elif (USBD_HID_EP_INTIN == 9) 00186 #define USBD_RTX_EndPoint9 USBD_RTX_HID_EP_INTIN_Event 00187 #elif (USBD_HID_EP_INTIN == 10) 00188 #define USBD_RTX_EndPoint10 USBD_RTX_HID_EP_INTIN_Event 00189 #elif (USBD_HID_EP_INTIN == 11) 00190 #define USBD_RTX_EndPoint11 USBD_RTX_HID_EP_INTIN_Event 00191 #elif (USBD_HID_EP_INTIN == 12) 00192 #define USBD_RTX_EndPoint12 USBD_RTX_HID_EP_INTIN_Event 00193 #elif (USBD_HID_EP_INTIN == 13) 00194 #define USBD_RTX_EndPoint13 USBD_RTX_HID_EP_INTIN_Event 00195 #elif (USBD_HID_EP_INTIN == 14) 00196 #define USBD_RTX_EndPoint14 USBD_RTX_HID_EP_INTIN_Event 00197 #elif (USBD_HID_EP_INTIN == 15) 00198 #define USBD_RTX_EndPoint15 USBD_RTX_HID_EP_INTIN_Event 00199 #endif 00200 00201 #if (USBD_HID_EP_INTOUT == 1) 00202 #define USBD_RTX_EndPoint1 USBD_RTX_HID_EP_INTOUT_Event 00203 #elif (USBD_HID_EP_INTOUT == 2) 00204 #define USBD_RTX_EndPoint2 USBD_RTX_HID_EP_INTOUT_Event 00205 #elif (USBD_HID_EP_INTOUT == 3) 00206 #define USBD_RTX_EndPoint3 USBD_RTX_HID_EP_INTOUT_Event 00207 #elif (USBD_HID_EP_INTOUT == 4) 00208 #define USBD_RTX_EndPoint4 USBD_RTX_HID_EP_INTOUT_Event 00209 #elif (USBD_HID_EP_INTOUT == 5) 00210 #define USBD_RTX_EndPoint5 USBD_RTX_HID_EP_INTOUT_Event 00211 #elif (USBD_HID_EP_INTOUT == 6) 00212 #define USBD_RTX_EndPoint6 USBD_RTX_HID_EP_INTOUT_Event 00213 #elif (USBD_HID_EP_INTOUT == 7) 00214 #define USBD_RTX_EndPoint7 USBD_RTX_HID_EP_INTOUT_Event 00215 #elif (USBD_HID_EP_INTOUT == 8) 00216 #define USBD_RTX_EndPoint8 USBD_RTX_HID_EP_INTOUT_Event 00217 #elif (USBD_HID_EP_INTOUT == 9) 00218 #define USBD_RTX_EndPoint9 USBD_RTX_HID_EP_INTOUT_Event 00219 #elif (USBD_HID_EP_INTOUT == 10) 00220 #define USBD_RTX_EndPoint10 USBD_RTX_HID_EP_INTOUT_Event 00221 #elif (USBD_HID_EP_INTOUT == 11) 00222 #define USBD_RTX_EndPoint11 USBD_RTX_HID_EP_INTOUT_Event 00223 #elif (USBD_HID_EP_INTOUT == 12) 00224 #define USBD_RTX_EndPoint12 USBD_RTX_HID_EP_INTOUT_Event 00225 #elif (USBD_HID_EP_INTOUT == 13) 00226 #define USBD_RTX_EndPoint13 USBD_RTX_HID_EP_INTOUT_Event 00227 #elif (USBD_HID_EP_INTOUT == 14) 00228 #define USBD_RTX_EndPoint14 USBD_RTX_HID_EP_INTOUT_Event 00229 #elif (USBD_HID_EP_INTOUT == 15) 00230 #define USBD_RTX_EndPoint15 USBD_RTX_HID_EP_INTOUT_Event 00231 #endif 00232 #elif (USBD_HID_EP_INTOUT != 0) 00233 #if (USBD_HID_EP_INTIN == 1) 00234 #define USBD_RTX_EndPoint1 USBD_RTX_HID_EP_INT_Event 00235 #elif (USBD_HID_EP_INTIN == 2) 00236 #define USBD_RTX_EndPoint2 USBD_RTX_HID_EP_INT_Event 00237 #elif (USBD_HID_EP_INTIN == 3) 00238 #define USBD_RTX_EndPoint3 USBD_RTX_HID_EP_INT_Event 00239 #elif (USBD_HID_EP_INTIN == 4) 00240 #define USBD_RTX_EndPoint4 USBD_RTX_HID_EP_INT_Event 00241 #elif (USBD_HID_EP_INTIN == 5) 00242 #define USBD_RTX_EndPoint5 USBD_RTX_HID_EP_INT_Event 00243 #elif (USBD_HID_EP_INTIN == 6) 00244 #define USBD_RTX_EndPoint6 USBD_RTX_HID_EP_INT_Event 00245 #elif (USBD_HID_EP_INTIN == 7) 00246 #define USBD_RTX_EndPoint7 USBD_RTX_HID_EP_INT_Event 00247 #elif (USBD_HID_EP_INTIN == 8) 00248 #define USBD_RTX_EndPoint8 USBD_RTX_HID_EP_INT_Event 00249 #elif (USBD_HID_EP_INTIN == 9) 00250 #define USBD_RTX_EndPoint9 USBD_RTX_HID_EP_INT_Event 00251 #elif (USBD_HID_EP_INTIN == 10) 00252 #define USBD_RTX_EndPoint10 USBD_RTX_HID_EP_INT_Event 00253 #elif (USBD_HID_EP_INTIN == 11) 00254 #define USBD_RTX_EndPoint11 USBD_RTX_HID_EP_INT_Event 00255 #elif (USBD_HID_EP_INTIN == 12) 00256 #define USBD_RTX_EndPoint12 USBD_RTX_HID_EP_INT_Event 00257 #elif (USBD_HID_EP_INTIN == 13) 00258 #define USBD_RTX_EndPoint13 USBD_RTX_HID_EP_INT_Event 00259 #elif (USBD_HID_EP_INTIN == 14) 00260 #define USBD_RTX_EndPoint14 USBD_RTX_HID_EP_INT_Event 00261 #elif (USBD_HID_EP_INTIN == 15) 00262 #define USBD_RTX_EndPoint15 USBD_RTX_HID_EP_INT_Event 00263 #endif 00264 #else 00265 #if (USBD_HID_EP_INTIN == 1) 00266 #define USBD_RTX_EndPoint1 USBD_RTX_HID_EP_INTIN_Event 00267 #elif (USBD_HID_EP_INTIN == 2) 00268 #define USBD_RTX_EndPoint2 USBD_RTX_HID_EP_INTIN_Event 00269 #elif (USBD_HID_EP_INTIN == 3) 00270 #define USBD_RTX_EndPoint3 USBD_RTX_HID_EP_INTIN_Event 00271 #elif (USBD_HID_EP_INTIN == 4) 00272 #define USBD_RTX_EndPoint4 USBD_RTX_HID_EP_INTIN_Event 00273 #elif (USBD_HID_EP_INTIN == 5) 00274 #define USBD_RTX_EndPoint5 USBD_RTX_HID_EP_INTIN_Event 00275 #elif (USBD_HID_EP_INTIN == 6) 00276 #define USBD_RTX_EndPoint6 USBD_RTX_HID_EP_INTIN_Event 00277 #elif (USBD_HID_EP_INTIN == 7) 00278 #define USBD_RTX_EndPoint7 USBD_RTX_HID_EP_INTIN_Event 00279 #elif (USBD_HID_EP_INTIN == 8) 00280 #define USBD_RTX_EndPoint8 USBD_RTX_HID_EP_INTIN_Event 00281 #elif (USBD_HID_EP_INTIN == 9) 00282 #define USBD_RTX_EndPoint9 USBD_RTX_HID_EP_INTIN_Event 00283 #elif (USBD_HID_EP_INTIN == 10) 00284 #define USBD_RTX_EndPoint10 USBD_RTX_HID_EP_INTIN_Event 00285 #elif (USBD_HID_EP_INTIN == 11) 00286 #define USBD_RTX_EndPoint11 USBD_RTX_HID_EP_INTIN_Event 00287 #elif (USBD_HID_EP_INTIN == 12) 00288 #define USBD_RTX_EndPoint12 USBD_RTX_HID_EP_INTIN_Event 00289 #elif (USBD_HID_EP_INTIN == 13) 00290 #define USBD_RTX_EndPoint13 USBD_RTX_HID_EP_INTIN_Event 00291 #elif (USBD_HID_EP_INTIN == 14) 00292 #define USBD_RTX_EndPoint14 USBD_RTX_HID_EP_INTIN_Event 00293 #elif (USBD_HID_EP_INTIN == 15) 00294 #define USBD_RTX_EndPoint15 USBD_RTX_HID_EP_INTIN_Event 00295 #endif 00296 #endif 00297 #else 00298 #if (USBD_HID_EP_INTIN != USBD_HID_EP_INTOUT) 00299 #if (USBD_HID_EP_INTIN == 1) 00300 #define USBD_EndPoint1 USBD_HID_EP_INTIN_Event 00301 #elif (USBD_HID_EP_INTIN == 2) 00302 #define USBD_EndPoint2 USBD_HID_EP_INTIN_Event 00303 #elif (USBD_HID_EP_INTIN == 3) 00304 #define USBD_EndPoint3 USBD_HID_EP_INTIN_Event 00305 #elif (USBD_HID_EP_INTIN == 4) 00306 #define USBD_EndPoint4 USBD_HID_EP_INTIN_Event 00307 #elif (USBD_HID_EP_INTIN == 5) 00308 #define USBD_EndPoint5 USBD_HID_EP_INTIN_Event 00309 #elif (USBD_HID_EP_INTIN == 6) 00310 #define USBD_EndPoint6 USBD_HID_EP_INTIN_Event 00311 #elif (USBD_HID_EP_INTIN == 7) 00312 #define USBD_EndPoint7 USBD_HID_EP_INTIN_Event 00313 #elif (USBD_HID_EP_INTIN == 8) 00314 #define USBD_EndPoint8 USBD_HID_EP_INTIN_Event 00315 #elif (USBD_HID_EP_INTIN == 9) 00316 #define USBD_EndPoint9 USBD_HID_EP_INTIN_Event 00317 #elif (USBD_HID_EP_INTIN == 10) 00318 #define USBD_EndPoint10 USBD_HID_EP_INTIN_Event 00319 #elif (USBD_HID_EP_INTIN == 11) 00320 #define USBD_EndPoint11 USBD_HID_EP_INTIN_Event 00321 #elif (USBD_HID_EP_INTIN == 12) 00322 #define USBD_EndPoint12 USBD_HID_EP_INTIN_Event 00323 #elif (USBD_HID_EP_INTIN == 13) 00324 #define USBD_EndPoint13 USBD_HID_EP_INTIN_Event 00325 #elif (USBD_HID_EP_INTIN == 14) 00326 #define USBD_EndPoint14 USBD_HID_EP_INTIN_Event 00327 #elif (USBD_HID_EP_INTIN == 15) 00328 #define USBD_EndPoint15 USBD_HID_EP_INTIN_Event 00329 #endif 00330 00331 #if (USBD_HID_EP_INTOUT == 1) 00332 #define USBD_EndPoint1 USBD_HID_EP_INTOUT_Event 00333 #elif (USBD_HID_EP_INTOUT == 2) 00334 #define USBD_EndPoint2 USBD_HID_EP_INTOUT_Event 00335 #elif (USBD_HID_EP_INTOUT == 3) 00336 #define USBD_EndPoint3 USBD_HID_EP_INTOUT_Event 00337 #elif (USBD_HID_EP_INTOUT == 4) 00338 #define USBD_EndPoint4 USBD_HID_EP_INTOUT_Event 00339 #elif (USBD_HID_EP_INTOUT == 5) 00340 #define USBD_EndPoint5 USBD_HID_EP_INTOUT_Event 00341 #elif (USBD_HID_EP_INTOUT == 6) 00342 #define USBD_EndPoint6 USBD_HID_EP_INTOUT_Event 00343 #elif (USBD_HID_EP_INTOUT == 7) 00344 #define USBD_EndPoint7 USBD_HID_EP_INTOUT_Event 00345 #elif (USBD_HID_EP_INTOUT == 8) 00346 #define USBD_EndPoint8 USBD_HID_EP_INTOUT_Event 00347 #elif (USBD_HID_EP_INTOUT == 9) 00348 #define USBD_EndPoint9 USBD_HID_EP_INTOUT_Event 00349 #elif (USBD_HID_EP_INTOUT == 10) 00350 #define USBD_EndPoint10 USBD_HID_EP_INTOUT_Event 00351 #elif (USBD_HID_EP_INTOUT == 11) 00352 #define USBD_EndPoint11 USBD_HID_EP_INTOUT_Event 00353 #elif (USBD_HID_EP_INTOUT == 12) 00354 #define USBD_EndPoint12 USBD_HID_EP_INTOUT_Event 00355 #elif (USBD_HID_EP_INTOUT == 13) 00356 #define USBD_EndPoint13 USBD_HID_EP_INTOUT_Event 00357 #elif (USBD_HID_EP_INTOUT == 14) 00358 #define USBD_EndPoint14 USBD_HID_EP_INTOUT_Event 00359 #elif (USBD_HID_EP_INTOUT == 15) 00360 #define USBD_EndPoint15 USBD_HID_EP_INTOUT_Event 00361 #endif 00362 00363 #else 00364 00365 #if (USBD_HID_EP_INTIN == 1) 00366 #define USBD_EndPoint1 USBD_HID_EP_INT_Event 00367 #elif (USBD_HID_EP_INTIN == 2) 00368 #define USBD_EndPoint2 USBD_HID_EP_INT_Event 00369 #elif (USBD_HID_EP_INTIN == 3) 00370 #define USBD_EndPoint3 USBD_HID_EP_INT_Event 00371 #elif (USBD_HID_EP_INTIN == 4) 00372 #define USBD_EndPoint4 USBD_HID_EP_INT_Event 00373 #elif (USBD_HID_EP_INTIN == 5) 00374 #define USBD_EndPoint5 USBD_HID_EP_INT_Event 00375 #elif (USBD_HID_EP_INTIN == 6) 00376 #define USBD_EndPoint6 USBD_HID_EP_INT_Event 00377 #elif (USBD_HID_EP_INTIN == 7) 00378 #define USBD_EndPoint7 USBD_HID_EP_INT_Event 00379 #elif (USBD_HID_EP_INTIN == 8) 00380 #define USBD_EndPoint8 USBD_HID_EP_INT_Event 00381 #elif (USBD_HID_EP_INTIN == 9) 00382 #define USBD_EndPoint9 USBD_HID_EP_INT_Event 00383 #elif (USBD_HID_EP_INTIN == 10) 00384 #define USBD_EndPoint10 USBD_HID_EP_INT_Event 00385 #elif (USBD_HID_EP_INTIN == 11) 00386 #define USBD_EndPoint11 USBD_HID_EP_INT_Event 00387 #elif (USBD_HID_EP_INTIN == 12) 00388 #define USBD_EndPoint12 USBD_HID_EP_INT_Event 00389 #elif (USBD_HID_EP_INTIN == 13) 00390 #define USBD_EndPoint13 USBD_HID_EP_INT_Event 00391 #elif (USBD_HID_EP_INTIN == 14) 00392 #define USBD_EndPoint14 USBD_HID_EP_INT_Event 00393 #elif (USBD_HID_EP_INTIN == 15) 00394 #define USBD_EndPoint15 USBD_HID_EP_INT_Event 00395 #endif 00396 00397 #endif /* (USBD_HID_EP_INTIN != USBD_HID_EP_INTOUT) */ 00398 00399 #endif /*#ifdef __RTX*/ 00400 #else 00401 BOOL USBD_ReqGetDescriptor_HID(U8 **pD, U32 *len) 00402 { 00403 return (__FALSE); 00404 } 00405 BOOL USBD_EndPoint0_Setup_HID_ReqToIF(void) 00406 { 00407 return (__FALSE); 00408 } 00409 BOOL USBD_EndPoint0_Out_HID_ReqToIF(void) 00410 { 00411 return (__FALSE); 00412 } 00413 #endif /* (USBD_HID_ENABLE) */ 00414 00415 #if (USBD_MSC_ENABLE) 00416 #ifdef __RTX 00417 #if (USBD_MSC_EP_BULKIN != USBD_MSC_EP_BULKOUT) 00418 #if (USBD_MSC_EP_BULKIN == 1) 00419 #define USBD_RTX_EndPoint1 USBD_RTX_MSC_EP_BULKIN_Event 00420 #elif (USBD_MSC_EP_BULKIN == 2) 00421 #define USBD_RTX_EndPoint2 USBD_RTX_MSC_EP_BULKIN_Event 00422 #elif (USBD_MSC_EP_BULKIN == 3) 00423 #define USBD_RTX_EndPoint3 USBD_RTX_MSC_EP_BULKIN_Event 00424 #elif (USBD_MSC_EP_BULKIN == 4) 00425 #define USBD_RTX_EndPoint4 USBD_RTX_MSC_EP_BULKIN_Event 00426 #elif (USBD_MSC_EP_BULKIN == 5) 00427 #define USBD_RTX_EndPoint5 USBD_RTX_MSC_EP_BULKIN_Event 00428 #elif (USBD_MSC_EP_BULKIN == 6) 00429 #define USBD_RTX_EndPoint6 USBD_RTX_MSC_EP_BULKIN_Event 00430 #elif (USBD_MSC_EP_BULKIN == 7) 00431 #define USBD_RTX_EndPoint7 USBD_RTX_MSC_EP_BULKIN_Event 00432 #elif (USBD_MSC_EP_BULKIN == 8) 00433 #define USBD_RTX_EndPoint8 USBD_RTX_MSC_EP_BULKIN_Event 00434 #elif (USBD_MSC_EP_BULKIN == 9) 00435 #define USBD_RTX_EndPoint9 USBD_RTX_MSC_EP_BULKIN_Event 00436 #elif (USBD_MSC_EP_BULKIN == 10) 00437 #define USBD_RTX_EndPoint10 USBD_RTX_MSC_EP_BULKIN_Event 00438 #elif (USBD_MSC_EP_BULKIN == 11) 00439 #define USBD_RTX_EndPoint11 USBD_RTX_MSC_EP_BULKIN_Event 00440 #elif (USBD_MSC_EP_BULKIN == 12) 00441 #define USBD_RTX_EndPoint12 USBD_RTX_MSC_EP_BULKIN_Event 00442 #elif (USBD_MSC_EP_BULKIN == 13) 00443 #define USBD_RTX_EndPoint13 USBD_RTX_MSC_EP_BULKIN_Event 00444 #elif (USBD_MSC_EP_BULKIN == 14) 00445 #define USBD_RTX_EndPoint14 USBD_RTX_MSC_EP_BULKIN_Event 00446 #elif (USBD_MSC_EP_BULKIN == 15) 00447 #define USBD_RTX_EndPoint15 USBD_RTX_MSC_EP_BULKIN_Event 00448 #endif 00449 00450 #if (USBD_MSC_EP_BULKOUT == 1) 00451 #define USBD_RTX_EndPoint1 USBD_RTX_MSC_EP_BULKOUT_Event 00452 #elif (USBD_MSC_EP_BULKOUT == 2) 00453 #define USBD_RTX_EndPoint2 USBD_RTX_MSC_EP_BULKOUT_Event 00454 #elif (USBD_MSC_EP_BULKOUT == 3) 00455 #define USBD_RTX_EndPoint3 USBD_RTX_MSC_EP_BULKOUT_Event 00456 #elif (USBD_MSC_EP_BULKOUT == 4) 00457 #define USBD_RTX_EndPoint4 USBD_RTX_MSC_EP_BULKOUT_Event 00458 #elif (USBD_MSC_EP_BULKOUT == 5) 00459 #define USBD_RTX_EndPoint5 USBD_RTX_MSC_EP_BULKOUT_Event 00460 #elif (USBD_MSC_EP_BULKOUT == 6) 00461 #define USBD_RTX_EndPoint6 USBD_RTX_MSC_EP_BULKOUT_Event 00462 #elif (USBD_MSC_EP_BULKOUT == 7) 00463 #define USBD_RTX_EndPoint7 USBD_RTX_MSC_EP_BULKOUT_Event 00464 #elif (USBD_MSC_EP_BULKOUT == 8) 00465 #define USBD_RTX_EndPoint8 USBD_RTX_MSC_EP_BULKOUT_Event 00466 #elif (USBD_MSC_EP_BULKOUT == 9) 00467 #define USBD_RTX_EndPoint9 USBD_RTX_MSC_EP_BULKOUT_Event 00468 #elif (USBD_MSC_EP_BULKOUT == 10) 00469 #define USBD_RTX_EndPoint10 USBD_RTX_MSC_EP_BULKOUT_Event 00470 #elif (USBD_MSC_EP_BULKOUT == 11) 00471 #define USBD_RTX_EndPoint11 USBD_RTX_MSC_EP_BULKOUT_Event 00472 #elif (USBD_MSC_EP_BULKOUT == 12) 00473 #define USBD_RTX_EndPoint12 USBD_RTX_MSC_EP_BULKOUT_Event 00474 #elif (USBD_MSC_EP_BULKOUT == 13) 00475 #define USBD_RTX_EndPoint13 USBD_RTX_MSC_EP_BULKOUT_Event 00476 #elif (USBD_MSC_EP_BULKOUT == 14) 00477 #define USBD_RTX_EndPoint14 USBD_RTX_MSC_EP_BULKOUT_Event 00478 #elif (USBD_MSC_EP_BULKOUT == 15) 00479 #define USBD_RTX_EndPoint15 USBD_RTX_MSC_EP_BULKOUT_Event 00480 #endif 00481 #else 00482 #if (USBD_MSC_EP_BULKIN == 1) 00483 #define USBD_RTX_EndPoint1 USBD_RTX_MSC_EP_BULK_Event 00484 #elif (USBD_MSC_EP_BULKIN == 2) 00485 #define USBD_RTX_EndPoint2 USBD_RTX_MSC_EP_BULK_Event 00486 #elif (USBD_MSC_EP_BULKIN == 3) 00487 #define USBD_RTX_EndPoint3 USBD_RTX_MSC_EP_BULK_Event 00488 #elif (USBD_MSC_EP_BULKIN == 4) 00489 #define USBD_RTX_EndPoint4 USBD_RTX_MSC_EP_BULK_Event 00490 #elif (USBD_MSC_EP_BULKIN == 5) 00491 #define USBD_RTX_EndPoint5 USBD_RTX_MSC_EP_BULK_Event 00492 #elif (USBD_MSC_EP_BULKIN == 6) 00493 #define USBD_RTX_EndPoint6 USBD_RTX_MSC_EP_BULK_Event 00494 #elif (USBD_MSC_EP_BULKIN == 7) 00495 #define USBD_RTX_EndPoint7 USBD_RTX_MSC_EP_BULK_Event 00496 #elif (USBD_MSC_EP_BULKIN == 8) 00497 #define USBD_RTX_EndPoint8 USBD_RTX_MSC_EP_BULK_Event 00498 #elif (USBD_MSC_EP_BULKIN == 9) 00499 #define USBD_RTX_EndPoint9 USBD_RTX_MSC_EP_BULK_Event 00500 #elif (USBD_MSC_EP_BULKIN == 10) 00501 #define USBD_RTX_EndPoint10 USBD_RTX_MSC_EP_BULK_Event 00502 #elif (USBD_MSC_EP_BULKIN == 11) 00503 #define USBD_RTX_EndPoint11 USBD_RTX_MSC_EP_BULK_Event 00504 #elif (USBD_MSC_EP_BULKIN == 12) 00505 #define USBD_RTX_EndPoint12 USBD_RTX_MSC_EP_BULK_Event 00506 #elif (USBD_MSC_EP_BULKIN == 13) 00507 #define USBD_RTX_EndPoint13 USBD_RTX_MSC_EP_BULK_Event 00508 #elif (USBD_MSC_EP_BULKIN == 14) 00509 #define USBD_RTX_EndPoint14 USBD_RTX_MSC_EP_BULK_Event 00510 #elif (USBD_MSC_EP_BULKIN == 15) 00511 #define USBD_RTX_EndPoint15 USBD_RTX_MSC_EP_BULK_Event 00512 #endif 00513 #endif 00514 #else 00515 #if (USBD_MSC_EP_BULKIN != USBD_MSC_EP_BULKOUT) 00516 #if (USBD_MSC_EP_BULKIN == 1) 00517 #define USBD_EndPoint1 USBD_MSC_EP_BULKIN_Event 00518 #elif (USBD_MSC_EP_BULKIN == 2) 00519 #define USBD_EndPoint2 USBD_MSC_EP_BULKIN_Event 00520 #elif (USBD_MSC_EP_BULKIN == 3) 00521 #define USBD_EndPoint3 USBD_MSC_EP_BULKIN_Event 00522 #elif (USBD_MSC_EP_BULKIN == 4) 00523 #define USBD_EndPoint4 USBD_MSC_EP_BULKIN_Event 00524 #elif (USBD_MSC_EP_BULKIN == 5) 00525 #define USBD_EndPoint5 USBD_MSC_EP_BULKIN_Event 00526 #elif (USBD_MSC_EP_BULKIN == 6) 00527 #define USBD_EndPoint6 USBD_MSC_EP_BULKIN_Event 00528 #elif (USBD_MSC_EP_BULKIN == 7) 00529 #define USBD_EndPoint7 USBD_MSC_EP_BULKIN_Event 00530 #elif (USBD_MSC_EP_BULKIN == 8) 00531 #define USBD_EndPoint8 USBD_MSC_EP_BULKIN_Event 00532 #elif (USBD_MSC_EP_BULKIN == 9) 00533 #define USBD_EndPoint9 USBD_MSC_EP_BULKIN_Event 00534 #elif (USBD_MSC_EP_BULKIN == 10) 00535 #define USBD_EndPoint10 USBD_MSC_EP_BULKIN_Event 00536 #elif (USBD_MSC_EP_BULKIN == 11) 00537 #define USBD_EndPoint11 USBD_MSC_EP_BULKIN_Event 00538 #elif (USBD_MSC_EP_BULKIN == 12) 00539 #define USBD_EndPoint12 USBD_MSC_EP_BULKIN_Event 00540 #elif (USBD_MSC_EP_BULKIN == 13) 00541 #define USBD_EndPoint13 USBD_MSC_EP_BULKIN_Event 00542 #elif (USBD_MSC_EP_BULKIN == 14) 00543 #define USBD_EndPoint14 USBD_MSC_EP_BULKIN_Event 00544 #elif (USBD_MSC_EP_BULKIN == 15) 00545 #define USBD_EndPoint15 USBD_MSC_EP_BULKIN_Event 00546 #endif 00547 00548 #if (USBD_MSC_EP_BULKOUT == 1) 00549 #define USBD_EndPoint1 USBD_MSC_EP_BULKOUT_Event 00550 #elif (USBD_MSC_EP_BULKOUT == 2) 00551 #define USBD_EndPoint2 USBD_MSC_EP_BULKOUT_Event 00552 #elif (USBD_MSC_EP_BULKOUT == 3) 00553 #define USBD_EndPoint3 USBD_MSC_EP_BULKOUT_Event 00554 #elif (USBD_MSC_EP_BULKOUT == 4) 00555 #define USBD_EndPoint4 USBD_MSC_EP_BULKOUT_Event 00556 #elif (USBD_MSC_EP_BULKOUT == 5) 00557 #define USBD_EndPoint5 USBD_MSC_EP_BULKOUT_Event 00558 #elif (USBD_MSC_EP_BULKOUT == 6) 00559 #define USBD_EndPoint6 USBD_MSC_EP_BULKOUT_Event 00560 #elif (USBD_MSC_EP_BULKOUT == 7) 00561 #define USBD_EndPoint7 USBD_MSC_EP_BULKOUT_Event 00562 #elif (USBD_MSC_EP_BULKOUT == 8) 00563 #define USBD_EndPoint8 USBD_MSC_EP_BULKOUT_Event 00564 #elif (USBD_MSC_EP_BULKOUT == 9) 00565 #define USBD_EndPoint9 USBD_MSC_EP_BULKOUT_Event 00566 #elif (USBD_MSC_EP_BULKOUT == 10) 00567 #define USBD_EndPoint10 USBD_MSC_EP_BULKOUT_Event 00568 #elif (USBD_MSC_EP_BULKOUT == 11) 00569 #define USBD_EndPoint11 USBD_MSC_EP_BULKOUT_Event 00570 #elif (USBD_MSC_EP_BULKOUT == 12) 00571 #define USBD_EndPoint12 USBD_MSC_EP_BULKOUT_Event 00572 #elif (USBD_MSC_EP_BULKOUT == 13) 00573 #define USBD_EndPoint13 USBD_MSC_EP_BULKOUT_Event 00574 #elif (USBD_MSC_EP_BULKOUT == 14) 00575 #define USBD_EndPoint14 USBD_MSC_EP_BULKOUT_Event 00576 #elif (USBD_MSC_EP_BULKOUT == 15) 00577 #define USBD_EndPoint15 USBD_MSC_EP_BULKOUT_Event 00578 #endif 00579 #else 00580 #if (USBD_MSC_EP_BULKIN == 1) 00581 #define USBD_EndPoint1 USBD_MSC_EP_BULK_Event 00582 #elif (USBD_MSC_EP_BULKIN == 2) 00583 #define USBD_EndPoint2 USBD_MSC_EP_BULK_Event 00584 #elif (USBD_MSC_EP_BULKIN == 3) 00585 #define USBD_EndPoint3 USBD_MSC_EP_BULK_Event 00586 #elif (USBD_MSC_EP_BULKIN == 4) 00587 #define USBD_EndPoint4 USBD_MSC_EP_BULK_Event 00588 #elif (USBD_MSC_EP_BULKIN == 5) 00589 #define USBD_EndPoint5 USBD_MSC_EP_BULK_Event 00590 #elif (USBD_MSC_EP_BULKIN == 6) 00591 #define USBD_EndPoint6 USBD_MSC_EP_BULK_Event 00592 #elif (USBD_MSC_EP_BULKIN == 7) 00593 #define USBD_EndPoint7 USBD_MSC_EP_BULK_Event 00594 #elif (USBD_MSC_EP_BULKIN == 8) 00595 #define USBD_EndPoint8 USBD_MSC_EP_BULK_Event 00596 #elif (USBD_MSC_EP_BULKIN == 9) 00597 #define USBD_EndPoint9 USBD_MSC_EP_BULK_Event 00598 #elif (USBD_MSC_EP_BULKIN == 10) 00599 #define USBD_EndPoint10 USBD_MSC_EP_BULK_Event 00600 #elif (USBD_MSC_EP_BULKIN == 11) 00601 #define USBD_EndPoint11 USBD_MSC_EP_BULK_Event 00602 #elif (USBD_MSC_EP_BULKIN == 12) 00603 #define USBD_EndPoint12 USBD_MSC_EP_BULK_Event 00604 #elif (USBD_MSC_EP_BULKIN == 13) 00605 #define USBD_EndPoint13 USBD_MSC_EP_BULK_Event 00606 #elif (USBD_MSC_EP_BULKIN == 14) 00607 #define USBD_EndPoint14 USBD_MSC_EP_BULK_Event 00608 #elif (USBD_MSC_EP_BULKIN == 15) 00609 #define USBD_EndPoint15 USBD_MSC_EP_BULK_Event 00610 #endif 00611 #endif 00612 #endif 00613 #else 00614 void USBD_ReqClrFeature_MSC(U32 EPNum) 00615 { 00616 00617 } 00618 BOOL USBD_EndPoint0_Setup_MSC_ReqToIF(void) 00619 { 00620 return (__FALSE); 00621 } 00622 BOOL USBD_EndPoint0_Out_MSC_ReqToIF(void) 00623 { 00624 return (__FALSE); 00625 } 00626 #endif /* (USBD_MSC_ENABLE) */ 00627 00628 #if (USBD_ADC_ENABLE == 0) 00629 BOOL USBD_EndPoint0_Setup_ADC_ReqToIF(void) 00630 { 00631 return (__FALSE); 00632 } 00633 BOOL USBD_EndPoint0_Setup_ADC_ReqToEP(void) 00634 { 00635 return (__FALSE); 00636 } 00637 BOOL USBD_EndPoint0_Out_ADC_ReqToIF(void) 00638 { 00639 return (__FALSE); 00640 } 00641 BOOL USBD_EndPoint0_Out_ADC_ReqToEP(void) 00642 { 00643 return (__FALSE); 00644 } 00645 #endif /* (USBD_ADC_ENABLE) */ 00646 00647 #if (USBD_CDC_ACM_ENABLE) 00648 #ifdef __RTX 00649 #if (USBD_CDC_ACM_EP_INTIN == 1) 00650 #define USBD_RTX_EndPoint1 USBD_RTX_CDC_ACM_EP_INTIN_Event 00651 #elif (USBD_CDC_ACM_EP_INTIN == 2) 00652 #define USBD_RTX_EndPoint2 USBD_RTX_CDC_ACM_EP_INTIN_Event 00653 #elif (USBD_CDC_ACM_EP_INTIN == 3) 00654 #define USBD_RTX_EndPoint3 USBD_RTX_CDC_ACM_EP_INTIN_Event 00655 #elif (USBD_CDC_ACM_EP_INTIN == 4) 00656 #define USBD_RTX_EndPoint4 USBD_RTX_CDC_ACM_EP_INTIN_Event 00657 #elif (USBD_CDC_ACM_EP_INTIN == 5) 00658 #define USBD_RTX_EndPoint5 USBD_RTX_CDC_ACM_EP_INTIN_Event 00659 #elif (USBD_CDC_ACM_EP_INTIN == 6) 00660 #define USBD_RTX_EndPoint6 USBD_RTX_CDC_ACM_EP_INTIN_Event 00661 #elif (USBD_CDC_ACM_EP_INTIN == 7) 00662 #define USBD_RTX_EndPoint7 USBD_RTX_CDC_ACM_EP_INTIN_Event 00663 #elif (USBD_CDC_ACM_EP_INTIN == 8) 00664 #define USBD_RTX_EndPoint8 USBD_RTX_CDC_ACM_EP_INTIN_Event 00665 #elif (USBD_CDC_ACM_EP_INTIN == 9) 00666 #define USBD_RTX_EndPoint9 USBD_RTX_CDC_ACM_EP_INTIN_Event 00667 #elif (USBD_CDC_ACM_EP_INTIN == 10) 00668 #define USBD_RTX_EndPoint10 USBD_RTX_CDC_ACM_EP_INTIN_Event 00669 #elif (USBD_CDC_ACM_EP_INTIN == 11) 00670 #define USBD_RTX_EndPoint11 USBD_RTX_CDC_ACM_EP_INTIN_Event 00671 #elif (USBD_CDC_ACM_EP_INTIN == 12) 00672 #define USBD_RTX_EndPoint12 USBD_RTX_CDC_ACM_EP_INTIN_Event 00673 #elif (USBD_CDC_ACM_EP_INTIN == 13) 00674 #define USBD_RTX_EndPoint13 USBD_RTX_CDC_ACM_EP_INTIN_Event 00675 #elif (USBD_CDC_ACM_EP_INTIN == 14) 00676 #define USBD_RTX_EndPoint14 USBD_RTX_CDC_ACM_EP_INTIN_Event 00677 #elif (USBD_CDC_ACM_EP_INTIN == 15) 00678 #define USBD_RTX_EndPoint15 USBD_RTX_CDC_ACM_EP_INTIN_Event 00679 #endif 00680 #else 00681 #if (USBD_CDC_ACM_EP_INTIN == 1) 00682 #define USBD_EndPoint1 USBD_CDC_ACM_EP_INTIN_Event 00683 #elif (USBD_CDC_ACM_EP_INTIN == 2) 00684 #define USBD_EndPoint2 USBD_CDC_ACM_EP_INTIN_Event 00685 #elif (USBD_CDC_ACM_EP_INTIN == 3) 00686 #define USBD_EndPoint3 USBD_CDC_ACM_EP_INTIN_Event 00687 #elif (USBD_CDC_ACM_EP_INTIN == 4) 00688 #define USBD_EndPoint4 USBD_CDC_ACM_EP_INTIN_Event 00689 #elif (USBD_CDC_ACM_EP_INTIN == 5) 00690 #define USBD_EndPoint5 USBD_CDC_ACM_EP_INTIN_Event 00691 #elif (USBD_CDC_ACM_EP_INTIN == 6) 00692 #define USBD_EndPoint6 USBD_CDC_ACM_EP_INTIN_Event 00693 #elif (USBD_CDC_ACM_EP_INTIN == 7) 00694 #define USBD_EndPoint7 USBD_CDC_ACM_EP_INTIN_Event 00695 #elif (USBD_CDC_ACM_EP_INTIN == 8) 00696 #define USBD_EndPoint8 USBD_CDC_ACM_EP_INTIN_Event 00697 #elif (USBD_CDC_ACM_EP_INTIN == 9) 00698 #define USBD_EndPoint9 USBD_CDC_ACM_EP_INTIN_Event 00699 #elif (USBD_CDC_ACM_EP_INTIN == 10) 00700 #define USBD_EndPoint10 USBD_CDC_ACM_EP_INTIN_Event 00701 #elif (USBD_CDC_ACM_EP_INTIN == 11) 00702 #define USBD_EndPoint11 USBD_CDC_ACM_EP_INTIN_Event 00703 #elif (USBD_CDC_ACM_EP_INTIN == 12) 00704 #define USBD_EndPoint12 USBD_CDC_ACM_EP_INTIN_Event 00705 #elif (USBD_CDC_ACM_EP_INTIN == 13) 00706 #define USBD_EndPoint13 USBD_CDC_ACM_EP_INTIN_Event 00707 #elif (USBD_CDC_ACM_EP_INTIN == 14) 00708 #define USBD_EndPoint14 USBD_CDC_ACM_EP_INTIN_Event 00709 #elif (USBD_CDC_ACM_EP_INTIN == 15) 00710 #define USBD_EndPoint15 USBD_CDC_ACM_EP_INTIN_Event 00711 #endif 00712 #endif 00713 00714 #ifdef __RTX 00715 #if (USBD_CDC_ACM_EP_BULKIN != USBD_CDC_ACM_EP_BULKOUT) 00716 #if (USBD_CDC_ACM_EP_BULKIN == 1) 00717 #define USBD_RTX_EndPoint1 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00718 #elif (USBD_CDC_ACM_EP_BULKIN == 2) 00719 #define USBD_RTX_EndPoint2 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00720 #elif (USBD_CDC_ACM_EP_BULKIN == 3) 00721 #define USBD_RTX_EndPoint3 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00722 #elif (USBD_CDC_ACM_EP_BULKIN == 4) 00723 #define USBD_RTX_EndPoint4 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00724 #elif (USBD_CDC_ACM_EP_BULKIN == 5) 00725 #define USBD_RTX_EndPoint5 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00726 #elif (USBD_CDC_ACM_EP_BULKIN == 6) 00727 #define USBD_RTX_EndPoint6 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00728 #elif (USBD_CDC_ACM_EP_BULKIN == 7) 00729 #define USBD_RTX_EndPoint7 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00730 #elif (USBD_CDC_ACM_EP_BULKIN == 8) 00731 #define USBD_RTX_EndPoint8 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00732 #elif (USBD_CDC_ACM_EP_BULKIN == 9) 00733 #define USBD_RTX_EndPoint9 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00734 #elif (USBD_CDC_ACM_EP_BULKIN == 10) 00735 #define USBD_RTX_EndPoint10 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00736 #elif (USBD_CDC_ACM_EP_BULKIN == 11) 00737 #define USBD_RTX_EndPoint11 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00738 #elif (USBD_CDC_ACM_EP_BULKIN == 12) 00739 #define USBD_RTX_EndPoint12 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00740 #elif (USBD_CDC_ACM_EP_BULKIN == 13) 00741 #define USBD_RTX_EndPoint13 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00742 #elif (USBD_CDC_ACM_EP_BULKIN == 14) 00743 #define USBD_RTX_EndPoint14 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00744 #elif (USBD_CDC_ACM_EP_BULKIN == 15) 00745 #define USBD_RTX_EndPoint15 USBD_RTX_CDC_ACM_EP_BULKIN_Event 00746 #endif 00747 00748 #if (USBD_CDC_ACM_EP_BULKOUT == 1) 00749 #define USBD_RTX_EndPoint1 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00750 #elif (USBD_CDC_ACM_EP_BULKOUT == 2) 00751 #define USBD_RTX_EndPoint2 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00752 #elif (USBD_CDC_ACM_EP_BULKOUT == 3) 00753 #define USBD_RTX_EndPoint3 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00754 #elif (USBD_CDC_ACM_EP_BULKOUT == 4) 00755 #define USBD_RTX_EndPoint4 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00756 #elif (USBD_CDC_ACM_EP_BULKOUT == 5) 00757 #define USBD_RTX_EndPoint5 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00758 #elif (USBD_CDC_ACM_EP_BULKOUT == 6) 00759 #define USBD_RTX_EndPoint6 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00760 #elif (USBD_CDC_ACM_EP_BULKOUT == 7) 00761 #define USBD_RTX_EndPoint7 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00762 #elif (USBD_CDC_ACM_EP_BULKOUT == 8) 00763 #define USBD_RTX_EndPoint8 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00764 #elif (USBD_CDC_ACM_EP_BULKOUT == 9) 00765 #define USBD_RTX_EndPoint9 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00766 #elif (USBD_CDC_ACM_EP_BULKOUT == 10) 00767 #define USBD_RTX_EndPoint10 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00768 #elif (USBD_CDC_ACM_EP_BULKOUT == 11) 00769 #define USBD_RTX_EndPoint11 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00770 #elif (USBD_CDC_ACM_EP_BULKOUT == 12) 00771 #define USBD_RTX_EndPoint12 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00772 #elif (USBD_CDC_ACM_EP_BULKOUT == 13) 00773 #define USBD_RTX_EndPoint13 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00774 #elif (USBD_CDC_ACM_EP_BULKOUT == 14) 00775 #define USBD_RTX_EndPoint14 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00776 #elif (USBD_CDC_ACM_EP_BULKOUT == 15) 00777 #define USBD_RTX_EndPoint15 USBD_RTX_CDC_ACM_EP_BULKOUT_Event 00778 #endif 00779 #else 00780 #if (USBD_CDC_ACM_EP_BULKIN == 1) 00781 #define USBD_RTX_EndPoint1 USBD_RTX_CDC_ACM_EP_BULK_Event 00782 #elif (USBD_CDC_ACM_EP_BULKIN == 2) 00783 #define USBD_RTX_EndPoint2 USBD_RTX_CDC_ACM_EP_BULK_Event 00784 #elif (USBD_CDC_ACM_EP_BULKIN == 3) 00785 #define USBD_RTX_EndPoint3 USBD_RTX_CDC_ACM_EP_BULK_Event 00786 #elif (USBD_CDC_ACM_EP_BULKIN == 4) 00787 #define USBD_RTX_EndPoint4 USBD_RTX_CDC_ACM_EP_BULK_Event 00788 #elif (USBD_CDC_ACM_EP_BULKIN == 5) 00789 #define USBD_RTX_EndPoint5 USBD_RTX_CDC_ACM_EP_BULK_Event 00790 #elif (USBD_CDC_ACM_EP_BULKIN == 6) 00791 #define USBD_RTX_EndPoint6 USBD_RTX_CDC_ACM_EP_BULK_Event 00792 #elif (USBD_CDC_ACM_EP_BULKIN == 7) 00793 #define USBD_RTX_EndPoint7 USBD_RTX_CDC_ACM_EP_BULK_Event 00794 #elif (USBD_CDC_ACM_EP_BULKIN == 8) 00795 #define USBD_RTX_EndPoint8 USBD_RTX_CDC_ACM_EP_BULK_Event 00796 #elif (USBD_CDC_ACM_EP_BULKIN == 9) 00797 #define USBD_RTX_EndPoint9 USBD_RTX_CDC_ACM_EP_BULK_Event 00798 #elif (USBD_CDC_ACM_EP_BULKIN == 10) 00799 #define USBD_RTX_EndPoint10 USBD_RTX_CDC_ACM_EP_BULK_Event 00800 #elif (USBD_CDC_ACM_EP_BULKIN == 11) 00801 #define USBD_RTX_EndPoint11 USBD_RTX_CDC_ACM_EP_BULK_Event 00802 #elif (USBD_CDC_ACM_EP_BULKIN == 12) 00803 #define USBD_RTX_EndPoint12 USBD_RTX_CDC_ACM_EP_BULK_Event 00804 #elif (USBD_CDC_ACM_EP_BULKIN == 13) 00805 #define USBD_RTX_EndPoint13 USBD_RTX_CDC_ACM_EP_BULK_Event 00806 #elif (USBD_CDC_ACM_EP_BULKIN == 14) 00807 #define USBD_RTX_EndPoint14 USBD_RTX_CDC_ACM_EP_BULK_Event 00808 #elif (USBD_CDC_ACM_EP_BULKIN == 15) 00809 #define USBD_RTX_EndPoint15 USBD_RTX_CDC_ACM_EP_BULK_Event 00810 #endif 00811 #endif 00812 #else 00813 #if (USBD_CDC_ACM_EP_BULKIN != USBD_CDC_ACM_EP_BULKOUT) 00814 #if (USBD_CDC_ACM_EP_BULKIN == 1) 00815 #define USBD_EndPoint1 USBD_CDC_ACM_EP_BULKIN_Event 00816 #elif (USBD_CDC_ACM_EP_BULKIN == 2) 00817 #define USBD_EndPoint2 USBD_CDC_ACM_EP_BULKIN_Event 00818 #elif (USBD_CDC_ACM_EP_BULKIN == 3) 00819 #define USBD_EndPoint3 USBD_CDC_ACM_EP_BULKIN_Event 00820 #elif (USBD_CDC_ACM_EP_BULKIN == 4) 00821 #define USBD_EndPoint4 USBD_CDC_ACM_EP_BULKIN_Event 00822 #elif (USBD_CDC_ACM_EP_BULKIN == 5) 00823 #define USBD_EndPoint5 USBD_CDC_ACM_EP_BULKIN_Event 00824 #elif (USBD_CDC_ACM_EP_BULKIN == 6) 00825 #define USBD_EndPoint6 USBD_CDC_ACM_EP_BULKIN_Event 00826 #elif (USBD_CDC_ACM_EP_BULKIN == 7) 00827 #define USBD_EndPoint7 USBD_CDC_ACM_EP_BULKIN_Event 00828 #elif (USBD_CDC_ACM_EP_BULKIN == 8) 00829 #define USBD_EndPoint8 USBD_CDC_ACM_EP_BULKIN_Event 00830 #elif (USBD_CDC_ACM_EP_BULKIN == 9) 00831 #define USBD_EndPoint9 USBD_CDC_ACM_EP_BULKIN_Event 00832 #elif (USBD_CDC_ACM_EP_BULKIN == 10) 00833 #define USBD_EndPoint10 USBD_CDC_ACM_EP_BULKIN_Event 00834 #elif (USBD_CDC_ACM_EP_BULKIN == 11) 00835 #define USBD_EndPoint11 USBD_CDC_ACM_EP_BULKIN_Event 00836 #elif (USBD_CDC_ACM_EP_BULKIN == 12) 00837 #define USBD_EndPoint12 USBD_CDC_ACM_EP_BULKIN_Event 00838 #elif (USBD_CDC_ACM_EP_BULKIN == 13) 00839 #define USBD_EndPoint13 USBD_CDC_ACM_EP_BULKIN_Event 00840 #elif (USBD_CDC_ACM_EP_BULKIN == 14) 00841 #define USBD_EndPoint14 USBD_CDC_ACM_EP_BULKIN_Event 00842 #elif (USBD_CDC_ACM_EP_BULKIN == 15) 00843 #define USBD_EndPoint15 USBD_CDC_ACM_EP_BULKIN_Event 00844 #endif 00845 00846 #if (USBD_CDC_ACM_EP_BULKOUT == 1) 00847 #define USBD_EndPoint1 USBD_CDC_ACM_EP_BULKOUT_Event 00848 #elif (USBD_CDC_ACM_EP_BULKOUT == 2) 00849 #define USBD_EndPoint2 USBD_CDC_ACM_EP_BULKOUT_Event 00850 #elif (USBD_CDC_ACM_EP_BULKOUT == 3) 00851 #define USBD_EndPoint3 USBD_CDC_ACM_EP_BULKOUT_Event 00852 #elif (USBD_CDC_ACM_EP_BULKOUT == 4) 00853 #define USBD_EndPoint4 USBD_CDC_ACM_EP_BULKOUT_Event 00854 #elif (USBD_CDC_ACM_EP_BULKOUT == 5) 00855 #define USBD_EndPoint5 USBD_CDC_ACM_EP_BULKOUT_Event 00856 #elif (USBD_CDC_ACM_EP_BULKOUT == 6) 00857 #define USBD_EndPoint6 USBD_CDC_ACM_EP_BULKOUT_Event 00858 #elif (USBD_CDC_ACM_EP_BULKOUT == 7) 00859 #define USBD_EndPoint7 USBD_CDC_ACM_EP_BULKOUT_Event 00860 #elif (USBD_CDC_ACM_EP_BULKOUT == 8) 00861 #define USBD_EndPoint8 USBD_CDC_ACM_EP_BULKOUT_Event 00862 #elif (USBD_CDC_ACM_EP_BULKOUT == 9) 00863 #define USBD_EndPoint9 USBD_CDC_ACM_EP_BULKOUT_Event 00864 #elif (USBD_CDC_ACM_EP_BULKOUT == 10) 00865 #define USBD_EndPoint10 USBD_CDC_ACM_EP_BULKOUT_Event 00866 #elif (USBD_CDC_ACM_EP_BULKOUT == 11) 00867 #define USBD_EndPoint11 USBD_CDC_ACM_EP_BULKOUT_Event 00868 #elif (USBD_CDC_ACM_EP_BULKOUT == 12) 00869 #define USBD_EndPoint12 USBD_CDC_ACM_EP_BULKOUT_Event 00870 #elif (USBD_CDC_ACM_EP_BULKOUT == 13) 00871 #define USBD_EndPoint13 USBD_CDC_ACM_EP_BULKOUT_Event 00872 #elif (USBD_CDC_ACM_EP_BULKOUT == 14) 00873 #define USBD_EndPoint14 USBD_CDC_ACM_EP_BULKOUT_Event 00874 #elif (USBD_CDC_ACM_EP_BULKOUT == 15) 00875 #define USBD_EndPoint15 USBD_CDC_ACM_EP_BULKOUT_Event 00876 #endif 00877 #else 00878 #if (USBD_CDC_ACM_EP_BULKIN == 1) 00879 #define USBD_EndPoint1 USBD_CDC_ACM_EP_BULK_Event 00880 #elif (USBD_CDC_ACM_EP_BULKIN == 2) 00881 #define USBD_EndPoint2 USBD_CDC_ACM_EP_BULK_Event 00882 #elif (USBD_CDC_ACM_EP_BULKIN == 3) 00883 #define USBD_EndPoint3 USBD_CDC_ACM_EP_BULK_Event 00884 #elif (USBD_CDC_ACM_EP_BULKIN == 4) 00885 #define USBD_EndPoint4 USBD_CDC_ACM_EP_BULK_Event 00886 #elif (USBD_CDC_ACM_EP_BULKIN == 5) 00887 #define USBD_EndPoint5 USBD_CDC_ACM_EP_BULK_Event 00888 #elif (USBD_CDC_ACM_EP_BULKIN == 6) 00889 #define USBD_EndPoint6 USBD_CDC_ACM_EP_BULK_Event 00890 #elif (USBD_CDC_ACM_EP_BULKIN == 7) 00891 #define USBD_EndPoint7 USBD_CDC_ACM_EP_BULK_Event 00892 #elif (USBD_CDC_ACM_EP_BULKIN == 8) 00893 #define USBD_EndPoint8 USBD_CDC_ACM_EP_BULK_Event 00894 #elif (USBD_CDC_ACM_EP_BULKIN == 9) 00895 #define USBD_EndPoint9 USBD_CDC_ACM_EP_BULK_Event 00896 #elif (USBD_CDC_ACM_EP_BULKIN == 10) 00897 #define USBD_EndPoint10 USBD_CDC_ACM_EP_BULK_Event 00898 #elif (USBD_CDC_ACM_EP_BULKIN == 11) 00899 #define USBD_EndPoint11 USBD_CDC_ACM_EP_BULK_Event 00900 #elif (USBD_CDC_ACM_EP_BULKIN == 12) 00901 #define USBD_EndPoint12 USBD_CDC_ACM_EP_BULK_Event 00902 #elif (USBD_CDC_ACM_EP_BULKIN == 13) 00903 #define USBD_EndPoint13 USBD_CDC_ACM_EP_BULK_Event 00904 #elif (USBD_CDC_ACM_EP_BULKIN == 14) 00905 #define USBD_EndPoint14 USBD_CDC_ACM_EP_BULK_Event 00906 #elif (USBD_CDC_ACM_EP_BULKIN == 15) 00907 #define USBD_EndPoint15 USBD_CDC_ACM_EP_BULK_Event 00908 #endif 00909 #endif 00910 #endif 00911 #else 00912 BOOL USBD_EndPoint0_Setup_CDC_ReqToIF(void) 00913 { 00914 return (__FALSE); 00915 } 00916 BOOL USBD_EndPoint0_Out_CDC_ReqToIF(void) 00917 { 00918 return (__FALSE); 00919 } 00920 #endif /* (USBD_CDC_ACM_ENABLE) */ 00921 00922 #if (USBD_BULK_ENABLE) 00923 00924 #if (USBD_BULK_EP_BULKIN != USBD_BULK_EP_BULKOUT) 00925 00926 #if (USBD_BULK_EP_BULKIN == 1) 00927 #define USBD_EndPoint1 USBD_BULK_EP_BULKIN_Event 00928 #elif (USBD_BULK_EP_BULKIN == 2) 00929 #define USBD_EndPoint2 USBD_BULK_EP_BULKIN_Event 00930 #elif (USBD_BULK_EP_BULKIN == 3) 00931 #define USBD_EndPoint3 USBD_BULK_EP_BULKIN_Event 00932 #elif (USBD_BULK_EP_BULKIN == 4) 00933 #define USBD_EndPoint4 USBD_BULK_EP_BULKIN_Event 00934 #elif (USBD_BULK_EP_BULKIN == 5) 00935 #define USBD_EndPoint5 USBD_BULK_EP_BULKIN_Event 00936 #elif (USBD_BULK_EP_BULKIN == 6) 00937 #define USBD_EndPoint6 USBD_BULK_EP_BULKIN_Event 00938 #elif (USBD_BULK_EP_BULKIN == 7) 00939 #define USBD_EndPoint7 USBD_BULK_EP_BULKIN_Event 00940 #elif (USBD_BULK_EP_BULKIN == 8) 00941 #define USBD_EndPoint8 USBD_BULK_EP_BULKIN_Event 00942 #elif (USBD_BULK_EP_BULKIN == 9) 00943 #define USBD_EndPoint9 USBD_BULK_EP_BULKIN_Event 00944 #elif (USBD_BULK_EP_BULKIN == 10) 00945 #define USBD_EndPoint10 USBD_BULK_EP_BULKIN_Event 00946 #elif (USBD_BULK_EP_BULKIN == 11) 00947 #define USBD_EndPoint11 USBD_BULK_EP_BULKIN_Event 00948 #elif (USBD_BULK_EP_BULKIN == 12) 00949 #define USBD_EndPoint12 USBD_BULK_EP_BULKIN_Event 00950 #elif (USBD_BULK_EP_BULKIN == 13) 00951 #define USBD_EndPoint13 USBD_BULK_EP_BULKIN_Event 00952 #elif (USBD_BULK_EP_BULKIN == 14) 00953 #define USBD_EndPoint14 USBD_BULK_EP_BULKIN_Event 00954 #elif (USBD_BULK_EP_BULKIN == 15) 00955 #define USBD_EndPoint15 USBD_BULK_EP_BULKIN_Event 00956 #endif 00957 00958 #if (USBD_BULK_EP_BULKOUT == 1) 00959 #define USBD_EndPoint1 USBD_BULK_EP_BULKOUT_Event 00960 #elif (USBD_BULK_EP_BULKOUT == 2) 00961 #define USBD_EndPoint2 USBD_BULK_EP_BULKOUT_Event 00962 #elif (USBD_BULK_EP_BULKOUT == 3) 00963 #define USBD_EndPoint3 USBD_BULK_EP_BULKOUT_Event 00964 #elif (USBD_BULK_EP_BULKOUT == 4) 00965 #define USBD_EndPoint4 USBD_BULK_EP_BULKOUT_Event 00966 #elif (USBD_BULK_EP_BULKOUT == 5) 00967 #define USBD_EndPoint5 USBD_BULK_EP_BULKOUT_Event 00968 #elif (USBD_BULK_EP_BULKOUT == 6) 00969 #define USBD_EndPoint6 USBD_BULK_EP_BULKOUT_Event 00970 #elif (USBD_BULK_EP_BULKOUT == 7) 00971 #define USBD_EndPoint7 USBD_BULK_EP_BULKOUT_Event 00972 #elif (USBD_BULK_EP_BULKOUT == 8) 00973 #define USBD_EndPoint8 USBD_BULK_EP_BULKOUT_Event 00974 #elif (USBD_BULK_EP_BULKOUT == 9) 00975 #define USBD_EndPoint9 USBD_BULK_EP_BULKOUT_Event 00976 #elif (USBD_BULK_EP_BULKOUT == 10) 00977 #define USBD_EndPoint10 USBD_BULK_EP_BULKOUT_Event 00978 #elif (USBD_BULK_EP_BULKOUT == 11) 00979 #define USBD_EndPoint11 USBD_BULK_EP_BULKOUT_Event 00980 #elif (USBD_BULK_EP_BULKOUT == 12) 00981 #define USBD_EndPoint12 USBD_BULK_EP_BULKOUT_Event 00982 #elif (USBD_BULK_EP_BULKOUT == 13) 00983 #define USBD_EndPoint13 USBD_BULK_EP_BULKOUT_Event 00984 #elif (USBD_BULK_EP_BULKOUT == 14) 00985 #define USBD_EndPoint14 USBD_BULK_EP_BULKOUT_Event 00986 #elif (USBD_BULK_EP_BULKOUT == 15) 00987 #define USBD_EndPoint15 USBD_BULK_EP_BULKOUT_Event 00988 #endif 00989 00990 #else 00991 #if (USBD_BULK_EP_BULKIN == 1) 00992 #define USBD_EndPoint1 USBD_BULK_EP_BULK_Event 00993 #elif (USBD_BULK_EP_BULKIN == 2) 00994 #define USBD_EndPoint2 USBD_BULK_EP_BULK_Event 00995 #elif (USBD_BULK_EP_BULKIN == 3) 00996 #define USBD_EndPoint3 USBD_BULK_EP_BULK_Event 00997 #elif (USBD_BULK_EP_BULKIN == 4) 00998 #define USBD_EndPoint4 USBD_BULK_EP_BULK_Event 00999 #elif (USBD_BULK_EP_BULKIN == 5) 01000 #define USBD_EndPoint5 USBD_BULK_EP_BULK_Event 01001 #elif (USBD_BULK_EP_BULKIN == 6) 01002 #define USBD_EndPoint6 USBD_BULK_EP_BULK_Event 01003 #elif (USBD_BULK_EP_BULKIN == 7) 01004 #define USBD_EndPoint7 USBD_BULK_EP_BULK_Event 01005 #elif (USBD_BULK_EP_BULKIN == 8) 01006 #define USBD_EndPoint8 USBD_BULK_EP_BULK_Event 01007 #elif (USBD_BULK_EP_BULKIN == 9) 01008 #define USBD_EndPoint9 USBD_BULK_EP_BULK_Event 01009 #elif (USBD_BULK_EP_BULKIN == 10) 01010 #define USBD_EndPoint10 USBD_BULK_EP_BULK_Event 01011 #elif (USBD_BULK_EP_BULKIN == 11) 01012 #define USBD_EndPoint11 USBD_BULK_EP_BULK_Event 01013 #elif (USBD_BULK_EP_BULKIN == 12) 01014 #define USBD_EndPoint12 USBD_BULK_EP_BULK_Event 01015 #elif (USBD_BULK_EP_BULKIN == 13) 01016 #define USBD_EndPoint13 USBD_BULK_EP_BULK_Event 01017 #elif (USBD_BULK_EP_BULKIN == 14) 01018 #define USBD_EndPoint14 USBD_BULK_EP_BULK_Event 01019 #elif (USBD_BULK_EP_BULKIN == 15) 01020 #define USBD_EndPoint15 USBD_BULK_EP_BULK_Event 01021 #endif 01022 #endif 01023 01024 #endif /* (USBD_BULK_ENABLE) */ 01025 01026 #if (USBD_CLS_ENABLE) 01027 #else 01028 BOOL USBD_EndPoint0_Setup_CLS_ReqToDEV(void) 01029 { 01030 return (__FALSE); 01031 } 01032 BOOL USBD_EndPoint0_Setup_CLS_ReqToIF(void) 01033 { 01034 return (__FALSE); 01035 } 01036 BOOL USBD_EndPoint0_Setup_CLS_ReqToEP(void) 01037 { 01038 return (__FALSE); 01039 } 01040 BOOL USBD_EndPoint0_Out_CLS_ReqToDEV(void) 01041 { 01042 return (__FALSE); 01043 } 01044 BOOL USBD_EndPoint0_Out_CLS_ReqToIF(void) 01045 { 01046 return (__FALSE); 01047 } 01048 BOOL USBD_EndPoint0_Out_CLS_ReqToEP(void) 01049 { 01050 return (__FALSE); 01051 } 01052 #endif /* (USBD_CLS_ENABLE) */ 01053 01054 #if ((USBD_CDC_ACM_ENABLE)) 01055 #ifndef __RTX 01056 void USBD_Reset_Event(void) 01057 { 01058 #if (USBD_CDC_ACM_ENABLE) 01059 USBD_CDC_ACM_Reset_Event(); 01060 #endif 01061 #if (USBD_MSC_ENABLE) 01062 USBD_MSC_Reset_Event(); 01063 #endif 01064 } 01065 #endif 01066 #endif /* ((USBD_CDC_ACM_ENABLE)) */ 01067 01068 #if ((USBD_HID_ENABLE) || (USBD_ADC_ENABLE) || (USBD_CDC_ACM_ENABLE) || (USBD_CLS_ENABLE)) 01069 #ifndef __RTX 01070 void USBD_SOF_Event(void) 01071 { 01072 #if (USBD_HID_ENABLE) 01073 USBD_HID_SOF_Event(); 01074 #endif 01075 #if (USBD_ADC_ENABLE) 01076 USBD_ADC_SOF_Event(); 01077 #endif 01078 #if (USBD_CDC_ACM_ENABLE) 01079 USBD_CDC_ACM_SOF_Event(); 01080 #endif 01081 #if (USBD_CLS_ENABLE) 01082 USBD_CLS_SOF_Event(); 01083 #endif 01084 } 01085 #endif 01086 #endif /* ((USBD_HID_ENABLE) || (USBD_ADC_ENABLE) || (USBD_CDC_ACM_ENABLE) || (USBD_CLS_ENABLE)) */ 01087 01088 /* USB Device - Device Events Callback Functions */ 01089 __weak void USBD_Power_Event(BOOL power); 01090 __weak void USBD_Reset_Event(void); 01091 __weak void USBD_Suspend_Event(void); 01092 __weak void USBD_Resume_Event(void); 01093 __weak void USBD_WakeUp_Event(void); 01094 __weak void USBD_SOF_Event(void); 01095 __weak void USBD_Error_Event(U32 error); 01096 01097 /* USB Device - Device Events Callback Pointers */ 01098 void (* const USBD_P_Power_Event)(BOOL power) = USBD_Power_Event; 01099 void (* const USBD_P_Reset_Event)(void) = USBD_Reset_Event; 01100 void (* const USBD_P_Suspend_Event)(void) = USBD_Suspend_Event; 01101 void (* const USBD_P_Resume_Event)(void) = USBD_Resume_Event; 01102 void (* const USBD_P_WakeUp_Event)(void) = USBD_WakeUp_Event; 01103 void (* const USBD_P_SOF_Event)(void) = USBD_SOF_Event; 01104 void (* const USBD_P_Error_Event)(U32 error) = USBD_Error_Event; 01105 01106 /* USB Device - Endpoint Events Callback Functions */ 01107 extern void USBD_EndPoint0(U32 event); 01108 #ifndef USBD_EndPoint1 01109 __weak void USBD_EndPoint1(U32 event); 01110 #endif 01111 #ifndef USBD_EndPoint2 01112 __weak void USBD_EndPoint2(U32 event); 01113 #endif 01114 #ifndef USBD_EndPoint3 01115 __weak void USBD_EndPoint3(U32 event); 01116 #endif 01117 #ifndef USBD_EndPoint4 01118 __weak void USBD_EndPoint4(U32 event); 01119 #endif 01120 #ifndef USBD_EndPoint5 01121 __weak void USBD_EndPoint5(U32 event); 01122 #endif 01123 #ifndef USBD_EndPoint6 01124 __weak void USBD_EndPoint6(U32 event); 01125 #endif 01126 #ifndef USBD_EndPoint7 01127 __weak void USBD_EndPoint7(U32 event); 01128 #endif 01129 #ifndef USBD_EndPoint8 01130 __weak void USBD_EndPoint8(U32 event); 01131 #endif 01132 #ifndef USBD_EndPoint9 01133 __weak void USBD_EndPoint9(U32 event); 01134 #endif 01135 #ifndef USBD_EndPoint10 01136 __weak void USBD_EndPoint10(U32 event); 01137 #endif 01138 #ifndef USBD_EndPoint11 01139 __weak void USBD_EndPoint11(U32 event); 01140 #endif 01141 #ifndef USBD_EndPoint12 01142 __weak void USBD_EndPoint12(U32 event); 01143 #endif 01144 #ifndef USBD_EndPoint13 01145 __weak void USBD_EndPoint13(U32 event); 01146 #endif 01147 #ifndef USBD_EndPoint14 01148 __weak void USBD_EndPoint14(U32 event); 01149 #endif 01150 #ifndef USBD_EndPoint15 01151 __weak void USBD_EndPoint15(U32 event); 01152 #endif 01153 01154 /* USB Device - Endpoint Events Callback Pointers */ 01155 void (* const USBD_P_EP[16])(U32 event) = { 01156 USBD_EndPoint0, 01157 USBD_EndPoint1, 01158 USBD_EndPoint2, 01159 USBD_EndPoint3, 01160 USBD_EndPoint4, 01161 USBD_EndPoint5, 01162 USBD_EndPoint6, 01163 USBD_EndPoint7, 01164 USBD_EndPoint8, 01165 USBD_EndPoint9, 01166 USBD_EndPoint10, 01167 USBD_EndPoint11, 01168 USBD_EndPoint12, 01169 USBD_EndPoint13, 01170 USBD_EndPoint14, 01171 USBD_EndPoint15 01172 }; 01173 01174 /* USB Device - Core Events Callback Functions */ 01175 __weak void USBD_Configure_Event(void); 01176 __weak void USBD_Interface_Event(void); 01177 __weak void USBD_Feature_Event(void); 01178 01179 /* USB Device - Core Events Callback Pointers */ 01180 void (* const USBD_P_Configure_Event)(void) = USBD_Configure_Event; 01181 void (* const USBD_P_Interface_Event)(void) = USBD_Interface_Event; 01182 void (* const USBD_P_Feature_Event)(void) = USBD_Feature_Event; 01183 01184 #ifdef __RTX 01185 const BOOL __rtx = __TRUE; 01186 01187 #if ((USBD_HID_ENABLE) || (USBD_ADC_ENABLE) || (USBD_CDC_ACM_ENABLE) || (USBD_CLS_ENABLE)) 01188 __weak void USBD_RTX_Device(void) 01189 { 01190 U16 evt; 01191 01192 for (;;) { 01193 os_evt_wait_or(0xFFFF, 0xFFFF); /* Wait for an Event */ 01194 evt = os_evt_get(); /* Get Event Flags */ 01195 01196 if (evt & USBD_EVT_RESET) { 01197 #if (USBD_CDC_ACM_ENABLE) 01198 USBD_CDC_ACM_Reset_Event(); 01199 #endif 01200 #if (USBD_MSC_ENABLE) 01201 USBD_MSC_Reset_Event(); 01202 #endif 01203 } 01204 01205 if (evt & USBD_EVT_SOF) { 01206 #if (USBD_HID_ENABLE) 01207 USBD_HID_SOF_Event(); 01208 #endif 01209 #if (USBD_ADC_ENABLE) 01210 USBD_ADC_SOF_Event(); 01211 #endif 01212 #if (USBD_CDC_ACM_ENABLE) 01213 USBD_CDC_ACM_SOF_Event(); 01214 #endif 01215 #if (USBD_CLS_ENABLE) 01216 USBD_CLS_SOF_Event(); 01217 #endif 01218 } 01219 } 01220 } 01221 #else 01222 __weak void USBD_RTX_Device(void); 01223 #endif 01224 01225 /* USB Device - Device Events Callback Pointer */ 01226 void (* const USBD_RTX_P_Device)(void) = USBD_RTX_Device; 01227 01228 /* USB Device Endpoint Events Callback Functions */ 01229 extern void USBD_RTX_EndPoint0(void); 01230 #ifndef USBD_RTX_EndPoint1 01231 __weak void USBD_RTX_EndPoint1(void); 01232 #endif 01233 #ifndef USBD_RTX_EndPoint2 01234 __weak void USBD_RTX_EndPoint2(void); 01235 #endif 01236 #ifndef USBD_RTX_EndPoint3 01237 __weak void USBD_RTX_EndPoint3(void); 01238 #endif 01239 #ifndef USBD_RTX_EndPoint4 01240 __weak void USBD_RTX_EndPoint4(void); 01241 #endif 01242 #ifndef USBD_RTX_EndPoint5 01243 __weak void USBD_RTX_EndPoint5(void); 01244 #endif 01245 #ifndef USBD_RTX_EndPoint6 01246 __weak void USBD_RTX_EndPoint6(void); 01247 #endif 01248 #ifndef USBD_RTX_EndPoint7 01249 __weak void USBD_RTX_EndPoint7(void); 01250 #endif 01251 #ifndef USBD_RTX_EndPoint8 01252 __weak void USBD_RTX_EndPoint8(void); 01253 #endif 01254 #ifndef USBD_RTX_EndPoint9 01255 __weak void USBD_RTX_EndPoint9(void); 01256 #endif 01257 #ifndef USBD_RTX_EndPoint10 01258 __weak void USBD_RTX_EndPoint10(void); 01259 #endif 01260 #ifndef USBD_RTX_EndPoint11 01261 __weak void USBD_RTX_EndPoint11(void); 01262 #endif 01263 #ifndef USBD_RTX_EndPoint12 01264 __weak void USBD_RTX_EndPoint12(void); 01265 #endif 01266 #ifndef USBD_RTX_EndPoint13 01267 __weak void USBD_RTX_EndPoint13(void); 01268 #endif 01269 #ifndef USBD_RTX_EndPoint14 01270 __weak void USBD_RTX_EndPoint14(void); 01271 #endif 01272 #ifndef USBD_RTX_EndPoint15 01273 __weak void USBD_RTX_EndPoint15(void); 01274 #endif 01275 01276 #if (USBD_HID_ENABLE) 01277 __weak void USBD_RTX_Core(void) 01278 { 01279 U16 evt; 01280 01281 for (;;) { 01282 os_evt_wait_or(0xFFFF, 0xFFFF); /* Wait for an Event */ 01283 evt = os_evt_get(); /* Get Event Flags */ 01284 01285 if (evt & USBD_EVT_SET_CFG) { 01286 USBD_HID_Configure_Event(); 01287 } 01288 } 01289 } 01290 #else 01291 __weak void USBD_RTX_Core(void); 01292 #endif 01293 01294 /* USB Device - Core Events Callback Pointer */ 01295 void (* const USBD_RTX_P_Core)(void) = USBD_RTX_Core; 01296 01297 /* USB Device Endpoint Events Callback Pointers */ 01298 void (* const USBD_RTX_P_EP[16])(void) = { 01299 USBD_RTX_EndPoint0, 01300 USBD_RTX_EndPoint1, 01301 USBD_RTX_EndPoint2, 01302 USBD_RTX_EndPoint3, 01303 USBD_RTX_EndPoint4, 01304 USBD_RTX_EndPoint5, 01305 USBD_RTX_EndPoint6, 01306 USBD_RTX_EndPoint7, 01307 USBD_RTX_EndPoint8, 01308 USBD_RTX_EndPoint9, 01309 USBD_RTX_EndPoint10, 01310 USBD_RTX_EndPoint11, 01311 USBD_RTX_EndPoint12, 01312 USBD_RTX_EndPoint13, 01313 USBD_RTX_EndPoint14, 01314 USBD_RTX_EndPoint15, 01315 }; 01316 01317 void usbd_os_evt_set(U16 event_flags, U32 task) 01318 { 01319 if (task) { 01320 os_evt_set(event_flags, task); 01321 } 01322 } 01323 U16 usbd_os_evt_get(void) 01324 { 01325 return (os_evt_get()); 01326 } 01327 U32 usbd_os_evt_wait_or(U16 wait_flags, U16 timeout) 01328 { 01329 return (os_evt_wait_or(wait_flags, timeout)); 01330 } 01331 01332 #else 01333 const BOOL __rtx = __FALSE; 01334 01335 void usbd_os_evt_set(U16 event_flags, U32 task) 01336 { 01337 01338 } 01339 U16 usbd_os_evt_get(void) 01340 { 01341 return (0); 01342 } 01343 U32 usbd_os_evt_wait_or(U16 wait_flags, U16 timeout) 01344 { 01345 return (0); 01346 } 01347 #endif 01348 01349 #ifdef __RTX 01350 01351 typedef struct { 01352 void *stack; 01353 U16 size; 01354 } user_stack_t; 01355 01356 #if USBD_ENABLE && !defined(USBD_RTX_CORE_STACK) 01357 #error "USB core stack must be defined" 01358 #endif 01359 #if USBD_ENABLE && !defined(USBD_RTX_DEVICE_STACK) 01360 #error "USB device stack must be defined" 01361 #endif 01362 #if USBD_ENABLE && !defined(USBD_RTX_ENDPOINT0_STACK) 01363 #error "USB endpoint 0 must be defined" 01364 #endif 01365 01366 #if !defined(USBD_HID_EP_INTIN_STACK) 01367 #define USBD_HID_EP_INTIN_STACK 0 01368 #endif 01369 #if !defined(USBD_HID_EP_INTOUT_STACK) 01370 #define USBD_HID_EP_INTOUT_STACK 0 01371 #endif 01372 #if !defined(USBD_MSC_EP_BULKIN_STACK) 01373 #define USBD_MSC_EP_BULKIN_STACK 0 01374 #endif 01375 #if !defined(USBD_MSC_EP_BULKOUT_STACK) 01376 #define USBD_MSC_EP_BULKOUT_STACK 0 01377 #endif 01378 #if !defined(USBD_ADC_EP_ISOOUT_STACK) 01379 #define USBD_ADC_EP_ISOOUT_STACK 0 01380 #endif 01381 #if !defined(USBD_CDC_ACM_EP_INTIN_STACK) 01382 #define USBD_CDC_ACM_EP_INTIN_STACK 0 01383 #endif 01384 #if !defined(USBD_CDC_ACM_EP_BULKIN_STACK) 01385 #define USBD_CDC_ACM_EP_BULKIN_STACK 0 01386 #endif 01387 #if !defined(USBD_CDC_ACM_EP_BULKOUT_STACK) 01388 #define USBD_CDC_ACM_EP_BULKOUT_STACK 0 01389 #endif 01390 01391 #if USBD_HID_EP_INTIN == 0 && USBD_HID_EP_INTIN_STACK > 0 01392 #error "USBD_HID_EP_INTIN stack unused - must be 0" 01393 #endif 01394 #if USBD_HID_EP_INTOUT == 0 && USBD_HID_EP_INTOUT_STACK > 0 01395 #error "USBD_HID_EP_INTOUT stack unused - must be 0" 01396 #endif 01397 #if USBD_MSC_EP_BULKIN == 0 && USBD_MSC_EP_BULKIN_STACK > 0 01398 #error "USBD_MSC_EP_BULKIN stack unused - must be 0" 01399 #endif 01400 #if USBD_MSC_EP_BULKOUT == 0 && USBD_MSC_EP_BULKOUT_STACK > 0 01401 #error "USBD_MSC_EP_BULKOUT stack unused - must be 0" 01402 #endif 01403 #if USBD_ADC_EP_ISOOUT == 0 && USBD_ADC_EP_ISOOUT_STACK > 0 01404 #error "USBD_ADC_EP_ISOOUT stack unused - must be 0" 01405 #endif 01406 #if USBD_CDC_ACM_EP_INTIN == 0 && USBD_CDC_ACM_EP_INTIN_STACK > 0 01407 #error "USBD_CDC_ACM_EP_INTIN stack unused - must be 0" 01408 #endif 01409 #if USBD_CDC_ACM_EP_BULKIN == 0 && USBD_CDC_ACM_EP_BULKIN_STACK > 0 01410 #error "USBD_CDC_ACM_EP_BULKIN stack unused - must be 0" 01411 #endif 01412 #if USBD_CDC_ACM_EP_BULKOUT == 0 && USBD_CDC_ACM_EP_BULKOUT_STACK > 0 01413 #error "USBD_CDC_ACM_EP_BULKOUT stack unused - must be 0" 01414 #endif 01415 01416 #if USBD_ENABLE 01417 static U64 usbd_core_stack[USBD_RTX_CORE_STACK / 8]; 01418 static U64 usbd_device_stack[USBD_RTX_DEVICE_STACK / 8]; 01419 static U64 usbd_endpoint0_stack[USBD_RTX_ENDPOINT0_STACK / 8]; 01420 #endif 01421 01422 #if (USBD_HID_EP_INTIN_STACK > 0) 01423 static U64 usbd_hid_ep_intin_stack[USBD_HID_EP_INTIN_STACK / 8]; 01424 #endif 01425 #if (USBD_HID_EP_INTOUT_STACK > 0) 01426 static U64 usbd_hid_ep_intout_stack[USBD_HID_EP_INTOUT_STACK / 8]; 01427 #endif 01428 #if (USBD_MSC_EP_BULKIN_STACK > 0) 01429 static U64 usbd_msc_ep_bulkin_stack[USBD_MSC_EP_BULKIN_STACK / 8]; 01430 #endif 01431 #if (USBD_MSC_EP_BULKOUT_STACK > 0) 01432 static U64 usbd_msc_ep_bulkout_stack[USBD_MSC_EP_BULKOUT_STACK / 8]; 01433 #endif 01434 #if (USBD_ADC_EP_ISOOUT_STACK > 0) 01435 static U64 usbd_adc_ep_isoout_stack[USBD_ADC_EP_ISOOUT_STACK / 8]; 01436 #endif 01437 #if (USBD_CDC_ACM_EP_INTIN_STACK > 0) 01438 static U64 usbd_cdc_acm_ep_intin_stack[USBD_CDC_ACM_EP_INTIN_STACK / 8]; 01439 #endif 01440 #if (USBD_CDC_ACM_EP_BULKIN_STACK > 0) 01441 static U64 usbd_cdc_acm_ep_bulkin_stack[USBD_CDC_ACM_EP_BULKIN_STACK / 8]; 01442 #endif 01443 #if (USBD_CDC_ACM_EP_BULKOUT_STACK > 0) 01444 static U64 usbd_cdc_acm_ep_bulkout_stack[USBD_CDC_ACM_EP_BULKOUT_STACK / 8]; 01445 #endif 01446 01447 // Check HID 01448 #if (USBD_HID_ENABLE && !USBD_HID_EP_INTIN_STACK && USBD_HID_EP_INTIN != USBD_HID_EP_INTOUT) 01449 #error "USBD_HID_EP_INTIN_STACK must be defined" 01450 #endif 01451 #if (USBD_HID_ENABLE && !USBD_HID_EP_INTOUT_STACK && USBD_HID_EP_INTIN != USBD_HID_EP_INTOUT && USBD_HID_EP_INTOUT != 0) 01452 #error "USBD_HID_EP_INTOUT_STACK must be defined" 01453 #endif 01454 #if (USBD_HID_ENABLE && USBD_HID_EP_INTIN_STACK == 0 && USBD_HID_EP_INTOUT_STACK == 0) 01455 #error "HID stack must be defined" 01456 #endif 01457 #if (USBD_HID_EP_INTIN_STACK > 0 && USBD_HID_EP_INTOUT_STACK > 0 && USBD_HID_EP_INTIN == USBD_HID_EP_INTOUT) 01458 #error "Multiple HID stacks defined for same EP" 01459 #endif 01460 01461 // Check MSC 01462 #if (USBD_MSC_ENABLE && !USBD_MSC_EP_BULKIN_STACK && USBD_MSC_EP_BULKIN != USBD_MSC_EP_BULKOUT) 01463 #error "USBD_MSC_EP_BULKIN_STACK must be defined" 01464 #endif 01465 #if (USBD_MSC_ENABLE && !USBD_MSC_EP_BULKOUT_STACK && USBD_MSC_EP_BULKIN != USBD_MSC_EP_BULKOUT) 01466 #error "USBD_MSC_EP_BULKIN_STACK must be defined" 01467 #endif 01468 #if (USBD_MSC_ENABLE && USBD_MSC_EP_BULKIN_STACK == 0 && USBD_MSC_EP_BULKOUT_STACK == 0) 01469 #error "MSC stack must be defined" 01470 #endif 01471 #if (USBD_MSC_EP_BULKIN_STACK > 0 && USBD_MSC_EP_BULKOUT_STACK > 0 && USBD_MSC_EP_BULKIN == USBD_MSC_EP_BULKOUT) 01472 #error "Multiple MSC stacks defined for same EP" 01473 #endif 01474 01475 // Check ADC 01476 #if (USBD_ADC_ENABLE && !USBD_ADC_EP_ISOOUT_STACK) 01477 #error "ADC stack must be defined" 01478 #endif 01479 01480 // Check CDC 01481 #if (USBD_CDC_ACM_ENABLE && !USBD_CDC_ACM_EP_INTIN_STACK) 01482 #error "CDC ACM INTIN stack must be defined" 01483 #endif 01484 #if (USBD_CDC_ACM_ENABLE && !USBD_CDC_ACM_EP_BULKIN_STACK && USBD_CDC_ACM_EP_BULKIN != USBD_CDC_ACM_EP_BULKOUT) 01485 #error "USBD_CDC_ACM_EP_BULKIN must be defined" 01486 #endif 01487 #if (USBD_CDC_ACM_ENABLE && !USBD_CDC_ACM_EP_BULKOUT_STACK && USBD_CDC_ACM_EP_BULKIN != USBD_CDC_ACM_EP_BULKOUT) 01488 #error "USBD_CDC_ACM_EP_BULKOUT must be defined" 01489 #endif 01490 #if (USBD_CDC_ACM_ENABLE && USBD_CDC_ACM_EP_BULKIN_STACK == 0 && USBD_CDC_ACM_EP_BULKOUT_STACK == 0) 01491 #error "CDC BULK stack must be defined" 01492 #endif 01493 #if (USBD_CDC_ACM_EP_BULKIN_STACK > 0 && USBD_CDC_ACM_EP_BULKOUT_STACK > 0 && USBD_CDC_ACM_EP_BULKIN == USBD_CDC_ACM_EP_BULKOUT) 01494 #error "Multiple CDC stacks defined for same EP" 01495 #endif 01496 01497 static const user_stack_t user_stack_list[16] = { 01498 #if USBD_ENABLE 01499 [0] = {usbd_endpoint0_stack, sizeof(usbd_endpoint0_stack)}, 01500 #endif 01501 #if (USBD_HID_EP_INTIN_STACK > 0) 01502 [USBD_HID_EP_INTIN] = {usbd_hid_ep_intin_stack, sizeof(usbd_hid_ep_intin_stack)}, 01503 #endif 01504 #if (USBD_HID_EP_INTOUT_STACK > 0) 01505 [USBD_HID_EP_INTOUT] = {usbd_hid_ep_intout_stack, sizeof(usbd_hid_ep_intout_stack)}, 01506 #endif 01507 #if (USBD_MSC_EP_BULKIN_STACK > 0) 01508 [USBD_MSC_EP_BULKIN] = {usbd_msc_ep_bulkin_stack, sizeof(usbd_msc_ep_bulkin_stack)}, 01509 #endif 01510 #if (USBD_MSC_EP_BULKOUT_STACK > 0) 01511 [USBD_MSC_EP_BULKOUT] = {usbd_msc_ep_bulkout_stack, sizeof(usbd_msc_ep_bulkout_stack)}, 01512 #endif 01513 #if (USBD_ADC_EP_ISOOUT_STACK > 0) 01514 [USBD_ADC_EP_ISOOUT] = {usbd_adc_ep_isoout_stack, sizeof(usbd_adc_ep_isoout_stack)}, 01515 #endif 01516 #if (USBD_CDC_ACM_EP_INTIN_STACK > 0) 01517 [USBD_CDC_ACM_EP_INTIN] = {usbd_cdc_acm_ep_intin_stack, sizeof(usbd_cdc_acm_ep_intin_stack)}, 01518 #endif 01519 #if (USBD_CDC_ACM_EP_BULKIN_STACK > 0) 01520 [USBD_CDC_ACM_EP_BULKIN] = {usbd_cdc_acm_ep_bulkin_stack, sizeof(usbd_cdc_acm_ep_bulkin_stack)}, 01521 #endif 01522 #if (USBD_CDC_ACM_EP_BULKOUT_STACK > 0) 01523 [USBD_CDC_ACM_EP_BULKOUT] = {usbd_cdc_acm_ep_bulkout_stack, sizeof(usbd_cdc_acm_ep_bulkout_stack)}, 01524 #endif 01525 }; 01526 01527 #endif /* __RTX */ 01528 01529 void USBD_RTX_TaskInit(void) 01530 { 01531 #ifdef __RTX 01532 /* Initialize memory pools for endpoints */ 01533 U32 i; 01534 USBD_RTX_DevTask = 0; 01535 01536 if (USBD_RTX_P_Device) { 01537 USBD_RTX_DevTask = os_tsk_create_user(USBD_RTX_Device, 3, usbd_device_stack, 01538 sizeof(usbd_device_stack)); 01539 } 01540 01541 for (i = 0; i <= 15; i++) { 01542 USBD_RTX_EPTask[i] = 0; 01543 01544 if (USBD_RTX_P_EP[i]) { 01545 // Set the control endpoint (endpoint 0) thread to a high priority. 01546 // According to the USB 2.0 specification, the time to complete standard 01547 // request with no data must be under 50ms. If a long caluclation 01548 // such as a CRC is running on a higher priority thread, USB enumeration 01549 // can fail because of this timeout. 01550 uint8_t priority = 0 == i ? 200 : 20; 01551 USBD_RTX_EPTask[i] = os_tsk_create_user(USBD_RTX_P_EP[i], priority, user_stack_list[i].stack, 01552 user_stack_list[i].size); 01553 } 01554 } 01555 01556 USBD_RTX_CoreTask = 0; 01557 01558 if (USBD_RTX_P_Core) { 01559 USBD_RTX_CoreTask = os_tsk_create_user(USBD_RTX_Core, 2, usbd_core_stack, 01560 sizeof(usbd_core_stack)); 01561 } 01562 01563 #endif 01564 } 01565 01566 /*------------------------------------------------------------------------------ 01567 * CDC Sizes 01568 *----------------------------------------------------------------------------*/ 01569 #define CDC_HEADER_SIZE 5 01570 #define CDC_CALL_MANAGEMENT_SIZE 5 01571 #define CDC_ABSTRACT_CONTROL_MANAGEMENT_SIZE 4 01572 #define CDC_UNION_SIZE 5 01573 01574 /*------------------------------------------------------------------------------ 01575 * USB Device Descriptors 01576 *----------------------------------------------------------------------------*/ 01577 #define USBD_MSC_DESC_LEN (USB_INTERFACE_DESC_SIZE + 2*USB_ENDPOINT_DESC_SIZE) 01578 #define USBD_CDC_ACM_DESC_LEN (USBD_MULTI_IF * USB_INTERFACE_ASSOC_DESC_SIZE + \ 01579 /* CDC Interface 1 */ \ 01580 USB_INTERFACE_DESC_SIZE + CDC_HEADER_SIZE + CDC_CALL_MANAGEMENT_SIZE + \ 01581 CDC_ABSTRACT_CONTROL_MANAGEMENT_SIZE + CDC_UNION_SIZE + USB_ENDPOINT_DESC_SIZE + \ 01582 /* CDC Interface 2 */ \ 01583 USB_INTERFACE_DESC_SIZE + USB_ENDPOINT_DESC_SIZE + USB_ENDPOINT_DESC_SIZE) 01584 #define USBD_HID_DESC_LEN (USB_INTERFACE_DESC_SIZE + USB_HID_DESC_SIZE + \ 01585 (USB_ENDPOINT_DESC_SIZE*((USBD_HID_EP_INTIN != 0)+(USBD_HID_EP_INTOUT != 0)))) 01586 #define USBD_BULK_DESC_LEN (USB_INTERFACE_DESC_SIZE + 2*USB_ENDPOINT_DESC_SIZE) 01587 01588 #define USBD_HID_DESC_OFS (USB_CONFIGUARTION_DESC_SIZE + USB_INTERFACE_DESC_SIZE + \ 01589 USBD_MSC_ENABLE * USBD_MSC_DESC_LEN + USBD_CDC_ACM_ENABLE * USBD_CDC_ACM_DESC_LEN) 01590 01591 #define USBD_WTOTALLENGTH_MAX (USB_CONFIGUARTION_DESC_SIZE + \ 01592 USBD_CDC_ACM_DESC_LEN * USBD_CDC_ACM_ENABLE + \ 01593 USBD_HID_DESC_LEN * USBD_HID_ENABLE + \ 01594 (USB_INTERFACE_DESC_SIZE) * USBD_WEBUSB_ENABLE + \ 01595 USBD_BULK_DESC_LEN * USBD_BULK_ENABLE + \ 01596 USBD_MSC_DESC_LEN * USBD_MSC_ENABLE) 01597 01598 /*------------------------------------------------------------------------------ 01599 Default HID Report Descriptor 01600 *----------------------------------------------------------------------------*/ 01601 01602 /* Bit Input Output 01603 0 IN0 OUT0 01604 1 IN1 OUT1 01605 2 IN2 OUT2 01606 3 IN3 OUT3 01607 4 IN4 OUT4 01608 5 IN5 OUT5 01609 6 IN6 OUT6 01610 7 IN7 OUT7 01611 */ 01612 01613 __weak \ 01614 const U8 USBD_HID_ReportDescriptor[] = { 01615 HID_UsagePageVendor(0x00), 01616 HID_Usage(0x01), 01617 HID_Collection(HID_Application), 01618 HID_LogicalMin(0), /* value range: 0 - 0xFF */ 01619 HID_LogicalMaxS(0xFF), 01620 HID_ReportSize(8), /* 8 bits */ 01621 #if (USBD_HID_INREPORT_MAX_SZ > 255) 01622 HID_ReportCountS(USBD_HID_INREPORT_MAX_SZ), 01623 #else 01624 HID_ReportCount(USBD_HID_INREPORT_MAX_SZ), 01625 #endif 01626 HID_Usage(0x01), 01627 HID_Input(HID_Data | HID_Variable | HID_Absolute), 01628 #if (USBD_HID_OUTREPORT_MAX_SZ > 255) 01629 HID_ReportCountS(USBD_HID_OUTREPORT_MAX_SZ), 01630 #else 01631 HID_ReportCount(USBD_HID_OUTREPORT_MAX_SZ), 01632 #endif 01633 HID_Usage(0x01), 01634 HID_Output(HID_Data | HID_Variable | HID_Absolute), 01635 #if (USBD_HID_FEATREPORT_MAX_SZ > 255) 01636 HID_ReportCountS(USBD_HID_FEATREPORT_MAX_SZ), 01637 #else 01638 HID_ReportCount(USBD_HID_FEATREPORT_MAX_SZ), 01639 #endif 01640 HID_Usage(0x01), 01641 HID_Feature(HID_Data | HID_Variable | HID_Absolute), 01642 HID_EndCollection, 01643 }; 01644 01645 __weak \ 01646 const U16 USBD_HID_ReportDescriptorSize = sizeof(USBD_HID_ReportDescriptor); 01647 01648 __weak \ 01649 U16 USBD_HID_DescriptorOffset = USBD_HID_DESC_OFS; 01650 01651 /* USB Device Standard Descriptor */ 01652 __weak \ 01653 const U8 USBD_DeviceDescriptor[] = { 01654 USB_DEVICE_DESC_SIZE, /* bLength */ 01655 USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType */ 01656 #if (USBD_BOS_ENABLE) 01657 WBVAL(0x0210), /* 2.10 */ /* bcdUSB */ 01658 #elif ((USBD_HS_ENABLE) || (USBD_MULTI_IF)) 01659 WBVAL(0x0200), /* 2.00 */ /* bcdUSB */ 01660 #else 01661 WBVAL(0x0110), /* 1.10 */ /* bcdUSB */ 01662 #endif 01663 #if (USBD_MULTI_IF) 01664 USB_DEVICE_CLASS_MISCELLANEOUS, /* bDeviceClass */ 01665 0x02, /* bDeviceSubClass */ 01666 0x01, /* bDeviceProtocol */ 01667 #elif (USBD_CDC_ACM_ENABLE) 01668 USB_DEVICE_CLASS_COMMUNICATIONS, /* bDeviceClass CDC*/ 01669 0x00, /* bDeviceSubClass */ 01670 0x00, /* bDeviceProtocol */ 01671 #else 01672 0x00, /* bDeviceClass */ 01673 0x00, /* bDeviceSubClass */ 01674 0x00, /* bDeviceProtocol */ 01675 #endif 01676 USBD_MAX_PACKET0, /* bMaxPacketSize0 */ 01677 WBVAL(USBD_DEVDESC_IDVENDOR), /* idVendor */ 01678 WBVAL(USBD_DEVDESC_IDPRODUCT), /* idProduct */ 01679 WBVAL(USBD_DEVDESC_BCDDEVICE), /* bcdDevice */ 01680 0x01, /* iManufacturer */ 01681 0x02, /* iProduct */ 01682 0x03 * USBD_STRDESC_SER_ENABLE, /* iSerialNumber */ 01683 0x01 /* bNumConfigurations: one possible configuration*/ 01684 }; 01685 01686 #if (USBD_HS_ENABLE) 01687 /* USB Device Qualifier Descriptor (for Full Speed) */ 01688 __weak \ 01689 const U8 USBD_DeviceQualifier[] = { 01690 USB_DEVICE_QUALI_SIZE, /* bLength */ 01691 USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE, /* bDescriptorType */ 01692 #if (USBD_BOS_ENABLE) 01693 WBVAL(0x0210), /* 2.10 */ /* bcdUSB */ 01694 #else 01695 WBVAL(0x0200), /* 2.00 */ /* bcdUSB */ 01696 #endif 01697 0x00, /* bDeviceClass */ 01698 0x00, /* bDeviceSubClass */ 01699 0x00, /* bDeviceProtocol */ 01700 USBD_MAX_PACKET0, /* bMaxPacketSize0 */ 01701 0x01, /* bNumConfigurations */ 01702 0x00 /* bReserved */ 01703 }; 01704 01705 /* USB Device Qualifier Descriptor for High Speed */ 01706 __weak \ 01707 const U8 USBD_DeviceQualifier_HS[] = { 01708 USB_DEVICE_QUALI_SIZE, /* bLength */ 01709 USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE, /* bDescriptorType */ 01710 #if (USBD_BOS_ENABLE) 01711 WBVAL(0x0210), /* 2.10 */ /* bcdUSB */ 01712 #else 01713 WBVAL(0x0200), /* 2.00 */ /* bcdUSB */ 01714 #endif 01715 0x00, /* bDeviceClass */ 01716 0x00, /* bDeviceSubClass */ 01717 0x00, /* bDeviceProtocol */ 01718 USBD_MAX_PACKET0, /* bMaxPacketSize0 */ 01719 0x01, /* bNumConfigurations */ 01720 0x00 /* bReserved */ 01721 }; 01722 #else 01723 /* USB Device Qualifier Descriptor (for Full Speed) */ 01724 __weak \ 01725 const U8 USBD_DeviceQualifier[] = { 0 }; 01726 01727 /* USB Device Qualifier Descriptor for High Speed */ 01728 __weak \ 01729 const U8 USBD_DeviceQualifier_HS[] = { 0 }; 01730 #endif 01731 01732 #if (USBD_WINUSB_ENABLE) 01733 01734 #define FUNCTION_SUBSET_LEN 160 01735 #define DEVICE_INTERFACE_GUIDS_FEATURE_LEN 132 01736 01737 #define USBD_WINUSB_DESC_SET_LEN (WINUSB_DESCRIPTOR_SET_HEADER_SIZE + USBD_WEBUSB_ENABLE * FUNCTION_SUBSET_LEN + USBD_BULK_ENABLE * FUNCTION_SUBSET_LEN) 01738 01739 U8 USBD_WinUSBDescriptorSetDescriptor[] = { 01740 WBVAL(WINUSB_DESCRIPTOR_SET_HEADER_SIZE), /* wLength */ 01741 WBVAL(WINUSB_SET_HEADER_DESCRIPTOR_TYPE), /* wDescriptorType */ 01742 0x00, 0x00, 0x03, 0x06, /* >= Win 8.1 */ /* dwWindowsVersion*/ 01743 WBVAL(USBD_WINUSB_DESC_SET_LEN), /* wDescriptorSetTotalLength */ 01744 #if (USBD_WEBUSB_ENABLE) 01745 WBVAL(WINUSB_FUNCTION_SUBSET_HEADER_SIZE),// wLength 01746 WBVAL(WINUSB_SUBSET_HEADER_FUNCTION_TYPE),// wDescriptorType 01747 0, // bFirstInterface USBD_WINUSB_IF_NUM 01748 0, // bReserved 01749 WBVAL(FUNCTION_SUBSET_LEN), // wSubsetLength 01750 WBVAL(WINUSB_FEATURE_COMPATIBLE_ID_SIZE), // wLength 01751 WBVAL(WINUSB_FEATURE_COMPATIBLE_ID_TYPE), // wDescriptorType 01752 'W', 'I', 'N', 'U', 'S', 'B', 0, 0, // CompatibleId 01753 0, 0, 0, 0, 0, 0, 0, 0, // SubCompatibleId 01754 WBVAL(DEVICE_INTERFACE_GUIDS_FEATURE_LEN),// wLength 01755 WBVAL(WINUSB_FEATURE_REG_PROPERTY_TYPE), // wDescriptorType 01756 WBVAL(WINUSB_PROP_DATA_TYPE_REG_MULTI_SZ), // wPropertyDataType 01757 WBVAL(42), // wPropertyNameLength 01758 'D',0,'e',0,'v',0,'i',0,'c',0,'e',0, 01759 'I',0,'n',0,'t',0,'e',0,'r',0,'f',0,'a',0,'c',0,'e',0, 01760 'G',0,'U',0,'I',0,'D',0,'s',0,0,0, 01761 WBVAL(80), // wPropertyDataLength 01762 '{',0, 01763 '9',0,'2',0,'C',0,'E',0,'6',0,'4',0,'6',0,'2',0,'-',0, 01764 '9',0,'C',0,'7',0,'7',0,'-',0, 01765 '4',0,'6',0,'F',0,'E',0,'-',0, 01766 '9',0,'3',0,'3',0,'B',0,'-', 01767 0,'3',0,'1',0,'C',0,'B',0,'9',0,'C',0,'5',0,'A',0,'A',0,'3',0,'B',0,'9',0, 01768 '}',0,0,0,0,0, 01769 #endif 01770 #if (USBD_BULK_ENABLE) 01771 WBVAL(WINUSB_FUNCTION_SUBSET_HEADER_SIZE),/* wLength */ 01772 WBVAL(WINUSB_SUBSET_HEADER_FUNCTION_TYPE),/* wDescriptorType */ 01773 0, /* bFirstInterface USBD_BULK_IF_NUM*/ 01774 0, /* bReserved */ 01775 WBVAL(FUNCTION_SUBSET_LEN), /* wSubsetLength */ 01776 WBVAL(WINUSB_FEATURE_COMPATIBLE_ID_SIZE), /* wLength */ 01777 WBVAL(WINUSB_FEATURE_COMPATIBLE_ID_TYPE), /* wDescriptorType */ 01778 'W', 'I', 'N', 'U', 'S', 'B', 0, 0, /* CompatibleId*/ 01779 0, 0, 0, 0, 0, 0, 0, 0, /* SubCompatibleId*/ 01780 WBVAL(DEVICE_INTERFACE_GUIDS_FEATURE_LEN),/* wLength */ 01781 WBVAL(WINUSB_FEATURE_REG_PROPERTY_TYPE), /* wDescriptorType */ 01782 WBVAL(WINUSB_PROP_DATA_TYPE_REG_MULTI_SZ), /* wPropertyDataType */ 01783 WBVAL(42), /* wPropertyNameLength */ 01784 'D',0,'e',0,'v',0,'i',0,'c',0,'e',0, 01785 'I',0,'n',0,'t',0,'e',0,'r',0,'f',0,'a',0,'c',0,'e',0, 01786 'G',0,'U',0,'I',0,'D',0,'s',0,0,0, 01787 WBVAL(80), /* wPropertyDataLength */ 01788 '{',0, 01789 'C',0,'D',0,'B',0,'3',0,'B',0,'5',0,'A',0,'D',0,'-',0, 01790 '2',0,'9',0,'3',0,'B',0,'-',0, 01791 '4',0,'6',0,'6',0,'3',0,'-',0, 01792 'A',0,'A',0,'3',0,'6',0,'-', 01793 0,'1',0,'A',0,'A',0,'E',0,'4',0,'6',0,'4',0,'6',0,'3',0,'7',0,'7',0,'6',0, 01794 '}',0,0,0,0,0, 01795 #endif 01796 }; 01797 01798 #else 01799 01800 const U8 USBD_WinUSBDescriptorSetDescriptor[] = { 0 }; 01801 01802 BOOL USBD_EndPoint0_Setup_WinUSB_ReqToDevice(void) 01803 { 01804 return (__FALSE); 01805 } 01806 01807 #endif 01808 01809 #if (USBD_BOS_ENABLE) 01810 01811 #define USBD_NUM_DEV_CAPABILITIES (USBD_WEBUSB_ENABLE + USBD_WINUSB_ENABLE) 01812 01813 #define USBD_WEBUSB_DESC_LEN (sizeof(WEBUSB_PLATFORM_CAPABILITY_DESCRIPTOR)) 01814 01815 #define USBD_WINUSB_DESC_LEN (sizeof(WINUSB_PLATFORM_CAPABILITY_DESCRIPTOR)) 01816 01817 #define USBD_BOS_WTOTALLENGTH (USB_BOS_DESC_SIZE + \ 01818 USBD_WEBUSB_DESC_LEN * USBD_WEBUSB_ENABLE + \ 01819 USBD_WINUSB_DESC_LEN * USBD_WINUSB_ENABLE) 01820 01821 __weak \ 01822 const U8 USBD_BinaryObjectStoreDescriptor[] = { 01823 USB_BOS_DESC_SIZE, /* bLength */ 01824 USB_BINARY_OBJECT_STORE_DESCRIPTOR_TYPE,/* bDescriptorType */ 01825 WBVAL(USBD_BOS_WTOTALLENGTH), /* wTotalLength */ 01826 USBD_NUM_DEV_CAPABILITIES, /* bNumDeviceCaps */ 01827 #if (USBD_WEBUSB_ENABLE) 01828 USBD_WEBUSB_DESC_LEN, /* bLength */ 01829 USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE, /* bDescriptorType */ 01830 USB_DEVICE_CAPABILITY_PLATFORM, /* bDevCapabilityType */ 01831 0x00, /* bReserved */ 01832 0x38, 0xB6, 0x08, 0x34, /* PlatformCapabilityUUID */ 01833 0xA9, 0x09, 0xA0, 0x47, 01834 0x8B, 0xFD, 0xA0, 0x76, 01835 0x88, 0x15, 0xB6, 0x65, 01836 WBVAL(0x0100), /* 1.00 */ /* bcdVersion */ 01837 USBD_WEBUSB_VENDOR_CODE, /* bVendorCode */ 01838 0, /* iLandingPage */ 01839 #endif 01840 #if (USBD_WINUSB_ENABLE) 01841 USBD_WINUSB_DESC_LEN, /* bLength */ 01842 USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE, /* bDescriptorType */ 01843 USB_DEVICE_CAPABILITY_PLATFORM, /* bDevCapabilityType */ 01844 0x00, /* bReserved */ 01845 0xDF, 0x60, 0xDD, 0xD8, /* PlatformCapabilityUUID */ 01846 0x89, 0x45, 0xC7, 0x4C, 01847 0x9C, 0xD2, 0x65, 0x9D, 01848 0x9E, 0x64, 0x8A, 0x9F, 01849 0x00, 0x00, 0x03, 0x06, /* >= Win 8.1 *//* dwWindowsVersion*/ 01850 WBVAL(USBD_WINUSB_DESC_SET_LEN), /* wDescriptorSetTotalLength */ 01851 USBD_WINUSB_VENDOR_CODE, /* bVendorCode */ 01852 0, /* bAltEnumCode */ 01853 #endif 01854 }; 01855 01856 #else 01857 __weak \ 01858 const U8 USBD_BinaryObjectStoreDescriptor[] = { 0 }; 01859 01860 #endif 01861 01862 #define HID_DESC \ 01863 /* Interface, Alternate Setting 0, HID Class */ \ 01864 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 01865 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01866 0x00, /* bInterfaceNumber USBD_HID_IF_NUM*/ \ 01867 0x00, /* bAlternateSetting */ \ 01868 0x00+(USBD_HID_EP_INTIN != 0)+(USBD_HID_EP_INTOUT != 0), /*0x01+(USBD_HID_EP_INTOUT != 0),*/ /* bNumEndpoints */ \ 01869 USB_DEVICE_CLASS_HUMAN_INTERFACE, /* bInterfaceClass */ \ 01870 HID_SUBCLASS_NONE, /* bInterfaceSubClass */ \ 01871 HID_PROTOCOL_NONE, /* bInterfaceProtocol */ \ 01872 USBD_HID_IF_STR_NUM, /* iInterface */ \ 01873 \ 01874 /* HID Class Descriptor */ \ 01875 USB_HID_DESC_SIZE, /* bLength */ \ 01876 HID_HID_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01877 WBVAL(0x0100), /* 1.00 */ /* bcdHID */ \ 01878 0x00, /* bCountryCode */ \ 01879 0x01, /* bNumDescriptors */ \ 01880 HID_REPORT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01881 WBVAL(USB_HID_REPORT_DESC_SIZE), /* wDescriptorLength */ 01882 01883 #define VENDOR_DESC_IAD(first,num_of_ifs) /* Vendor: Interface Association Descriptor */ \ 01884 USB_INTERFACE_ASSOC_DESC_SIZE, /* bLength */ \ 01885 USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01886 (first), /* bFirstInterface */ \ 01887 (num_of_ifs), /* bInterfaceCount */ \ 01888 USB_DEVICE_CLASS_VENDOR_SPECIFIC, /* bFunctionClass */ \ 01889 0x00, /* bFunctionSubclass */ \ 01890 0x00, /* bFunctionProtocol */ \ 01891 0x00, /* iFunction */ 01892 01893 #define WEBUSB_DESC \ 01894 /* Interface, Alternate Setting 0, VENDOR_SPECIFIC Class */ \ 01895 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 01896 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01897 0x00, /* bInterfaceNumber USBD_WEBUSB_IF_NUM */ \ 01898 0x00, /* bAlternateSetting */ \ 01899 0x00, /* bNumEndpoints */ \ 01900 USB_DEVICE_CLASS_VENDOR_SPECIFIC, /* bInterfaceClass */ \ 01901 USB_DEVICE_CLASS_HUMAN_INTERFACE, /* bInterfaceSubClass */ \ 01902 HID_PROTOCOL_NONE, /* bInterfaceProtocol */ \ 01903 USBD_WEBUSB_IF_STR_NUM, /* iInterface */ \ 01904 01905 #define HID_EP_IN /* HID Endpoint for Low-speed/Full-speed */ \ 01906 /* Endpoint, HID Interrupt In */ \ 01907 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01908 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01909 USB_ENDPOINT_IN(USBD_HID_EP_INTIN), /* bEndpointAddress */ \ 01910 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 01911 WBVAL(USBD_HID_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01912 USBD_HID_BINTERVAL, /* bInterval */ 01913 01914 #define HID_EP_OUT /* HID Endpoint for Low-speed/Full-speed */ \ 01915 /* Endpoint, HID Interrupt Out */ \ 01916 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01917 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01918 USB_ENDPOINT_OUT(USBD_HID_EP_INTOUT), /* bEndpointAddress */ \ 01919 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 01920 WBVAL(USBD_HID_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01921 USBD_HID_BINTERVAL, /* bInterval */ 01922 01923 #define HID_EP_INOUT /* HID Endpoint for Low-speed/Full-speed */ \ 01924 /* Endpoint, HID Interrupt In */ \ 01925 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01926 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01927 USB_ENDPOINT_IN(USBD_HID_EP_INTIN), /* bEndpointAddress */ \ 01928 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 01929 WBVAL(USBD_HID_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01930 USBD_HID_BINTERVAL, /* bInterval */ \ 01931 \ 01932 /* Endpoint, HID Interrupt Out */ \ 01933 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01934 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01935 USB_ENDPOINT_OUT(USBD_HID_EP_INTOUT), /* bEndpointAddress */ \ 01936 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 01937 WBVAL(USBD_HID_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01938 USBD_HID_BINTERVAL, /* bInterval */ 01939 01940 #define HID_EP_IN_HS /* HID Endpoint for High-speed */ \ 01941 /* Endpoint, HID Interrupt In */ \ 01942 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01943 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01944 USB_ENDPOINT_IN(USBD_HID_EP_INTIN), /* bEndpointAddress */ \ 01945 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 01946 WBVAL(USBD_HID_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01947 USBD_HID_HS_BINTERVAL, /* bInterval */ 01948 01949 #define HID_EP_OUT_HS /* HID Endpoint for High-speed */ \ 01950 /* Endpoint, HID Interrupt Out */ \ 01951 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01952 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01953 USB_ENDPOINT_OUT(USBD_HID_EP_INTOUT), /* bEndpointAddress */ \ 01954 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 01955 WBVAL(USBD_HID_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01956 USBD_HID_HS_BINTERVAL, /* bInterval */ 01957 01958 #define HID_EP_INOUT_HS /* HID Endpoint for High-speed */ \ 01959 /* Endpoint, HID Interrupt In */ \ 01960 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01961 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01962 USB_ENDPOINT_IN(USBD_HID_EP_INTIN), /* bEndpointAddress */ \ 01963 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 01964 WBVAL(USBD_HID_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01965 USBD_HID_HS_BINTERVAL, /* bInterval */ \ 01966 \ 01967 /* Endpoint, HID Interrupt Out */ \ 01968 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01969 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01970 USB_ENDPOINT_OUT(USBD_HID_EP_INTOUT), /* bEndpointAddress */ \ 01971 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 01972 WBVAL(USBD_HID_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01973 USBD_HID_HS_BINTERVAL, /* bInterval */ 01974 01975 #define MSC_DESC \ 01976 /* Interface, Alternate Setting 0, MSC Class */ \ 01977 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 01978 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01979 0x00, /* bInterfaceNumber USBD_MSC_IF_NUM*/ \ 01980 0x00, /* bAlternateSetting */ \ 01981 0x02, /* bNumEndpoints */ \ 01982 USB_DEVICE_CLASS_STORAGE, /* bInterfaceClass */ \ 01983 MSC_SUBCLASS_SCSI, /* bInterfaceSubClass */ \ 01984 MSC_PROTOCOL_BULK_ONLY, /* bInterfaceProtocol */ \ 01985 USBD_MSC_IF_STR_NUM, /* iInterface */ 01986 01987 #define MSC_EP /* MSC Endpoints for Low-speed/Full-speed */ \ 01988 /* Endpoint, EP Bulk IN */ \ 01989 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01990 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01991 USB_ENDPOINT_IN(USBD_MSC_EP_BULKIN), /* bEndpointAddress */ \ 01992 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 01993 WBVAL(USBD_MSC_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 01994 0x00, /* bInterval: ignore for Bulk transfer */ \ 01995 \ 01996 /* Endpoint, EP Bulk OUT */ \ 01997 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 01998 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 01999 USB_ENDPOINT_OUT(USBD_MSC_EP_BULKOUT),/* bEndpointAddress */ \ 02000 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02001 WBVAL(USBD_MSC_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02002 0x00, /* bInterval: ignore for Bulk transfer */ 02003 02004 #define MSC_EP_HS /* MSC Endpoints for High-speed */ \ 02005 /* Endpoint, EP Bulk IN */ \ 02006 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02007 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02008 USB_ENDPOINT_IN(USBD_MSC_EP_BULKIN), /* bEndpointAddress */ \ 02009 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02010 WBVAL(USBD_MSC_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02011 USBD_MSC_HS_BINTERVAL, /* bInterval */ \ 02012 \ 02013 /* Endpoint, EP Bulk OUT */ \ 02014 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02015 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02016 USB_ENDPOINT_OUT(USBD_MSC_EP_BULKOUT),/* bEndpointAddress */ \ 02017 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02018 WBVAL(USBD_MSC_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02019 USBD_MSC_HS_BINTERVAL, /* bInterval */ 02020 02021 #define BULK_DESC \ 02022 /* Interface, Alternate Setting 0, MSC Class */ \ 02023 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 02024 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02025 0x00, /* bInterfaceNumber USBD_BULK_IF_NUM*/ \ 02026 0x00, /* bAlternateSetting */ \ 02027 0x02, /* bNumEndpoints */ \ 02028 USB_DEVICE_CLASS_VENDOR_SPECIFIC, /* bInterfaceClass */ \ 02029 0x00, /* bInterfaceSubClass */ \ 02030 0x00, /* bInterfaceProtocol */ \ 02031 USBD_BULK_IF_STR_NUM, /* iInterface */ 02032 02033 #define BULK_EP /* MSC Endpoints for Low-speed/Full-speed */ \ 02034 /* Endpoint, EP Bulk OUT */ \ 02035 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02036 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02037 USB_ENDPOINT_OUT(USBD_BULK_EP_BULKOUT),/* bEndpointAddress */ \ 02038 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02039 WBVAL(USBD_BULK_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02040 0x00, /* bInterval: ignore for Bulk transfer */ \ 02041 \ 02042 /* Endpoint, EP Bulk IN */ \ 02043 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02044 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02045 USB_ENDPOINT_IN(USBD_BULK_EP_BULKIN), /* bEndpointAddress */ \ 02046 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02047 WBVAL(USBD_BULK_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02048 0x00, /* bInterval: ignore for Bulk transfer */ 02049 02050 #define BULK_EP_HS /* MSC Endpoints for Low-speed/Full-speed */ \ 02051 /* Endpoint, EP Bulk OUT */ \ 02052 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02053 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02054 USB_ENDPOINT_OUT(USBD_BULK_EP_BULKOUT), /* bEndpointAddress */ \ 02055 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02056 WBVAL(USBD_BULK_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02057 0x00, /* bInterval: ignore for Bulk transfer */ \ 02058 \ 02059 /* Endpoint, EP Bulk IN */ \ 02060 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02061 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02062 USB_ENDPOINT_IN(USBD_BULK_EP_BULKIN),/* bEndpointAddress */ \ 02063 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02064 WBVAL(USBD_BULK_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02065 0x00, /* bInterval: ignore for Bulk transfer */ 02066 02067 #define ADC_DESC_IAD(first,num_of_ifs) /* ADC: Interface Association Descriptor */ \ 02068 USB_INTERFACE_ASSOC_DESC_SIZE, /* bLength */ \ 02069 USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02070 (first), /* bFirstInterface */ \ 02071 (num_of_ifs), /* bInterfaceCount */ \ 02072 USB_DEVICE_CLASS_AUDIO, /* bFunctionClass */ \ 02073 AUDIO_SUBCLASS_AUDIOCONTROL, /* bFunctionSubclass */ \ 02074 AUDIO_PROTOCOL_UNDEFINED, /* bFunctionProtocol */ \ 02075 USBD_ADC_CIF_STR_NUM, /* iFunction */ \ 02076 02077 #define ADC_DESC \ 02078 /* Interface, Alternate Setting 0, Audio Control */ \ 02079 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 02080 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02081 USBD_ADC_CIF_NUM, /* bInterfaceNumber */ \ 02082 0x00, /* bAlternateSetting */ \ 02083 0x00, /* bNumEndpoints */ \ 02084 USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ \ 02085 AUDIO_SUBCLASS_AUDIOCONTROL, /* bInterfaceSubClass */ \ 02086 AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */ \ 02087 USBD_ADC_CIF_STR_NUM, /* iInterface */ \ 02088 /* Audio Control Interface */ \ 02089 AUDIO_CONTROL_INTERFACE_DESC_SZ(1), /* bLength */ \ 02090 AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02091 AUDIO_CONTROL_HEADER, /* bDescriptorSubtype */ \ 02092 WBVAL(0x0100), /* 1.00 */ /* bcdADC */ \ 02093 WBVAL( /* wTotalLength */ \ 02094 AUDIO_CONTROL_INTERFACE_DESC_SZ(1) + \ 02095 AUDIO_INPUT_TERMINAL_DESC_SIZE + \ 02096 AUDIO_FEATURE_UNIT_DESC_SZ(1,1) + \ 02097 AUDIO_OUTPUT_TERMINAL_DESC_SIZE \ 02098 ), \ 02099 0x01, /* bInCollection */ \ 02100 0x01, /* baInterfaceNr */ \ 02101 \ 02102 /* Audio Input Terminal */ \ 02103 AUDIO_INPUT_TERMINAL_DESC_SIZE, /* bLength */ \ 02104 AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02105 AUDIO_CONTROL_INPUT_TERMINAL, /* bDescriptorSubtype */ \ 02106 0x01, /* bTerminalID */ \ 02107 WBVAL(AUDIO_TERMINAL_USB_STREAMING), /* wTerminalType */ \ 02108 0x00, /* bAssocTerminal */ \ 02109 0x01, /* bNrChannels */ \ 02110 WBVAL(AUDIO_CHANNEL_M), /* wChannelConfig */ \ 02111 0x00, /* iChannelNames */ \ 02112 0x00, /* iTerminal */ \ 02113 \ 02114 /* Audio Feature Unit */ \ 02115 AUDIO_FEATURE_UNIT_DESC_SZ(1,1), /* bLength */ \ 02116 AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02117 AUDIO_CONTROL_FEATURE_UNIT, /* bDescriptorSubtype */ \ 02118 0x02, /* bUnitID */ \ 02119 0x01, /* bSourceID */ \ 02120 0x01, /* bControlSize */ \ 02121 AUDIO_CONTROL_MUTE | \ 02122 AUDIO_CONTROL_VOLUME, /* bmaControls(0) */ \ 02123 0x00, /* bmaControls(1) */ \ 02124 0x00, /* iTerminal */ \ 02125 \ 02126 /* Audio Output Terminal */ \ 02127 AUDIO_OUTPUT_TERMINAL_DESC_SIZE, /* bLength */ \ 02128 AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02129 AUDIO_CONTROL_OUTPUT_TERMINAL, /* bDescriptorSubtype */ \ 02130 0x03, /* bTerminalID */ \ 02131 WBVAL(AUDIO_TERMINAL_SPEAKER), /* wTerminalType */ \ 02132 0x00, /* bAssocTerminal */ \ 02133 0x02, /* bSourceID */ \ 02134 0x00, /* iTerminal */ \ 02135 \ 02136 /* Interface, Alternate Setting 0, Audio Streaming - Zero Bandwith */ \ 02137 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 02138 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02139 USBD_ADC_SIF1_NUM, /* bInterfaceNumber */ \ 02140 0x00, /* bAlternateSetting */ \ 02141 0x00, /* bNumEndpoints */ \ 02142 USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ \ 02143 AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */ \ 02144 AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */ \ 02145 USBD_ADC_SIF1_STR_NUM, /* iInterface */ \ 02146 \ 02147 /* Interface, Alternate Setting 1, Audio Streaming - Operational */ \ 02148 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 02149 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02150 USBD_ADC_SIF1_NUM, /* bInterfaceNumber */ \ 02151 0x01, /* bAlternateSetting */ \ 02152 0x01, /* bNumEndpoints */ \ 02153 USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ \ 02154 AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */ \ 02155 AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */ \ 02156 USBD_ADC_SIF2_STR_NUM, /* iInterface */ \ 02157 \ 02158 /* Audio Streaming Interface */ \ 02159 AUDIO_STREAMING_INTERFACE_DESC_SIZE, /* bLength */ \ 02160 AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02161 AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */ \ 02162 0x01, /* bTerminalLink */ \ 02163 0x01, /* bDelay */ \ 02164 WBVAL(AUDIO_FORMAT_PCM), /* wFormatTag */ \ 02165 \ 02166 /* Audio Type I Format */ \ 02167 AUDIO_FORMAT_TYPE_I_DESC_SZ(1), /* bLength */ \ 02168 AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02169 AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */ \ 02170 AUDIO_FORMAT_TYPE_I, /* bFormatType */ \ 02171 0x01, /* bNrChannels */ \ 02172 USBD_ADC_BSUBFRAMESIZE, /* bSubFrameSize */ \ 02173 USBD_ADC_BBITRESOLUTION, /* bBitResolution */ \ 02174 0x01, /* bSamFreqType */ \ 02175 B3VAL(USBD_ADC_TSAMFREQ), /* tSamFreq */ 02176 02177 #define ADC_EP /* ADC Endpoints for Low-speed/Full-speed */ \ 02178 /* Endpoint, EP ISO OUT - Standard Descriptor */ \ 02179 AUDIO_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */ \ 02180 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02181 USB_ENDPOINT_OUT(USBD_ADC_EP_ISOOUT), /* bEndpointAddress */ \ 02182 USB_ENDPOINT_TYPE_ISOCHRONOUS, /* bmAttributes */ \ 02183 WBVAL(USBD_ADC_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02184 USBD_ADC_BINTERVAL, /* bInterval */ \ 02185 0x00, /* bRefresh */ \ 02186 0x00, /* bSynchAddress */ \ 02187 \ 02188 /* Endpoint - Audio Streaming */ \ 02189 AUDIO_STREAMING_ENDPOINT_DESC_SIZE, /* bLength */ \ 02190 AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02191 AUDIO_ENDPOINT_GENERAL, /* bDescriptor */ \ 02192 0x00, /* bmAttributes */ \ 02193 0x00, /* bLockDelayUnits */ \ 02194 WBVAL(0x0000), /* wLockDelay */ 02195 02196 #define ADC_EP_HS /* ADC Endpoints for High-speed */ \ 02197 /* Endpoint, EP ISO OUT - Standard Descriptor */ \ 02198 AUDIO_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */ \ 02199 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02200 USB_ENDPOINT_OUT(USBD_ADC_EP_ISOOUT), /* bEndpointAddress */ \ 02201 USB_ENDPOINT_TYPE_ISOCHRONOUS, /* bmAttributes */ \ 02202 WBVAL(USBD_ADC_HS_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02203 USBD_ADC_BINTERVAL, /* bInterval */ \ 02204 0x00, /* bRefresh */ \ 02205 0x00, /* bSynchAddress */ \ 02206 \ 02207 /* Endpoint - Audio Streaming */ \ 02208 AUDIO_STREAMING_ENDPOINT_DESC_SIZE, /* bLength */ \ 02209 AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02210 AUDIO_ENDPOINT_GENERAL, /* bDescriptor */ \ 02211 0x00, /* bmAttributes */ \ 02212 0x00, /* bLockDelayUnits */ \ 02213 WBVAL(0x0000), /* wLockDelay */ 02214 02215 #define CDC_ACM_DESC_IAD(first,num_of_ifs) /* CDC: Interface Association Descriptor */ \ 02216 USB_INTERFACE_ASSOC_DESC_SIZE, /* bLength */ \ 02217 USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02218 (first), /* bFirstInterface */ \ 02219 (num_of_ifs), /* bInterfaceCount */ \ 02220 CDC_COMMUNICATION_INTERFACE_CLASS, /* bFunctionClass (Communication Class) */ \ 02221 CDC_ABSTRACT_CONTROL_MODEL, /* bFunctionSubclass (Abstract Control Model) */ \ 02222 0x01, /* bFunctionProtocol (V.25ter, Common AT commands) */ \ 02223 USBD_CDC_ACM_CIF_STR_NUM, /* iFunction */ \ 02224 02225 #define CDC_ACM_DESC_IF0 \ 02226 /* Interface, Alternate Setting 0, CDC Class */ \ 02227 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 02228 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02229 0x00, /* bInterfaceNumber: Number of Interface USBD_CDC_ACM_CIF_NUM*/ \ 02230 0x00, /* bAlternateSetting: Alternate setting */ \ 02231 0x01, /* bNumEndpoints: One endpoint used */ \ 02232 CDC_COMMUNICATION_INTERFACE_CLASS, /* bInterfaceClass: Communication Interface Class */ \ 02233 CDC_ABSTRACT_CONTROL_MODEL, /* bInterfaceSubClass: Abstract Control Model */ \ 02234 0x01, /* bInterfaceProtocol: no protocol used */ \ 02235 USBD_CDC_ACM_CIF_STR_NUM, /* iInterface: */ \ 02236 \ 02237 /* Header Functional Descriptor */ \ 02238 CDC_HEADER_SIZE, /* bLength: Endpoint Descriptor size */ \ 02239 CDC_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ \ 02240 CDC_HEADER, /* bDescriptorSubtype: Header Func Desc */ \ 02241 WBVAL(CDC_V1_10), /* 1.10 */ /* bcdCDC */ \ 02242 /* Call Management Functional Descriptor */ \ 02243 CDC_CALL_MANAGEMENT_SIZE, /* bFunctionLength */ \ 02244 CDC_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ \ 02245 CDC_CALL_MANAGEMENT, /* bDescriptorSubtype: Call Management Func Desc */ \ 02246 0x03, /* bmCapabilities: device handles call management */ \ 02247 0x02, /* bDataInterface: CDC data IF ID */ \ 02248 /* Abstract Control Management Functional Descriptor */ \ 02249 CDC_ABSTRACT_CONTROL_MANAGEMENT_SIZE, /* bFunctionLength */ \ 02250 CDC_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ \ 02251 CDC_ABSTRACT_CONTROL_MANAGEMENT, /* bDescriptorSubtype: Abstract Control Management desc */ \ 02252 0x06, /* bmCapabilities: SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported */ \ 02253 /* Union Functional Descriptor */ \ 02254 CDC_UNION_SIZE, /* bFunctionLength */ \ 02255 CDC_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ \ 02256 CDC_UNION, /* bDescriptorSubtype: Union func desc */ \ 02257 0x00, /* bMasterInterface: Communication class interface is master USBD_CDC_ACM_CIF_NUM*/ \ 02258 0x00, /* bSlaveInterface0: Data class interface is slave 0 USBD_CDC_ACM_DIF_NUM*/ 02259 02260 #define CDC_ACM_EP_IF0 /* CDC Endpoints for Interface 0 for Low-speed/Full-speed */ \ 02261 /* Endpoint, EP Interrupt IN */ /* event notification (optional) */ \ 02262 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02263 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02264 USB_ENDPOINT_IN(USBD_CDC_ACM_EP_INTIN),/* bEndpointAddress */ \ 02265 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 02266 WBVAL(USBD_CDC_ACM_WMAXPACKETSIZE), /* wMaxPacketSize */ \ 02267 USBD_CDC_ACM_BINTERVAL, /* bInterval */ 02268 02269 #define CDC_ACM_EP_IF0_HS /* CDC Endpoints for Interface 0 for High-speed */ \ 02270 /* Endpoint, EP Interrupt IN */ /* event notification (optional) */ \ 02271 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02272 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02273 USB_ENDPOINT_IN(USBD_CDC_ACM_EP_INTIN),/* bEndpointAddress */ \ 02274 USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ \ 02275 WBVAL(USBD_CDC_ACM_HS_WMAXPACKETSIZE),/* wMaxPacketSize */ \ 02276 USBD_CDC_ACM_HS_BINTERVAL, /* bInterval */ 02277 02278 #define CDC_ACM_DESC_IF1 \ 02279 /* Interface, Alternate Setting 0, Data class interface descriptor*/ \ 02280 USB_INTERFACE_DESC_SIZE, /* bLength */ \ 02281 USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02282 0x00, /* bInterfaceNumber: Number of Interface USBD_CDC_ACM_DIF_NUM*/ \ 02283 0x00, /* bAlternateSetting: no alternate setting */ \ 02284 0x02, /* bNumEndpoints: two endpoints used */ \ 02285 CDC_DATA_INTERFACE_CLASS, /* bInterfaceClass: Data Interface Class */ \ 02286 0x00, /* bInterfaceSubClass: no subclass available */ \ 02287 0x00, /* bInterfaceProtocol: no protocol used */ \ 02288 USBD_CDC_ACM_DIF_STR_NUM, /* iInterface */ 02289 02290 #define CDC_ACM_EP_IF1 /* CDC Endpoints for Interface 1 for Low-speed/Full-speed */ \ 02291 /* Endpoint, EP Bulk OUT */ \ 02292 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02293 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02294 USB_ENDPOINT_OUT(USBD_CDC_ACM_EP_BULKOUT),/* bEndpointAddress */ \ 02295 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02296 WBVAL(USBD_CDC_ACM_WMAXPACKETSIZE1), /* wMaxPacketSize */ \ 02297 0x00, /* bInterval: ignore for Bulk transfer */ \ 02298 \ 02299 /* Endpoint, EP Bulk IN */ \ 02300 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02301 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02302 USB_ENDPOINT_IN(USBD_CDC_ACM_EP_BULKIN),/* bEndpointAddress */ \ 02303 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02304 WBVAL(USBD_CDC_ACM_WMAXPACKETSIZE1), /* wMaxPacketSize */ \ 02305 0x00, /* bInterval: ignore for Bulk transfer */ 02306 02307 #define CDC_ACM_EP_IF1_HS /* CDC Endpoints for Interface 1 for High-speed */ \ 02308 /* Endpoint, EP Bulk OUT */ \ 02309 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02310 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02311 USB_ENDPOINT_OUT(USBD_CDC_ACM_EP_BULKOUT),/* bEndpointAddress */ \ 02312 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02313 WBVAL(USBD_CDC_ACM_HS_WMAXPACKETSIZE1),/* wMaxPacketSize */ \ 02314 USBD_CDC_ACM_HS_BINTERVAL1, /* bInterval */ \ 02315 \ 02316 /* Endpoint, EP Bulk IN */ \ 02317 USB_ENDPOINT_DESC_SIZE, /* bLength */ \ 02318 USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ 02319 USB_ENDPOINT_IN(USBD_CDC_ACM_EP_BULKIN),/* bEndpointAddress */ \ 02320 USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ \ 02321 WBVAL(USBD_CDC_ACM_HS_WMAXPACKETSIZE1),/* wMaxPacketSize */ \ 02322 USBD_CDC_ACM_HS_BINTERVAL1, /* bInterval */ 02323 02324 /* USB Device Configuration Descriptor (for Full Speed) */ 02325 /* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor) */ 02326 __weak \ 02327 U8 USBD_ConfigDescriptor[200] = { 0 }; 02328 02329 #if (USBD_HS_ENABLE == 0) /* If High-speed not enabled, declare dummy descriptors for High-speed */ 02330 __weak \ 02331 U8 USBD_ConfigDescriptor_HS[] = { 0 }; 02332 #else 02333 /* USB Device Configuration Descriptor (for High Speed) */ 02334 /* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor) */ 02335 __weak \ 02336 U8 USBD_ConfigDescriptor_HS[200] = { 0 }; 02337 02338 #endif 02339 02340 /* USB Device Create String Descriptor */ 02341 #define USBD_STR_DEF(n) \ 02342 struct { \ 02343 U8 len; \ 02344 U8 type; \ 02345 U16 str[sizeof(USBD_##n)/2-1]; \ 02346 } desc##n 02347 02348 #define USBD_STR_VAL(n) \ 02349 { sizeof(USBD_##n), USB_STRING_DESCRIPTOR_TYPE, USBD_##n } 02350 02351 __weak \ 02352 const struct { 02353 struct { 02354 U8 len; 02355 U8 type; 02356 U16 langid; 02357 } desc_langid; 02358 USBD_STR_DEF(STRDESC_MAN); 02359 USBD_STR_DEF(STRDESC_PROD); 02360 #if (USBD_STRDESC_SER_ENABLE) 02361 USBD_STR_DEF(STRDESC_SER); 02362 #endif 02363 #if (USBD_ADC_ENABLE) 02364 USBD_STR_DEF(ADC_CIF_STRDESC); 02365 USBD_STR_DEF(ADC_SIF1_STRDESC); 02366 USBD_STR_DEF(ADC_SIF2_STRDESC); 02367 #endif 02368 #if (USBD_CDC_ACM_ENABLE) 02369 USBD_STR_DEF(CDC_ACM_CIF_STRDESC); 02370 USBD_STR_DEF(CDC_ACM_DIF_STRDESC); 02371 #endif 02372 #if (USBD_HID_ENABLE) 02373 USBD_STR_DEF(HID_STRDESC); 02374 #endif 02375 #if (USBD_WEBUSB_ENABLE) 02376 USBD_STR_DEF(WEBUSB_STRDESC); 02377 #endif 02378 #if (USBD_MSC_ENABLE) 02379 USBD_STR_DEF(MSC_STRDESC); 02380 #endif 02381 #if (USBD_BULK_ENABLE) 02382 USBD_STR_DEF(BULK_STRDESC); 02383 #endif 02384 } USBD_StringDescriptor 02385 = { 02386 { 4, USB_STRING_DESCRIPTOR_TYPE, USBD_STRDESC_LANGID }, 02387 USBD_STR_VAL(STRDESC_MAN), 02388 USBD_STR_VAL(STRDESC_PROD), 02389 #if (USBD_STRDESC_SER_ENABLE) 02390 USBD_STR_VAL(STRDESC_SER), 02391 #endif 02392 #if (USBD_ADC_ENABLE) 02393 USBD_STR_VAL(ADC_CIF_STRDESC), 02394 USBD_STR_VAL(ADC_SIF1_STRDESC), 02395 USBD_STR_VAL(ADC_SIF2_STRDESC), 02396 #endif 02397 #if (USBD_CDC_ACM_ENABLE) 02398 USBD_STR_VAL(CDC_ACM_CIF_STRDESC), 02399 USBD_STR_VAL(CDC_ACM_DIF_STRDESC), 02400 #endif 02401 #if (USBD_HID_ENABLE) 02402 USBD_STR_VAL(HID_STRDESC), 02403 #endif 02404 #if (USBD_WEBUSB_ENABLE) 02405 USBD_STR_VAL(WEBUSB_STRDESC), 02406 #endif 02407 #if (USBD_MSC_ENABLE) 02408 USBD_STR_VAL(MSC_STRDESC), 02409 #endif 02410 #if (USBD_BULK_ENABLE) 02411 USBD_STR_VAL(BULK_STRDESC), 02412 #endif 02413 }; 02414 02415 #if (USBD_WEBUSB_ENABLE) 02416 02417 #define WEBUSB_NUM_FUNCTIONS (1) 02418 02419 #define WEBUSB_WTOTALLENGTH (WEBUSB_DESCRIPTOR_SET_HEADER_SIZE + \ 02420 WEBUSB_CONFIGURATION_SUBSET_HEADER_SIZE +\ 02421 (WEBUSB_NUM_FUNCTIONS * (WEBUSB_FUNCTION_SUBSET_HEADER_SIZE + 1))) 02422 02423 /* WebUSB Create URL Descriptor */ 02424 #define WEBUSB_URL_DEF(n) \ 02425 struct { \ 02426 U8 bLength; \ 02427 U8 bDescriptorType; \ 02428 U8 bScheme; \ 02429 U8 URL[sizeof(USBD_##n)+3];\ 02430 } url##n 02431 02432 #define WEBUSB_HTTP_URL_VAL(n) \ 02433 { \ 02434 (sizeof(USBD_##n) + 3) + 3, \ 02435 WEBUSB_URL_TYPE, \ 02436 WEBUSB_URL_SCHEME_HTTP, \ 02437 USBD_##n \ 02438 } 02439 02440 #define WEBUSB_HTTPS_URL_VAL(n) \ 02441 { \ 02442 (sizeof(USBD_##n) + 3) + 3, \ 02443 WEBUSB_URL_TYPE, \ 02444 WEBUSB_URL_SCHEME_HTTPS, \ 02445 USBD_##n \ 02446 } 02447 02448 __weak \ 02449 struct { 02450 WEBUSB_URL_DEF(WEBUSB_LANDING_URL); 02451 WEBUSB_URL_DEF(WEBUSB_ORIGIN_URL); 02452 } USBD_WebUSBURLDescriptor 02453 = { 02454 WEBUSB_HTTPS_URL_VAL(WEBUSB_LANDING_URL), 02455 WEBUSB_HTTPS_URL_VAL(WEBUSB_ORIGIN_URL), 02456 }; 02457 02458 #else 02459 02460 U8 USBD_WebUSBURLDescriptor[] = { 0 }; 02461 02462 BOOL USBD_EndPoint0_Setup_WebUSB_ReqToDevice(void) 02463 { 02464 return (__FALSE); 02465 } 02466 02467 #endif //USBD_WEBUSB_ENABLE 02468 02469 02470 extern uint8_t flash_algo_valid(void); 02471 02472 static U16 start_desc_fill(U8 * config_desc, U8 * config_desc_hs, U8 if_num) { 02473 U8 * pD = 0; 02474 const U8 start_desc[] = { 02475 /* Configuration 1 */ 02476 USB_CONFIGUARTION_DESC_SIZE, // bLength 02477 USB_CONFIGURATION_DESCRIPTOR_TYPE, // bDescriptorType 02478 WBVAL(USBD_WTOTALLENGTH_MAX), // wTotalLength 02479 USBD_IF_NUM_MAX, // bNumInterfaces 02480 0x01, // bConfigurationValue: 0x01 is used to select this configuration 02481 0x00, // iConfiguration: no string to describe this configuration 02482 USBD_CFGDESC_BMATTRIBUTES | // bmAttributes 02483 (USBD_POWER << 6), 02484 USBD_CFGDESC_BMAXPOWER // bMaxPower, device power consumption 02485 }; 02486 pD = config_desc; 02487 memcpy(pD, start_desc, sizeof(start_desc)); 02488 02489 #if (USBD_HS_ENABLE == 1) 02490 pD = config_desc_hs; 02491 memcpy(pD, start_desc, sizeof(start_desc)); 02492 #endif 02493 02494 return sizeof(start_desc); 02495 } 02496 02497 static U16 hid_desc_fill(U8 * config_desc, U8 * config_desc_hs, U8 if_num) { 02498 U8 * pD = 0; 02499 const U8 hid_desc[] = { 02500 HID_DESC 02501 #if ((USBD_HID_EP_INTOUT != 0) && (USBD_HID_EP_INTIN != 0)) 02502 HID_EP_INOUT 02503 #elif (USBD_HID_EP_INTIN != 0) 02504 HID_EP_IN 02505 #elif (USBD_HID_EP_INTOUT != 0) 02506 HID_EP_OUT 02507 #endif 02508 }; 02509 pD = config_desc; 02510 memcpy(pD, hid_desc, sizeof(hid_desc)); 02511 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02512 #if (USBD_HS_ENABLE == 1) 02513 const U8 hid_desc_hs[] = { 02514 HID_DESC 02515 #if ((USBD_HID_EP_INTOUT != 0) && (USBD_HID_EP_INTIN != 0)) 02516 HID_EP_INOUT_HS 02517 #elif (USBD_HID_EP_INTIN != 0) //#else 02518 HID_EP_IN_HS 02519 #elif (USBD_HID_EP_INTOUT != 0) 02520 HID_EP_OUT_HS 02521 #endif 02522 }; 02523 pD = config_desc_hs; 02524 memcpy(pD, hid_desc_hs, sizeof(hid_desc_hs)); 02525 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02526 #endif 02527 return sizeof(hid_desc); 02528 } 02529 02530 static U16 acm_cdc_desc_fill(U8 * config_desc, U8 * config_desc_hs, U8 if_num) { 02531 U8 * pD = 0; 02532 const U8 cdc_desc[] = { 02533 #if (USBD_MULTI_IF) 02534 CDC_ACM_DESC_IAD(0, 2) 02535 #endif 02536 CDC_ACM_DESC_IF0 02537 CDC_ACM_EP_IF0 02538 CDC_ACM_DESC_IF1 02539 CDC_ACM_EP_IF1 02540 }; 02541 pD = config_desc; 02542 memcpy(pD, cdc_desc, sizeof(cdc_desc)); 02543 02544 #if (USBD_MULTI_IF) 02545 ((USB_INTERFACE_ASSOCIATION_DESCRIPTOR *)pD)->bFirstInterface = if_num; 02546 pD += USB_INTERFACE_ASSOC_DESC_SIZE; 02547 #endif 02548 02549 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02550 pD += USB_INTERFACE_DESC_SIZE + CDC_HEADER_SIZE + CDC_CALL_MANAGEMENT_SIZE + CDC_ABSTRACT_CONTROL_MANAGEMENT_SIZE; 02551 ((UNION_FUNCTIONAL_DESCRIPTOR*)pD)->bMasterInterface = if_num; 02552 ((UNION_FUNCTIONAL_DESCRIPTOR*)pD)->bSlaveInterface0 = if_num + 1; 02553 pD += CDC_UNION_SIZE + USB_ENDPOINT_DESC_SIZE; 02554 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num + 1; 02555 02556 #if (USBD_HS_ENABLE == 1) 02557 const U8 cdc_desc_hs[] = { 02558 #if (USBD_MULTI_IF) 02559 CDC_ACM_DESC_IAD(0, 2) 02560 #endif 02561 CDC_ACM_DESC_IF0 02562 CDC_ACM_EP_IF0_HS 02563 CDC_ACM_DESC_IF1 02564 CDC_ACM_EP_IF1_HS 02565 }; 02566 pD = config_desc_hs; 02567 memcpy(pD, cdc_desc_hs, sizeof(cdc_desc_hs)); 02568 02569 #if (USBD_MULTI_IF) 02570 ((USB_INTERFACE_ASSOCIATION_DESCRIPTOR *)pD)->bFirstInterface = if_num; 02571 pD += USB_INTERFACE_ASSOC_DESC_SIZE; 02572 #endif 02573 02574 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02575 pD += USB_INTERFACE_DESC_SIZE + CDC_HEADER_SIZE + CDC_CALL_MANAGEMENT_SIZE + CDC_ABSTRACT_CONTROL_MANAGEMENT_SIZE; 02576 ((UNION_FUNCTIONAL_DESCRIPTOR*)pD)->bMasterInterface = if_num; 02577 ((UNION_FUNCTIONAL_DESCRIPTOR*)pD)->bSlaveInterface0 = if_num + 1; 02578 pD += CDC_UNION_SIZE + USB_ENDPOINT_DESC_SIZE; 02579 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num +1 ; 02580 #endif //(USBD_HS_ENABLE == 1) 02581 return sizeof(cdc_desc); 02582 } 02583 02584 static U16 msc_desc_fill(U8 * config_desc, U8 * config_desc_hs, U8 if_num) { 02585 U8 * pD = 0; 02586 const U8 msc_desc[] = { 02587 MSC_DESC 02588 MSC_EP 02589 }; 02590 pD = config_desc; 02591 memcpy(pD, msc_desc, sizeof(msc_desc)); 02592 02593 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02594 02595 #if (USBD_HS_ENABLE == 1) 02596 const U8 msc_desc_hs[] = { 02597 MSC_DESC 02598 MSC_EP_HS 02599 }; 02600 pD = config_desc_hs; 02601 memcpy(pD, msc_desc_hs, sizeof(msc_desc_hs)); 02602 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02603 #endif 02604 02605 return sizeof(msc_desc); 02606 } 02607 02608 #if (USBD_WEBUSB_ENABLE) 02609 static U16 webusb_desc_fill(U8 * config_desc, U8 * config_desc_hs, U8 if_num) { 02610 U8 * pD = 0; 02611 const U8 webusb_desc[] = { 02612 WEBUSB_DESC 02613 }; 02614 pD = config_desc; 02615 memcpy(pD, webusb_desc, sizeof(webusb_desc)); 02616 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02617 02618 #if (USBD_HS_ENABLE == 1) 02619 pD = config_desc_hs; 02620 memcpy(pD, webusb_desc, sizeof(webusb_desc)); 02621 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02622 #endif 02623 02624 #if (USBD_WINUSB_ENABLE) 02625 pD = USBD_WinUSBDescriptorSetDescriptor + WINUSB_DESCRIPTOR_SET_HEADER_SIZE; 02626 ((WINUSB_FUNCTION_SUBSET_HEADER*)pD)->bFirstInterface = if_num; 02627 #else 02628 #error "WEBUSB requires WINUSB!" 02629 #endif 02630 02631 return sizeof(webusb_desc); 02632 } 02633 #endif 02634 02635 #if (USBD_BULK_ENABLE) 02636 static U16 bulk_desc_fill(U8 * config_desc, U8 * config_desc_hs, U8 if_num) { 02637 U8 * pD = 0; 02638 const U8 bulk_desc[] = { 02639 BULK_DESC 02640 BULK_EP 02641 }; 02642 pD = config_desc; 02643 memcpy(pD, bulk_desc, sizeof(bulk_desc)); 02644 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02645 #if (USBD_HS_ENABLE == 1) 02646 const U8 bulk_desc_hs[] = { 02647 BULK_DESC 02648 BULK_EP_HS 02649 }; 02650 pD = config_desc_hs; 02651 memcpy(pD, bulk_desc_hs, sizeof(bulk_desc_hs)); 02652 ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber = if_num; 02653 #endif 02654 02655 #if (USBD_WINUSB_ENABLE) 02656 pD = USBD_WinUSBDescriptorSetDescriptor + WINUSB_DESCRIPTOR_SET_HEADER_SIZE; 02657 #if (USBD_WEBUSB_ENABLE) 02658 pD += WINUSB_FUNCTION_SUBSET_HEADER_SIZE + WINUSB_FEATURE_COMPATIBLE_ID_SIZE + DEVICE_INTERFACE_GUIDS_FEATURE_LEN; 02659 #endif 02660 ((WINUSB_FUNCTION_SUBSET_HEADER*)pD)->bFirstInterface = if_num; 02661 #else 02662 #error "BULK interfaces requires WINUSB!" 02663 #endif 02664 02665 return sizeof(bulk_desc); 02666 } 02667 #endif 02668 02669 void usbd_class_init(void) 02670 { 02671 U8 if_num = 0; 02672 U16 desc_ptr = 0; 02673 02674 desc_ptr += start_desc_fill(&USBD_ConfigDescriptor[desc_ptr], &USBD_ConfigDescriptor_HS[desc_ptr], if_num); 02675 02676 #if (USBD_ADC_ENABLE) 02677 usbd_adc_init(); 02678 #endif 02679 02680 02681 #if (USBD_MSC_ENABLE) 02682 02683 #if !(defined(DAPLINK_BL)) && defined(DRAG_N_DROP_SUPPORT) 02684 //change descriptors here 02685 if (config_ram_get_disable_msd() == 1 || flash_algo_valid()==0 ){ 02686 usbd_if_num -= USBD_MSC_ENABLE; 02687 USB_CONFIGURATION_DESCRIPTOR * usb_conf_desc = (USB_CONFIGURATION_DESCRIPTOR *)USBD_ConfigDescriptor; 02688 usb_conf_desc->bNumInterfaces = usbd_if_num; 02689 U16 usb_wtotal_len = USBD_WTOTALLENGTH_MAX - (USBD_MSC_DESC_LEN * USBD_MSC_ENABLE); 02690 usb_conf_desc->wTotalLength = usb_wtotal_len; 02691 USBD_ConfigDescriptor[usb_wtotal_len] = 0; 02692 USBD_HID_DescriptorOffset -= USBD_MSC_ENABLE * USBD_MSC_DESC_LEN; 02693 #if (USBD_HS_ENABLE == 1) 02694 usb_conf_desc = (USB_CONFIGURATION_DESCRIPTOR *)USBD_ConfigDescriptor_HS; 02695 usb_conf_desc->bNumInterfaces = usbd_if_num; 02696 usb_conf_desc->wTotalLength = usb_wtotal_len; 02697 USBD_ConfigDescriptor_HS[usb_wtotal_len] = 0; 02698 #endif 02699 } else 02700 #endif 02701 { 02702 usbd_msc_if_num = if_num++; 02703 desc_ptr += msc_desc_fill(&USBD_ConfigDescriptor[desc_ptr], &USBD_ConfigDescriptor_HS[desc_ptr], usbd_msc_if_num); 02704 usbd_msc_init(); 02705 02706 } 02707 #endif //#if (USBD_MSC_ENABLE) 02708 02709 #if (USBD_CDC_ACM_ENABLE) 02710 usbd_cdc_acm_cif_num = if_num++; 02711 usbd_cdc_acm_dif_num = if_num++; 02712 desc_ptr += acm_cdc_desc_fill(&USBD_ConfigDescriptor[desc_ptr], &USBD_ConfigDescriptor_HS[desc_ptr], usbd_cdc_acm_cif_num); 02713 USBD_CDC_ACM_Initialize(); 02714 #endif 02715 02716 #if (USBD_HID_ENABLE) 02717 usbd_hid_if_num = if_num++; 02718 desc_ptr += hid_desc_fill(&USBD_ConfigDescriptor[desc_ptr], &USBD_ConfigDescriptor_HS[desc_ptr], usbd_hid_if_num); 02719 usbd_hid_init(); 02720 #endif 02721 02722 #if (USBD_WEBUSB_ENABLE) 02723 usbd_webusb_if_num = if_num++; 02724 desc_ptr += webusb_desc_fill(&USBD_ConfigDescriptor[desc_ptr], &USBD_ConfigDescriptor_HS[desc_ptr], usbd_webusb_if_num); 02725 #endif 02726 02727 #if (USBD_BULK_ENABLE) 02728 usbd_bulk_if_num = if_num++; 02729 desc_ptr += bulk_desc_fill(&USBD_ConfigDescriptor[desc_ptr], &USBD_ConfigDescriptor_HS[desc_ptr], usbd_bulk_if_num); 02730 usbd_bulk_init(); 02731 #endif 02732 02733 #if (USBD_CLS_ENABLE) 02734 usbd_cls_init(); 02735 #endif 02736 02737 } 02738 02739 #endif //USBD_ENABLE 02740 02741 #endif /* __USB_CONFIG__ */
Generated on Tue Jul 12 2022 15:37:26 by
1.7.2