2010年7月10日土曜日

GPSを動かす仕組み

色々調べて分かったこと。
シェアードライブラリ libhardware_legacy がGPSデバイスとのI/Fの入り口になる。
このライブラリの中で、GPSデバイスに対する制御のためのI/Fが取得される。
GPSを操作するときは、得られたI/F -> GPSライブラリ へと呼び出される形になる。
デバイスへのR/Wとかパースとか、実処理はGPSライブラリによって行われる。

で、現状はI/Fの接続先が、GPSデバイスエミュレータ用のダミーになっている。
つまり、GPSライブラリ自体が存在せず、ダミーにつながれていて、ダミーなので当然、I/Fから得られる情報は全部 false。
つまり、デバイスを見に行こうにも見に行くことなど到底ムリ。な、わけ。

これは、libhardware_legacy をmakeするときに、GPSについてはダミー関数をリンクしちゃってるってことで、逆に考えれば、GPSライブラリを使ったちゃんとした(?)libhardware_legacyをmakeしてやればいいんじゃないの?
んで、現状のと入れ替えちゃえば動くかな?
って、感じの方針で行ってみる。

いつものとおり、かなりイイカゲン。

んで、ぐるぐるしてたら、eclair用とおぼしきgpsライブラリの実装を見つけた。
ttp://gitorious.org/android-on-freerunner/freerunner_platform_hardware_hw/trees/eclair/gps

たぶん、これでいけるんじゃないか?と思って、さらにぐるぐるしてたら、実際に独自の実装で同じことをされてる方がおられた。
ttp://labs.beatcraft.com/ja/index.php?bc9%2FSoftware%2FAndroid%2Fgps

をぉ!これでいけるかも!?
早速、実験♪
と言うところが、3日ほど前のオイラ。

・・・環境作るのに時間かかった・・・(´・ω・`)

ケド、、、、
実験用のlibhardware_legacyをビルドしてGPSの初期処理なんかを適当にやってみると、、
以前は「GPSが見つからんがな」とか言って起動しなかった GPS Searcher が起動したよ(゜д゜)
位置情報は拾ってないけどw


で、現状での問題点がいくつかある。
  • GPS設定のUIが出せていない。
    GPSの強制ONはできてるからとりあえず後回し。
  • なぜかwifiがつながらなくなる。
    ONにすらできない。libの作り方を間違ってるか、制御用のソースが別に必要なのか、わからん。
  • 位置情報を教えてくれない。
    処理が抜けてる気がするww
うむむ、、、
どれもこれも致命的じゃまいか(笑)

まぁ一歩前進、と言うことだけど
公開できるレベルじゃないなぁ~(´・ω・`)
まだ先は長い。

0 件のコメント:

コメントを投稿