Заранее спасибо за помощь...
Код
[size="1"]
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned char byte;
#pragma pack(1)
struct usb_st_device_descriptor
{
byte bLength;
byte bDescriptorType;
ushort bscUSB;
byte bDeviceClass;
byte bDeviceSubClass;
byte bDeviceProtocol;
byte bMaxPacketSize0;
ushort idVendor;
ushort idProduct;
ushort bcdDevice;
byte iManufacturer;
byte iProduct;
byte iSerialNumber;
byte bNumConfigurations;
};
struct usb_st_configuration_descriptor
{
byte bLength;
byte bDescriptorType;
ushort wTotalLength;
byte bNumInterfaces;
byte bConfigurationValue;
byte iConfiguration;
byte bmAttibutes;
byte MaxPower;
};
struct usb_st_interface_descriptor
{
byte bLength;
byte bDescriptorType;
byte bInterfaceNumber;
byte bAlternateSetting;
byte bNumEndpoints;
byte bInterfaceClass;
byte bInterfaceSubClass;
byte bInterfaceProtocol;
byte iInterface;
};
struct usb_st_endpoint_descriptor
{
byte bLength;
byte bDescriptorType;
byte bEndpointAddress;
byte bmAttributes;
ushort wMaxPacketSize;
byte bInterval;
};
#pragma pack()
/* Аттрибуты устройства */
#define USB_SPECIFICATION 0x0110
#define DEVICE_CLASS 0xFF
#define DEVICE_SUB_CLASS 0x00
#define DEVICE_PROTOCOL 0x00
#define EP_CONTROL_LENGTH 0x08
#define VENDOR_ID 0x03EB /* Atmel vendor ID = 03EBh */
#define PRODUCT_ID 0x5804 //0x5803
#define RELEASE_NUMBER 0x0100
#define LANG_ID 0x00
#define MAN_INDEX 0x01
#define PRD_INDEX 0x02
#define SRN_INDEX 0x03
#define CONF_LENGTH 32
#define USB_CONFIG_BUSPOWERED 0xC0
#define USB_CONFIG_SELFPOWERED 0x0
#define USB_CONFIG_REMOTEWAKEUP 1<<5
#define CONF_NB 1
#define CONF_ATTRIBUTES USB_CONFIG_BUSPOWERED
#define MAX_POWER 50 /* = 100 mA */
/* INTERFACE 0 DESCRIPTOR */
#define INTERFACE0_CLASS 0x00
#define INTERFACE0_SUB_CLASS 0xFF
#define INTERFACE0_PROTOCOL 0xFF
/* Типы конечных точек */
#define CONTROL 0x00
#define ISOCHRONOUS 0x01
#define BULK 0x02
#define INTERRUPT 0x03
/* для вычисления номера конечной точки */
#define EP_DIRECT_OUT 0x00
#define EP_DIRECT_IN 0x80
/* конечные точки */
#define EP_NUMBER 0x02
#define EP_IN 0x01
#define EP_IN_SIZE 8
#define EP_OUT 0x02
#define EP_OUT_SIZE 8
/* первая конечная точка */
#define EP_1_ADDRESS (EP_IN|EP_DIRECT_IN) /* адрес */
#define EP_1_ATTRIBUTES BULK /* аттрибуты */
/* вторая конечная точка */
#define EP_2_ADDRESS (EP_OUT|EP_DIRECT_OUT) /* адрес */
#define EP_2_ATTRIBUTES BULK /* аттрибуты */
#pragma pack(1)
const struct usb_st_device_descriptor usb_device_descriptor =
{
18,
DEVICE_d, /* =1 */
USB_SPECIFICATION, /* спецификация */
DEVICE_CLASS, /* класс устройства */
DEVICE_SUB_CLASS,
DEVICE_PROTOCOL, /* протокол USB */
EP_CONTROL_LENGTH, /* размер пакета 0-й точки */
VENDOR_ID, /* ID производителя и устройства */
PRODUCT_ID,
RELEASE_NUMBER, /* версия устройства */
MAN_INDEX, /* дескр. строки изготовителя */
PRD_INDEX, /* дескр. строки продукта */
SRN_INDEX, /* дескр. строки серийного ном */
1 /* число конфигураций */
};
struct usb_st_configuration
{
struct usb_st_configuration_descriptor cfg;
struct usb_st_interface_descriptor ifc;
struct usb_st_endpoint_descriptor ep1;
struct usb_st_endpoint_descriptor ep2;
} __packed;
const struct usb_st_configuration usb_configuration =
{
/* CONFIGURATION */
{ 0x9,
CONFIGURATION_d, /* =2 */
CONF_LENGTH, /* длина всех дескрипторов */
1, /* число интерфейсов */
CONF_NB, /* номер конфигурации */
0, /* дескр. строки конфигур */
CONF_ATTRIBUTES, /* аттрибуты */
MAX_POWER /* 100 mA */
},
/* INTERFACE 0 */
{ 0x9,
INTERFACE_d, /* =4 */
0, /* 0-й интерфейс */
0, /* номер альтернативного инт. */
EP_NUMBER, /* 2 конечные точки (кроме 0) */
INTERFACE0_CLASS,
INTERFACE0_SUB_CLASS,
INTERFACE0_PROTOCOL,
0, /* дескр. строки интерфейса */
},
/* Дескриптор первой конечной точки */
{
7,
ENDPOINT_d, /* дескриптор ENDPOINT */
EP_1_ADDRESS, /* номер конечной точки */
EP_1_ATTRIBUTES, /* аттрибуты конечной точки */
EP_IN_SIZE, /* максимальный размер пакета */
0 /* частота опроса */
},
/* Дескриптор второй конечной точки */
{
7,
ENDPOINT_d, /* дескриптор ENDPOINT */
EP_2_ADDRESS, /* номер конечной точки */
EP_2_ATTRIBUTES, /* аттрибуты конечной точки */
EP_OUT_SIZE, /* максимальный размер пакета */
0 /* частота опроса */
}
};
#pragma pack()
[/size]