qgmap 0.1.2 リリース

qgmap 0.1.2 をリリースします。→ダウンロードページ
最近は GW-CF54G のドライバをいじっていたりしたので、また間が開いてしまいました ^^;

今回の変更点は以下のとおりです。

  • PHS位置取得機能
  • フリーハンド範囲指定機能でメモリ不足になる問題を修正
    (bxk07344 様ご報告ありがとうございます)
  • 緯度経度指定ジャンプ機能のバグを修正
    (みじま様ご報告ありがとうございます)
  • 描画処理の見直し (若干高速化された?)

今回の目玉機能は PHS 位置取得機能です。
bitWarp を含む、WILLCOM のインフラを使った PHS カードで位置情報を取得します。
ちなみに、bitWarp等に契約していなくてもカードさえあれば位置情報は取得できます(たぶん)。
ダイアルするわけではないので通信料金もかかりません(たぶん)。

PHSカードがスロットに挿してある状態で「P」キーを押すと近くのPHSアンテナの位置情報を取得し、その位置へスクロールします。アンテナの位置を示しますので、現在位置と大きく異なる可能性があります。参考程度に考えてください。

PHSカードで現在位置取得
PHSで現在位置取得

バグフィックスとしましては、bxk07344様にご報告いただいたメモリ不足の問題と、みじま様にご報告頂いた緯度経度していジャンプ機能の計算ミスを修正しています。

また、画面描画処理(paintEvent)を、必要な部分のみ行うように修正しました。
これにより、若干スクロールが高速になっています。
マーカをOFFにすると、特に高速化を実感できると思います。

 

今回も苦手なダイアログ (PHS位置取得時の進捗ダイアログ) を実装しています。
前回 tera 様に教えていただいたため、widget の配置はすんなりいったのですが、ダイアログの「OK」ボタンを消す方法が分からず、上記のスクリーンショットの通り、OKボタンが表示されたままです ^^;

ちなみに、PHS位置取得機能のATコマンドや pppd, chat コマンドの使い方は tera 様の gm_lite の phs_zau のコマンドラインをそのままパクってます ^^;

ネットワークアイコンが表示された!

GW-CF54G を挿してネットワークアイコンが表示されるようになりました!

teraさまのコメントのとおり、class "wlan-ng" のドライバとして /etc/pcmcia/????.conf に追記すればOKでした。
こう書くと簡単そうですが、ここまでくるには色々紆余曲折がありまして・・・・。

実は初めに試したときは動かなかったのです。
おそらく cardmgr を再起動しわすれていたか、/etc/pcmcia のスクリプトをいじりすぎて動かない状態だったのだと思います。

これがダメだったので、各種スクリプトにデバッグ文を入れまくって挙動を解析したりとかなり遠回りしてしまいました。

片っ端から /opt/QtPalmtop 以下のバイナリを strings してみたり、cardmgr に細工があるのかと pcmcia-cs の cardmgr をコンパイルして差し替えてみたり ・・・。

で、ついにネットワークアイコンを表示させるトリガを発見!

/var/lib/pcmcia/stab ファイルでした。

Socket 0: PLANEX GW-CF54G
0    wlan-ng    mcf25    0    wlan0
Socket 1: empty

↑こういう中身

このファイルは cardmgr が作成するもので、カードを刺すとカード名、クラス名、ドライバ名、デバイス名が書き出されます。
このクラス名の部分が "wlan-ng" のエントリが書き出されたときにネットワークアイコンが表示されるようです!(どーん)

なので、多分ですが、有線LANのカードを挿した状態でこのファイルを書き換えればネットワークアイコンが表示されるはずです。使い道無いですが^^;

いや、こんなとこ監視してるとは思いませんでした。

これでネットワーク接続のUI部分とドライバ部分は動くようになったので、常用可能な状態に一歩近づきました!
ただ、 このドライバの suspend, resume がうまく動かないようで、一度 suspend すると resume しても正しく動作しないようです。

zaurus の一般的な動作として、無線LANカードを挿すとすぐ suspend 状態になり、ネットワーク接続をするときに resume するようにできているため、suspend / resume に対応は必須条件。
ここをどうやってクリアするか・・・ドライバに手を入れるしかないかなぁ。
resume 時に catdctl eject , insert でドライバロードし直せばごまかせるかな?

GW-CF54G を Zaurus で使う??

