デバイスの識別とアプリケーションへの通知なのですが・・・
まず、識別から
USBcoreがusb_device_id構造体を元にデバイスに対応したドライバを決定するようです。
しかし、これでは、ハードウェアから送信されるデータには、毎回ベンダIDやデバイスIDをデータと共に送信しなければならないという事でしょうか?
データだけ送信しても、どのデバイスドライバに処理を依頼するのか分かりませんよね?
ネットワークのようにソケットみたいなものがあるならできそうですが、そのようなものはないかと・・・
次に通知です。
キーボードからの入力の場合、readシステムコールを発行しハードウェア割り込みが発生するまで待機すると思いますが、GUIのマウスの方はどうやってデータを取得しているのでしょうか?
マウス用のデバイスファイルの存在は確認できました。
このファイルにあるデータを取ってくるのでしょう。
アプリケーションにマウスから割り込みがあったことを通知しないとポーリング方式のようになってしまいます。
誰が、どうやって通知しているのでしょう?
考えられるやり方
(1)GUIアプリケーションがスレッドを使用してreadシステムコールの発行
void catch(){ while(1){ [readシステムコールラッパ] <取ってきたデータの処理> } }
(2)シグナルを使ってアプリケーションに割り込む。
(そんなシグナルあったっけ?)
kpsmoused というマウス受信用のカーネルスレッドがあるようです。
androidのタッチスクリーンの場合、poll関数を使って、デバイスドライバの状態変化を待っているそうです。
(ポーリング方式ですかね)
分かる方いますでしょうか?
ちなみに、今回はキャラクタ型のデバイスの話に絞らせてもらいます。
Linux 64bit Debian系です。
[追記]
usb_device_id構造体を見ましたが・・・
このデバイスがマウスであるという情報を格納するためのメンバ変数が見つかりません。
このデバイスがUSBであるという識別をするためのマクロはあるようですが・・・
このデバイスがマウスであるという情報はどのようにして伝えているのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/06 14:52
退会済みユーザー
2017/08/06 15:16
2017/08/06 15:19
2017/08/06 15:34 編集
2017/08/07 03:24
2017/08/07 03:55
2017/08/07 04:22
2017/08/07 04:26
2017/08/07 04:34
2017/08/07 04:44
2017/08/07 04:54
2017/08/07 07:30
2017/08/07 08:13
2017/08/07 10:16
2017/08/07 10:30
2017/08/07 10:36
2017/08/08 05:16
2017/08/08 06:01
2017/08/08 09:07
2017/08/08 09:25
2017/08/08 10:41
2017/08/08 10:52