2015年4月16日木曜日

EZ-USB FX2LP を動かしてみる (20) ムスカ、「読める、読めるぞぉ~」

ムスカが憑依して、「読める、読めるぞぉ~」と口走ってしまいました.といっても古代ラピュタ語のコトではなくてデバイスディスクリプタが読めただけですがね~.

その19にて、Kona LinuxマシンがEZ-USB FX2LPをデバドラレベルで認識したところまで書きました.今回は、libusbというライブラリを使って、LinuxからFX2LPと通信してみます.

Kona Linuxのデフォルトではlibusbはインストールされていませんでしたので、インストールします.
apt-get install libusb-dev

それでもってソースコードですが、比較的短くてこれで全部です.このソースコードがやるコトは、Linuxマシンに接続された全てのUSBデバイスのデバイスディスクリプタを表示するコトです.細かいコトはlibusbがやってくれてるので、このコードでは大きな仕事はしていません.
#include <stdio.h>
#include <usb.h>        //libusbのライブラリ

// デバイスディスクリプタをひたすら表示する何の変哲もないサブ
void print_dev_descr(struct usb_device_descriptor *d){
 printf("===device descriptor===\n");
 printf(" Length %d\n",d->bLength);
 printf(" descriptor type %d\n",d->bDescriptorType);
 printf(" USB version %x\n",d->bcdUSB);
 printf(" device class %d\n",d->bDeviceClass);
 printf(" EP0 packet size %d\n",d->bMaxPacketSize0);
 printf(" VID %04x PID %04x\n",d->idVendor,d->idProduct);
 printf(" Manufucturer %d\n",d->iManufacturer);
 printf(" Product %d\n",d->iProduct);
 printf(" SerialNum %d\n",d->iSerialNumber);
 printf(" Config Num %d\n",d->bNumConfigurations);
}

int main(){
 struct usb_bus    *bus;                   //USBバス情報構造体
 struct usb_device *dev,*find_dev;     //USBデバイスリスト構造体

 usb_init();               // この4行はlibusbのお決まりってコトで
 usb_find_busses();     
 usb_find_devices();   
 bus=usb_get_busses(); 

 printf("device serching\r\n");
  for(bus=bus; bus; bus=bus->next) {
    for(dev=bus->devices; dev; dev=dev->next) {
          print_dev_descr(&(dev->descriptor));   // デバイスディスクリプタを表示する
         }
     }
 return 0;
}

このソースコードをfx2a.cという名前で保存します.そしてコンパイルします.ライブラリオプションの-lusbを着けるのをお忘れ無なく.
gcc fx2a.c -lusb
出来る実行ファイルはa.outですので、a.outと打つとプログラムが走ります.

すると、こんな表示がダーッと出ます.これらが各デバイスのデバイスディスクリプタです.読める、読めるぞぉ.
===device descriptor===
 Length 18
 descriptor type 1
 USB version 110
 device class 9
 EP0 packet size 8
 VID 0557 PID 7000
 Manufucturer 0
 Product 0
 SerialNum 0
 Config Num 1
===device descriptor===
 Length 18
 descriptor type 1
 USB version 110
 device class 9
 EP0 packet size 64
 VID 1d6b PID 0001
 Manufucturer 3
 Product 2
 SerialNum 1
 Config Num 1
===device descriptor===
 Length 18
 descriptor type 1
 USB version 200
 device class 0
 EP0 packet size 64
 VID 04b4 PID 1004     ←これがEZ-USB FX2LPのVID/PIDです.居た居た
 Manufucturer 1
 Product 2
 SerialNum 0
 Config Num 1

LinuxとLibusbってすごく簡単だわ.今まで、Windows上で動くCypressのとあるツールで検証して来たんだけど、デバイス側しか弄れなかったので不便でした.今後はホスト側も弄れるようになったので、捗りそうです.

その19へ    その21へ

かしこ

INDEXページへ
https://hirasakausb.blogspot.com/2019/03/ez-usb-fx2lp-index.html

2 件のコメント:

  1. なぜか 04B4/1002 というのもあるようです

    返信削除
    返信
    1. 1002の方は会社がお好みでつけてよいナンバーなのでいろいろです

      削除