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

📄 chap_9.c

📁 飞利浦公司usb2.0芯片isp1581的通用驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
   //*************************************************************************
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   2000 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // Project:		ISP1581 EVA board
   // File Name:	CHAP_9.C
   // Author:		Qian Jiang
   // Created:		Sept. 1, 2000
   // Modified:
   // Revision:		0.0
   //
   //*************************************************************************
*/

#include <stdio.h>
#include <string.h>
#include <dos.h>

#include "BasicTyp.h"
#include "common.h"

#include "usb200.h"

#include "MAINLOOP.H"
#include "chap_9.h"

#include "Hal4Sys.h"
#include "ISP1581.h"
#include "verify.h"


/*
   //*************************************************************************
   // Public Data
   //*************************************************************************
*/
extern ISP1581FLAGS bISP1581flags;
extern CONTROL_XFER ControlData;
extern unsigned char far *dmaBuffer;
unsigned char bInterface_number;

/*

   //*************************************************************************
   // USB Device Descriptor
   //*************************************************************************
*/

//#define PRODUCT_IDENTIFIER					0x1582 // PID for ISP1581.
//#define PRODUCT_IDENTIFIER					0x1B30 // ISP1501 FPGA test board.
#define PRODUCT_IDENTIFIER					0x1B41 // ISP1581 ISA evaluation kit PID.
#define VENDOR_IDENTIFIER					0X04CC	// Philips APIC Vendor ID
#define RELEASE_NUMBER						0X0000	// Reserved release number
#define STRING_EN							1		// report string descriptor

#define NUM_ENDPOINTS						14		// max endpoint possible for ISP1581
#define NUM_ENDPOINTS_OF_DEFAULT			4		// no endpoints enabled at interface 0 (case no enough bandwithd, no function of device)
#define NUM_ENDPOINTS_OF_ALTER				6		// interface 1 has 6 endpoints enabled.

#define USB_CLASS_CODE_TEST_CLASS_DEVICE	0x00	// no class (this is the test program only)
#define USB_SUBCLASS_CODE_TEST_CLASS		0x00	// no subclass
#define USB_PROTOCOL_CODE_TEST_CLASS		0x00	// no protocol class
//#define USB_CLASS_CODE_TEST_CLASS_DEVICE	0xdc
//#define USB_SUBCLASS_CODE_TEST_CLASS		0xA0
//#define USB_PROTOCOL_CODE_TEST_CLASS		0xB0
#define USB_Configureation_bmAttributes	SET_TO_ONE|SELF_POWER //Set to one | Self-power //|Remote wake-up;
#define SET_TO_ONE 0x80
#define SELF_POWER 0x40
#define REMOTE-WAKEUP 0x20

#define USB_SEPC_VERSION_11					0x0110	// USB speicification 1.1
#define USB_SEPC_VERSION_20					0x0200	// USB speicification 1.1
// Specify the max configuration length of the device.
#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
									+ (NUM_ENDPOINTS_OF_DEFAULT * sizeof(USB_ENDPOINT_DESCRIPTOR))\
									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
									+ (NUM_ENDPOINTS_OF_ALTER * sizeof(USB_ENDPOINT_DESCRIPTOR))\


USB_DEVICE_DESCRIPTOR DeviceDescr =
{
	sizeof(USB_DEVICE_DESCRIPTOR),
	USB_DEVICE_DESCRIPTOR_TYPE,
	SWAP(USB_SEPC_VERSION_11),
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	0,
	0,
	EP0_PACKET_SIZE,
	SWAP(VENDOR_IDENTIFIER),
	SWAP(PRODUCT_IDENTIFIER),
	SWAP(RELEASE_NUMBER),
	STRING_EN * STR_INDEX_MANUFACTURER,
	STRING_EN * STR_INDEX_PRODUCT,
	STRING_EN * STR_INDEX_SERIALNUMBER,
	1
};

USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),
	USB_CONFIGURATION_DESCRIPTOR_TYPE,
	SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,
	1,
	STRING_EN * STR_INDEX_CONFIGURATION,
	USB_Configureation_bmAttributes,
	0x1
};

USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,

	0,				// DEFAULT INTERFACE.. NO BANDWIDTH REQUITED FOR INTERRUPT ENDPOINT AND ISO
	NUM_ENDPOINTS_OF_DEFAULT,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS,
	USB_PROTOCOL_CODE_TEST_CLASS,
	STRING_EN * STR_INDEX_INTERFACE
};

USB_ENDPOINT_DESCRIPTOR EP_Descr_DEFAULT[NUM_ENDPOINTS_OF_DEFAULT] =
{
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x81,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x01,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x82,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_FS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x02,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_FS),
		0
	}
};

USB_INTERFACE_DESCRIPTOR InterfaceDescr_ALTER =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,
	1,
	NUM_ENDPOINTS_OF_ALTER,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS,
	USB_PROTOCOL_CODE_TEST_CLASS,
	STRING_EN * STR_INDEX_INTERFACE
};

USB_ENDPOINT_DESCRIPTOR EP_Descr_ALTER[NUM_ENDPOINTS_OF_ALTER] =
{
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x81,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x01,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x82,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_FS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x02,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_FS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x83,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(maxepsize_256),
		1
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x03,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(maxepsize_256),
		1
	}
};

USB_DEVICE_DESCRIPTOR DeviceDescr_H =
{
	sizeof(USB_DEVICE_DESCRIPTOR),
	USB_DEVICE_DESCRIPTOR_TYPE,
	SWAP(USB_SEPC_VERSION_20),
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	0,
	0,
	EP0_PACKET_SIZE,
	SWAP(VENDOR_IDENTIFIER),
	SWAP(PRODUCT_IDENTIFIER),
	SWAP(RELEASE_NUMBER),
	STRING_EN * STR_INDEX_MANUFACTURER,
	STRING_EN * STR_INDEX_PRODUCT,
	STRING_EN * STR_INDEX_SERIALNUMBER,
	1
};

USB_CONFIGURATION_DESCRIPTOR ConfigDescr_H =
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),
	USB_CONFIGURATION_DESCRIPTOR_TYPE,
	SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,
	1,
	STRING_EN * STR_INDEX_CONFIGURATION,
	USB_Configureation_bmAttributes, // set-to-one, self-power, remote wakeup,;
	0x1
};

USB_INTERFACE_DESCRIPTOR InterfaceDescr_H =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,
	0,
	NUM_ENDPOINTS_OF_DEFAULT,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS,
	USB_PROTOCOL_CODE_TEST_CLASS,
	STRING_EN * STR_INDEX_INTERFACE
};

USB_ENDPOINT_DESCRIPTOR EP_Descr_H_DEFAULT[NUM_ENDPOINTS_OF_DEFAULT] =
{
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x81,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x01,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x82,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_HS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x02,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_HS),
		0
	}
};

USB_INTERFACE_DESCRIPTOR InterfaceDescr_H_ALTER =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,
	1,
	NUM_ENDPOINTS_OF_ALTER,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS,
	USB_PROTOCOL_CODE_TEST_CLASS,
	STRING_EN * STR_INDEX_INTERFACE
};

USB_ENDPOINT_DESCRIPTOR EP_Descr_H_ALTER[NUM_ENDPOINTS_OF_ALTER] =
{
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x81,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x01,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x82,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_HS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x02,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_HS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x83,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(maxepsize_256),
		1
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x03,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(maxepsize_256),
		1
	}
};

USB_DEVICEQUALIFIER_DESCRIPTOR DeviceQualifierDescr_H =
{
	sizeof(USB_DEVICEQUALIFIER_DESCRIPTOR),
	USB_DEVICEQUALIFIER_DESCRIPTOR_TYPE,
	0x0200, // USB spec version number, 2.0
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS,
	USB_PROTOCOL_CODE_TEST_CLASS,
	0x40,//max packet size(endpoint 0) for other speed configuration(high speed, 64)
	0x1, // number of other speed configuratons
	0x0 //reserved, must be 0
};

USB_CONFIGURATION_DESCRIPTOR Otherspeed_ConfigDescr_H=
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),
	USB_OTEHRSPEEDCONFIGURATION_DESCRIPTOR_TYPE,
	SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,
	2, // value to select this configuration;
	STRING_EN * STR_INDEX_CONFIGURATION,
	USB_Configureation_bmAttributes, // set-to-one, self-power, remote wakeup,;
	0x1
};

