📄 usbdihost.h
字号:
/* usbdiHost.h - USB Driver Interface host header */
/* Copyright 2004 TAEBAEK Soft Corp. */
/*
modification history
--------------------
02e,28nov05,jmLee version control sync.
02d,01aug05,jmLee support transfer large block(above 64K).
02c,25jul05,jmLee version control sync.
01b,18jul05,jmLee support BI-DIRECTIONAL EP(SanDisk Cruzer Thumb Drive).
01a,26jul04,jmLee created.
*/
#ifndef __INCusbdiHosth
#define __INCusbdiHosth
#ifdef __cplusplus
extern "C" {
#endif
typedef long USBD_STATUS;
/* USBD Error Code Definitions */
#define USBDS_SUCCESS ((USBD_STATUS)0x00000000L)
#define USBDS_PENDING ((USBD_STATUS)0x40000000L)
#define USBDS_ERROR ((USBD_STATUS)0x80000000L)
#define USBDS_HALTED ((USBD_STATUS)0xC0000000L)
#define USBD_SUCCESS(Status) (((USBD_STATUS)(Status) < 0))
#define USBD_PENDING(Status) (((USBD_STATUS)(Status) & USBDS_PENDING) == USBDS_PENDING)
#define USBD_ERROR(Status) (((USBD_STATUS)(Status) & USBDS_ERROR) == USBDS_ERROR)
#define USBD_HALTED(Status) (((USBD_STATUS)(Status) & USBDS_HALTED) == USBDS_HALTED)
/* Status Codes from the TD */
#define USBDS_NOERROR ((USBD_STATUS)0x00000000L)
#define USBDS_CRC ((USBD_STATUS)0xC0000001L)
#define USBDS_BTSTUFF ((USBD_STATUS)0xC0000002L)
#define USBDS_DATA_TOGGLE_MISMATCH ((USBD_STATUS)0xC0000003L)
#define USBDS_STALL_PID ((USBD_STATUS)0xC0000004L)
#define USBDS_DEV_NOT_RESPONDING ((USBD_STATUS)0xC0000005L)
#define USBDS_PID_CHECK_FAILURE ((USBD_STATUS)0xC0000006L)
#define USBDS_UNEXPECTED_PID ((USBD_STATUS)0xC0000007L)
#define USBDS_DATA_OVERRUN ((USBD_STATUS)0xC0000008L)
#define USBDS_DATA_UNDERRUN ((USBD_STATUS)0xC0000009L)
#define USBDS_BUFFER_OVERRUN ((USBD_STATUS)0xC000000CL)
#define USBDS_BUFFER_UNDERRUN ((USBD_STATUS)0xC000000DL)
#define USBDS_NOT_ACCESSED ((USBD_STATUS)0xC000000FL)
/* Status Codes from the HCD */
#define USBDS_FIFO ((USBD_STATUS)0xC0000010L)
#define USBDS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030L)
#define USBDS_NO_MEMORY ((USBD_STATUS)0x80000100L)
#define USBDS_INVALID_URB_REQUEST ((USBD_STATUS)0x80000200L)
#define USBDS_INVALID_PARAMETER ((USBD_STATUS)0x80000300L)
#define USBDS_ERROR_BUSY ((USBD_STATUS)0x80000400L)
#define USBDS_REQUEST_FAILED ((USBD_STATUS)0x80000500L)
#define USBDS_INVALID_PIPE_HANDLE ((USBD_STATUS)0x80000600L)
#define USBDS_NO_BANDWIDTH ((USBD_STATUS)0x80000700L)
#define USBDS_INTERNAL_HC_ERROR ((USBD_STATUS)0x80000800L)
#define USBDS_ERROR_SHORT_TRANSFER ((USBD_STATUS)0x80000900L)
#define USBDS_BAD_START_FRAME ((USBD_STATUS)0xC0000A00L)
#define USBDS_ISOCH_REQUEST_FAILED ((USBD_STATUS)0xC0000B00L)
#define USBDS_CANCELED ((USBD_STATUS)0x00010000L)
#define USBDS_CANCELING ((USBD_STATUS)0x00020000L)
/* Maximum Transfer Size */
#define USBD_MAXIMUM_TRANSFER_SIZE 4096
/* Transfer Flags */
#define USBD_SHORT_TRANSFER_OK 0x0001 /* a short transfer is not an error condition */
#define USBD_START_ISO_TRANSFER_ASAP 0x0002 /* submit the iso transfer on the next frame */
typedef struct _URB *PURB;
typedef struct _USBD_PIPE {
USB_ENDPOINT_DESCRIPTOR epd;
PVOID hpipe;
} USBD_PIPE, *PUSBD_PIPE;
typedef struct _USBD_DEVICE {
UCHAR ctrl; /* controller */
UCHAR hub; /* hub */
UCHAR port; /* port */
UCHAR low; /* low speed */
UCHAR address; /* device address */
UCHAR state; /* device state */
UCHAR reserved[2];
PUSB_DEVICE_DESCRIPTOR pdevd;
PUSB_CONFIGURATION_DESCRIPTOR pcfgd;
PUSB_INTERFACE_DESCRIPTOR pifd;
USBD_PIPE pipes[USB_MAX_ENDPOINT*2+1];
UCHAR buffer[256];
UCHAR descr[32];
/* class specific data. */
PVOID handle;
} USBD_DEVICE, *PUSBD_DEVICE;
#define EP2PIPE(_ep) (((_ep) & USB_ENDPOINT_DIRECTION_IN) ?\
(((_ep) & USB_ENDPOINT_ADDRESS_MASK) + USB_MAX_ENDPOINT):\
((_ep) & USB_ENDPOINT_ADDRESS_MASK))
typedef VOID (*PFURBCOMPLETE)(PURB purb);
typedef struct _URB {
LIST_ENTRY link;
PUSBD_DEVICE pdev;
PVOID hpipe;
PVOID buffer;
UINT length;
UINT flags;
UINT actual;
UINT reserved;
USBD_STATUS status;
PFURBCOMPLETE complete;
LIST_ENTRY queue;
USB_SETUP setup;
} URB;
#define URB_FROM_LIST(_Entry) ((PURB)(_Entry))
typedef int (*PFATTACHHANDLER)(PUSBD_DEVICE pdev);
typedef int (*PFDETACHHANDLER)(PUSBD_DEVICE pdev);
typedef int (*PFIDLEHANDLER)(PUSBD_DEVICE pdev);
typedef struct _USBD_HOST_CHARACTERISTICS {
PFATTACHHANDLER pfAttachHandler;
PFDETACHHANDLER pfDetachHandler;
PFIDLEHANDLER pfIdleHandler;
} USBD_HOST_CHARACTERISTICS, *PUSBD_HOST_CHARACTERISTICS;
/* Useful Macros */
#define USBD_GET_DEVICE_STATUS(_d, _b, _l, _al)\
usbdiHostGetStatus(\
(PUSBD_DEVICE)_d,\
(PVOID)_b,\
USB_REQ_TYPE_DEV_TO_HOST | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,\
0,\
_l,\
_al\
);
#define USBD_GET_INTERFACE_STATUS(_d, _b, _l, _al, _i)\
usbdiHostGetStatus(\
(PUSBD_DEVICE)_d,\
(PVOID)_b,\
USB_REQ_TYPE_DEV_TO_HOST | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,\
_i,\
_l,\
_al\
);
#define USBD_GET_ENDPOINT_STATUS(_d, _b, _l, _al, _e)\
usbdiHostGetStatus(\
(PUSBD_DEVICE)_d,\
(PVOID)_b,\
USB_REQ_TYPE_DEV_TO_HOST | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_ENDPOINT,\
_e,\
_l,\
_al\
);
#define USBD_GET_HUB_STATUS(_d, _b, _l, _al)\
usbdiHostGetStatus(\
(PUSBD_DEVICE)_d,\
(PVOID)_b,\
USB_REQ_TYPE_DEV_TO_HOST | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_DEVICE,\
0,\
_l,\
_al\
);
#define USBD_GET_PORT_STATUS(_d, _b, _l, _al, _p)\
usbdiHostGetStatus(\
(PUSBD_DEVICE)_d,\
(PVOID)_b,\
USB_REQ_TYPE_DEV_TO_HOST | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_OTHER,\
_p,\
_l,\
_al\
);
#define USBD_CLEAR_DEVICE_FEATURE(_d, _f)\
usbdiHostClearFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,\
_f,\
0\
);
#define USBD_CLEAR_INTERFACE_FEATURE(_d, _f, _i)\
usbdiHostClearFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,\
_f,\
_i\
);
#define USBD_CLEAR_ENDPOINT_FEATURE(_d, _f, _e)\
usbdiHostClearFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_ENDPOINT,\
_f,\
_e\
);
#define USBD_CLEAR_HUB_FEATURE(_d, _f)\
usbdiHostClearFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_DEVICE,\
_f,\
0\
);
#define USBD_CLEAR_PORT_FEATURE(_d, _f, _p)\
usbdiHostClearFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_OTHER,\
_f,\
_p\
);
#define USBD_SET_DEVICE_FEATURE(_d, _f)\
usbdiHostSetFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,\
_f,\
0\
);
#define USBD_SET_INTERFACE_FEATURE(_d, _f, _i)\
usbdiHostSetFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,\
_f,\
_i\
);
#define USBD_SET_ENDPOINT_FEATURE(_d, _f, _e)\
usbdiHostSetFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_ENDPOINT,\
_f,\
_e\
);
#define USBD_SET_HUB_FEATURE(_d, _f)\
usbdiHostSetFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_DEVICE,\
_f,\
0\
);
#define USBD_SET_PORT_FEATURE(_d, _f, _p)\
usbdiHostSetFeature(\
(PUSBD_DEVICE)_d,\
USB_REQ_TYPE_HOST_TO_DEV | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_OTHER,\
_f,\
_p\
);
#define USBD_SET_ADDRESS(_d, _a)\
usbdiHostSetAddress(\
(PUSBD_DEVICE)_d,\
_a\
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -