Arrow / Mbed OS DAPLink Reset
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usb_lib.c Source File

usb_lib.c

Go to the documentation of this file.
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__ */