USB_INTERFACE_DESCRIPTOR OTHERSPEED_InterfaceDescr_H =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,
	0,
	NUM_ENDPOINTS_OF_DEFAULT,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS,
	USB_PROTOCOL_CODE_TEST_CLASS,
	STRING_EN * STR_INDEX_INTERFACE
};

USB_ENDPOINT_DESCRIPTOR OTHERSPEED_EP_Descr_H_DEFAULT[NUM_ENDPOINTS_OF_DEFAULT] =
{
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x81,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x01,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x82,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_FS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x02,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_FS),
		0
	}
};

USB_INTERFACE_DESCRIPTOR OTHERSPEED_InterfaceDescr_H_ALTER =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,
	1,
	NUM_ENDPOINTS_OF_ALTER,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS,
	USB_PROTOCOL_CODE_TEST_CLASS,
	STRING_EN * STR_INDEX_INTERFACE
};

USB_ENDPOINT_DESCRIPTOR OTHERSPEED_EP_Descr_H_ALTER[NUM_ENDPOINTS_OF_ALTER] =
{
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x81,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x01,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(maxepsize_16),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x82,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_FS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x02,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(maxepsize_FS),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x83,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(maxepsize_256),
		1
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x03,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(maxepsize_256),
		1
	}
};

USB_STRING_LANGUAGE_DESCRIPTOR  strLanguage =
{
	sizeof(USB_STRING_LANGUAGE_DESCRIPTOR),
	USB_STRING_DESCRIPTOR_TYPE,
	SWAP(0x0409)
};

USB_STRING_INTERFACE_DESCRIPTOR  strInterface =
{
	sizeof(USB_STRING_INTERFACE_DESCRIPTOR),
	USB_STRING_DESCRIPTOR_TYPE,
	{'I',0,'n',0,'t',0,'e',0,'r',0,'f',0,'a',0,'c',0,'e',0,'0',0,'0',0}
};

USB_STRING_CONFIGURATION_DESCRIPTOR  strConfiguration =
{
	sizeof(USB_STRING_CONFIGURATION_DESCRIPTOR),
	USB_STRING_DESCRIPTOR_TYPE,
	{
	'C',0,
	'o',0,
	'n',0,
	'f',0,
	'i',0,
	'g',0,
	'0',0,
	'0',0
	}
};

USB_STRING_SERIALNUMBER_DESCRIPTOR  strSerialNum =
{
	sizeof(strSerialNum),
	USB_STRING_DESCRIPTOR_TYPE,
   {
	'1',0,
	'1',0,
	'1',0,
	'1',0,

	'2',0,
	'2',0,
	'2',0,
	'2',0,

	'3',0,
	'3',0,
	'3',0,
	'4',0
   }
};
USB_STRING_PRODUCT_DESCRIPTOR  strProduct =
{
	sizeof(USB_STRING_PRODUCT_DESCRIPTOR),
	USB_STRING_DESCRIPTOR_TYPE,
	{
	'P', 0,
	'H', 0,
	'I', 0,
	'L', 0,
	'I', 0,
	'P', 0,
	'S', 0,
	' ', 0,
	'I', 0,
	'S', 0,
	'P', 0,
	'1', 0,
	'5', 0,
	'8', 0,
	'1', 0,
	' ', 0,
	'T', 0,
	'e', 0,
	's', 0,
	't', 0,
	' ', 0,
	' ', 0,
	' ', 0
	}
};

USB_STRING_MANUFACTURER_DESCRIPTOR  strManufacturer =
{
	sizeof(USB_STRING_MANUFACTURER_DESCRIPTOR),
	USB_STRING_DESCRIPTOR_TYPE,
	{
	'P', 0,
	'H', 0,
	'I', 0,
	'L', 0,
	'I', 0,
	'P', 0,
	'S', 0,
	' ', 0,
	'S', 0,
	'e', 0,
	'm', 0,
	'i', 0,

⌨️ 快捷键说明

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