EN JA
USBHID(3)
USBHID(3) FreeBSD Library Functions Manual USBHID(3)

名称

usbhid, hid_get_report_desc, hid_get_report_id, hid_use_report_desc, hid_dispose_report_desc, hid_start_parse, hid_end_parse, hid_get_item, hid_report_size, hid_locate, hid_usage_page, hid_usage_in_page, hid_init, hid_get_data, hid_set_data, hid_get_report, hid_set_reportUSB HID アクセスルーチン

ライブラリ

USB Human Interface Devices Library (libusbhid, -lusbhid)

書式

#include < usbhid.h>

report_desc_t
hid_get_report_desc( int file);

int
hid_get_report_id( int file);

int
hid_set_immed( int fd, int enable);

report_desc_t
hid_use_report_desc( unsigned char *data, unsigned int size);

void
hid_dispose_report_desc( report_desc_t d);

hid_data_t
hid_start_parse( report_desc_t d, int kindset, int id);

void
hid_end_parse( hid_data_t s);

int
hid_get_item( hid_data_t s, hid_item_t *h);

int
hid_report_size( report_desc_t d, hid_kind_t k, int id);

int
hid_locate( report_desc_t d, u_int usage, hid_kind_t k, hid_item_t *h, int id);

const char *
hid_usage_page( int i);

const char *
hid_usage_in_page( u_int u);

int
hid_parse_usage_page( const char *);

int
hid_parse_usage_in_page( const char *);

void
hid_init( const char *file);

int
hid_get_data( const void *data, const hid_item_t *h);

void
hid_set_data( void *buf, const hid_item_t *h, int data);

int
hid_get_report( int fd, enum hid_kind k, unsigned char *data, unsigned int size);

int
hid_set_report( int fd, enum hid_kind k, unsigned char *data, unsigned int size);

解説

usbhid ライブラリは、USB ヒューマンインタフェース装置からデータを抽出するためのルーチンを提供します。

はじめに

USB HID 装置は、装置依存の方法で適切に並べられたデータを送信し受信します。 usbhid ライブラリは、データレイアウト情報を含んでいる 報告書記述子 を抽出し、そして、この情報を使用するためのルーチンを含んでいます。

ルーチンは、4 つに分割できます: 記述子の抽出、記述子の解析、シンボリック名へ/から変換、とデータ操作です。

同期 HID 操作

hid_set_immed() への呼び出しによって、同期 HID 操作を有効にするか、または無効にすることができます。 2 番目の引数が 0 であるなら、同期 HID 操作は、無効にされます。ほかの同期 HID 操作は、有効にされます。関数は、失敗すれば負の数を返します。

hid_get_report() と hid_set_report() 関数によって、同期して取得することができ、デバイスがそれをサポートしているなら、特有のレポートを設定できます。複数のレポート ID があるデバイスについては、要求された ID は、取得と設定の両方のバッファの最初のバイトで提供されるべきです。

記述子関数

hid_get_report_id() を呼び出すことによって、報告書記述子 ID を取得することができます。報告書記述子は、 uhid(4) 装置をオープンすることにより得られたファイル記述子で hid_get_report_desc() を呼ぶにより得ることができます。あるいは、報告書記述子を含んでいるデータバッファは、 hid_use_report_desc() へ渡すことができます。データは、内部の構造体にコピーされます。報告書記述子がもはや必要でないなら、それは、 hid_dispose_report_desc() を呼び出すことにより解放されるべきです。タイプ report_desc_t は、不透明で、解析関数を呼び出すときに使用されるべきです。 hid_dispose_report_desc() が失敗するなら、それは、 NULL を返します。

記述子解析関数

報告書記述子を解析するために、 hid_start_parse() 関数は、報告書記述子、どの項目に関心があるかを記述する設定と希望の報告書 ID (または、すべての報告書 ID のアイテムを取得するためには、-1 で) で呼び出されるべきです。セットは、 k がタイプ hid_kind_t の 1 つのアイテムである場合、値 (1 << k) を論理和 (OR) することで得られます。初期化が失敗するなら、関数は、 NULL を返し、そうでなければ、続く呼び出しで使用される不透明な値を返します。解析した後に、 hid_end_parse() 関数は、内部のデータ構造体を解放するために呼ばれるべきです。

報告書記述子のすべてのアイテムを通して繰り返すために、 hid_get_item() は、それが 0 を越える値を返している間、呼び出されるべきです。報告書記述子が終了する時、それは、0 を返します。報告書記述子の中でのシンタックスエラーは、 0 未満の値を返します。 h によって指される構造体は、アイテムのための適切なデータで満たされるでしょう。 hid_item_t の定義と USB HID 文書中の構成要素の意味を < usbhid.h> で見つけることができます。

データは、報告書のサイズで装置から読み込まれる/へ書き込まれるべきです。 (ある種類の) 報告書のサイズは、 hid_report_size() 関数で計算できます。レポートが ID バイトを前に付けられるなら、 id によって与えられます。

単一のアイテムを位置付けるために、 hid_locate() 関数を使用できます。それは、アイテムと種類の使用法のコードが与えられるべきです。そして、アイテムが満たされ、アイテムが見つからなければ 0 以外を返します。

名前変換関数

関数 hid_usage_page() は、使用法のページのシンボリック名を返します。また、関数 hid_usage_in_page() は、ページ内の使用法のシンボリック名を返します。これらの両方の関数は、静的データのポインタを返すかもしれません。

関数 hid_parse_usage_page() と hid_parse_usage_in_page() は、 hid_usage_page() と hid_usage_in_page() の反対です。それらは、使用法の文字列をとり、使用法の数を返すか、または、それを見つけることができないなら、-1 を返します。

これらの関数のうちのどれでも使用法のテーブルと呼ぶことがでる前に、解析しなければなりません。これは、テーブルの名前で hid_init() を呼び出すことにより行われます。 NULL をこの機能へ渡すと、それは、デフォルトテーブルを使用します。

データ抽出関数

HID 装置および報告書記述子のアイテムから得られたデータを与え、 hid_get_data() 関数は、アイテムの値を抽出します。反対に、 hid_set_data() は、報告書 (それは、最初に 0 にされなければならない) の中にデータを入れるために使用できます。

関連ファイル

/usr/share/misc/usb_hid_usages
デフォルト HID 使用法テーブル。

使用例

まだです。

関連項目

USB 仕様書は、 http://www.usb.org/developers/docs/ で見つけられます。

uhid(4), usb(4)

歴史

usbhid ライブラリは、 NetBSD 1.5 ではじめて登場しました。

バグ

このマニュアルページは、お粗末で不完全です。
January 27, 2009 FreeBSD