00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "USB_Type.h"
00010 #include "USB_Configuration.h"
00011 #include "USB_Descriptor.h"
00012
00013
00014
00015
00016
00017 #if defined BIG_ENDIAN
00018 #define LE(x) ((((x)&0x00FF)<<8)|(((x)&0xFF00)>>8)) // convert to little endian
00019 #else
00020 #define LE(x) (x) // no conversion
00021 #endif
00022
00023
00024
00025
00026
00027
00028
00029
00030 Tdevice_descriptor code DeviceDesc =
00031 {
00032 sizeof(Tdevice_descriptor),
00033 DSC_TYPE_DEVICE,
00034 LE( VER_USB ),
00035 0x02,
00036 0x00,
00037 0x00,
00038 EP0_PACKET_SIZE,
00039 LE( VID ),
00040 LE( PID ),
00041 LE( DEV_REV ),
00042 0x01,
00043 0x02,
00044 0x03,
00045 0x01,
00046 };
00047
00048
00049
00050
00051 Tconfiguration_desc_set code ConfigDescSet =
00052 {
00053 {
00054 sizeof(Tconfiguration_descriptor),
00055 DSC_TYPE_CONFIG,
00056 LE( sizeof(Tconfiguration_desc_set) ),
00057 DSC_NUM_INTERFACE,
00058 0x01,
00059 0x00,
00060 DSC_CNFG_ATR_BASE
00061 | DSC_CNFG_ATR_BUS_POWERED,
00062 DSC_CNFG_MAXPOWER( 100 ),
00063
00064
00065 },
00066
00067 {
00068 sizeof(Tinterface_descriptor),
00069 DSC_TYPE_INTERFACE,
00070 DSC_INTERFACE_CDC_comm,
00071 0x00,
00072 0x01,
00073 0x02,
00074 0x02,
00075 0x01,
00076 0x00,
00077 },
00078 {
00079 sizeof(Theader_func_descriptor),
00080 DSC_TYPE_CS_INTERFACE,
00081 DSC_SUBTYPE_CS_CDC_HEADER_FUNC,
00082 LE(0x0110),
00083 },
00084 {
00085 sizeof(Tcall_man_func_descriptor),
00086 DSC_TYPE_CS_INTERFACE,
00087 DSC_SUBTYPE_CS_CDC_CALL_MAN,
00088 0x01,
00089 DSC_INTERFACE_CDC_data,
00090 },
00091 {
00092 sizeof(Tabst_control_mana_descriptor),
00093 DSC_TYPE_CS_INTERFACE,
00094 DSC_SUBTYPE_CS_CDC_ABST_CNTRL,
00095 0x06,
00096
00097 },
00098 {
00099 sizeof(Tunion_func_descriptor),
00100 DSC_TYPE_CS_INTERFACE,
00101 DSC_SUBTYPE_CS_CDC_UNION_FUNC,
00102 DSC_INTERFACE_CDC_comm,
00103 DSC_INTERFACE_CDC_data,
00104 },
00105 {
00106 sizeof(Tendpoint_descriptor),
00107 DSC_TYPE_ENDPOINT,
00108 EP1_IN,
00109 DSC_EP_INTERRUPT,
00110 LE( EP1_IN_PACKET_SIZE ),
00111 1
00112 },
00113
00114 {
00115 sizeof(Tinterface_descriptor),
00116 DSC_TYPE_INTERFACE,
00117 DSC_INTERFACE_CDC_data,
00118 0x00,
00119 0x02,
00120 0x0A,
00121 0x00,
00122 0x00,
00123 0x00
00124 },
00125 {
00126 sizeof(Tendpoint_descriptor),
00127 DSC_TYPE_ENDPOINT,
00128 EP2_IN,
00129 DSC_EP_BULK,
00130 LE( EP2_IN_PACKET_SIZE ),
00131 0
00132 },
00133 {
00134 sizeof(Tendpoint_descriptor),
00135 DSC_TYPE_ENDPOINT,
00136 EP2_OUT,
00137 DSC_EP_BULK,
00138 LE( EP2_OUT_PACKET_SIZE ),
00139 0
00140 },
00141
00142 };
00143
00144
00145
00146
00147
00148 #define STR0LEN 4
00149
00150 static BYTE code String0Desc[STR0LEN] =
00151 {
00152 STR0LEN, DSC_TYPE_STRING, 0x09, 0x04
00153 };
00154
00155 #define STR1LEN sizeof("SILICON LABORATORIES INC.")*2
00156
00157 static BYTE code String1Desc[STR1LEN] =
00158 {
00159 STR1LEN, DSC_TYPE_STRING,
00160 'S', 0,
00161 'I', 0,
00162 'L', 0,
00163 'I', 0,
00164 'C', 0,
00165 'O', 0,
00166 'N', 0,
00167 ' ', 0,
00168 'L', 0,
00169 'A', 0,
00170 'B', 0,
00171 'O', 0,
00172 'R', 0,
00173 'A', 0,
00174 'T', 0,
00175 'O', 0,
00176 'R', 0,
00177 'I', 0,
00178 'E', 0,
00179 'S', 0,
00180 ' ', 0,
00181 'I', 0,
00182 'N', 0,
00183 'C', 0,
00184 '.', 0
00185 };
00186
00187 #define STR2LEN sizeof("C8051F320 Development Board")*2
00188
00189 static BYTE code String2Desc[STR2LEN] =
00190 {
00191 STR2LEN, DSC_TYPE_STRING,
00192 'C', 0,
00193 '8', 0,
00194 '0', 0,
00195 '5', 0,
00196 '1', 0,
00197 'F', 0,
00198 '3', 0,
00199 '2', 0,
00200 '0', 0,
00201 ' ', 0,
00202 'D', 0,
00203 'e', 0,
00204 'v', 0,
00205 'e', 0,
00206 'l', 0,
00207 'o', 0,
00208 'p', 0,
00209 'm', 0,
00210 'e', 0,
00211 'n', 0,
00212 't', 0,
00213 ' ', 0,
00214 'B', 0,
00215 'o', 0,
00216 'a', 0,
00217 'r', 0,
00218 'd', 0
00219 };
00220
00221
00222
00223 #define STR3LEN sizeof("0001")*2
00224
00225 static BYTE code String3Desc[STR3LEN] =
00226 {
00227 STR3LEN, DSC_TYPE_STRING,
00228 '0', 0,
00229 '0', 0,
00230 '0', 0,
00231 '1', 0
00232 };
00233
00234 BYTE code * code StringDescTable[] =
00235 {
00236 String0Desc,
00237 String1Desc,
00238 String2Desc,
00239 String3Desc
00240 };
00241
00242 BYTE code StringDescNum = sizeof( StringDescTable ) / sizeof( StringDescTable[0] );
00243
00244
00245
00246