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

📄 usb.h

📁 一个USB主机核的驱动程序
💻 H
字号:
/****************************************************************
*                      MT View Silicon Tech. Inc.
*
*    Copyright 2007, MT View Silicon Tech. Inc., ShangHai, China
*                    All rights reserved.
*
*
* Filename:      	usb.h
*
* Programmer:    	Grey
*
* Created: 	 		01/xx/2008
*
* Description: 		usb driver head file
*					
*              
*****************************************************************/

#ifndef	__USB_H__
#define	__USB_H__

#include "hcd.h"

/* define descriptor source */
#define	MAX_USB_BUS_NUM				1		/* support max 1 usb bus */
#define	MAX_USB_DEV_NUM				1		/* support max 1 device, not include root hub */
#define	MAX_DEV_CONFIG_NUM			2		/* support max 2 config for each device */
#define	MAX_CONFIG_INTERFACE_NUM	2		/* support max 2 interface for each configuration */
#define	MAX_INTERFACE_ENDPOINT_NUM	4		/* support max 4 endpoint for each interface */

#define	TOTAL_USB_BUS_NUM			(MAX_USB_BUS_NUM)
#define	TOTAL_USB_DEV_NUM			(TOTAL_USB_BUS_NUM * MAX_USB_DEV_NUM)
#define	TOTAL_USB_CONFIG_NUM		(TOTAL_USB_DEV_NUM * MAX_DEV_CONFIG_NUM)
#define	TOTAL_USB_INTERFACE_NUM		(TOTAL_USB_CONFIG_NUM * MAX_CONFIG_INTERFACE_NUM)
#define	TOTAL_USB_ENDPOINT_NUM		(TOTAL_USB_INTERFACE_NUM * MAX_INTERFACE_ENDPOINT_NUM)


/*
 *	USB bus control structure
 */
typedef struct _USB_BUS
{
	VOID			*HcPriv;
	BYTE			UsbDevAddressMap;

	BYTE			Set;
}USB_BUS;


/*
 *	USB endpoint structure
 */
typedef struct _USB_ENDPOINT
{
	USB_ENDPOINT_DESCRIPTOR		EndpointDescriptor;
	BYTE						Set;
}USB_ENDPOINT;

/*
 *	USB interface structure
 */
typedef struct _USB_INTERFACE
{
	USB_INTERFACE_DESCRIPTOR	InterfaceDescriptor;
	USB_ENDPOINT				*Endpoint[MAX_INTERFACE_ENDPOINT_NUM];
	VOID						*FunctionDevice;
	VOID						(*CloseFunctionDevice)(VOID *func);
	BYTE						Set;
}USB_INTERFACE;

/*
 *	USB configurate structure
 */
typedef struct _USB_CONFIG
{
	USB_CONFIG_DESCRIPTOR		ConfigDescriptor;
	USB_INTERFACE				*Interface[MAX_CONFIG_INTERFACE_NUM];
	USB_INTERFACE				*ActInterface;
	BYTE						Set;
}USB_CONFIG;

/*
 *	USB device control structure
 */
typedef struct _USB_DEVICE
{
	BYTE						DevAddress;			/* function device number */
	USB_DEVICE_SPEED			Speed;				/* device connection speed */
	USB_DEVICE_DESCRIPTOR		DeviceDescriptor;
	USB_CONFIG					*Config[MAX_DEV_CONFIG_NUM];
	USB_CONFIG					*ActConfig;	
	USB_BUS						*Usb;
	DWORD						PipeCtrlIn;
	DWORD						PipeCtrlOut;
	
	BYTE						Set;
}USB_DEVICE;


/*----------------------------USB allocate source---------------------------*/
/*
 *	Allocate usb endpoint source
 *  Valid endpoint index from 0 to 31, support 32 endpoints.
 */
extern USB_ENDPOINT*		/* Return: success return endpoint structure pointer, else return NULL */
AllocUsbEndpoint(VOID);

/*
 *	Free usb endpoint source
 */
extern VOID
FreeUsbEndpoint(
	USB_ENDPOINT	*endpoint		/* Input: endpoint pointer */
	);

/*
 *	Allocate usb interface source
 */
extern USB_INTERFACE*		/* Return: success return interface structure pointer, else return NULL */
AllocUsbInterface(VOID);

/*
 *	Free usb interface source
 *	Before free this interface, endpoints of this interface will be free first.
 */
extern VOID
FreeUsbInterface(
	USB_INTERFACE		*Interface		/* Input: interface structure pointer */
	);

/*
 *	Allocate usb configuration source
 */
extern USB_CONFIG*			/* Return: success return config structure pointer, else return NULL */
AllocUsbConfig(VOID);

/*
 *	Free usb configuration source
 * 	Before free this configuration, interfaces of this configuration will be free first.
 */
extern VOID
FreeUsbConfig(
	USB_CONFIG		*config		/* Input: config structure pointer */
	);

/*
 *	Allocate usb device source
 */
extern USB_DEVICE*			/* Return: success return VOID* of device structure, else return NULL */
AllocUsbDevice(VOID);

/*
 *	Free usb device source
 *	Before free this device, configuration of this device will be free first.
 */
extern VOID
FreeUsbDevice(
	USB_DEVICE		*device			/* Input: VOID* of device structure */
	);

/*
 *	Allocate usb bus source
 */
extern VOID*			/* Return: success return VOID* of usb structure, else return NULL */
AllocUsbBus(VOID);

/*
 *	Free usb bus source
 *	Before free this usb bus, hc of this usb bus will be free first.
 */
