はじめまして。蔵花たけしともうします。
http://gitorious.org/xdandroid/device_xdandroid/trees/fef368f7e6d4ec82a7eeae39cc85b556cae58014/msm/libsensors
の下の
を解読中なのですが、
下記のactivate()メソッドと、pollEvents()メソッドを
呼び出しているプロセスがいったい何者かがつきとめられず、困っています。
★init_nusensors(hw_module_t const* module, hw_device_t** device)
dev->device.common.version = 0;
dev->device.common.module = const_cast<hw_module_t*>(module);
dev->device.common.close = poll__close;
dev->device.activate = poll__activate;
dev->device.setDelay = poll__setDelay;
dev->device.poll = poll__poll;
●sensors_poll_context_t::sensors_poll_context_t() コンストラクタ
パイプ書き込み用: mWritePipeFd
パイプ読み込み用: mPollFds[wake].fd
を用意
■sensors_poll_context_t::activate(int handle, int enabled)
|----- write(mWritePipeFd, &wakeMessage, 1);
▲sensors_poll_context_t::pollEvents(sensors_event_t* data, int count)
|----- read(mPollFds[wake].fd, &msg, 1);
私の理解では、
「プロセスAがactivate()メソッドを呼び出し、”W”メッセージをmWritePipeFdを通じてパイプバッファに送り込む。
プロセスBがpollEvents()メソッドを呼び出し、メッセージが読み込み可能な状態(POLLIN)になったら、
そのメッセージをmPollFds[wake].fdから読み込む。
これにより、プロセスAとBとが、プロセス間通信(単方向 A->B)できていることを確認している。」
と考えております。理解あっています?
さて、このプロセスAとBをそれぞれ追跡しているのですが、
プロセスBについては、threadLoop() を誰が呼び出しているのか追跡できませんでした。
ご存知でしたらご教示願えないでしょうか?お願いします。
プロセスA: SensorManager.java の registerListener( ) ---> ・・・ --->
poll_activate() ---> activate( )
プロセスB: ? --> ・・・―> SensorService::threadLoop() ->
device.poll() ---> poll__poll() --->pollEvents()
このthreadLoop()を誰が呼び出しているのかわかりませんでした。
以上