2016-05-24 16 views
1

レコードを真っ直ぐにするだけで、USB通信については全く新しいことです。私は物事のマイクロコントローラの終わりで低レベルのシリアル通信(SPI、UART、I2C)を扱ってきましたが、私はUSBやシリアル通信のOS側を扱っていません。だから私と一緒に耐えてください。C++でのUSBデバイスの検出と通信

私はさまざまなコマンドを発行するために使用する独自のプロトコルを持つRFIDリーダ/ライタを持っています。 Boost:ASIOライブラリを使用して、必要な読み書き操作を実行する方法を検討しています。

しかし、図書館は私の頭の少し上にあり、私はいくつかの指針を求めています。さらに、私はWindows環境で作業していますが、ハードウェア抽象レイヤーをできるだけポータブルにしたいと考えています。同じラインに沿って、私は過去に(他のプログラマー)COMポートをハードコーディングしていた経験がありました。リーダーのIDに基づいて、プラグインすると私のプログラムがわかります。

+1

あなたの質問は? – NathanOliver

+0

この地域のある方向 – audiFanatic

答えて

2

デバイス検出はプラットフォーム固有のものであるため、OS固有の部分とデータ処理の間にクロスプラットフォームAPIを定義する必要があります。

Windowsのデバイス列挙の場合は、SetupDi * APIがあります。デバイス到着イベントはRegisterDeviceNotificationで取得できます。 VIDとPIDを含む「Compatible ID」と、USB文字列記述子を報告するBus-Dependent Device Descriptionを調べて、自分のデバイスを認識することができます。

Linuxの場合、VID、PID、および文字列記述子で一致することが可能で、一致するデバイスの列挙イベントと到着イベントを提供するudevがあります。

これらのOS固有の手段を使用してシリアルポート名を見つけたら、さまざまなクロスプラットフォームシリアルポートライブラリを使用して、接続を開き、デバイスとデータを交換します。

3

libusb(http://www.libusb.org/)を見てみると、USBインターフェイスのクロスプラットフォームサポートがあり、USBの仕組みを理解すればそれほど複雑ではありません。

+0

私はそれに見張りを与えました。しかし、私の主な関心事はライセンスです。私のアプリケーションは閉鎖ソースです(私の選択ではなく、有名な髪型の上司を責める)。だから私はちょっとオープンソースのものを使うことには注意が必要です。 – audiFanatic

+0

GNU Lesser General Public Licenseの下でライセンスされています。静的にリンクしたり、ソースを変更したりしない限り、リリース時にそのライセンスのコピーを入れるだけです。 – Meep

+0

優秀、ありがとう! – audiFanatic

関連する問題