⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbdihost.h

📁 SAMSUNG 5009的源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* 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 + -