cancel
Showing results for 
Search instead for 
Did you mean: 

USB Descriptor

francesco23
Associate II
Posted on March 09, 2006 at 10:05

USB Descriptor

3 REPLIES 3
francesco23
Associate II
Posted on March 09, 2006 at 07:36

Hi to all,

i'm starting to create a firmware to control USB pheripheral of STR710 uC, but I have some problem about descriptor structure creation.

I ask you to provide some documentaion about my problem; USB Software Library don't explain this problem solution.

Thanks to all,

shangdawei1
Associate II
Posted on March 09, 2006 at 09:23

/******************** (C) COPYRIGHT 2003 STMicroelectronics ********************

* File Name : usb_desc.c

* Author : MCD Application Team

* Date First Issued : 27/10/2003

* Description : Descriptors for USB Mouse

*

********************************************************************************/

#include ''USB_lib.h''

#include ''USB_desc.h''

const BYTE MOUSE_ReportDescriptor[MOUSE_SIZ_REPORT_DESC] = {

0x05, /* Usage Page(Generic Desktop) */

0x01,

0x09, /* Usage(Mouse) */

0x02,

0xA1, /* Collection(Logical) */

0x01,

0x09, /* Usage(Pointer) */

0x01,

/* 8 */

0xA1, /* Collection(Linked) */

0x00,

0x05, /* Usage Page(Buttons) */

0x09,

0x19, /* Usage Minimum(1) */

0x01,

0x29, /* Usage Maximum(3) */

0x03,

/* 16 */

0x15, /* Logical Minimum(0) */

0x00,

0x25, /* Logical Maximum(1) */

0x01,

0x95, /* Report Count(3) */

0x03,

0x75, /* Report Size(1) */

0x01,

/* 24 */

0x81, /* Input(Variable) */

0x02,

0x95, /* Report Count(1) */

0x01,

0x75, /* Report Size(5) */

0x05,

0x81, /* Input(Constant,Array) */

0x01,

/* 32 */

0x05, /* Usage Page(Generic Desktop) */

0x01,

0x09, /* Usage(X axis) */

0x30,

0x09, /* Usage(Y axis) */

0x31,

0x09, /* Usage(Wheel) */

0x38,

/* 40 */

0x15, /* Logical Minimum(-127) */

0x81,

0x25, /* Logical Maximum(127) */

0x7F,

0x75, /* Report Size(8) */

0x08,

0x95, /* Report Count(3) */

0x03,

/* 48 */

0x81, /* Input(Variable, Relative) */

0x06,

0xC0, /* End Collection */

0x09,

0x3c,

0x05,

0xff,

0x09,

/* 56 */

0x01,

0x15,

0x00,

0x25,

0x01,

0x75,

0x01,

0x95,

/* 64 */

0x02,

0xb1,

0x22,

0x75,

0x06,

0x95,

0x01,

0xb1,

/* 72 */

0x01,

0xc0

}; /* MOUSE_ReportDescriptor */

const BYTE MOUSE_DeviceDescriptor[MOUSE_SIZ_DEVICE_DESC] = { /* ST mouse */

0x12, /* bLength */

0x01, /* bDescriptorType */

0x00, /* bcdUSB */

0x01,

0x00, /* bDeviceClass */

0x00, /* bDeviceSubClass */

0x00, /* bDeviceProtocol */

0x08, /* bMaxPacketSize0 */

0x83, /* idVendor (1155) */

0x04,

0x01, /* idProduct */

0x00,

0x04, /* bcdDevice rel. 1.04 */

0x01,

4, /* Index of string descriptor */

/* describing manufacturer */

42, /* Index of string descriptor */

/* describing product */

0, /*98,*/ /* Index of string descriptor */

/* describing the device's */

/* serial number */

0x01 /* bNumConfigurations */

}; /* MOUSE_DeviceDescriptor */

