« [N810]強制USB HostモードでNOKIA N810にUSB機器をいろいろ接続 | Main | [N810]NOKIA N810で使うUSB Aオスのジェンダチェンジャを作ってみた »

2008.01.29

[N810]GPS対応地図ソフトMaemo Mapperに、D-Bus Interface経由で特定の地点を表示させる

NOKIA N810で動くGPS対応地図ソフトMaemo Mapper

マップデータをGoogle MapsやVirtual Earthなどからローカルに一括ダウンロードして使えるという禁断の機能が付いており、GPXフォーマットでTrackやRouteの読み書きができるなど、結構出来がよくてホクホクしています。

GeocodingなどのWebサービスと連携させるとよかろうなと思いますが、Maemo Mapperを外部からコントロールする機能が無いことにはどうにもなりません(※)。

※:どうにもならないことはないですが面倒です。

MaemoにはD-Busというプロセス間通信の機構が搭載されていて、D-Bus Interfaceが実装されているアプリは、外部からコントロールができるようになっています。

Qtopiaにおける、qcopメッセージみたいなものですね。D-Bus系の処理をするコマンドは、「dbus」で始まる名前で存在しており、特定のプロセスに対してメッセージを送る場合は、dbus-sendを使います。

Maemo Mapperにも、数は少ないながらD-Busのメソッドとシグナルが実装されています。詳しい情報は、ソースのdbus-ifc.hにあります。

でもって、以下のようなシェルスクリプトを書いて「map」という名前で保存した後に実行権を付与し、パスの通ったところに置いたならば、

#!/bin/sh

dbus-send \
--session \
--type=method_call \
--print-reply /com/gnuite/maemo_mapper \
--dest=com.gnuite.maemo_mapper \
com.gnuite.maemo_mapper.set_view_center \
double:$1 double:$2 int32:$3 double:$4

以下のようなコマンドで、Maemo Mapperに特定の地点を特定のズームレベルで表示させることができます。

凡例) map [lat] [lon] [zoom level] [rotate angle]

map 100.000 100.000 5 0.0

ただし、rotate angleの指定はどうも効いていないみたいで、変な角度で表示されます。

カーソルキーの上を押すと上に向き直るので、それでしのごうかと思っています。

もし角度を指定できたら教えてください。実際の処理はソースファイルdbus-ifc.cに書いてあります。 読んでもよく分かりませんでした。

osso-browserにD-Bus Interfaceから特定のURLを表示させる

N810標準のブラウザである「browser」またの名を「osso-browser」に、外部から特定のURLを表示する場合は、browser_dbuscmd.shという標準で存在するスクリプトを使います。

browser_dbuscmd.shの中身は以下の通りです。dbus-sendを使ってますね。

#!/bin/sh

dbus-send --system --type=method_call --dest="com.nokia.osso_browser" --print-reply /com/nokia/osso_browser/request com.nokia.osso_browser.$1 string:"$2"

exit 0

browser_dbuscmd.shの使い方は以下の通りです。

新しくウインドウを開いて表示
browser_dbuscmd.sh open_new_window http://www.google.co.jp/

既存のウインドウで表示
browser_dbuscmd.sh load_url http://www.google.co.jp/

一番手前のウインドウを一つ閉じる
browser_dbuscmd.sh close_window

osso-browserを終了させる
browser_dbuscmd.sh exit_browser

これでJavaScriptも実行できます。

既存のウインドウに対して実行

browser_dbuscmd.sh load_url "javascript: alert(document.title);"

RubyからD-Bus

Ruby Maemoにdbusというライブラリが収録されており、これでD-Busをいじることができます。

詳しくはググってください。

require 'dbus'

|

« [N810]強制USB HostモードでNOKIA N810にUSB機器をいろいろ接続 | Main | [N810]NOKIA N810で使うUSB Aオスのジェンダチェンジャを作ってみた »