HID class 調査
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* HID Class の全体図 [#m2a1a245]
HID のドキュメントは &ogfileone(Documentation/hid); 以下...
#pre{{
+-----------+ +-----------+ +-----------+ +...
| Device #1 | | Device #i | | Device #j | |...
+-----------+ +-----------+ +-----------+ +...
\\ // \\ ...
+------------+ +--------...
| I/O Driver | | I/O Dri...
+------------+ +--------...
|| ||
+------------------+ +-----------...
| Transport Driver | | Transport ...
+------------------+ +-----------...
\___ ___/
\ /
+----------------+
| HID Core |
+----------------+
/ | | \
/ | | \
____________/ | | \____________...
/ | | ...
/ | | ...
+----------------+ +-----------+ +------------------+ ...
| Generic Driver | | MT Driver | | Custom Driver #1 | ...
+----------------+ +-----------+ +------------------+ ...
}}
** USB HID の場合 [#i888df82]
USB の場合で全体図のブロックとファイルの対応を見ていきま...
|ブロック|主なファイル|機能|h
|I/O Driver|&ogfileone(drivers/usb/core); の &ogfileone(d...
|Transport Driver|&ogfileone(drivers/hid/usbhid/hid-core....
|HID Core|&ogfileone(drivers/hid/hid-core.c);&br;&ogfileo...
|Generic Driver|&ogfileone(drivers/hid/hid-generic.c);|殆...
|Custom Driver|&ogfileone(drivers/hid-*,drivers/hid);|特...
#textbox(note,Boot Interface Subclass デバイス){{
USB HID device のうち Boot Interface Subclass デバイスに...
}}
** Generic Driver の実装と主要な処理 [#dbbcd142]
&ogfileone(drivers/hid/hid-generic.c); の実装をみると殆ど...
** HID User-space I/O driver [#o6030db0]
Application が HID device として機能できるよう、仮想的な...
** Transport Driver の実装 [#j3cd8abc]
"Transport Driver" の実装を見ていきます。"Transport Drive...
#code(c,/struct\s*hid_ll_driver\s*{/../^};$/,ogfileone:/i...
I2C, bluetooth, USB, Hyper-V(仮想環境内で外界と繋がった H...
|BUS|"Transport Driver" すなわち &ogdefs(struct hid_ll_dr...
|I2C|&ogdefs(i2c_hid_ll_driver);|
|bluetooth|&ogdefs(hidp_hid_driver);|
|USB|&ogdefs(usb_hid_driver);|
|Hyper-V|&ogdefs(mousevsc_ll_driver);|
|uhid|&ogdefs(uhid_hid_driver);|
&ogdefs(struct hid_ll_driver,hid_ll_driver); のメンバとそ...
|メンバ(メソッド)|説明|ラッパ関数|HID Core 内部使用|h
|start|start underlaying HW|&ogdefs(hid_hw_start(),hid_hw...
|stop|stop underlaying HW|&ogdefs(hid_hw_stop(),hid_hw_st...
|open|signal underlaying HW to start delivering events|&o...
|close|signal underlaying HW to stop delivering events|&o...
|power|requests underlying HW to go into given power mode...
|parse|this method is called only once to parse the devic...
|request|send report request to device|&ogdefs(hid_hw_req...
|wait|wait for buffered io to complete|&ogdefs(hid_hw_wai...
|raw_request|send report request to device|&ogdefs(hid_hw...
|output_report|send output report to device|&ogdefs(hid_h...
|idle|send idle request to device|&ogdefs(hid_hw_idle(),h...
USB HID device (&ogfileone(drivers/hid/usbhid/hiddev.c);)...
#code(c,/hiddev_connect/../hiddev_report_event/,ogfileone...
次のように実装されています。
|hid_device メンバ(メソッド)|呼び出し元|h
|&ogrefs(hiddev_connect);|&ogdefs(hid_connect(),hid_conne...
|&ogrefs(hiddev_disconnect);|&ogdefs(hid_disconnect(), hi...
|&ogrefs(hiddev_hid_event);|&ogdefs(mt_touch_event(),mt_t...
|&ogrefs(hiddev_report_event);|&ogdefs(hid_report_raw_eve...
#textbox(note,hid_device 構造体が持つメソッドについて){{
hiddev_connect .. hiddev_report_event メンバは HID Class ...
}}
** Custom Driver 向け Hook 機能 [#v7d5f9b2]
"Custom Driver" 向けに HID プロトコルを進める随所に hook ...
|メンバ (メソッド)|説明|HID Core 内部の呼び出し元(一部は ...
|&ogsearch(probe,".probe",/hid/);|new device in...
|&ogsearch(remove,".remove",/hid/);|device remo...
|&ogrefs(report_table,report_table,/hid/);|on which repor...
|&ogrefs(raw_event,raw_event,/hid/);|if report in report_...
|&ogrefs(usage_table,usage_table,/hid/);|on which events ...
|&ogsearch(event,".event",/hid/);|if usage in u...
|&ogsearch(report,".report",/hid/);|this hook i...
|&ogrefs(report_fixup,report_fixup,/hid/);|called before ...
|&ogrefs(input_mapping,input_mapping,/hid/);|invoked on i...
|&ogrefs(input_mapped,input_mapped,/hid/);|invoked on inp...
|&ogrefs(input_configured,input_configured,/hid/);|invoke...
|&ogrefs(feature_mapping,feature_mapping,/hid/);|invoked ...
|&ogrefs(suspend,suspend,hid*);|invoked on suspend (NULL ...
|&ogrefs(resume,resume,/hid/);|invoked on resume if devic...
|&ogrefs(reset_resume,reset_resume,/hid/);|invoked on res...
** HID デバイスを接続した場合の流れ [#g7505464]
HID class device の登録と HID class driver の関係を見てい...
USB, bluetooth, I2C, 他 接続にて HID device と認識し、HID...
#code(c,/int\s*hid_add_device/../^}$/,ogfileone:/drivers/...
#textbox(note,hid_ignore_list に含まれているデバイスのド...
&ogdefs(hid_ignore(),hid_ignore); はいくつかの条件判定と...
}}
&ogdefs(hid_add_device(),hid_add_device); は "Transport D...
#textbox(note, hid_have_special_driver の要素に格納したデ...
&ogdefs(hid_have_special_driver); の要素に格納してあるデ...
}}
#textbox(note,ドライバを後から組み込んだ場合について){{
&ogdefs(hid_register_driver(),hid_register_driver); にて...
}}
デバイスとドライバの照合は &ogdefs(hid_bus_match(),hid_bu...
#code(c,/int\s*hid_device_probe/../^}$/,ogfileone:/driver...
#textbox(thought,hid_match_device()をもう一度呼んでいる){{
&ogdefs(hid_match_device(),hid_match_device); をもう一度...
}}
HID class driver &ogdefs(struct hid_driver, hid_driver); ...
終了行:
* HID Class の全体図 [#m2a1a245]
HID のドキュメントは &ogfileone(Documentation/hid); 以下...
#pre{{
+-----------+ +-----------+ +-----------+ +...
| Device #1 | | Device #i | | Device #j | |...
+-----------+ +-----------+ +-----------+ +...
\\ // \\ ...
+------------+ +--------...
| I/O Driver | | I/O Dri...
+------------+ +--------...
|| ||
+------------------+ +-----------...
| Transport Driver | | Transport ...
+------------------+ +-----------...
\___ ___/
\ /
+----------------+
| HID Core |
+----------------+
/ | | \
/ | | \
____________/ | | \____________...
/ | | ...
/ | | ...
+----------------+ +-----------+ +------------------+ ...
| Generic Driver | | MT Driver | | Custom Driver #1 | ...
+----------------+ +-----------+ +------------------+ ...
}}
** USB HID の場合 [#i888df82]
USB の場合で全体図のブロックとファイルの対応を見ていきま...
|ブロック|主なファイル|機能|h
|I/O Driver|&ogfileone(drivers/usb/core); の &ogfileone(d...
|Transport Driver|&ogfileone(drivers/hid/usbhid/hid-core....
|HID Core|&ogfileone(drivers/hid/hid-core.c);&br;&ogfileo...
|Generic Driver|&ogfileone(drivers/hid/hid-generic.c);|殆...
|Custom Driver|&ogfileone(drivers/hid-*,drivers/hid);|特...
#textbox(note,Boot Interface Subclass デバイス){{
USB HID device のうち Boot Interface Subclass デバイスに...
}}
** Generic Driver の実装と主要な処理 [#dbbcd142]
&ogfileone(drivers/hid/hid-generic.c); の実装をみると殆ど...
** HID User-space I/O driver [#o6030db0]
Application が HID device として機能できるよう、仮想的な...
** Transport Driver の実装 [#j3cd8abc]
"Transport Driver" の実装を見ていきます。"Transport Drive...
#code(c,/struct\s*hid_ll_driver\s*{/../^};$/,ogfileone:/i...
I2C, bluetooth, USB, Hyper-V(仮想環境内で外界と繋がった H...
|BUS|"Transport Driver" すなわち &ogdefs(struct hid_ll_dr...
|I2C|&ogdefs(i2c_hid_ll_driver);|
|bluetooth|&ogdefs(hidp_hid_driver);|
|USB|&ogdefs(usb_hid_driver);|
|Hyper-V|&ogdefs(mousevsc_ll_driver);|
|uhid|&ogdefs(uhid_hid_driver);|
&ogdefs(struct hid_ll_driver,hid_ll_driver); のメンバとそ...
|メンバ(メソッド)|説明|ラッパ関数|HID Core 内部使用|h
|start|start underlaying HW|&ogdefs(hid_hw_start(),hid_hw...
|stop|stop underlaying HW|&ogdefs(hid_hw_stop(),hid_hw_st...
|open|signal underlaying HW to start delivering events|&o...
|close|signal underlaying HW to stop delivering events|&o...
|power|requests underlying HW to go into given power mode...
|parse|this method is called only once to parse the devic...
|request|send report request to device|&ogdefs(hid_hw_req...
|wait|wait for buffered io to complete|&ogdefs(hid_hw_wai...
|raw_request|send report request to device|&ogdefs(hid_hw...
|output_report|send output report to device|&ogdefs(hid_h...
|idle|send idle request to device|&ogdefs(hid_hw_idle(),h...
USB HID device (&ogfileone(drivers/hid/usbhid/hiddev.c);)...
#code(c,/hiddev_connect/../hiddev_report_event/,ogfileone...
次のように実装されています。
|hid_device メンバ(メソッド)|呼び出し元|h
|&ogrefs(hiddev_connect);|&ogdefs(hid_connect(),hid_conne...
|&ogrefs(hiddev_disconnect);|&ogdefs(hid_disconnect(), hi...
|&ogrefs(hiddev_hid_event);|&ogdefs(mt_touch_event(),mt_t...
|&ogrefs(hiddev_report_event);|&ogdefs(hid_report_raw_eve...
#textbox(note,hid_device 構造体が持つメソッドについて){{
hiddev_connect .. hiddev_report_event メンバは HID Class ...
}}
** Custom Driver 向け Hook 機能 [#v7d5f9b2]
"Custom Driver" 向けに HID プロトコルを進める随所に hook ...
|メンバ (メソッド)|説明|HID Core 内部の呼び出し元(一部は ...
|&ogsearch(probe,".probe",/hid/);|new device in...
|&ogsearch(remove,".remove",/hid/);|device remo...
|&ogrefs(report_table,report_table,/hid/);|on which repor...
|&ogrefs(raw_event,raw_event,/hid/);|if report in report_...
|&ogrefs(usage_table,usage_table,/hid/);|on which events ...
|&ogsearch(event,".event",/hid/);|if usage in u...
|&ogsearch(report,".report",/hid/);|this hook i...
|&ogrefs(report_fixup,report_fixup,/hid/);|called before ...
|&ogrefs(input_mapping,input_mapping,/hid/);|invoked on i...
|&ogrefs(input_mapped,input_mapped,/hid/);|invoked on inp...
|&ogrefs(input_configured,input_configured,/hid/);|invoke...
|&ogrefs(feature_mapping,feature_mapping,/hid/);|invoked ...
|&ogrefs(suspend,suspend,hid*);|invoked on suspend (NULL ...
|&ogrefs(resume,resume,/hid/);|invoked on resume if devic...
|&ogrefs(reset_resume,reset_resume,/hid/);|invoked on res...
** HID デバイスを接続した場合の流れ [#g7505464]
HID class device の登録と HID class driver の関係を見てい...
USB, bluetooth, I2C, 他 接続にて HID device と認識し、HID...
#code(c,/int\s*hid_add_device/../^}$/,ogfileone:/drivers/...
#textbox(note,hid_ignore_list に含まれているデバイスのド...
&ogdefs(hid_ignore(),hid_ignore); はいくつかの条件判定と...
}}
&ogdefs(hid_add_device(),hid_add_device); は "Transport D...
#textbox(note, hid_have_special_driver の要素に格納したデ...
&ogdefs(hid_have_special_driver); の要素に格納してあるデ...
}}
#textbox(note,ドライバを後から組み込んだ場合について){{
&ogdefs(hid_register_driver(),hid_register_driver); にて...
}}
デバイスとドライバの照合は &ogdefs(hid_bus_match(),hid_bu...
#code(c,/int\s*hid_device_probe/../^}$/,ogfileone:/driver...
#textbox(thought,hid_match_device()をもう一度呼んでいる){{
&ogdefs(hid_match_device(),hid_match_device); をもう一度...
}}
HID class driver &ogdefs(struct hid_driver, hid_driver); ...
ページ名: