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

📄 chap_9.c

📁 此為philip 1362 USB DOS下的驅動程式包, 已經共測試並內含有說明文件
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
   //*************************************************************************
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   2000-2002 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	CHAP_9.C
   // Created:		Feb. 1, 2000
   // Modified:		May 28, 2002
   // Revision:		1.0
   //
   //*************************************************************************
*/

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

#include "SysCnfg.h"

#include "BasicTyp.h"
#include "DcCommon.h"

#include "Hal4Sys.h"
#include "Hal4ISA.h"
#include "Hal4IKit.h"

#include "Hal4D13.h"
#include "D13_Reg.h"
#include "D13_DcS.h"

#include "usb100.h"
#include "chap_9.h"

#include "OTGSvc.h"

/*
   //*************************************************************************
   // Public Data
   //*************************************************************************
*/
// Task Control Block
extern DC_TCB			D13TaskControlBlock;

// USB Device Info
extern USB_DEV_INFO		D13_DevInfo;

// USB Default Control Pipe
extern CONTROL_XFER		DCPCtrlXfer;


extern OTG_TCB 		OtgTcb;
extern BOOL	ISP1362_PCIKIT;

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

#define NUM_CONFIGURATION									1
#define NUM_INTERFACE										1
#define NUM_ENDPOINTS										4

#define USB_CLASS_CODE_TEST_CLASS_DEVICE                    0xFF
#define USB_SUBCLASS_CODE_TEST_CLASS_D13                    0x00
#define USB_PROTOCOL_CODE_TEST_CLASS_D13                    0x00

#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) + \
									NUM_INTERFACE * sizeof(USB_INTERFACE_DESCRIPTOR) + \
									(NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR) + \
									sizeof(USB_OTG_DESCRIPTOR))

USB_DEVICE_DESCRIPTOR DeviceDescr =
{
	sizeof(USB_DEVICE_DESCRIPTOR),
	USB_DEVICE_DESCRIPTOR_TYPE,
	SWAP(0x110),	//usb spec1.1
	0,
	0,
	0,
	EP0_PACKET_SIZE,
	SWAP(0x0471),
	SWAP(0x1A62),	//0x1A61: ISA kit, 0x1A62: PCI kit, 0X1A65: Cotulla kit
	SWAP(0x0100),
	STR_INDEX_MANUFACTURER,
	STR_INDEX_PRODUCT,
//	STR_INDEX_SERIALNUMBER,
	0,
	1
};

USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),
	USB_CONFIGURATION_DESCRIPTOR_TYPE,
	SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,	//NO OF I/F: 1,
	1,
	STR_INDEX_CONFIGURATION,
	0xC0,// no remote wakeup
	0x01 // 2mA
};


USB_INTERFACE_DESCRIPTOR InterfaceDescr0 =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0, //InterfaceNumber
	0, //Alternate Setting
	NUM_ENDPOINTS, // No of Endpoints
	USB_CLASS_CODE_UNKNOWN,
	USB_SUBCLASS_CODE_UNKNOWN,
	USB_PROTOCOL_CODE_UNKNOWN,
	STR_INDEX_INTERFACE
};


USB_ENDPOINT_DESCRIPTOR EP_Descr[NUM_ENDPOINTS] =
{

	// EP01 Interrupt Out
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x01,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(NONISO_FIFOSIZE_8),
		1
	},
	// EP02 Interrupt In
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x82,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(NONISO_FIFOSIZE_8),
		1
	},
	// EP03 Bulk Out
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x03,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(NONISO_FIFOSIZE_8),
		0
	},
	// EP04 Bulk IN
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x84,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(NONISO_FIFOSIZE_8),
		0
/*	},

	// EP05 ISO OUT
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x05,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(ISO_FIFOSIZE_16),
		1
	},
	// EP06 ISO IN
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x86,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(ISO_FIFOSIZE_16),
		1
*/	}
};

USB_OTG_DESCRIPTOR  OTG_Descr =
{
	sizeof(USB_OTG_DESCRIPTOR),
	USB_OTG_DESCRIPTOR_TYPE,
	0x03	//b1:srp_support b0:hnp_support
};

