Ich entwickle ein USB HID Gerät mit einem STMicro Mikrocontroller. Ich habe mit STMicros HID-Beispiel angefangen, was gut funktioniert. Ich verwende C++ unter Windows 7 64-Bit für die PC-Seite. Ich habe eine Anwendung, die mit meinem Gerät funktioniert. Es gibt jedoch eine Sache, die ich nicht herausfinden kann.Windows USB HID Bericht Länge
Die Beispiel-Firmware erlaubt nur das Senden und Empfangen von 2 Bytes gleichzeitig, was durch eine HIDP_CAPS.OutputReportByteLength und InputReportByteLength bestimmt wird. Ich würde gerne mehr Daten als dieses sofort senden, aber ich kann nicht herausfinden, wie man die Berichtslängen erhöht. Ich habe erfolgreich den Endpunkt wMaxPacketSize, die VID und PID, und ein paar andere Dinge geändert, aber ich kann nicht herausfinden, wie Windows die Länge der eingehenden und ausgehenden Berichte berechnet. Es scheint keine Felder in meinem Bericht oder Gerätebeschreibungen zu geben, die diese Länge angeben, aber ich kann mir nicht vorstellen, woher es sonst kommen könnte.
Kann mir jemand sagen, wie Windows die HIDP_CAPS.OutputReportByteLength und HIDP_CAPS.InputReportByteLength ermittelt?
Wie kann ich diese Längen erhöhen?
Können Sie Ihren vollständigen HID-Berichtsdeskriptor posten? Wenn Sie eine Berichts-ID darin haben, müssen Sie alle Berichte mit dieser ID voranstellen, die für das zusätzliche Byte verantwortlich sind. – aja
Sie können das gesamte ursprüngliche Projekt hier erhalten: https://github.com/zegervdv/PS2-controller/tree/master/STM32F072B-Discovery_FW_V1.0.1/Projects/Peripheral_Examples/USB_Example –
Nicht ein großes Problem, aber es ist ein kleiner Fehler im HID-Berichtsdeskriptor dieses Beispiels ... 0x25, 0xFF, // Logisches Maximum (255) ... bedeutet wirklich "Logisches Maximum -1". Es sollte sein: 0x26, 0xFF, 0x00, // Logisches Maximum (255) Auch das Angeben von 0xA0 anstelle von 0xA1 0x00 für die physische Auflistung ist ein grauer Bereich. Die Spezifikation sagt nicht explizit, welcher Standardwert angenommen wird, wenn ein Wert weggelassen wird ... aber ich denke, dass Null sinnvoll wäre. Ansonsten ist kein Berichtsdeskriptor vorhanden, daher würde ich erwarten, dass 5-Byte-Berichte angezeigt werden (je einer für Ry, Rx, Y, X und die Schaltflächenbits). – aja