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