最近PDAは人気が低迷していることもあり、CFタイプの無線LANカードが入手困難になっている中、Planex の GW-CF54G は他と比べてビックリするくらい低価格で購入できる入手性が高い製品だ。

他の製品は5000円前後である中、この GW-CF54Gは 1580円!!(amazon で10/22現在)
これくらいの値段なら人柱的にも手が出しやすいね。

元々PDAを狙っていることもあって、Windowsをサポートしないことも低価格の理由なのかな? それとも低価格なのは投げ売りのせい?

とにかく、何とか Zaurus で使えないか色々調べてみたところ、Kernel-2.6 にはドライバが入っているとか、OpenBSD/Zaurus では動作報告があるとかはあったものの (参考ページ) 、動作報告は見つけられなかった。

まぁ、でも  Kernel-2.6 で動くなら 2.4 に移植すれば動くだろうという安易な考えで、Amazon の購入ボタンを押してしまった。

GW-CF54G 買っちゃった
GW-CF54G 買っちゃった

当たり前だが、そのまま Zaurus に挿してもうんともすんともいわない。
そもそも Zaurus には Prism 系のドライバしか入ってないので動くわけないんだけど、電源LED位点くかなと思ったんだけどな・・。

本格的に調べ始めると、Kernel-2.6 用では libertas というドライバのようで、このページで開発されているようだ。
2.6 用のドライバとか色々ダウンロードしたりして見ていたら、 fwcutter でファームウェアを取り出す元ファイルが、何かのドライバのヘッダファイル形式で、そこからバイナリに変換しているらしい。

気になって見てみると、ファームウェアの元は Gumstix のファイル置き場の cf8385-5.0.16.p0-26306.tbz だった。
展開してみると・・・あら、Kernel-2.4.22 用のドライバじゃないの。
しかも、Marvell 社謹製(?)の。

これを Zaurus 用にビルドし直すだけで動くのでは・・・?

で、

お!

おお!

ちょっと制限があるので常用はできないけど、ちゃんと通信できるじゃん!
とりあえず確認だけなので、WEPもかかっていない AP との通信だけだけど。

制限というのは、ネットワークアイコンが表示されないというもの。
なので、コマンドラインからSSIDの設定やらいろいろしないといけない。
これじゃ使いにくくてしょうがない。

hotplug 的に wlan のイベントがこないのが原因なのかなぁ。
もうちょっと調べてみないと。

とりあえず、Linux のネットワークデバイス的にはちゃんと動いている・・・ようにみえる。
これは期待できそう。

qgmap 0.1.1 リリース

ちょっと間が開きましたが、 qgmap の 0.1.1 をリリースします。 →ダウンロードページ

0.1.1 の新機能は以下のとおりです。

  •  フリーハンド地図取得範囲指定機能

これはコメント y 様から頂いたご要望で、GM_Lite で地図をダウンロードする際の取得コードを、qgmap 上で手書きで指定できるものです。

ちょっと分かりづらいので、画面で説明します。

まず、地図を取得したい範囲を画面に収まるように、移動&ズームします。
そして、「D」キーを押します。すると、以下の画面のようになります。

フリーハンド範囲指定モード
フリーハンド範囲指定モード

このモードに入ると、画面のスクロールやズームはできなくなります。
モードを抜けるにはもう一度「D」キーを押してください。

スタイラスで画面をなぞると、赤い線で範囲を指定することができます。
スタイラスを離すと、線で囲った領域が塗りつぶされます。

範囲の指定
範囲指定の様子

この様にして、取得したい領域を赤で塗りつぶした状態にしていきます。「BS」キーで無制限にアンドゥできます。

取得したい範囲を塗りつぶし終わったら、「OK」を押してください。
以下のダイアログが表示されます。

取得ズームレベル指定
保存範囲・形式指定ダイアログ

このダイアログで、取得するズームレベルの範囲を指定します。0が最詳細、19が最広域となります。
現在表示しているズームレベルも表示していますので、参考にしてください。

出力フォーマットは、シェルスクリプト形式 (down_imgs 用) と、per形式 (down_imgs.pl 用) が選べます。

指定が終わったら、OKキーを押してください。
指定した範囲の地図取得コードがクリップボードに保存されます。

メモ帳や、ZEditorなどのエディタにペーストして、お好きなファイル名で保存してください。

ZEditor にペーストした様子
ZEditor にペーストした様子

このコードを down_imgs や down_imgs.pl に貼り付けて実行することで、手書きで指定した範囲の地図を取得することができます。

 

余談になりますが、私にとってダイアログ等のGUIが鬼門のようで、この程度のダイアログなのにかなり時間がかかってしまいました ^^;
QDialog は QWindow と違って mainWidget (?) を指定できないせいか、Dialogのサイズに合ってくれなくて・・。setGeometory で固定的に配置してしまったのですが、こういうものなんでしょうか?
リサイズ時は自前で再配置しないといけないってこと?

あと、うまくダイアログが作れなくて、手抜きで Qt Designer でダイアログを作成して .ui ファイルを作成したのにその通りに表示されなくてゲンナリ・・・。
結局今回の開発にかかった時間の半分以上はダイアログまわりでした。
GUI は難しいですねぇ。

Ubuntu PC に Zaurus をUSBネットワークで繋げる

えーと、特に qgmap の進捗が無いので、小ネタを一つ・・・ (^^;

私の自宅パソコンでは Ubuntu 8.04 を使っているのですが、そのままでは zaurus と PC を付属のUSBケーブルで繋げても、USBネットワーク接続ができません。
確か、pdaXrom などの代替 OS なら繋がったような気がしますが、あまり需要がないのか、純正ROMの Zaurus はデフォルトでは認識されないのです。

ですが、カーネル自体には zaurus の USB ネットワークドライバは入っているので、ビルドしてあげれば USB ネットワークで繋げることが可能です。

手順
1. カーネルソースを取得する

現時点の Ubuntu 8.04 での最新カーネルは 2.6.24 ですので、ソースパッケージをダウンロード&インストールします。

$ sudo apt-get install kernel-source-2.6.24 

2. カーネルソースの展開

カーネルソースを作業ディレクトリ ~/kernel に展開します。

$ cd
$ mkdir kernel
$ cd kernel
$ tar xjf /usr/src/linux-source-2.6.24.tar.bz2

3. カーネルコンフィグの変更

現在のカーネルコンフィグをベースに zaurus ドライバを有効にします。2行目の config-2.6.24-19-generic は、アップデート等で変わる可能性があります。一番新しい(バージョンが大きい)ものを使用しておけば間違いないと思います。

$ cd linux-source-2.6.24
$ cp /boot/config-2.6.24-19-generic .config
$ make oldconfig
$ make menuconfig

設定画面になりますので、以下の階層をたどり、「Sharp Zaurus (stock ROMs) and compatible」でMキーを押下し、モジュール化指定<M>にします。

Device Drivers  --->
   Network device support  --->
     USB Network Adapters  --->
<M>   Sharp Zaurus (stock ROMs) and compatible

設定を保存して終了します。

4. カーネルモジュール(ドライバ)のコンパイル

すべてをコンパイルするとかなり時間がかかるので、最低限のモジュールだけビルドします。

$ make modules_prepare
$ make M=drivers/net/usb/ modules

特にエラーがでなければビルド成功です。

5. ドライバのインストール

インストールというより、単純にファイルをコピーしてしまいます。
パッケージ化するのも面倒だったので、そのままコピーしてしましました。

$ sudo cp drivers/net/usb/zaurus.ko /lib/modules/2.6.24-19-generic/kernel/drivers/net/usb/
$ sudo depmod -a

最後の depmod でモジュールデータベースを再構築するので、忘れずに実行してください。

以上で、ドライバのビルド&インストールは完了です。
zaurusとPCをつなげると、PC上では usb0 というインターフェースが見えるはずです。

ifconfig usb0 でIPを設定すれば使えるようになりますが、/etc/network/interfaces に以下の行を追加すると、USB接続時に自動で IP アドレスを設定するようになり、便利です。

10/19修正
auto usb0 → allow-hotplug usb0 に訂正しました。tera様ご指摘ありがとうございました!

allow-hotplug usb0
iface usb0 inet static
address 192.168.129.1
netmask 255.255.255.0

注意としては、カーネルのバージョンが上がった場合、また新しいカーネルでビルドしなおす必要があります。アップデート後にUSBネットワークが使えなくなった場合は、カーネルバージョンを確認して、ビルドしなおしてみてください。

以上、小ネタでした ^^;