USB_STRING_LANGUAGE_DESCRIPTOR  strLanguage =
{
	sizeof(USB_STRING_LANGUAGE_DESCRIPTOR),
//	sizeof(strLanguage),
	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,
   {
		'0',0,
		'0',0,
		'0',0,
		'0',0,

		'0',0,
		'0',0,
		'0',0,
		'0',0,

		'8',0,
		'8',0,
		'8',0,
		'8',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,
		'3', 0,
		'6', 0,
		'2', 0,
		'-', 0,
		'O', 0,
		'T', 0,
		'G', 0,
		' ', 0,
		'P', 0,
		'C', 0,
		'I', 0,
		' ', 0,
		'B', 0,
		'O', 0,
		'A', 0,
		'R', 0,
		'D', 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,
		'c', 0,
		'o', 0,
		'n', 0,
		'd', 0,
		'u', 0,
		'c', 0,
		't', 0,
		'o', 0,
		'r', 0,
		's', 0,
		' ', 0
	}
};


/*
   //*************************************************************************
   // USB Protocol Layer
   //*************************************************************************
*/


/*
   //*************************************************************************
   // USB standard device requests
   //*************************************************************************
*/
void Chap9_GetStatus(void)
{
	UCHAR   byEndp;
	UCHAR	TxBuff[2];
	UCHAR   byTemp;

	if( DIR_D2H == DCPCtrlXfer.DeviceRequest.bmRequestType.XferDir && \
		0 == DCPCtrlXfer.DeviceRequest.wValue  && \
		2 == DCPCtrlXfer.DeviceRequest.wLength )
	{

		switch(DCPCtrlXfer.DeviceRequest.bmRequestType.Recipient)
		{
		case USB_RECIPIENT_DEVICE:

			if(0 != DCPCtrlXfer.DeviceRequest.wIndex)
			{
				Chap9sup_StallEP0InControlRead();
				return;
			}

			TxBuff[1]=0;
//			if( 1 == D13_DevInfo.bits.remote_wakeup )
//				TxBuff[0] = DEVSTS_SELFPOWERED|DEVSTS_REMOTEWAKEUP;   /* remote wakeup and Self-powered */
//			else
				TxBuff[0] = DEVSTS_SELFPOWERED;   /* Self-powered*/

			Chap9sup_SingleTransmitEP0((PUSHORT)TxBuff, 2);
			break;

		case USB_RECIPIENT_INTERFACE:

			if( NUM_INTERFACE <= DCPCtrlXfer.DeviceRequest.wIndex || \
				( 0 != DCPCtrlXfer.DeviceRequest.wIndex &&  DEVSTATE_ADDRESS != D13_DevInfo.bits.DevState) \
			)
			{
				Chap9sup_StallEP0InControlRead();
				return;
			}

			TxBuff[0]=0;
			TxBuff[1]=0;

			Chap9sup_SingleTransmitEP0((PUSHORT)TxBuff, 2);
			break;

		case USB_RECIPIENT_ENDPOINT:

			byEndp = (UCHAR)(DCPCtrlXfer.DeviceRequest.wIndex & MAX_ENDPOINTS);

			if( NUM_ENDPOINTS < byEndp || \
				( 0 != DCPCtrlXfer.DeviceRequest.wIndex &&  DEVSTATE_ADDRESS == D13_DevInfo.bits.DevState) \
			)
			{
				Chap9sup_StallEP0InControlRead();
				return;
			}


			byTemp = D13_GetEndpointStatusWOInteruptClear( D13_Endp2EndpIndex(byEndp) );

			TxBuff[1] = 0;
			if(byTemp & D13REG_EPSTS_STALL)
				TxBuff[0] = ENDPSTS_HALT;   /* Halt */
			else
				TxBuff[0] = 0;

			Chap9sup_SingleTransmitEP0((PUSHORT)TxBuff, 2);

			break;
		default:
			Chap9sup_StallEP0InControlRead();
			break;
		}
	}
	else
	{
		Chap9sup_StallEP0InControlRead();
	}
}

void Chap9_ClearFeature(void)
{
	UCHAR   byEndp;
	USHORT  wFeature = DCPCtrlXfer.DeviceRequest.wValue;

	if( DIR_H2D == DCPCtrlXfer.DeviceRequest.bmRequestType.XferDir && \
		0 == DCPCtrlXfer.DeviceRequest.wLength )
	{

⌨️ 快捷键说明

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