シリアルポートや、USBポートがあるから制御に使うのが筋ってもの。
しかしどうやって使うの?ドライバーは?という疑問が多々あるので、
今回は導入前の検討編。
1.インストール
libusbをインストールする。(Debian系列ではusbutils)
2.USB機器を接続して、「lsusb」ベンダIDを調べる。
Bus 001 Device 001: ID 0123:4567
ベンダID : 0123
プロダクトID : 4567
3.サンプルソース(送受信周りがまだ未完成)
#include4.コンパイルstatic struct usb_bus *m_bus; static struct usb_device *m_dev; static usb_dev_handle *m_dh; static int USBopen() { usb_init(); usb_find_busses(); usb_find_devices(); /* search target device */ for (m_bus = usb_get_busses(); m_bus; m_bus = m_bus->next) { for (m_dev = m_bus->devices; m_dev; m_dev = m_dev->next) { if ((VENDOR_ID == m_dev->descriptor.idVendor) && (PRODUCT_ID == m_dev->descriptor.idProduct)) { return (NULL != (m_dh = usb_open(m_dev)))? 1 : -2; } } } return -1; } //送受信 //アクセスするUSBデバイスの「bmRequestType」や「bRequest」、「wValue」、「wIndex」、「wLength」などとエンドポイントなどを調べておく必要がある。 unsigned char msg[8]; int result=usb_control_msg(dh, bmRequestType, bRequest, wValue, wIndex, msg, sizeof(msg), timeout); if(result<0){printf ("Control message error. (%s)\n", usb_strerror());} //read #define USBclose() usb_close(dh); #define USBread(readbuf, bytes, timeout) usb_bulk_read(dh, end_point, readbuf, bytes, timeout) void test(){ USBOpen(); USBread(readbuf, bytes, timeout); USBClose(); }
cc -o test test.c -I/usr/include/ -L/usr/lib/ -lusb
参考URL
http://penguin.tantin.jp/hard/libusb%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6.html
http://bake-san.com/usb004.htm
http://blog.livedoor.jp/eru_at/archives/1262118.html
0 件のコメント:
コメントを投稿