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

📄 chap_9.c

📁 ISP1181MCU_FW_Ver1.01.zip是基于飞利浦ISP1181的USB HOST开发板固件源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
   //*************************************************************************
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   1999 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	CHAP_9.C
   // Created:		Oct 24, 2000
   // Modified:
   // Revision:		1.01
   //
   //*************************************************************************
*/

#include <stdio.h>
#include <string.h>
#include <reg51.h>  
#include "BasicTyp.H"
#include "Hal4Sys.h"
#include "Hal4D13.h"
#include "mainloop.h"
#include "usb100.h"
#include "chap_9.h"
#include "common.h"

/*
   //*************************************************************************
   // Public Data
   //*************************************************************************
*/

extern D13FLAGS bD13flags;
extern CONTROL_XFER ControlData;

extern IO_REQUEST idata ioRequest;
//------------------------------------------------------

UCHAR ALTERNATIVE_SETTING = 0;
/*
   //*************************************************************************
   // USB Device Descriptor
   //*************************************************************************
*/

#define NUM_ENDPOINTS	4 //14
#define NUM_ENDPOINTS_OF_D12	4

#define USB_CLASS_CODE_TEST_CLASS_DEVICE                    0xdc
#define USB_SUBCLASS_CODE_TEST_CLASS_D12                    0xA0
#define USB_PROTOCOL_CODE_TEST_CLASS_D12                    0xB0

#define NUM_INTERFACE	2
#define NUM_ALTINTERFACE	2

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



code 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(0x0168), // 0x0168 for D13
	SWAP(0x0100),
	0,//STR_INDEX_MANUFACTURER,
	0,//STR_INDEX_PRODUCT,
	0,//STR_INDEX_SERIALNUMBER,
	1
};

code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),
	USB_CONFIGURATION_DESCRIPTOR_TYPE,
	SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,	//NO OF I/F: 1,
	1,
	0,//STR_INDEX_CONFIGURATION,
	0xC0,//no remote wakeup and self_powered
//Jan17	0x80,//no remote wakeup and bus_powered
	0x32	//Jan5 MaxPower 50x2=100mA, 0x1=2mA
};

code USB_INTERFACE_DESCRIPTOR InterfaceDescr0 =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,
	0,
//ww 0606
	0,
	USB_CLASS_CODE_UNKNOWN,
	USB_SUBCLASS_CODE_UNKNOWN,
	USB_PROTOCOL_CODE_UNKNOWN,
	0,//STR_INDEX_INTERFACE
};

code USB_INTERFACE_DESCRIPTOR InterfaceDescr1 =
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,
	1,
	NUM_ENDPOINTS,
	USB_CLASS_CODE_UNKNOWN,
	USB_SUBCLASS_CODE_UNKNOWN,
	USB_PROTOCOL_CODE_UNKNOWN,
	0,//STR_INDEX_INTERFACE
};
//ww 0606

//dec18, set feature &get status fail for INT IN EP1, not report EP01, then USBCHECK pass all
code USB_ENDPOINT_DESCRIPTOR EP_Descr[4] =
{	//interrupt EP01, IN	
/*	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x81,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(NONISO_FIFOSIZE_8),
		10
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x02,
		USB_ENDPOINT_TYPE_INTERRUPT,
		SWAP(NONISO_FIFOSIZE_8),
		10
	},
*/
//Jan12, for 32byte	FIFO
	//EP03, 0x4, OUT
/*	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x03,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(NONISO_FIFOSIZE_64),
		0
	},
	//ww EP4, 0x5, IN
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x84,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(NONISO_FIFOSIZE_64),
		0
	},
*/
/*
	// EP5 ISO OUT
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x05,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(ISO_FIFOSIZE_64),
		1
	},
	// EP6 ISO IN
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x86,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(ISO_FIFOSIZE_64),
		1
	}
*/
//march1
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x03,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(NONISO_FIFOSIZE_64),
		0
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x84,
		USB_ENDPOINT_TYPE_BULK,
		SWAP(NONISO_FIFOSIZE_64),
		0
	},

	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x05,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(ISO_FIFOSIZE_512),
		1
	},
	{
		sizeof(USB_ENDPOINT_DESCRIPTOR),
		USB_ENDPOINT_DESCRIPTOR_TYPE,
		0x86,
		USB_ENDPOINT_TYPE_ISOCHRONOUS,
		SWAP(ISO_FIFOSIZE_512),
		1
	},
};



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

code 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}
};

code 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
    }
};

code 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,

	'0',0,
	'0',0,
	'0',0,
	'0',0
   }
};
code 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,
	'1', 0,
	'8', 0,
	'1', 0,
	' ', 0,
	'T', 0,
	'e', 0,
	's', 0,
	't', 0,
	' ', 0,
	' ', 0,
	' ', 0
	}
};

code 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,
	'A', 0,
	'P', 0,
	'I', 0,
	'C', 0}
};

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

void reserved(void)
{
	Chap9_StallEP0();
}


/*
   //*************************************************************************
   // USB standard device requests
   //*************************************************************************
*/

void Chap9_GetStatus(void)
{
	UCHAR   endp, txdat[2];
	UCHAR   c;

	UCHAR   bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
	UCHAR   dir = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_DIR_MASK;

	if(!(dir))
		Chap9_StallEP0InControlWrite();

	if(ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wLength == 2 )
	{
		switch(bRecipient)
		{
		case USB_RECIPIENT_DEVICE:
			if(bD13flags.bits.remote_wakeup == 1)
//Jan5				txdat[0] = DEVSTS_SELFPOWERED|DEVSTS_REMOTEWAKEUP;   /* remote wakeup and Self-powered */
				txdat[0] = DEVSTS_REMOTEWAKEUP;   /* remote wakeup and bus-powered */
			else
//Jan5				txdat[0] = DEVSTS_SELFPOWERED;   /* Self-powered*/
				txdat[0] = 0;   /* bus-powered*/
			txdat[1]=0;

			Chap9_SingleTransmitEP0(txdat, 2);
			break;
		case USB_RECIPIENT_INTERFACE:
			txdat[0]=0;
			txdat[1]=0;

			Chap9_SingleTransmitEP0(txdat, 2);

			break;
		case USB_RECIPIENT_ENDPOINT:

			if( ControlData.DeviceRequest.wIndex == 0x00 )
				endp = -1;
			else
				endp = (UCHAR)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);

			c = Hal4D13_GetEndpointStatusWOInteruptClear(endp + 1);

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

			Chap9_SingleTransmitEP0(txdat, 2);

			break;
		default:
			Chap9_StallEP0InControlRead();
			break;
		}
	}
	else
		Chap9_StallEP0InControlRead();
}

void Chap9_ClearFeature(void)
{
	UCHAR   endp;

⌨️ 快捷键说明

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