////////////////////////////////////////////////////////////////////////////////
//********************* http://www.technologuepro.com/ ***********************//
// ISET Nabeul Le 18/07/2011 --------+------- //
// Carte interface USB /
////////////////////////////////////////////////////////////////////////////////
unit USBdsc;
const USB_VENDOR_ID : word = 0x7AB8;
const USB_PRODUCT_ID : word = 0xAB1D;
const USB_SELF_POWER : char = 0x80; // Self powered 0xC0, 0x80 bus powered
const USB_MAX_POWER : char = 50; // Bus power required in units of 2 mA
const HID_INPUT_REPORT_BYTES : char = 64;
const HID_OUTPUT_REPORT_BYTES : char = 64;
const EP_IN_INTERVAL : char = 1;
const EP_OUT_INTERVAL : char = 1;
const USB_INTERRUPT : char = 1;
const USB_TRANSFER_TYPE : char = 0x03; //0x03 Interrupt
const USB_HID_EP : char = 1;
const USB_HID_RPT_SIZE : char = 33;
type device_descriptor = record
bLength : char; // bLength - Descriptor size in bytes (12h)
bDescriptorType : char; // bDescriptorType - The constant DEVICE (01h)
bcdUSB : word; // bcdUSB - USB specification release number (BCD)
bDeviceClass : char; // bDeviceClass - Class Code
bDeviceSubClass : char; // bDeviceSubClass - Subclass code
bDeviceProtocol : char; // bDeviceProtocol - Protocol code
bMaxPacketSize0 : char; // bMaxPacketSize0 - Maximum packet size for endpoint 0
idVendor : word; // idVendor - Vendor ID
idProduct : word; // idProduct - Product ID
bcdDevice : word; // bcdDevice - Device release number (BCD)
iManufacturer : char; // iManufacturer - Index of string descriptor for the manufacturer
iProduct : char; // iProduct - Index of string descriptor for the product.
iSerialNumber : char; // iSerialNumber - Index of string descriptor for the serial number.
bNumConfigurations : char; // bNumConfigurations - Number of possible configurations
end;
const device_dsc : device_descriptor = (
0x12, // bLength
0x01, // bDescriptorType
0x0200, // bcdUSB
0x00, // bDeviceClass
0x00, // bDeviceSubClass
0x00, // bDeviceProtocol
8, // bMaxPacketSize0
USB_VENDOR_ID, // idVendor
USB_PRODUCT_ID, // idProduct
0x0001, // bcdDevice
0x01, // iManufacturer
0x02, // iProduct
0x00, // iSerialNumber
0x01 // bNumConfigurations
);
// Configuration 1 Descriptor
const configDescriptor1 : array[41] of byte = (
// Configuration Descriptor
0x09, // bLength - Descriptor size in bytes
0x02, // bDescriptorType - The constant CONFIGURATION (02h)
0x29,0x00, // wTotalLength - The number of bytes in the configuration descriptor and all of its subordinate descriptors
1, // bNumInterfaces - Number of interfaces in the configuration
1, // bConfigurationValue - Identifier for Set Configuration and Get Configuration requests
0, // iConfiguration - Index of string descriptor for the configuration
USB_SELF_POWER, // bmAttributes - Self/bus power and remote wakeup settings
USB_MAX_POWER, // bMaxPower - Bus power required in units of 2 mA
// Interface Descriptor
0x09, // bLength - Descriptor size in bytes (09h)
0x04, // bDescriptorType - The constant Interface (04h)
0, // bInterfaceNumber - Number identifying this interface
0, // bAlternateSetting - A number that identifies a descriptor with alternate settings for this bInterfaceNumber.
2, // bNumEndpoint - Number of endpoints supported not counting endpoint zero
0x03, // bInterfaceClass - Class code
0, // bInterfaceSubclass - Subclass code
0, // bInterfaceProtocol - Protocol code
0, // iInterface - Interface string index
// HID Class-Specific Descriptor
0x09, // bLength - Descriptor size in bytes.
0x21, // bDescriptorType - This descriptor's type: 21h to indicate the HID class.
0x01,0x01, // bcdHID - HID specification release number (BCD).
0x00, // bCountryCode - Numeric expression identifying the country for localized hardware (BCD) or 00h.
1, // bNumDescriptors - Number of subordinate report and physical descriptors.
0x22, // bDescriptorType - The type of a class-specific descriptor that follows
USB_HID_RPT_SIZE,0x00, // wDescriptorLength - Total length of the descriptor identified above.
// Endpoint Descriptor
0x07, // bLength - Descriptor size in bytes (07h)
0x05, // bDescriptorType - The constant Endpoint (05h)
USB_HID_EP or 0x80, // bEndpointAddress - Endpoint number and direction
USB_TRANSFER_TYPE, // bmAttributes - Transfer type and supplementary information
0x40,0x00, // wMaxPacketSize - Maximum packet size supported
EP_IN_INTERVAL, // bInterval - Service interval or NAK rate
// Endpoint Descriptor
0x07, // bLength - Descriptor size in bytes (07h)
0x05, // bDescriptorType - The constant Endpoint (05h)
USB_HID_EP, // bEndpointAddress - Endpoint number and direction
USB_TRANSFER_TYPE, // bmAttributes - Transfer type and supplementary information
0x40,0x00, // wMaxPacketSize - Maximum packet size supported
EP_OUT_INTERVAL // bInterval - Service interval or NAK rate
);
type hid_report_descriptor = record
report : array[USB_HID_RPT_SIZE] of char;
end;
const hid_rpt_desc : hid_report_descriptor = (
(0x06, 0x00, 0xFF, // Usage Page = 0xFF00 (Vendor Defined Page 1)
0x09, 0x01, // Usage (Vendor Usage 1)
0xA1, 0x01, // Collection (Application)
// Input report
0x19, 0x01, // Usage Minimum
0x29, 0x40, // Usage Maximum
0x15, 0x00, // Logical Minimum (data bytes in the report may have minimum value = 0x00)
0x26, 0xFF, 0x00, // Logical Maximum (data bytes in the report may have maximum value = 0x00FF = unsigned 255)
0x75, 0x08, // Report Size: 8-bit field size
0x95, HID_INPUT_REPORT_BYTES,// Report Count
0x81, 0x02, // Input (Data, Array, Abs)
// Output report
0x19, 0x01, // Usage Minimum
0x29, 0x40, // Usage Maximum
0x75, 0x08, // Report Size: 8-bit field size
0x95, HID_OUTPUT_REPORT_BYTES,// Report Count
0x91, 0x02, // Output (Data, Array, Abs)
0xC0) // End Collection
);
//Language code string descriptor
type str1 = record
bLength : char;
bDscType : char;
str : array[1] of word;
end;
const strd1 : str1 = (
4,
0x03,
(0x0409)
);
//Manufacturer string descriptor
type str2 = record
bLength : char;
bDscType : char;
str : array[15] of word;
end;
const strd2 : str2 = (
32, //sizeof this descriptor string
0x03,
('T','e','c','h','n','o','l','o','g','u','e',' ','p','r','o')
);
//Product string descriptor
type str3 = record
bLength : char;
bDscType : char;
str : array[22] of word;
end;
const strd3 : str3 = (
46, //sizeof this descriptor string
0x03,
('T','E','C','H','N','O','O','G','U','E',' ','p','r','o',' ','U','S','B',' ','I','N','F')
);
var USB_config_dsc_ptr : array[1] of ^const char;
var USB_string_dsc_ptr : array[3] of ^const char;
procedure USB_Init_desc();
implementation
procedure USB_Init_desc();
begin
USB_config_dsc_ptr[0] := @configDescriptor1;
USB_string_dsc_ptr[0] := ^const char(@strd1);
USB_string_dsc_ptr[1] := ^const char(@strd2);
USB_string_dsc_ptr[2] := ^const char(@strd3);
end;
end.