5

FTDI USB チップを使用してカスタム デバイスと通信するシステム (X-Platform Windows/Linux) を作成しています。デバイスのオープン/クローズ/読み取り/書き込みに D2XX ドライバーを使用しています。ここまでは順調ですね。

プログラムが正常に応答できるように、デバイスがいつ切断されたかを知る必要があります。現在、Windows では、アプリケーションが予期しない突然の終了を受け取ります。Linux では、デバイスが切断されると、sgementation fault が発生します。

Windows で WM_DEVICECHANGE メッセージのリッスンに関する情報を見つけました。ただし、Windows でこのイベントを検出する方法が見つかりません。カーネルと対話するデバイス ドライバー レベルの情報があります。ただし、アプリケーション レベルでこれを行う方法がわかりません。FTDI ドライバーは、そのようなサービスを提供しません。

このシステムは、C++ を使用した Qt フレームワークを使用して作成されています。デバイスドライバーは FTDI の D2XX ドライバーです。

誰かが私を正しい方向に向けることができますか?

よろしくお願いします!ジュディ

4

5 に答える 5

1

私があなたに伝えようとしていることはあなたの質問に直接答えることはありませんが、それはあなたにあなたの次の動きについてのヒントを与えるかもしれません。

さまざまなスクリプトを実行する「/etc/udev/rules.d/」で構成されたudevルールを使用します。USBデバイスが接続/切断されると、HUP信号をバイナリに送信するスクリプトを実行します。私の要件は少しの遅れを処理できるので、それは私にとって完全にうまく機能します。

しかし、私のポイントは、(スクリプトの代わりに)プログラムでイベントにリンクして登録できるudevライブラリがあるかもしれないということです。

お役に立てば幸いです...頑張ってください!

于 2009-06-03T21:38:00.630 に答える
1

私は最近、FTDIチップを介した読み取りを含むプロジェクトを行いました。私も libftdi を使用してみましたが、読み取りと書き込みに /dev/ttyUSB* を使用する方がはるかに簡単であることがわかりました。このようにして、QFile('/dev/ttyUSB*') を使用して書き込みと読み取りを行うことができます。また、デバイスが実際に存在し、セグメンテーション フォールトしないかどうかを確認することもできます。もちろん、これは「プラットフォームに依存しない」方法ではありません。プラットフォームに依存しない方法を取得するには、Qt のシリアル ライブラリを使用できます。

于 2011-11-24T19:44:07.930 に答える
0

ここには 2 つの問題があることを忘れないでください。

  • デバイスの挿入/取り外しの検出
  • アプリケーションを適切に終了します。

最初の問題は、Zifre によって解決されました。

しかし、2 つ目の問題が残ります。デバイスが取り外されたときに Linux アプリがセグメンテーション違反を起こすべきではありません。この 2 つの問題は無関係だと思います。書き込みまたは読み取りシステム コールの途中でデバイスが取り外された場合、それらのシステム コールは返されます。通知を受け取る前にエラーが表示されます。これにより、アプリがセグメンテーション違反になることはありません。

于 2009-06-04T12:12:56.530 に答える