📄 usbh_usbd_api.h
字号:
/*****************************************
* Macro function
*****************************************/
#define USBH_USBD_SetPipeType(pipetype, epaddr, devaddr, dir) \
((ULONG)((pipetype & 0x03) << 30))|((ULONG)((epaddr & 0xff) << 15))|((ULONG)((devaddr & 0xff) << 8)) | ((ULONG)(dir & 0xff))
#define USBH_USBD_SetINToggle(dev, ep, in) \
((dev)->toggle[0] = ((dev)->toggle[0] & ~(1 << (ep))) | ((in) << (ep)));
#define USBH_USBD_SetOUTToggle(dev, ep, in) \
((dev)->toggle[1] = ((dev)->toggle[1] & ~(1 << (ep))) | ((in) << (ep)));
/*****************************************
* Call back function definition
*****************************************/
typedef void ( *USBH_USBD_CALLBACK )( unsigned long message, unsigned long param0, void *pParam );
/*****************************************
* Enumeration type definition
*****************************************/
typedef enum tagUSBH_USBD_MODULE {
MSG_USBH_USBD_INIT = 0x0001,
MSG_USBH_USBD_CLEANUP,
MSG_USBH_USBD_SUBMITURB,
MSG_USBH_USBD_UNLINKURB,
MSG_USBH_USBD_ENTRYCLASS,
MSG_USBH_USBD_SETCONFIGURATION,
MSG_USBH_USBD_RESET,
MSG_USBH_USBD_PORTSUSPEND,
MSG_USBH_USBD_PORTRESUME
} USBH_USBD_MODULE;
/* URB status */
typedef enum tagUSBH_USBD_URBSTS{
URBSTS_SUCCESS,
URBSTS_OVERFLOW,
URBSTS_REMOTEIO,
URBSTS_PIPE,
URBSTS_INPROGRESS,
URBSTS_PROTO,
URBSTS_CONNRESET,
URBSTS_NOENT
}USBH_USBD_URBSTS;
typedef enum tagUSBH_USBD_ENUMDEVSTATE{
USBH_USBD_USB_STATE_NOTATTACHED, /* Not attached */
USBH_USBD_USB_STATE_POWERED, /* Power on */
USBH_USBD_USB_STATE_DEFAULT, /* after USB reset */
USBH_USBD_USB_STATE_ADDRESSED, /* After Set Address request */
USBH_USBD_USB_STATE_CONFIGURED, /* After Set Configuration request ( besides 0 ) */
USBH_USBD_USB_STATE_SUSPENDED /* USB on suspension */
}USBH_USBD_ENUMDEVSTATE;
typedef enum tagUSBH_USBD_ENUMDEVSPEED{
USBH_USBD_USB_SPEED_UNKNOWN, /* Not connect */
USBH_USBD_USB_SPEED_LOW, /* Low-Speed */
USBH_USBD_USB_SPEED_FULL, /* Full-Speed */
USBH_USBD_USB_SPEED_HIGH /* High-Speed */
}USBH_USBD_ENUMDEVSPEED;
typedef enum tagUSBH_USBD_ENUMERATESTATE{
USBH_USBD_ENUMERATE_RGETDESCRIPTER, /* GetDescripter */
USBH_USBD_ENUMERATE_RSETADDRESS, /* SetAddress 0 ( default address ) -- 127 */
USBH_USBD_ENUMERATE_RGETDESCRIPER, /* GetDescriptor */
USBH_USBD_ENUMERATE_RINTTERRUPTIN, /* InterruptIN */
USBH_USBD_ENUMERATE_RPORTPOWER, /* SetPortFeature(PORT_POWER) */
USBH_USBD_ENUMERATE_GETDESCRIPTER, /* GetDescripter */
USBH_USBD_ENUMERATE_SETADDRESS, /* SetAddress 0 ( default address ) -- 127 */
USBH_USBD_ENUMERATE_GETDESCRIPER /* GetDescriptor */
}USBH_USBD_ENUMERATESTATE;
/*****************************************
* Structure definition
*****************************************/
typedef struct tagUSBH_USBD_EPTBL {
USB_DESC_ENDPOINT EndP; /* Endpoint Descriptor */
struct tagUSBH_USBD_EPTBL *Next; /* Pointer to next list */
} USBH_USBD_EPTBL;
typedef struct tagUSBH_USBD_IFTBL{
USB_DESC_INTERFACE InterF; /* Interface Descriptor */
USBH_USBD_EPTBL *EPTbl; /* Endpoint Descriptor structure */
struct tagUSBH_USBD_IFTBL *Next; /* Pointer to next list */
} USBH_USBD_IFTBL;
typedef struct tagUSBH_USBD_DEVCTL{
USB_DESC_DEVICE Dev; /* DEVICE Descriptor */
USB_DESC_CONFIG Config; /* Configuration Descriptor */
USB_DESC_HUB Hub; /* Hub Descriptor */
USBH_USBD_IFTBL *InterTbl; /* Interface Descriptor structure */
}USBH_USBD_DEVCTL;
typedef struct tagUSBH_USBD_USBDEV{
void *pHCPriv; /* Private area for Host Controller use ( out ) */
/* Assign memory area for management use of USB device here */
void *pConfigDesc; /* Pointer to Configuration Descriptor ( in ) */
USBH_USBD_ENUMDEVSTATE eState; /* USB device state ( Address, Configure etc. ) ( in ) */
USBH_USBD_ENUMDEVSPEED eSpeed; /* USB device transfer speed ( LS, FS, HS ) ( in ) */
struct tagUSBH_USBD_USBDEV *psParent; /* If USB device is not root hub, it is the */
/* pointer to USB device information structure of parent hub( in ) */
unsigned short toggle[2]; /* Toggle state of endpoint. Bit position become endpoint number as it is ( in/out ) */
/* (toggle[0]: IN, toggle[1]: OUT) */
unsigned short epMaxPacketIn[16]; /* MaxPacketSize of endpoint in direction of IN ( in ) */
unsigned short epMaxPacketOut[16]; /* MaxPacketSize of endpoint in direction of OUT ( in ) */
unsigned char devNum; /* USB device address */
unsigned char port; /* Port number of parent which is connected with ( in ) */
}USBH_USBD_USBDEV;
typedef struct tagUSBH_USBD_DEVLIST_HEAD{
struct tagUSBH_USBD_DEVLIST_HEAD *psNext; /* Pointer to next list */
struct tagUSBH_USBD_DEVLIST_HEAD *psPrev; /* Pointer to front list */
USBH_USBD_USBDEV sUsbDev;
USBH_USBD_DEVCTL sUsbDes;
UCHAR savedEnumState;
UCHAR statusChange; /* Status change data */
UCHAR ClassID; /* Object class ID */
UCHAR hubStat; /* Status change bitmap of hub */
UCHAR statRESET; /* Bit map of the RESET completion port */
}USBH_USBD_DEVLIST_HEAD;
typedef struct tagUSBH_USBD_DEVINFO {
UCHAR DevCount; /* Number of connect devices */
USBH_USBD_DEVLIST_HEAD *DevInfo; /* Device information table */
} USBH_USBD_DEVINFO;
typedef struct tagUSBH_USBD_LIST_HEAD{
struct tagUSBH_USBD_LIST_HEAD *psNext; /* Pointer to next list */
struct tagUSBH_USBD_LIST_HEAD *psPrev; /* Pointer to front list */
}USBH_USBD_LIST_HEAD;
typedef struct tagUSBH_USBD_USB_ISO_PACKET_DESCRIPTOR{
unsigned short offset; /* (io)Offset from pTransBuf */
unsigned short length; /* (in)The length in bytes that transfers it */
unsigned short actual_length; /* (out)The length in bytes that transferred it actually */
unsigned short status; /* (out)Status for each packet */
}USBH_USBD_USB_ISO_PACKET_DESCRIPTOR;
typedef struct tagUSBH_USBD_URB{
USBH_USBD_LIST_HEAD slist; /* Header for list structure use ( out ) */
void *pHCPriv; /* Private area for Host Controller use ( out ) */
struct tagUSBH_USBD_URB *psNext; /* Pointer to next URB structure ( in ) */
USBH_USBD_USBDEV *psDev; /* Pointer to USB device information structure ( in ) */
unsigned long pipe; /* Pipe information ( in ) */
/* bit31-30: Transfer type */
/* PIPE_ISOCHRONOUS */
/* PIPE_INTERRUPT */
/* PIPE_CONTROL */
/* PIPE_BULK */
/* bit29-24:Reserved */
/* bit23-16: EP address ( Direction + EP number ) */
/* bit15-8: USB device address */
/* bit7-0: Direction */
/* DIR_IN */
/* DIR_OUT */
unsigned short status; /* URB status ( out ) */
/* URBSTS_SUCCESS */
/* URB finish normally */
/* URBSTS_OVERFLOW */
/* Overflow */
/* URBSTS_REMOTEIO */
/* In case of URB_SHORT_NOT_OK is specified in transfer flag, */
/* receive data shorter than length of transfer buffer */
/* URBSTS_PIPE */
/* Error on pipe ( CRC error, timeout, etc. ) */
/* URBSTS_INPROGRESS */
/* On executing */
/* URBSTS_PROTO */
/* Protocol error ( STALL, Complete-split miss ) */
unsigned short transFlag; /* Transfer flag ( in ) */
/* URB_SHORT_NOT_OK */
/* Judge short packet receiving as error */
/* URB_ISO_ASAP */
/* Specify start frame in isochronous transfer */
/* URB_ASYNC_UNLINK */
/* Cancel URB with asynchronous */
/* URB_ZERO_PACKET */
/* The last in transfer of OUT direction must be short packet */
/* ( Including zero-length packet ) */
/* URB_REQ_DMA */
/* Request DMA transfer */
/* URB_STRG_MODE */
/* Support bulk only transport function of mass storage class */
/* URB_DIRECT_COPY */
/* Direct copy function between USB and IDE */
unsigned char *pSetupPacket; /* Pointer of SETUP packet data used in Control transfer ( in ) */
void *pTransBuf; /* Pointer of transfer buffer ( in ) */
unsigned long transBufLength; /* Byte length of transfer buffer ( in ) */
unsigned long actualLength; /* Byte length being transfered actually ( out ) */
unsigned short errorCount; /* Number of packet errors ( out ). It is set only in isochronous transfer */
unsigned short interval; /* Interval time ( in ). Valid in case of periodic transfer ( isochronous and interrupt ) */
unsigned short startFrame; /* Frame Number which begin to transfer is set ( io ) */
/* In case of URB_ISO_ASAP is specified in transfer flag on Isochronous transfer */
/* Set Frame Number to begin transfer */
void (*pfnComplete)(struct tagUSBH_USBD_URB *urb);
/* Pointer of call back function which is called when URB completed ( in ) */
}USBH_USBD_URB;
/* Parameters between USB task and other tasks */
typedef struct _MSG_USBH_USBD{
unsigned char interfaceno;
unsigned char classno;
unsigned char classid;
unsigned char devaddr;
unsigned char *psClassid;
USBH_USBD_URB *psURB;
USBH_USBD_CALLBACK pfnCallback;
USBH_USBD_CALLBACK pfnEventCallback;
USBH_USBD_DEVLIST_HEAD *DevInfo;
}MSG_USBH_USBD;
/*****************************************
* Function prototype declaration
*****************************************/
long USBH_USBD_Init( USBH_USBD_CALLBACK pfnCallback ) ;
long USBH_USBD_Cleanup( void ) ;
long USBH_USBD_SubmitURB( USBH_USBD_URB *psURB, unsigned char classid, USBH_USBD_CALLBACK pfnCallback ) ;
long USBH_USBD_UnlinkURB( USBH_USBD_URB *psURB, unsigned char classid, USBH_USBD_CALLBACK pfnCallback ) ;
long USBH_USBD_SetConfiguration( unsigned char classid, unsigned char devaddr, USBH_USBD_CALLBACK pfnCallback ) ;
long USBH_USBD_EntryClass( unsigned char classno, unsigned char *classid, USBH_USBD_CALLBACK pfnCallback, USBH_USBD_CALLBACK pfnEventCallback ) ;
long USBH_USBD_Reset( unsigned char classid, unsigned char devaddr, USBH_USBD_CALLBACK pfnCallback ) ;
long USBH_USBD_PortSuspend( unsigned char classid, unsigned char devaddr, USBH_USBD_CALLBACK pfnCallback ) ;
long USBH_USBD_PortResume( unsigned char classid, unsigned char devaddr, USBH_USBD_CALLBACK pfnCallback ) ;
#ifdef __cplusplus
}
#endif /* cplusplus */
#endif /* USBH_USBD_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -