LibUSBを使ったプログラミング

 

先ず、パソコンにつながっているアイティプランターを調べます。


#define VENDOR_ID 0x250F // itplants,ltd.

#define PRODUCT_ID 0x000A // itplanter-01


最初に以下の3行のコマンドを発行します。全ては、それからです。

usb_init(); /* initialize the library */

usb_find_busses(); /* find all busses */

usb_find_devices(); /* find all connected devices */


アイティプランターの台数を数えます。


int i=0;

struct usb_bus *bus;

struct usb_device *dev;

for (bus = usb_get_busses(); bus; bus = bus->next)

{

for (dev = bus->devices; dev; dev = dev->next)

{


if (dev->descriptor.idVendor == VENDOR_ID

&& dev->descriptor.idProduct == PRODUCT_ID)

{

i++; //  アイティプランターの台数を数えています。

}

}

}


注)USBポート番号ではなくて、USBバスから見つかった順になっています。


次に、n(1から始まる)番目のアイティプランターと接続します。


i=0; // <  最初に見つかったアイティプランターと接続します。

for (bus = usb_get_busses(); bus; bus = bus->next)

{

for (dev = bus->devices; dev; dev = dev->next)

{


if (dev->descriptor.idVendor == VENDOR_ID

&& dev->descriptor.idProduct == PRODUCT_ID)

{

if(i==n-1)  handle = usb_open(dev);

else i++;

}

}

}



接続後は、通信をします。


if (usb_set_configuration(handle, 1) < 0)

{

printf( "error: setting config 1 failed\n");

usb_close(handle);

exit(1);

}


if (usb_claim_interface(handle, 0) < 0)

{

printf( "error: claiming interface 0 failed\n");

usb_close(handle);

exit( 1);

}


ここで、一気に書き込みます。

result = usb_bulk_write(handle,EP_OUT,command,BUF_SIZE,1000);

if(result<0){

printf ("  error. (%s)\n", usb_strerror());

}


ここで、一気に読み込みます。

result = usb_bulk_read(handle,EP_IN , rcommand, BUF_SIZE,1000);



後始末をします。

usb_release_interface(handle, 0);

usb_close(handle);


SendComでは、コマンドを発行する毎に、USBとの接続を行っています。接続に余計な時間がかかりますが、確実な通信ができます。