Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 #ifndef _USB_H_
00086 #define _USB_H_
00087
00088 #ifdef __cplusplus
00089 extern "C"
00090 {
00091 #endif
00092
00093
00094
00095
00096 #define USB_RETURN_DATA_LENGTH 8
00097 #define SIZEOF_DEVICE_REQUEST 0x08
00098
00099
00100
00101 #define USB_REQ_TYPE_OUTPUT 0x00 // 0 = Host sending data to device
00102 #define USB_REQ_TYPE_INPUT 0x80 // 1 = Device sending data to host
00103
00104
00105 #define USB_REQ_TYPE_MASK 0x60 // Mask value for bits 6-5
00106 #define USB_REQ_TYPE_STANDARD 0x00 // 00 = Standard USB request
00107 #define USB_REQ_TYPE_CLASS 0x20 // 01 = Class specific
00108 #define USB_REQ_TYPE_VENDOR 0x40 // 10 = Vendor specific
00109
00110
00111 #define USB_REQ_TYPE_RECIP_MASK 0x1F // Mask value for bits 4-0
00112 #define USB_REQ_TYPE_DEVICE 0x00 // 00000 = Device
00113 #define USB_REQ_TYPE_INTERFACE 0x01 // 00001 = Interface
00114 #define USB_REQ_TYPE_ENDPOINT 0x02 // 00010 = Endpoint
00115 #define USB_REQ_TYPE_OTHER 0x03 // 00011 = Other
00116
00117
00118
00119 #define USB_REQ_GET_STATUS 0
00120 #define USB_REQ_CLEAR_FEATURE 1
00121 #define USB_REQ_SET_FEATURE 3
00122 #define USB_REQ_SET_ADDRESS 5
00123 #define USB_REQ_GET_DESCRIPTOR 6
00124 #define USB_REQ_SET_DESCRIPTOR 7
00125 #define USB_REQ_GET_CONFIGURATION 8
00126 #define USB_REQ_SET_CONFIGURATION 9
00127 #define USB_REQ_GET_INTERFACE 10
00128 #define USB_REQ_SET_INTERFACE 11
00129 #define USB_REQ_SYNCH_FRAME 12
00130
00131
00132 #define USB_CDC_GET_LINE_CODING 0x21
00133 #define USB_CDC_SET_LINE_CODING 0x20
00134 #define USB_CDC_SET_CONTROL_LINE_STATE 0x22
00135
00136
00137 #define USB_HID_REQ 0x81
00138 #define USB_REQ_GET_REPORT 0x01
00139 #define USB_REQ_GET_IDLE 0x02
00140 #define USB_REQ_SET_REPORT 0x09
00141 #define USB_REQ_SET_IDLE 0x0A
00142 #define USB_REQ_SET_PROTOCOL 0x0B
00143 #define USB_REQ_GET_PROTOCOL 0x03
00144
00145
00146 #define USB_REQ_HID_INPUT 0x01
00147 #define USB_REQ_HID_OUTPUT 0x02
00148 #define USB_REQ_HID_FEATURE 0x03
00149
00150
00151
00152 #define DESC_TYPE_DEVICE 1 // Device Descriptor (Type 1)
00153 #define DESC_TYPE_CONFIG 2 // Configuration Descriptor (Type 2)
00154 #define DESC_TYPE_STRING 3 // String Descriptor (Type 3)
00155 #define DESC_TYPE_INTERFACE 4 // Interface Descriptor (Type 4)
00156 #define DESC_TYPE_ENDPOINT 5 // Endpoint Descriptor (Type 5)
00157 #define DESC_TYPE_DEVICE_QUALIFIER 6 // Endpoint Descriptor (Type 6)
00158 #define DESC_TYPE_HUB 0x29 // Hub Descriptor (Type 6)
00159 #define DESC_TYPE_HID 0x21 // HID Descriptor
00160 #define DESC_TYPE_REPORT 0x22 // Report Descriptor
00161 #define DESC_TYPE_PHYSICAL 0x23 // Physical Descriptor
00162
00163
00164 #define FEATURE_REMOTE_WAKEUP 1 // Remote wakeup (Type 1)
00165 #define FEATURE_ENDPOINT_STALL 0 // Endpoint stall (Type 0)
00166
00167
00168 #define DEVICE_STATUS_REMOTE_WAKEUP 0x02
00169 #define DEVICE_STATUS_SELF_POWER 0x01
00170
00171
00172 #define MAX_DESC_SIZE 256
00173
00174
00175 #define SIZEOF_DEVICE_DESCRIPTOR 0x12
00176 #define OFFSET_DEVICE_DESCRIPTOR_VID_L 0x08
00177 #define OFFSET_DEVICE_DESCRIPTOR_VID_H 0x09
00178 #define OFFSET_DEVICE_DESCRIPTOR_PID_L 0x0A
00179 #define OFFSET_DEVICE_DESCRIPTOR_PID_H 0x0B
00180 #define OFFSET_CONFIG_DESCRIPTOR_POWER 0x07
00181 #define OFFSET_CONFIG_DESCRIPTOR_CURT 0x08
00182
00183
00184 #define SIZEOF_CONFIG_DESCRIPTOR 0x09
00185
00186
00187
00188
00189
00190 #define CFG_DESC_ATTR_SELF_POWERED 0x40 // Bit 6: If set, device is self powered
00191 #define CFG_DESC_ATTR_BUS_POWERED 0x80 // Bit 7: If set, device is bus powered
00192 #define CFG_DESC_ATTR_REMOTE_WAKE 0x20 // Bit 5: If set, device supports remote wakeup
00193
00194
00195 #define SIZEOF_INTERFACE_DESCRIPTOR 0x09
00196
00197
00198 #define SIZEOF_ENDPOINT_DESCRIPTOR 0x07
00199
00200
00201 #define EP_DESC_ADDR_EP_NUM 0x0F // Bit 3-0: Endpoint number
00202 #define EP_DESC_ADDR_DIR_IN 0x80 // Bit 7: Direction of endpoint, 1/0 = In/Out
00203
00204
00205 #define EP_DESC_ATTR_TYPE_MASK 0x03 // Mask value for bits 1-0
00206 #define EP_DESC_ATTR_TYPE_CONT 0x00 // Bit 1-0: 00 = Endpoint does control transfers
00207 #define EP_DESC_ATTR_TYPE_ISOC 0x01 // Bit 1-0: 01 = Endpoint does isochronous transfers
00208 #define EP_DESC_ATTR_TYPE_BULK 0x02 // Bit 1-0: 10 = Endpoint does bulk transfers
00209 #define EP_DESC_ATTR_TYPE_INT 0x03 // Bit 1-0: 11 = Endpoint does interrupt transfers
00210
00211
00212 extern __no_init tDEVICE_REQUEST __data16 tSetupPacket;
00213 extern __no_init BYTE __data16 abIEP0Buffer[];
00214 extern __no_init BYTE __data16 abOEP0Buffer[];
00215 extern __no_init BYTE __data16 pbXBufferAddressEp1[];
00216 extern __no_init BYTE __data16 pbYBufferAddressEp1[];
00217 extern __no_init BYTE __data16 pbXBufferAddressEp81[];
00218 extern __no_init BYTE __data16 pbYBufferAddressEp81[];
00219 extern __no_init BYTE __data16 pbXBufferAddressEp2[];
00220 extern __no_init BYTE __data16 pbYBufferAddressEp2[];
00221 extern __no_init BYTE __data16 pbXBufferAddressEp82[];
00222 extern __no_init BYTE __data16 pbYBufferAddressEp82[];
00223
00224 extern WORD wBytesRemainingOnIEP0;
00225 extern WORD wBytesRemainingOnOEP0;
00226 extern BYTE abUsbRequestReturnData[];
00227 extern BYTE abUsbRequestIncomingData[];
00228 extern BYTE bEnumerationStatus;
00229 extern BYTE bFunctionSuspended;
00230
00231
00232 #define kUSB_succeed 0x00
00233 #define kUSB_generalError 0x01
00234 #define kUSB_notEnabled 0x02
00235
00236
00237
00238 #define kUSB_vbusPresent 0x01
00239 #define kUSB_busActive 0x02 // frame sync packets are being received
00240 #define kUSB_ConnectNoVBUS 0x04
00241 #define kUSB_suspended 0x08
00242 #define kUSB_NotSuspended 0x10
00243 #define kUSB_Enumerated 0x20
00244 #define kUSB_purHigh 0x40
00245
00246
00247 #define kUSB_clockFaultEvent 0x0001
00248 #define kUSB_VbusOnEvent 0x0002
00249 #define kUSB_VbusOffEvent 0x0004
00250 #define kUSB_UsbResetEvent 0x0008
00251 #define kUSB_UsbSuspendEvent 0x0010
00252 #define kUSB_UsbResumeEvent 0x0020
00253 #define kUSB_dataReceivedEvent 0x0040
00254 #define kUSB_sendCompletedEvent 0x0080
00255 #define kUSB_receiveCompletedEvent 0x0100
00256
00257
00258 #define ST_USB_DISCONNECTED 0x80
00259 #define ST_USB_CONNECTED_NO_ENUM 0x81
00260 #define ST_ENUM_IN_PROGRESS 0x82
00261 #define ST_ENUM_ACTIVE 0x83
00262 #define ST_ENUM_SUSPENDED 0x84
00263
00264 #define ST_ERROR 0x86
00265 #define ST_NOENUM_SUSPENDED 0x87
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00280 BYTE USB_init(VOID);
00281
00285 BYTE USB_enable();
00286
00290 BYTE USB_disable(VOID);
00291
00292
00293
00294
00295 BYTE USB_setEnabledEvents(WORD events);
00296
00297
00298
00299
00300 WORD USB_getEnabledEvents();
00301
00302
00303
00304
00305 BYTE USB_connect();
00306
00307
00308
00309
00310 BYTE USB_disconnect();
00311
00315 BYTE USB_reset();
00316
00320 BYTE USB_suspend(VOID);
00321
00325 BYTE USB_resume(VOID);
00326
00327
00328
00329
00330
00331
00332
00333 BYTE USB_forceRemoteWakeup();
00334
00335
00336
00337
00338 BYTE USB_connectionInfo();
00339
00340
00341
00342
00343 BYTE USB_connectionState();
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354 BYTE USB_handleClockEvent();
00355
00356
00357
00358
00359
00360 BYTE USB_handleVbusOnEvent();
00361
00362
00363
00364
00365
00366 BYTE USB_handleVbusOffEvent();
00367
00368
00369
00370
00371
00372 BYTE USB_handleResetEvent();
00373
00374
00375
00376
00377
00378 BYTE USB_handleSuspendEvent();
00379
00380
00381
00382
00383
00384 BYTE USB_handleResumeEvent();
00385
00386
00387
00388
00389
00390
00391 BYTE USB_handleEnumCompleteEvent();
00392
00393
00394
00395
00396
00397
00401 VOID usbStallEndpoint0(VOID);
00402
00406 VOID usbClearOEP0ByteCount(VOID);
00407
00411 VOID usbStallOEP0(VOID);
00412
00417 VOID usbSendNextPacketOnIEP0(VOID);
00418
00424 VOID usbSendDataPacketOnEP0(PBYTE pbBuffer);
00425
00430 VOID usbReceiveNextPacketOnOEP0(VOID);
00431
00437 VOID usbReceiveDataPacketOnEP0(PBYTE pbBuffer);
00438
00442 VOID usbSendZeroLengthPacketOnIEP0(VOID);
00443
00449 BYTE usbDecodeAndProcessUsbRequest(VOID);
00450
00451
00452 #define ENUMERATION_COMPLETE 0x01
00453
00454
00455
00456
00457 #ifdef __cplusplus
00458 }
00459 #endif
00460 #endif
00461