2009'06.29 (Mon)
[Android]センサーまわりを調べてみた
MacbookにWindows7 RCを入れようとしたら
キー入力効かずに先に進みませんよ。とほほ。。。
Androidでセンサーまわりを調べてみた。主にJNIのあたり。
関係するファイルは以下のとおり
/frameworks/base/core/java/android/hardware/Sensor*.java
/frameworks/base/core/jni/android_hardware_SensorManager.cpp
/hardware/libhardware/hardware.c
流れとしてはこんな感じ。
SensorManagerのコンストラクタでsensor_module_init()が呼ばれる。
こいつはandroid_hardware_SensorManager.cppの中に実装されている。
この中でセンサーモジュールのShared Libraryを呼び出して登録をする。
実際に呼び出す処理はhardware.cのhw_get_module()で実行される。
ロードに失敗するとセンサーは使えない。そしてデフォルトのファイル名は決まっているみたい。
(sensorの場合、sensors.default.soという名前)
setpropで設定すれば変えられるみたいだけどまだ調べきれていない。。。
モジュールのロードが終わったら、どのセンサーが使えるかを登録する。
sensors_module_get_next_sensor()で情報を取得し、登録。
登録が終わったらセンサー監視スレッドを立ち上げる。
監視スレッドはまずsensors_data_init()を実行する。
その後、sensors_data_open()を実行し、ポートを初期化。
初期化したらsensors_data_poll()でデータを取得する。
ここで呼ばれているのはすべてandroid_hardware_SensorManager.cppで定義されている。
じゃ、この関数たちはどこに実態があるのか、というと関数ポインタでロードしたShared Libraryの
中で定義される関数にジャンプする。
実際に参考になるのは
/development/emulator/sensors/sensors_qemu.c
が参考になる。これをセンサーに合わせて修正すればFrameworkまでデータを上げることが
出きるはず。
なのだが。。。
なぜか自分の環境ではデータをポインタに代入しようとするとなぜか落ちる。
スタック足りてないのか??むむむ。。。謎だ。。。
ちなみにセンサーモジュールに関しては
・直接デバイスをアクセスする
・センサー監視デーモンを作ってそっちと通信
の2種類の実装方法が考えられる。どっちがいいのかな??
キー入力効かずに先に進みませんよ。とほほ。。。
Androidでセンサーまわりを調べてみた。主にJNIのあたり。
関係するファイルは以下のとおり
/frameworks/base/core/java/android/hardware/Sensor*.java
/frameworks/base/core/jni/android_hardware_SensorManager.cpp
/hardware/libhardware/hardware.c
流れとしてはこんな感じ。
SensorManagerのコンストラクタでsensor_module_init()が呼ばれる。
こいつはandroid_hardware_SensorManager.cppの中に実装されている。
この中でセンサーモジュールのShared Libraryを呼び出して登録をする。
実際に呼び出す処理はhardware.cのhw_get_module()で実行される。
ロードに失敗するとセンサーは使えない。そしてデフォルトのファイル名は決まっているみたい。
(sensorの場合、sensors.default.soという名前)
setpropで設定すれば変えられるみたいだけどまだ調べきれていない。。。
モジュールのロードが終わったら、どのセンサーが使えるかを登録する。
sensors_module_get_next_sensor()で情報を取得し、登録。
登録が終わったらセンサー監視スレッドを立ち上げる。
監視スレッドはまずsensors_data_init()を実行する。
その後、sensors_data_open()を実行し、ポートを初期化。
初期化したらsensors_data_poll()でデータを取得する。
ここで呼ばれているのはすべてandroid_hardware_SensorManager.cppで定義されている。
じゃ、この関数たちはどこに実態があるのか、というと関数ポインタでロードしたShared Libraryの
中で定義される関数にジャンプする。
実際に参考になるのは
/development/emulator/sensors/sensors_qemu.c
が参考になる。これをセンサーに合わせて修正すればFrameworkまでデータを上げることが
出きるはず。
なのだが。。。
なぜか自分の環境ではデータをポインタに代入しようとするとなぜか落ちる。
スタック足りてないのか??むむむ。。。謎だ。。。
ちなみにセンサーモジュールに関しては
・直接デバイスをアクセスする
・センサー監視デーモンを作ってそっちと通信
の2種類の実装方法が考えられる。どっちがいいのかな??
2009'06.27 (Sat)
[Android]x86ビルドの方法 最新版
会社の人にブログが見つかったらしい。
変な事は書かないように気をつけないと。。。
さて、最近あっちゃこっちゃでx86でのビルド方法を聞かれるので最新版をまとめてみた。
http://park5.wakwak.com/~kobayuta/cgi-bin/wiki.cgi?page=Android
よければ参考にしてくださいな。
変な事は書かないように気をつけないと。。。
さて、最近あっちゃこっちゃでx86でのビルド方法を聞かれるので最新版をまとめてみた。
http://park5.wakwak.com/~kobayuta/cgi-bin/wiki.cgi?page=Android
よければ参考にしてくださいな。
2009'06.25 (Thu)
2009'06.25 (Thu)
2009'06.21 (Sun)
[Android]独自のセンサーを使えるようにしてみるテスト
ALSAもよく分からなくなってきたので今度はセンサーに手をつけてみた。
センサーモジュールを作る場合
/hardware/moddules/
以下に置けばいいらしいのだけどなぜかビルドしてくれない。
そーいえば、overlay.cppもビルドされてないよなー、むむむ。
ってことで
development/emulator/sensors以下のものを改造してやってみる。
そのままだと、sensors.default.soと言う名前で作らないとSensorService起動時に
ライブラリを呼んでくれないので、Android.mkを手直し。
取り合えず下回りまではデータを取得することができた。
って、色々やってたらSystemServerが動かなくなってしまった。。。
さてまたデバッグ。。。orz...
センサーモジュールを作る場合
/hardware/moddules/
以下に置けばいいらしいのだけどなぜかビルドしてくれない。
そーいえば、overlay.cppもビルドされてないよなー、むむむ。
ってことで
development/emulator/sensors以下のものを改造してやってみる。
そのままだと、sensors.default.soと言う名前で作らないとSensorService起動時に
ライブラリを呼んでくれないので、Android.mkを手直し。
取り合えず下回りまではデータを取得することができた。
って、色々やってたらSystemServerが動かなくなってしまった。。。
さてまたデバッグ。。。orz...





