[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'
Continue reading "[N810]GPS対応地図ソフトMaemo Mapperに、D-Bus Interface経由で特定の地点を表示させる" »
Recent Comments