2010年11月29日月曜日
hardwareのeventを拡張しようと思ったら
まだ、メモ書き程度だけど、調べたことを忘れるのもイヤなのでメモしておく。
動かしたわけではなく、あくまで読んでみた結果だけど。
EventLoopの肝は、
eclair/frameworks/base/services/java/com/android/server/KeyInputQueue.java
の Thread mThread = new Thread("InputDeviceReader") {
の部分。
ここで、hardwareからイベントを取得している。
具体的には、readEventで、こいつの実態はJNIを利用して、
android_server_KeyInputQueue_readEvent()
といった関数として定義されている。
この関数の中でさらにEventHub::getEventをコールすることで
/dev/からいろんなデバイスのイベントを取得している。
EventHub::getEventのなかで、イベントのcodeやscancodeを作ったりしている。
それを上のmThreadで読んでいるわけだ。
で、ここからイベント配信をしている。
詳しい仕組みは、今後読み解いていく。
もし、ハードウェア的にデバイスを足したいときは、
JNI層から手を入れる必要があり、
擬似的にイベントを発行するデバイスをJava層で作ろうとしたら、
readEventあたりを書き換えることになりそう。
もしくは、別スレッドを作って、ソコからイベントキューに勝手にイベントを足すとか。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