;
;(c) L. Serrano [URL="http://www.analogicsensors.com/"]www.analogicsensors.com[/URL]
;
;
;Incluir este archivo en el archivo ASM del programa que realicemos.
;
;Variables Globales que deben ser declaradas como externas, EXTERN,
; en el archivo ASM del programa que realicemos.
GLOBAL InicioDescriptor,Device,Configuration1
GLOBAL Report1,FinReport1,String0,String1,String2,String3
#define ID_FABRICANTE 0x04D8 ;Microchip 04D8
#define ID_PRODUCTO 0x000A ;Familia PIC18
#define FABRICANTE 'w','w','w','.','a','n','a','l','o','g','i','c','s','e','n','s','o','r','s','.','c','o','m'
#define PRODUCTO 'U','S','B',' ','1','8','F','2','5','5','0'
#define N_SERIE '0','0','0','1'
#define NUM_CONFIGURATIONS 1
#define NUM_INTERFACES 1
#define bcdUSB 0x0200 ; USB Version 2.0
#define bcdDevice 0x0100 ; Version de Nuestro Dispositivo
#define ReportCountIn 8 ; Reporte de Entrada 8 campos
#define ReportCountOut 3 ; Reporte de Salida 3 campos
#define bMaxPacketSize 8 ; Maximo tamaño del paquete EP0: 8, 16, 32, o 64
#define wMaxPacketSize 8 ; Maximo tamaño del paquete para el EP
#define bMaxPower 25 ; Consumo del dispositivo=2*bMaxPower=50mA
#define bInterval 10 ; Intervavalo muestreo 10ms
; tipos de descriptor standard
#define DEVICE 1
#define CONFIGURATION 2
#define STRING 3
#define INTERFACE 4
#define ENDPOINT 5
; tipo de descriptor de clase HID
#define HID 0x21
#define REPORT 0x22
#define PHYSICAL 0x23
; tipo reporte de clase HID
#define INPUT 0x01
#define OUTPUT 0x02
#define FEATURE 0x03
; offsets desde el inicio del registro de datos de configuracion
#define bmRequestType 0x00
#define bRequest 0x01
#define wValue 0x02
#define wValueHigh 0x03
#define wIndex 0x04
#define wIndexHigh 0x05
#define wLength 0x06
#define wLengthHigh 0x07
DescriptorDevice code
InicioDescriptor
Device
db 0x12, DEVICE ; bLength, bDescriptorType
dw bcdUSB ; bcdUSB (byte L), bcdUSB (byte H)
db 0x00, 0x00 ; bDeviceClass, bDeviceSubClass
db 0x00, bMaxPacketSize ; bDeviceProtocl, bMaxPacketSize
dw ID_FABRICANTE ; idVendor (byte L), idVendor (byte H)
dw ID_PRODUCTO ; idProduct (byte L), idProduct (byte H)
dw bcdDevice ; bcdDevice (byte L), bcdDevice (byte H)
db 0x01, 0x02 ; iManufacturer, iProduct
db 0x03, NUM_CONFIGURATIONS; iSerialNumber, bNumConfigurations
Configuration1
db 0x09, CONFIGURATION ; bLength, bDescriptorType
db 0x29, 0x00 ; wTotalLength (byte L), wTotalLength (byte H)
db NUM_INTERFACES, 0x01 ; bNumInterfaces, bConfigurationValue
db 0x00, 0xA0 ; iConfiguration (none), bmAttributes
db bMaxPower, 0x09 ; bMaxPower*2=consumo dispositivo en mA, bLength(inicio Interface1)
db INTERFACE, 0x00 ; bDescriptorType, bInterfaceNumber
db 0x00, 0x02 ; bAlternateSetting, bNumEndpoints (excluyendo EP0)
db 0x03, 0x00 ; bInterfaceClass (HID code), bInterfaceSubClass
db 0x00, 0x00 ; bInterfaceProtocol, iInterface (none)
HID1
db 0x09, HID ; bLength, bDescriptorType
db 0x01, 0x01 ; bcdHID (byte L), bcdHID (byte H)
db 0x00, 0x01 ; bCountryCode (none), bNumDescriptors
db REPORT,(FinReport1-Report1-1); bDescriptorType, wDescriptorLength (byte L)
db 0x00, 0x07; wDescriptorLength (byte H) ,bLength(inicio Endpoint1)
db ENDPOINT, 0x81 ; bDescriptorType, bEndpointAddress (EP1 IN)
db 0x03, low wMaxPacketSize; bmAttributes (Interrupt), wMaxPacketSize (byte L)
db high wMaxPacketSize, bInterval ; wMaxPacketSize (byte H), bInterval
Endpoint2
db 0x07, ENDPOINT ; bLength, bDescriptorType
db 0x01, 0x03 ; bEndpointAddress (EP1 OUT), bmAttributes (Interrupt)
dw wMaxPacketSize ; wMaxPacketSize (byte L), wMaxPacketSize (byte H)
db bInterval ; bInterval
Report1
db 0x06, 0xA0 ;0x06, 0xA0, 0xFF Usage Page (Vendor Defined),
db 0xFF, 0x09 ;0x09, 0x01 Usage ID (Vendor Defined)
db 0x01, 0xA1 ;0xA1, 0x01 Collection (Application)
db 0x01, 0x09 ;0x09, 0x03 Usage ID (Vendor Defined) ; El Reporte de Entrada
db 0x03, 0x15 ;0x15, 0x00 Logical Minimum (0)
db 0x00, 0x26 ;0x26, 0x00, 0xFF Logical Maximum (255)
db 0xFF, 0x00 ;
db 0x75, 0x08 ;0x75, 0x08 Report Size (8 bits),
db 0x95, ReportCountIn ;0x95, ReportCountIn Campos del Reporte(ReportCountIn campos de entrada),
db 0x81, 0x02 ;0x81, 0x02 Input (Data, Variable, Absolute),
db 0x09, 0x04 ;0x09, 0x04 Usage ID (Vendor Defined), ; El Reporte de Salida
db 0x15, 0x00 ;0x15, 0x00 Logical Minimum (0),
db 0x26, 0xFF ;0x26, 0x00, 0xFF Logical Maximum (255)
db 0x00, 0x75 ;0x75, 0x08 Report Size (8 bits)
db 0x08, 0x95 ;
db ReportCountOut, 0x91 ;0x95, ReportCountOut; Campos del Reporte (ReportCountOut campos de salida),
db 0x02, 0x09 ;0x91, 0x02 Output (Data, Variable, Absolute)
db 0x05, 0x15 ;0x09, 0x05 Usage ID (Vendor Defined) ; El Reporte de Caracteristicas
db 0x00, 0x26 ;0x15, 0x00 Logical Minimum (0)
db 0xFF, 0x00 ;0x26, 0x00, 0xFF Logical Maximum (255)
db 0x75, 0x08 ;0x75, 0x08 Report Size (8 bits),
db 0x95, 0x00 ;0x95, 0x00 Campos del Reporte de caracteristicas,
db 0xB1, 0x02 ;0xB1, 0x02 Feature (Data, Variable, Absolute),
db 0xC0 ;0xC0 End Collection
FinReport1
String0
db String1-String0, STRING ; bLength, bDescriptorType
; wLANGID[0] (byte L), wLANGID[0] (byte H)
db 0x0A, 0x0C ; Spanish
db 0x09, 0x04 ; US-English
String1
db String2-String1, STRING ; bLength, bDescriptorType
dw FABRICANTE
String2
db String3-String2, STRING ; bLength, bDescriptorType
dw PRODUCTO
String3
db FinDescriptor-String3, STRING ; bLength, bDescriptorType
dw N_SERIE
FinDescriptor
END