Hallo,
ich habe eine SPI-USB-Bridge von Maxim, den 3420e, als HID konfiguriert.
Ziel war es das das Gerät auf allen Zielsystemen (Betriebssystemen) ohne
zusätzliche treiberinstallation läuft. Der Angeschlossene µC liefert
Daten, welche von einem in C# geschriebenen Programm ausgelesen und
dargestellt werden. Entwickelt habe ich unter Win2000. Da läuft die
kommunikation sehr gut und ohne Probleme. Das Anmelden auf anderen
Rechnern war wie gewünscht... dranstecken-->geht!. Allerdings nur auf
Win2000 Rechnern....
Unter WinXP meldet sich das HID genau so an. Aber in der Darstellung ist
ein Zeitverzögerung von etwa 250ms zu beobachten. Kann mir da wer
weiterhelfen? Ich habe den ausführenden Descriptor mal angehängt.
Das Problem ist ja auch das es prinzipiell läuft, aber eben mit 250 ms
Verzögerung. Alle gemessenen Werte sind vorhanden. Gibt es denn bei
WinXP einen eingangspuffer? Kann aber eigendlich nicht sein, denn eine
USB-Maus welche ich an einem Win2000 und WinXP System anschließe läuft
ja auch ohne problem. Daher vermute ich eigendlich, daß das Problem
nicht von meiner hardware herrührt und auch nicht aus dem hid.dll,
sondern von der Einbindung in C# zu finden ist. Allerdings finde ich da keine Ansätze
für was XP anders macht als 2000!
Bis dann und vielen Dank,
Florian
Code:
unsigned char DD[]= // DEVICE Descriptor
{
0x12, // bLength = 18d
0x01, // bDescriptorType = Device (1)
0x00,0x02, // bcdUSB(L/H) USB spec rev (BCD)
0x00,0x00,0x00, // bDeviceClass, bDeviceSubClass,
bDeviceProtocol
0x40, // bMaxPacketSize0 EP0 is 64 bytes
0xaa,0xaa, // idVendor(L/H)--Maxim is 0B6A
0x22,0x22, // idProduct(L/H)--5346
0x34,0x12, // bcdDevice--1234
1,2,3, // iManufacturer, iProduct, iSerialNumber
1 // bNumConfigurations
};
unsigned char CD[]= // CONFIGURATION Descriptor
{
0x09, // bLength
0x02, // bDescriptorType = Config
0x29,0x00, // wTotalLength(L/H) = 34 bytes
0x01, // bNumInterfaces
0x01, // bConfigValue
0x00, // iConfiguration
0xe0, // bmAttributes. b7=1 b6=self-powered b5=RWU
supported
0x20, // MaxPower is 2 ma
// INTERFACE Descriptor
0x09, // length = 9
0x04, // type = IF
0x00, // IF #0
0x00, // bAlternate Setting
0x02, // bNum Endpoints
0x03, // bInterfaceClass = HID
0x00,0x00, // bInterfaceSubClass, bInterfaceProtocol
0x00, // iInterface
// HID Descriptor--It's at CD[18]
0x09, // bLength
0x21, // bDescriptorType = HID
0x10,0x01, // bcdHID(L/H) Rev 1.1
0x00, // bCountryCode (none)
0x01, // bNumDescriptors (one report descriptor)
0x22, // bDescriptorType (report)
47,0, // CD[25]: wDescriptorLength(L/H)
(report descriptor size is 43 bytes)
// IN-Endpoint Descriptor
0x07, // bLength
0x05, // bDescriptorType (Endpoint)
0x83, // bEndpointAddress (EP3-IN)
0x03, // bmAttributes (interrupt)
0x40,0, // wMaxPacketSize (64)
0x08, // bInterval (poll every 8 msec)
// OUT-Endpoint Descriptor
0x07, // bLength
0x05, // bDescriptorType (Endpoint)
0x01, // bEndpointAddress (EP1-OUT)
0x03, // bmAttributes (interrupt)
0x40,0, // wMaxPacketSize (64)
0x08 // bInterval (poll every 8 msec)
};
unsigned char RepD[] =
{
0x06, 0xA0, 0xff, // USAGE_PAGE (Vendor Defined
Page 1)
0x09, 0x01, // USAGE (Instance 1)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x03, // USAGE (Instance 3) MAX to PC
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x95, cBytesToPc, // REPORT_COUNT (2)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x04, // USAGE (Instance 4) PC to
Device
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, cBytesToDevice, // REPORT_COUNT (2)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0x09, 0x05, // USAGE (Instance 4)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
0xb1, 0x02, // OUTPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
};