2017-10-26 22 views
0

STMicro 마이크로 컨트롤러를 사용하여 USB HID 장치를 개발 중입니다. 나는 잘 작동하는 STMicro의 HID 예제로 시작했습니다. PC 측에서 Windows 7 64 비트에서 C++을 사용하고 있습니다. 내 장치에서 작동하는 응용 프로그램이 있습니다. 그러나 내가 알 수없는 한 가지가 있습니다.Windows USB HID 보고서 길이

예제 펌웨어는 HIDP_CAPS.OutputReportByteLength 및 InputReportByteLength에 의해 결정되는 한 번에 2 바이트 만 송수신 할 수있었습니다. 한 번에 더 많은 데이터를 보내고 싶지만 보고서 길이를 늘리는 방법을 알 수 없습니다. 끝점 wMaxPacketSize, VID 및 PID 및 기타 몇 가지 사항을 성공적으로 변경했지만 Windows에서 보고서 길이를 계산하는 방법을 파악할 수 없습니다. 내 보고서 또는 장치 설명에이 길이를 나타내는 필드가없는 것 같지만 그 밖의 어디에서 왔는지 상상할 수는 없습니다.

Windows가 HIDP_CAPS.OutputReportByteLength 및 HIDP_CAPS.InputReportByteLength를 어떻게 결정하는지 누구에게도 알 수 있습니까?

어떻게 이러한 길이를 늘릴 수 있습니까?

답변

0

나는 그것을 알아 냈다. 다른 사람이 알아야 할 경우에 대비하여 여기에 게시 할 것입니다. 나는 그것을 완전히 이해하고 있다는 것을 완전히 확신하지 못한다. 그래서 나는 실수를 범한다. 누군가 나를 교정한다.

내 펌웨어에서 보고서 설명을 변경해야했습니다. 나는 여러 가지 용도로 사용했다. Windows는 보고서 설명을 가져 와서 가장 긴 길이가 필요한 사용법을 파악하고 그 길이를 사용합니다. 내 입력 보고서 중 하나에 나는 (입력 보고서는 펌웨어의 바이트 단지 배열)을 다음과 같이 변경했다 :

나는 출력 비슷한했지만 더보고 번호 필드 (이 없습니다

0x27, 0xFF, 0xFF, 0xFF, 0xFF, //Logical maximum is 4 bytes long, and has a value of 0xFFFFFFFF 0x95, 0x01, //There is one report 0x75, 0x20, //There are 32 bits per report

0x95).

이제 Windows에서 5 바이트를 보내고받을 수 있다고 말하면서 끝점과 보고서 번호 시간 보고서 크기를 의미한다고 생각합니다.

+0

전체 HID 보고서 설명자를 게시 할 수 있습니까? 보고서 ID가있는 경우 여분의 바이트를 차지하는 보고서의 접두사가 해당 ID ...이어야합니다. – aja

+0

원본 프로젝트 전체를 얻을 수 있습니다. https://github.com/zegervdv/PS2-controller/tree/master/STM32F072B-Discovery_FW_V1.0.1/Projects/Peripheral_Examples/USB_Example –

+0

큰 문제는 아니지만 사소한 오류가 있습니다. 해당 예제의 HID 보고서 설명자에서 ... 0x25, 0xFF, // Logical Maximum (255) ... "Logical Maximum -1"을 의미합니다. 0x26, 0xFF, 0x00, // Logical Maximum (255) 또한 Physical Collection의 0xA1 0x00 대신 0xA0을 지정하면 회색 영역이됩니다. spec은 명시 적으로 어떤 값이 생략되면 가정되는 기본값을 말하지 않지만 ... 제로는 합리적이라고 생각합니다. 그 외에는 보고서 설명자가 없으므로 5 바이트 보고서 (Ry, Rx, Y, X 및 버튼 비트 각각 하나씩)가 필요합니다. – aja