📄 chap_9.c
字号:
/*
//*************************************************************************
//
// 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 + -