Android GingerBrea​d Sensor HALについて

795 views
Skip to first unread message

蔵花たけし

unread,
Oct 6, 2011, 11:35:19 AM10/6/11
to Android-Embedded-Japan
はじめまして。蔵花たけしともうします。


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()を誰が呼び出しているのかわかりませんでした。

以上

koba

unread,
Oct 6, 2011, 10:39:17 PM10/6/11
to Android-Embedded-Japan
kobaです。

On 10月7日, 午前12:35, 蔵花たけし <kuraba...@gmail.com> wrote:

> さて、このプロセスAとBをそれぞれ追跡しているのですが、
> プロセスBについては、threadLoop() を誰が呼び出しているのか追跡できませんでした。
> ご存知でしたらご教示願えないでしょうか?お願いします。
>
> プロセスA:  SensorManager.java の registerListener( ) ---> ・・・ --->
> poll_activate() ---> activate( )
>
> プロセスB:  ? --> ・・・―> SensorService::threadLoop() ->
> device.poll() ---> poll__poll() --->pollEvents()
>
> このthreadLoop()を誰が呼び出しているのかわかりませんでした。

SensorService クラスは Threadクラスを継承していて、threadLoopはThreadクラスのメソッドをオーバーライドして
いますね。
frameworks/base/libs/utils/Threads.cpp をみればthreadLoopの呼び出し元がわかります。

プロセスBはSystemServerですね。このページが参考になります。
http://blog.kmckk.com/archives/3691425.html
プロセスAもSystemServerじゃないかな。


蔵花たけし

unread,
Oct 8, 2011, 2:04:13 PM10/8/11
to android-emb...@googlegroups.com
ご回答いただきありがとうございます。
ご紹介いただいたサイトを参考に追跡してみます。
 
以上
 


 
2011年10月7日11:39 koba <tetsu...@gmail.com>:
--
---------------------------------------------------------------------
日本Androidの会組み込みWG
http://www.android-group.jp/index.php?%A5%EF%A1%BC%A5%AD%A5%F3%A5%B0%A5%B0%A5%EB%A1%BC%A5%D7%2F%C1%C8%A4%DF%B9%FE%A4%DF

日本Androidの会
http://www.android-group.jp/
---------------------------------------------------------------------
このグループに投稿するには、次の宛先にメールを送信してください。
android-emb...@googlegroups.com
このグループから退会するには、次へメールをお送りください。
android-embedded-...@googlegroups.com
その他のオプションについては、次の URL からグループにアクセスしてください。
 http://groups.google.co.jp/group/android-embedded-japan?hl=ja
---------------------------------------------------------------------

Reply all
Reply to author
Forward
0 new messages