2

Mac に接続されている FTDI デバイスがいくつかあります。それらはすべて同じ説明、PID、および VID を持っています。FT_OpenEx() でどのファイルを開きたいか指定できるようにしたいです。

IO Kit API を使用して、関心のあるデバイスのバス ロケーション ID を取得できます。FT_OpenEX() API を使用すると、説明やシリアル番号の代わりに場所を渡すことができます。

ただし、ロケーション ID を返す FT API は、バスのロケーション ID とはまったく異なる値を返します。接続したデバイスの 1 つのバス ロケーション ID は 0x1a127000 で、FT API を使用してすべてのデバイスのロケーションを取得すると、0x1a051 や 0x1a052 などのように表示されます。

IO Kit バスのロケーション ID と FT のロケーションから変換する方法、または使用するデバイスを指定する方法はありますか?

4

2 に答える 2

2

最近、同様の問題が発生しました。一部の場所とデバイスで、場所 ID として 0 を取得しました。私は FTDI に支援要請を書きましたが、これが私が得たものです:

USB 3.0 ホスト PCI カードをテストしたところ、次の理由により、当社のドライバーと互換性がないことがわかりました。

Windows マシン上の既存のホスト ポートには、\device\usbfdo-# の形式で名前が付けられます。# は数字です。

USB 3.0 カードは \device\device# として知られています。# は数字です。

USB 3.0 ホスト ポートは、Windows マシンの標準命名規則に従っていません。ドライバーを列挙してロードしようとするときに、デバイス ID を送信するためにこのポートを開こうとしません。

Microsoft が 3.0 のサポートを追加するときは慣習に従うと予想されるので、私たちの観点からは問題がなくなると予想しています。そのため、問題はドライバーではなく 3.0 ホストにあると考えています。

このホスト コントローラーをサポートするために変更を加えることができたとしても、次に試すホスト デバイス (別のメーカー) には、別の変更を必要とする別のバリ​​アントが含まれている可能性が非常に高くなります。これは持続可能なモデルではなく、USB の PnP 精神に反します。

この問題は Windows 8 で解決されていると考えています。現在、新しい Windows 8 ドライバーの認定に取り組んでおり、2 月末までに利用可能になる予定です。

これはあまり満足のいくものではありませんが、少なくとも機能しない理由を説明しています。時間があれば、libusbX を使用してロケーション ID を取得し、FTDI API ルーチンでそれを開きます。それがいつになるかは定かではありませんが…

ファイト

于 2013-02-07T07:38:37.383 に答える
0

私はすでにこれをLinuxで一度行っており、機能するソリューションを持っているので、Macでもそれを理解しようと思いました。これを正しく行ったかどうかはわかりませんが、思いついたのは次のとおりです。

基本的に、MacOSX のロケーション ID を 16 ビット右にシフトし、バイナリと 0xff00 を使用して、デバイス アドレスを追加します。これは、ftdi ドライバーから取得したロケーション ID と同じである必要があります。

例:
「システム情報」プログラムで USB デバイスを見つけると、次のように表示されます。

Location ID:    0x14100000 / 21

それは「ロケーションID /デバイス番号」のようです。それをその式に当てはめます。

0x141000000>>16 = 0x1410
0x1410&0xff00   = 0x1400
0x1400|21       = 0x1415

そのため、10 進表記のロケーション ID は 5141 であり、FTDI が返したものと一致します。上記で使用されている 21 は 16 進数で 0x15 であることに注意してください。

30 分前にこれを理解したので、この実装に問題がある場合はお知らせください。これも確実に機能する必要があります。Mac とデバイスの間にハブを置いてみましたが、式はまだ適用されます。

IOKit 呼び出しは次のとおりです。

kr = (*dev)->GetLocationID(dev, &locationid);
kr = (*dev)->GetDeviceAddress(dev, &address);

Apple Developer Reference Web サイトで説明されています。

編集 FTDIロケーションIDには5桁あるため、デバイスのデバイス番号に興味があります. 私の方法はあなたの状況ではうまくいかないのでしょうか?

于 2014-06-22T13:31:41.957 に答える