const BYTE MOUSE_ConfigDescriptor[MOUSE_SIZ_CONFIG_DESC] = {

0x09, /* bLength: Configuation Descriptor size */

0x02, /* bDescriptorType: Configuration */

MOUSE_SIZ_CONFIG_DESC,

/* wTotalLength: Bytes returned */

0x00,

0x01, /* bNumInterfaces: 1 interface */

0x01, /* bConfigurationValue: */

/* Configuration value */

0x00, /* iConfiguration: */

/* Index of string descriptor */

/* describing the configuration */

0xA0, /* bmAttributes: */

/* bus powered, remote-wakeup */

0x32, /* MaxPower 100 mA: this current is used for detecting Vbus */

/******************** Descriptor of mouse interface ********************/

/* 09 */

0x09, /* bLength: Interface Descriptor size */

0x04, /* bDescriptorType: */

/* Interface descriptor type */

0x00, /* bInterfaceNumber: Number of Interface */

0x00, /* bAlternateSetting: Alternate setting */

0x01, /* bNumEndpoints*/

0x03, /* bInterfaceClass: HID */

0x01, /* bInterfaceSubClass : 1=BOOT, 0=no boot*/

0x02, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/

0, /* iInterface: */

/* Index of string descriptor */

/******************** Descriptor of Mouse HID ********************/

/* 18 */

0x09, /* bLength: HID Descriptor size */

0x21, /* bDescriptorType: HID */

0x00, /* bcdHID: HID Class Spec release number */

0x01,

0x00, /* bCountryCode: Hardware target country */

0x01, /* bNumDescriptors: */

/* Number of HID class descriptors */

/* to follow */

0x22, /* bDescriptorType */

MOUSE_SIZ_REPORT_DESC,

/* wItemLength: Total length of Report descriptor */

0x00,

/******************** Descriptor of mouse endpoint ********************/

/* 27 */

0x07, /* bLength: Endpoint Descriptor size */

0x05, /* bDescriptorType: */

/* Endpoint descriptor type */

0x81, /* bEndpointAddress: */

/* Endpoint Address (IN) */

0x03, /* bmAttributes: Interrupt endpoint */

0x04, /* wMaxPacketSize: 4 Byte max */

0x00,

0x20, /* bInterval: Polling Interval (32 ms) */

/* 34 */

}; /* MOUSE_ConfigDescriptor */

const BYTE MOUSE_StringDescriptor[MOUSE_SIZ_STRING_DESC] = {

0x04,

0x03,

0x09,

0x04, /* LangID = 0x0409: U.S. English */

/* 4 */

38, /* Size of manufaturer string */

0x03, /* bDescriptorType = String descriptor */

/* Manufacturer: ''STMicroelectronics'' */

'S',0, 'T',0, 'M',0, 'i',0, 'c',0, 'r',0, 'o',0, 'e',0,

'l',0, 'e',0, 'c',0, 't',0, 'r',0, 'o',0, 'n',0, 'i',0,

'c',0, 's',0,

/* 42 */

56,

0x03,

/* Product name: ''ARM7 : USB Mouse Tutorial'' */

'A',0, 'R',0, 'M',0, '7',0, ' ',0, ' ',0, ' ',0, ':',0,

' ',0, 'U',0, 'S',0, 'B',0, ' ',0, 'M',0, 'o',0, 'u',0,

's',0, 'e',0, ' ',0, 'T',0, 'u',0, 't',0, 'o',0, 'r',0,

'i',0, 'a',0, 'l',0,

/* 98 */

28,

0x03,

/* Serial number: ''20072000-0001'' */

'2',0, '0',0, '0',0, '7',0, '2',0, '0',0, '0',0, '0',0,

'-',0, '0',0, '0',0, '0',0, '1',0,

/* 126 */

26,

0x03,

/* Interface 0: ''ST USB Mouse'' */

'S',0, 'T',0, ' ',0, 'U',0, 'S',0, 'B',0, ' ',0, 'M',0,

'o',0, 'u',0, 's',0, 'e',0,

/* 152 */

}; /* MOUSE_StringDescriptor */

reg007
Associate II
Posted on March 09, 2006 at 10:05

Hi Bassof

http://www.beyondlogic.org/usbnutshell/usb5.htm#DeviceDescriptors

page might help you.

regards