Network Users' Group ``wheel'' / Dai ISHIJIMA's Page / SL Zaurus関連 /
Paldio Palmtop Mail

初版: 2003/01/10
最終更新日: 2004/02/12


FreeBSDでSL Zaurusのアプリ開発
〜 Paldio Palmtop Mail 〜



★PPMのコンパイル

自作のものも含め、いろんなフリーウェアをFreeBSDでSLザウルス向けに コンパイルできることがわかりました。 次に、拙作 「Paldio Palmtop Mail (PPM)」 をコンパイルしてみます。 このPPMは、コマンドラインベースのメール送受信ソフトです。 これを使うと、 PHSデータカードとパルディオシリーズのPHS端末を接続した HP200LXや各種UNIXマシンで、「パルディオEメール」を 利用できるようになります。

コンパイルの手順は以下のとおりです。

まず、適当なディレクトリに移動してソースを展開します。

	% lha xet ppm02.lzh
	% mv hosoku.txt hosoku02.txt
	% mv readme.txt readme02.txt
	% lha xetf ppm03.lzh
	% mv hosoku.txt hosoku03.txt
	% patch < source.dif
	% lha x hpb00.lzh hpbsrc.lzh
	% lha xet hpbsrc.lzh patch.dif
	% patch < patch.dif
次にメイクファイルを生成します。 このときに、「CC=gcc」行を書き換えて、 クロスコンパイラを使うようにしておきます。 そのあと、メイクします。
	% cpp -DGCCUNIX < makefile.cpp |
	sed 's+CC=gcc+CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc+' > makefile
	% make
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c   -Wall ppm.c
	ppm.c:906: warning: return type of `main' is not `int'
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c   -Wall chat.c
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c   -Wall codeconv.c
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c   -Wall mimeconv.c
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c   -Wall tty.c
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc  -o ppm ppm.o
	chat.o codeconv.o mimeconv.o tty.o 
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc -c   -Wall ppmsend.c
	ppmsend.c:1154: warning: return type of `main' is not `int'
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc  -o ppmsend ppmsend.o
	chat.o codeconv.o mimeconv.o tty.o
「main()関数の型がintとちゃいますなぁ」とウォーニングが出ますが、 これはまぁいいでしょう。これだけでコンパイル終了です。 簡単ですね(笑)。

なお、コンパイルに必要なソースをまとめたアーカイブは こちら (ppm03-src-slzaurus.lzh) にあります。 実行形式は こちら (ppm03-bin-slzaurus.tgz) です。


★PPM仕様変更

2004/02/05に、パルディオEメールのセンタ側で仕様変更がありました。 この変更に対応するための パッチppm04.lzh として2004/02/12に公開しました。


★PPMのインストール

PPMの実行ファイル「ppm」と「ppmsend」を、 $PATHに登録してある適当なディレクトリに置きます。 わたしは$HOME/bin (/home/zaurus/bin) を $PATHに登録してあるので、ここに置きました。

次に設定ファイルppm.iniを適当なディレクトリに置いて 編集します。電話番号とパスワードが必須設定項目です。 この二つを必ず現在使っているものに書き換えてください。


★PPMの実行

実行にはもちろん、PHS端末とPHSデータカードが必要です (CF型PHS端末でもいいかもしれません)。 わたしの手元にあるのは、「パルディオ633S」と「モバイルカードデュオ」ですが、 「モバイルカードデュオ」はフルサイズPCカードなので、 そのままではSLザウルスに接続できません。 そこで、ダイヤテックの「CF-PCカードアダプター」を使ってつなぎます。

CF-PC adaptor

SLザウルスでは、PHSデータカードを接続して電源を入れると、 カードが自動的に認識されて「/dev/ttyS3」に割り当てられ、 「/dev/modem」からシンボリックリンクが張られるようです。 というわけで、PPMの起動時に指定するデバイスファイルは 「/dev/modem」にします。

さて、準備ができたので実行してみます。 SLザウルスの「ターミナル」から「ppm /dev/modem」で 起動してみます。

	bash-2.05$ ppm /dev/modem
	ppm: establishing connection with the PHS
…動きません(泣)。


★なぜPPMは動かなかったか

コンパイルしたPPMをいきなり「ターミナル」から動かしてみましたが うまくうごきませんでした。 症状としては、PHSデータカードと通信できていない感じです。 PHSデータカードを接続して電源を入れると、 自動的に認識されてはいますが、今一歩、何かが足りないようです。

PCカードを使う前には、「認識」させるだけではなく、 何かコマンドを入れて「有効」にしておかないといけないのではないか、 と思い、イロイロ調べてみることにしました。 手始めに、 /etc/pcmcia/の下にあるスクリプトを読んでみたり、 syslogdを動かして ログを/var/log/messagesに吐かせてみたりしました。 さらに、 Linuxの日本語マニュアルの作成と配布を行っている 「JM Project」 (linux.or.jp/JM/) でマニュアルを漁ってみました。

その結果、cardctlコマンドを使えばいいのでは… という結論に達しました。 そこで、PHSデータカードを接続した状態で、 カードの状態を調べてみます。

	bash-2.05$ cardctl status
	Socket 0:
	  3.3V 16-bit PC Card [suspended]
	Socket 1:
	  no card
カードを接続して電源を入れると、カードを認識して初期化したあと、 休止(サスペンド)状態になっているみたいです。節電のためでしょうか。

カードがサスペンドしてたら使えるわけはありませんので、 有効化してみます。

	bash-2.05$ cardctl resume
	bash-2.05$ cardctl status
	Socket 0:
	  3.3V 16-bit PC Card
	  function 0: [ready], [wp], [bat dead], [bat low]
	Socket 1:
	  no card
これでなんとかいけそうです。


★PPMの起動に成功

ということで改めてPPMを起動すると、
	bash-2.05$ ppm /dev/modem
	ppm: establishing connection with the PHS
	ppm: dialing...
	ppm: connected
	ppm: connecting e-mail server
	ppm: you have 1 messages
	ppm: reading message #1
	ppm: deleting message #1
	ppm: disconnecting
となり、無事にパルディオEメールを読むことができましたv(^^)


★まとめ

SLザウルスにPHS端末とデータカードを(CF-PCカードアダプターで)つないでやると、 普通のPCと同様にPIAFS通信ができるようになるようです。 注意しないといけないのは、 自作プロセスからPHSにアクセスするときには、 「cardctl resume」で カードを有効化してやらないといけない点です。

拙作PPMは、他のUNIX系OS同様にSLザウルスでも使うことができました。 SLザウルスで使う場合は、デバイスファイルとして、 「/dev/modem」を指定し、 実行の直前に「cardctl resume」を実行しておく必要がありました。

	bash-2.05$ cardctl resume
	bash-2.05$ ppm /dev/modem
	bash-2.05$ cardctl suspend
こんな↑感じですね。

executing PPM