extern VOID
FreeUsbBus(
	VOID		*usbpriv			/* Input: VOID* of usb structure */
	);
/*---------------------------------------------------------------------------*/

/*---------------------------USB control pipe--------------------------------*/
/*
 *	USB control transfer massage operation
 *	Reference to chapter 9 of USB2.0 spec for the standard USB request
 */
extern BYTE				/* Return: usb operation error code */
UsbControlMsg(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	DWORD			pipe,				/*        usb control pipe define */
	BYTE			request,			/*        request number */
	BYTE			requestType,		/*        request type */
	WORD			value,				/*        request value */
	WORD			index,				/*        request index */
	WORD			size,				/*        request size */
	VOID			*dat				/*        request data buffer pointer */
	);

/*
 *	Protocol get status
 */
extern BYTE				/* Return: usb operation error code */
UsbGetStatus(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	BYTE			type,				/*        get status request type information */
	BYTE			target,				/*        target number */
	VOID			*dat				/*        status data buffer */
	);

/*
 *	Protocol clear endpoint stall
 * 	This function use clear feature request, only clear endpoint stall.
 */
extern BYTE				/* Return: usb operation error code */
UsbClearHalt(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	BYTE			pipe				/*        endpoint pipe */
	);

/*
 *	Protocol set usb device address 
 */
extern BYTE				/* Return: usb operation error code */
UsbSetAddress(
	USB_DEVICE		*device				/* Input: usb device structure pointer */
	);

/*
 *	Protocol get usb device standard configuration descriptor
 *	USB get configuration descriptor
 */
extern BYTE				/* Return: usb operation error code */
UsbGetDescriptor(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	BYTE			type,				/*        descriptor type */
	BYTE			index,				/*        descriptor index */
	VOID			*buf,				/*        descriptor data buffer */
	WORD			size				/*        descriptor size */
	);

/*
 *	Protocol get usb device string descriptor
 */
extern BYTE				/* Return: usb operation error code */
UsbGetString(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	WORD			langid,				/*        language ID */
	BYTE			index,				/*        string descriptor index */
	VOID			*buf,				/*        descriptor receive buffer */
	WORD			size				/*        descriptor length */
	);

/*
 *	Protocol get usb device standard device descriptor
 */
extern BYTE				/* Return: usb operation error code */
UsbGetDeviceDescriptor(
	USB_DEVICE		*device				/* Input: usb device structure pointer */
	);

/*
 *	Protocol set usb device configuration
 */
extern BYTE				/* Return: usb operation error code */
UsbSetConfiguration(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	BYTE			configuration		/*        active configuration number for this device */
	);

/*
 *	Protocol set usb device interface
 */
extern BYTE				/* Return: usb operation error code */
UstSetInterface(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	BYTE			interface,
	BYTE			alternate	
	);

/*
 *	Start a usb device
 */
extern BYTE				/* Return: usb operation error code */
UsbStartDevice(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	USB_BUS			*usb				/*        usb bus structure pointer */
	);

/*
 *	Set device configuration
 */
extern BYTE				/* Return: usb operation error code */
UsbSetDeviceConfig(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	USB_CONFIG		*config,			/*        usb configuration structure pointer */
	USB_INTERFACE	*interface			/*        usb interface structure pointer */
	);
/*---------------------------------------------------------------------------*/

/*--------------------------USB root hub interface---------------------------*/
/*
 *	Get usb root hub port status
 */
extern DWORD			/* Return: root hub port status map */
UstGetRootHubPortStatus(
	USB_BUS		*usb,				/* Input: usb bus structure pointer */
	BYTE		portNum				/*        root hub port number */
	);

/*
 *	Usb enable root hub port
 */
extern BOOL				/* Return: success return 1, else return 0 */
UsbEnableRootHubPort(
	USB_BUS		*usb,				/* Input: usb bus structure pointer */
	BYTE		portNum				/*        root hub port number */
	);
/*---------------------------------------------------------------------------*/

/*------------------------------USB init-------------------------------*/
/*
 *	Open usb and init it
 */
extern BYTE				/* Return: usb operation error code */
OpenUsb(
	VOID		*usbpriv			/* Input: VOID* of usb structure */
	);
/*----------------------------------------------------------------------*/

/*----------------------------USB bus control---------------------------*/
/*
 *	Reset usb bus
 */
extern VOID
ResetUsb(
	USB_BUS		*usb					/* Input: usb bus structure pointer */
	);

/*
 *	Suspend usb bus
 */
extern VOID
SuspendUsb(
	USB_BUS		*usb					/* Input: usb bus structure pointer */
	);

/*
 *	Resume usb bus
 */
extern VOID
ResumeUsb(
	USB_BUS		*usb					/* Input: usb bus structure pointer */
	);
/*-----------------------------------------------------------------------*/


/*----------------------------USB bulk pipe---------------------------*/
/*
 *	USB bulk transfer massage operation
 *	This is the interface for device bulk transfer
 */
extern BYTE				/* Return: usb operation error code */
UsbBulkMsg(
	USB_DEVICE		*device,			/* Input: usb device structure pointer */
	DWORD			pipe,				/*        usb bulk pipe define */
	VOID			*dat,				/*        bulk transfer data buffer pointer */
	WORD			length,				/*        bulk transfer data length */
	BOOL			isUseDMA,			/*        use DMA set 1, else set 0 */
	WORD			*actualLength		/* Output: actual transfer data length */
	);
/*-----------------------------------------------------------------------*/


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -