2017-10-26 89 views
0

私は、STMicroマイクロコントローラを使用してUSB HIDデバイスを開発しています。私は、STMicroのHIDの例でうまくいきました。私はPC側でWindows 7の64ビット版C++を使用しています。私は自分のデバイスで動作するアプリケーションを持っています。しかし、私が把握できないことが1つあります。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、//論理最大(255) ...は実際には論理最大-1を意味します。 0x26、0xFF、0x00、//論理最大(255) また、物理コレクションの0xA1 0x00の代わりに0xA0を指定すると、灰色の領域になります。この仕様では、値が省略された場合、どのようなデフォルト値が想定されているかは明示されていませんが、妥当ではないと思います。 それ以外のレポート記述子はありませんので、5バイトのレポートが表示されることを期待しています(Ry、Rx、Y、X、およびボタンビットごとに1つずつ)。 – aja

関連する問題