HobNote
libusbを使ってみる
since 2008.05.08
last update 2012.02.18



Contents



libusb[function]

libusbは、Linux,FreeBSD,MacOS X等でUSB制御を含んだアプリケーションを作成する際に
利用できるC言語ライブラリ群
CentOS5では、baseに入っているのでinstallされていない場合は、yumで
libusb
libusb-devel
をinstallすればいい


function description
void usb_init(void); 他の関数を使う前に実行しておかなければならない関数。これで内部structuresをset upする
int usb_find_busses(void); system上の全てのbusを見つける。この関数を呼び出す前に変化した数(新しいbusと削除したbusの合計)を返す
int usb_find_devices(void); 各々のbusの全てのdeviceを見つける。この関数は、usb_find_bussesを実行した後に実行すること。
この関数を呼び出す前に変化した数(新しいdeviceと削除したdeviceの合計)を返す
struct usb_bus *usb_get_busses(void); この関数は、global変数であるusb_bussesの値を返す。
usb_dev_handle *usb_open
 (struct *usb_device dev);
usb deviceをopenする
int usb_close
 (usb_dev_handle *dev);
usb_openで開いたdeviceをcloseする
int usb_set_configuration
 (usb_dev_handle *dev, int configuration);
deviceのactive configrationをsetする
このconfigurationは、descriptor fildのbConfigrationValueによる
戻り値が0の場合は成功、0より小さい場合は、失敗
int usb_set_altinterface
 (usb_dev_handle *dev, int alternate);
current interfaceのactive alternate settingをsetする
このalternate parameterは、descriptor fildのbAlternateSettingによる
戻り値が0の場合は成功、0より小さい場合は、失敗
int usb_resetep
 (usb_dev_handle *dev, unsigned int ep);
指定したendpointの全てのstateをresetする
このep parameterは、descriptor fildのbEndpointAddressによる
戻り値が0の場合は成功、0より小さい場合は、失敗
usb_resetepを使いたくない場合は、usb_clear_haltを使用しても構わない
int usb_clear_halt
 (usb_dev_handle *dev, unsigned int ep);
指定したendpointのいくつかのstateをclearする
このep parameterは、descriptor fildのbEndpointAddressによる
戻り値が0の場合は成功、0より小さい場合は、失敗
int usb_reset
 (usb_dev_handle *dev);
接続が落ちたdeviceに対して、そのdeviceにRESETを送ってresetする
戻り値が0の場合は成功、0より小さい場合は、失敗
注意:この関数を使った後、新しいdeviceやhandleを調べる必要がある
int usb_claim_interface
 (usb_dev_handle *dev, int interface);
OSに対しinterfaceを要求する。
このinterface parameterは、descriptor fildのbInterfaceNumberによる
戻り値が0の場合は成功、0より小さい場合は、失敗
注意:usb_set_altinterface,usb_bulk_writeなどのinterfaceに関連した関数を使う前には必ず
    この関数を実行しなくてはならない
        戻り値
    code description
    -EBUSY 要求に対してBusy
    -ENOMEM memoryが足りない
int usb_release_interface
 (usb_dev_handle *dev, int interface);
usb_claim_interfaceで要求したinterfaceを開放する。
このinterface parameterは、descriptor fildのbInterfaceNumberによる
戻り値が0の場合は成功、0より小さい場合は、失敗
int usb_control_msg
 (usb_dev_handle *dev, int requesttype,
 int request, int value, int index,
 char *byte, int size, int timeout);
device上のdefault control pipeに対してcontrol requestを実行する
そのparameterはUSB specificationによる同じ名称で写す
戻り値は、read/writeのbyte数、0より小さい場合は、失敗として返す
int usb_get_string
 (usb_dev_handle *dev, int index, int langid,
 char *buf, size_t buflen);
deviceからindexとlangidによってdescriptor specifiedを文字列で取得する
その文字列はUSB SpecificationによってUnicodeで返す
戻り値はbyte数、0より小さい場合は、失敗として返す
int usb_get_string_simple
 (usb_dev_handle *dev, int index,
 char *buf, size_t buflen);
この関数は、usb_get_stringのwrapper関数でdescreptorの
first languageのindexでdescriction specifiedとして文字列を返し
C styleのASCIIに変換する
戻り値はbyte数、0より小さい場合は、失敗として返す
int usb_get_descriptor
 (usb_dev_handle *dev, unsigned char type,
 unsigned char index, void *buf, int size);
この関数は、default control pipeからdescriptorのtypeとindexによりdevice identifiedを取得する
戻り値はdescriptorへのread byte数、0より小さい場合は、失敗として返す
int usb_get_descriptor_by_endpoint
 (usb_dev_handle *dev, int ep,
 char type, unsgined char index,
 void *buf, int size);
この関数は、epによるcontrol pipe identifiedからdescriptorのtypeとindexにより
device identifiedのdescriptorを取得する
戻り値はdescriptorへのread byte数、0より小さい場合は、失敗として返す
int usb_bulk_write
 (usb_dev_handle *dev, int ep, char *bytes,
 char *bytes, int size, int timeout);
この関数は、epで指定したendpointにbulk write requestを実行する
戻り値は、成功した場合は、書き込んだbyte数、0より小さい場合は、失敗として返す
int usb_bulk_read
 (usb_dev_handle *dev, int ep, char *bytes,
 int size, int timeout);
この関数は、epで指定したendpointにbulk read requestを実行する
戻り値は、成功した場合は、読み込んだbyte数、0より小さい場合は、失敗として返す
int usb_interrupt_write
 (usb_dev_handle *dev, int ep,char *bytes,
 int size, int timeout);
この関数は、epで指定したendpointにinterrupt write requestを実行する
戻り値は、成功した場合は、書き込んだbyte数、0より小さい場合は、失敗として返す
int usb_interrupt_read
 (usb_dev_handle *dev, int ep,char *bytes,
 int size, int timeout);
この関数は、epで指定したendpointにinterrupt read requestを実行する
戻り値は、成功した場合は、読み込んだbyte数、0より小さい場合は、失敗として返す
int usb_get_driver_np
 (usb_dev_handle *dev, int interface,
 char *name, int namelen);
この関数は、パラメータinterfaceで指定したinterfaceと
namelen文字列で指定したbuffer名で示されたdriver名を取得する
戻り値は、成功したら0、失敗したら0以下を返す
int usb_detach_kernel_driver_np
 (usb_dev_handle *dev, int interface);
この関数は、パラメータinterfaceで指定したinterfaceからkernel driverを離す
usblibを使用するアプリケーションは、interfaceに対してそれを要求してみることが可能である
戻り値は、成功したら0、失敗したら0以下を返す



libusb[structure]

タグ名 メンバ名 description
usb_dev_handle int fd
struct usb_bus *bus
struct usb_device *device
int config
int interface
int altsetting
void *imple_info
usb_bus struct usb_bus *next
struct usb_bus *prev
char dirname[PATH_MAX + 1] ファイルシステム上の/dev/bus/usbの下の
ファイル名(3桁の数字)を示す
struct usb_device *devices
u_int32_t location
struct usb_device *root_dev
usb_device struct usb_device *next
struct usb_device *prev
char filename[PATH_MAX + 1] ファイルシステム上の/dev/bus/usb/XXX/の下の
ファイル名(3桁の数字)を示す
struct usb_bus *bus
struct usb_device_descriptor descriptor
struct usb_config_descriptor *config
void *dev
u_int8_t devnum
unsigned char num_children
struct usb_device **children