2016-11-12 20 views
0

私は(Linux)QNAP NASで動作する小さなCアプリケーションを作成しています。これはArduinoと通信します(私は、 arduino)。 (arduinoには、USBシリアル経由でテキストコマンドを受け取る信頼できるアプリケーションがあります。)Linux上でUSBシリアルデバイスを見つけて開く必要があります

私は、USBベンダー/製品IDを使用して見つけました。私がこれまでに持っているもの(下記参照)は、デバイスが見つかるという点で非常にうまく機能します。

// runs on NAS 
#include <stdio.h> 
#include <usb.h> 

main() { 
    struct usb_bus *bus; 
    struct usb_device *dev; 
    usb_init(); 
    usb_find_busses(); 
    usb_find_devices(); 
    for (bus = usb_busses; bus; bus = bus->next) { 
    for (dev = bus->devices; dev; dev = dev->next) { 
     printf("Trying %s/%s\n", bus->dirname, dev->filename); 
     printf("\tVendor = 0x%04x\n", dev->descriptor.idVendor); 
     printf("\tBus = 0x%03x\n", bus->location); 
     printf("\tFile = %s\n", dev->filename); 
     if (dev->descriptor.idVendor==0x403) { 
     printf("\t HEY, THIS IS MINE!\n"); 
     usb_dev_handle *handle = usb_open(dev); 
     printf("\t HANDLE 0x%08x\n", (int) handle); 
     //printf(handle, "1,5,62,75\n"); 
     usb_close(handle); 
     } 
    } 
    } 
} 

問題は、今ではデバイスでテキストを少し送受信したいのですが、その方法はわかりません。

私はusb_device構造体の中の何かからデバイス名を生成し、Windowsのようにファイルのように開く必要があると思いました。

それが正しいなら、私は私がのlibusbを使っていると信じて

...デバイス名を見つけるための正しい方法を知っておく必要があります。

私は、現在設定されている/接続されているので、ttyUSB0ですが、コードを使用していることを知りたいと思います。

ありがとうございました!

+0

このトピックに関する同様のQをお読みください。 '[libusbベンダーID]'を検索すると6つのスレッドが表示されます。がんばろう。 – shellter

答えて

1

libusbpを使用することをおすすめします。これは、C++ラッパーとCライブラリであり、USBデバイスのベンダーIDとプロダクトIDに基づいて、シリアルポートの名前を取得する方法を示すサンプルコードがあります:

https://github.com/pololu/libusbp/blob/master/examples/port_name/port_name.cpp

+0

ありがとうございます。有望に見えましたが、私の弱いlinux/gccのスキルと経験は、物事をうまく動かすのが非常に難しくなっています。 "libusbp.hpp:そのようなファイルやディレクトリはありません"。私は、-lLibUSBP -rpath =/src/LibUSBP -L/src/LibUSBPコマンドラインパラメータを指定することで、その作業が可能になると考えていました。明らかに、私はgccについて十分に分かっていません。 –

+0

Linuxのファイル名では大文字と小文字が区別され、コマンドで大文字と小文字が間違っています。 libusbp READMEを参照してください。このREADMEには、インストール方法とそれを使用するプログラムのコンパイル方法が記載されています。 –

+0

追加情報ありがとうございました。それを稼働させることができませんでした。明らかにgccの理解が不足していて、ライブラリがどのように見つかったかはかなり弱いです。私はこのことであまりにも愚かなことを知りません。私はこの部分を完全にスキップすることに決めました。 –

0

libusbですUSBデバイスとの低レベル通信に使用されるライブラリ。しかし、あなたのコミュニケーションが読書デバイスのUSBディスクリプタに限定されている場合 - libusbは最善のツールではありません。

Linuxシステムでは、ホットプラグデバイスを管理するためにサブシステムudevを使用します。 udevは、すべての接続されたUSBデバイスのディスクリプタを読み取り、データベースに格納します。 libudevは、列挙されたデバイスのデバイス名などの情報を取得するために使用するライブラリです。あなたの場合、usb_deviceusb_interfaceは別々のものであることを覚えておく必要があります。後者のデバイスファイルにはttyというデバイスファイルが割り当てられています。

また、udev configを使用して、特定のデバイスに一定のデバイス名を割り当てることもできます。だからあなたはそれを探している必要はありませんでした。

関連する問題