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. Bis dann und vielen Dank, Florian 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 };
Hab das Problem mitlerweile gelöst! Es liegt am Eingangspuffer, Win2000 hat standartmäsig eine Größe von 8, WinXP hat 32. Damit ist die Verzögerung von mir selbst erzeugt, denn ich rufe langsamer ab als mein Device sendet. Bei WinXP war die Zeit einfach vier mal länger und alles unter 100ms merkt man bei eingabegeräten wohl mit der Hand nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.