Network Users' Group ``wheel'' / Dai ISHIJIMA's Page / SL Zaurus関連 /
PD-04
使えてるかも | 使えるまで | 日本語も | ツール | ハードコピー

初版: 2004-08-08
最終更新日: 2014-10-12


画像はハメコミ合成です


PD-04
ハメコミ合成でないのはコチラ

日本橋で、シチズンのPD-04という赤外線プリンタを買いました。 いや、まだSL-Zaurusから使えてないですよ。 上のデジカメ画像は、あくまでも合成画像です(笑)。

ハメコミ合成でないのは コチラに用意しました:-) (2004-09-09)。

関連情報: 河村商店さま の 「シチズン携帯プリンタを使った『ハンディ検針ツール』」 (2006-03-14 → 2014-10-12リンク先更新)。


★なんか使えてる…かも

特になにもいじっていないSL-C760と、 IPv6化したカーネルにすげ替えたSL-C700で試してみました。

/etc/irda.confに

	[PD-04] BaudRate=9600,DataSize=256,BOFS=32,WindowSize=1,DiscTime=1
とか書いて、さらに
	mknod /dev/irlpt0 c 161 16
	ln -s /dev/irlpt0 /dev/irlpt
	chmod 666 /dev/ir*
	sh /etc/rc.d/init.d/irda start
	echo 1 > /proc/sys/net/irda/discovery_slots
とかしてから、
	echo foo > /dev/irlpt0
ってやると、なんか印刷しました:-)

…上のどの設定が効いてるのか、 あるはもうちょっといぢるべきパラメータがあるのか、 実のところよくわかってないんですけど、 とりあえずデータを送ることはできた、ちうことで(笑)。

…ときどきうまくいかないこともあるんで、 さらに調査が必要です(汗)。

ghostscriptが動く別のマシンで

	gs -sDEVICE=epson -r180x180 -sOutputFile=/tmp/foo -q - < tiger.ps
としてから、gsの出力(foo)をコピーして、
	cat foo > /dev/irlpt0
すると、意味不明の文字列がずらずらと印刷されました(苦笑)。

ま、とりあえずデータを送ることはできた、ちうことで(笑)。

2004-09-03



★日本語も印刷できます

「日本語は印刷できる?」という文字列をESC/Pフォーマットに変換して、
00000000  1b 40 1b 50 1b 51 50 1b  6c 05 1b 78 30 1c 78 31  |.@.P.QP.l..x0.x1|
00000010  1b 4d 1c 53 03 03 1b 44  08 10 18 20 28 30 38 40  |.M.S...D... (08@|
00000020  48 50 08 1c 26 46 7c 4b  5c 38 6c 24 4f 30 75 3a  |HP..&F|K\8l$O0u:|
00000030  7e 24 47 24 2d 24 6b 1c  2e 3f 0a 0c 1b 40        |~$G$-$k..?...@|
0000003e
というデータにし、 これを「cat > /dev/irlpt0」でプリンタに送ってやると ちゃんと日本語が印刷されました。

テキストデータをESC/Pフォーマットに変換する方法については、 「ESC/Pプリンタを使う」 をご覧ください。

なお、ESC/Pの縦書きシーケンス (FS J) を送ると縦書きにもなります。

プリンタ制御(エスケープシーケンス)に関する 参考文献[4,5]こちら

2004-09-09



★印刷用ツール

初期化と印刷用のツールをまとめてみました。 テキストファイルを印刷するには、コマンドラインから
	# sh irlpt-init.sh
としてデバイスファイルを作成し、その後、
	% cat hogehoge.txt | sh text2escp.sh > /dev/irlpt
として、ファイルをESC/P形式に変換してプリンタに送信します。

たとえば、

	% nkf -We /home/zaurus/Applications/Network/modules/LAN.conf | sh text2escp.sh > /dev/irlpt
とすれば、LAN設定ファイルを印刷することができます。

2004-09-14



★画面ハードコピーもとれます

PBM(Portable Bitmap)形式および、 SL-Zaurusの画面キャプチャファイル(24ビット×480×640ドット非圧縮ビットマップ) をESC/P形式に変換するツールを以下に。 SL-Zaurusでは、{Fn}+{Shift}+{C}で画面キャプチャを ファイルの落とすことができます (このときに/usr/sharp/bin/scshotが動いているようです)。 画面をキャプチャした画像データは、 SDカードでは/mnt/card/Screen_Files/ (実体は/usr/mnt.rom/card/Screen_Files) ディレクトリに「scrn数字.bmp」という名前で保存されます。

このときに次のようにすると、画面キャプチャデータを印刷できます。

	% bm2escp /mnt/card/Screen_Files/scrn001.bmp > /dev/irlpt0
なお、画面キャプチャはカラー画像ですが、 印刷時には、 誤差拡散(Floyd-Steinberg法[6])で 白黒二値化します。 それ以外の動作はソースを読んでください(汗)。

もっと凝った処理をしたい方は、Netpbmパッケージなどをインストールして、 pbm形式のデータを生成して、それをbm2escpに食わせてください。 たとえば、

	% cat /mnt/card/Screen_Files/scrn001.bmp \
	  bmptoppm | ppmtopgm | pgmtopbm | bm2escp > /dev/irlpt0
…これは凝った処理ではないか(^^;

ちなみに、 手元の「pbmtoepson(PBMをエプソンプリンタ向けデータに変換するツール)」 (Netpbm-10.14のpbmtoepson) では、 PD-04の理解できるデータは生成できませんでした。 (…pbmtoepsonの吐く「ESC * 5 n1 n2」って、 ESC/P 24-J8x プリンタは理解できないのかも)

プリンタ制御(エスケープシーケンス)に関する 参考文献[4,5]こちら

2004-09-16



★とりあえず印刷できるまでの道のり

2004-09-03付けで、 「echo foo > /dev/irlpt0」で「foo」を印字できることを紹介しましたが、 そこに至るまでをメモしておきます。 (まだ書きかけです。)
プロトコルは?
PD-04の仕様をみると、 コンピュータとの接続は赤外線か専用ケーブルによるRS232と なっています。 SL-Zaurusとの接続は赤外線を使ったのですが、 そこでどんなプロトコルが使われているのかは 仕様からはわかりませんでした。 使っているプロトコルとして予想されるのは あたりです。

無手順であれば、「echo foo > /dev/ttyS1」 とでもすれば、プリンタは印字するハズです。 しかし、さすがにそんな単純なことはありませんでした。

SL-ZaurusはIrCOMMプロトコルのプリンタに対応している?
googleなどで検索してみると、 ZaurusはIrCOMMプロトコル対応のプリンタに対応しているらしい ことが書かれていました。 たとえば、キヤノンのPIXUS 50iなどがそうらしいです (→参考文献[1,2])。 安易にホーム画面のファイラからファイルを「赤外線送信」したり、 あるいはコマンドラインから
		sh /etc/rc.d/init.d/irda start
		echo foo > /dev/ircomm
	
とすればいいそうです。 わたし自身はIrCOMM対応なプリンタは持ってないので 詳細はわかりませんが。

…で、PD-04もこれでいけるのか試してみましたが、 反応ありませんでした。 (これは/etc/irda.confなどを調整する前の話なので、 ひょっとしたらこれでいけるのかもしれません。)

ひょっとしてプリンタ壊れてるんか?
ここまで試す前にまずやっておくべきだったのですが、 なんと、プリンタを買って動作確認をしてませんでした(苦笑)。 「印刷でけへんのは、プロトコルが一致してないからではなく、 プリンタが壊れているか、 あるいは設定で赤外線が無効になってるんとちゃうか」 という考えが頭をよぎります。

…で、結局、 プリンタのマニュアルを手にいれて、 セルフテストをしたり、設定を印刷させてみました。 どうやら、このあたりは問題ないようです。

ディップスイッチとプリンタの設定
PD-04には、設定用のディップスイッチがあります。
番号SW1 OFFSW1 ON
1拡張スイッチ
2A4→A6縮小エラー解除
3手動給紙16進ダンプモード
4用紙逆送り設定モード

SW-1をオンにして、FEEDボタンを押しながら電源を入れると セルフテスト印字を行います。 このときに、紙押さえレバーがしめられていれば、漢字を印刷します。 紙押さえレバーがしめられていない状態で、 FEEDボタンを押しながら電源を入れ、 次に紙押さえレバーをしめると、英数カナを印刷します。

SW-1と4をオンにして電源を入れると、プリンタ設定モードになります。 このモードでは、以下の項目を設定できます。
設定項目選択肢
DIPスイッチ[有効]/無効
縮小印刷有効/[無効]
用紙逆送りSW有効/[無効]
手動給紙有効/[無効]
マーカー機能有効/[無効]
用紙選択[普通紙]/複写紙
印字濃度-2/-1/[0]/+1/+2
インタフェース[赤外線]/有線RS232C
赤外線モード[自動]/IrDA/ASK/ASK192
ボーレート2400/4800/[9600]/19200/38400
以下略

Windowsから印刷してみる
Windows XPパソコンにIrDAドングル(IrSTICK)をつけて、 PD-04を近づけると、タスクバーに赤外線通信アイコンが出てきて 無事認識されます。 PD-04はESC/Pエミュレーションなので、 プリンタを として追加インストールし、テスト印字を行うと テストページが出てきます。 ただし、このままではWindowsロゴマークが崩れてしまうので、 オプション設定でグラフィック解像度を 「180×180dpi」から「120×180dpi」に変更しました。

プロトコルはIrLPTか?
Windowsのヘルプを見てみるとIrLPTとか書いてましたから、 きっとIrLPTプロトコルなんでしょうね。

ザウルスに/dev/irlpt
SL-Zaurusが標準でIrLPT対応なのかどうかはわかりませんが、 (IPv6化の関係で)ソースを見た限りでは、 他のLinuxマシンと同じようだったので、 「SL-Zaurusもデバイスファイルを作ればIrLPTを喋るのでは」 という結論に達しました。 そこで、参考文献[3]をみて、
		mknod /dev/irlpt0 c 161 16
		chmod 666 /dev/ir*
		sh /etc/rc.d/init.d/irda start
	
としてから、「echo foo > /dev/irlpt0」としてみました。 ここで、Zaurusから送信される生データをダンプしてみると、 たしかにIrLMPのDeviceinfoのService Hintsが、 0x8424 (Ext|Computer|OBEX|Comm) から 0x8c24 (Ext|Printer|Computer|OBEX|Comm) になりました。

というわけで、デバイスファイルさえ用意すれば、 SL-ZaurusはIrLPTを喋るようです。



★参考文献

  1. 印刷もZaurusで - http://www.lares.dti.ne.jp/~ich/sl_printer.html
  2. Zaurus SL-C750 メモ(Zaurus で袖珍 Emacs 改め) - http://www.mars.dti.ne.jp/~hosino/zaurus/zaurus.html#printer
  3. Linux Infrared HOWTO Chapter 3. IrDA 接続の詳細 - プロトコル - http://www.linux.or.jp/JF/JFdocs/Infrared-HOWTO/infrared-howto-s-printer-connection.html
  4. 漢字プリンタ「UP-130K」取扱説明書, (エプソン株式会社, 1985/04/15).
  5. Canon BJ-10vシリーズ バブルジェットプリンタ リファレンスガイド, (キヤノン販売株式会社, 1991).
  6. 洪 博哲; 擬似中間調処理◎二値のプリンタでニセの中間調を作る、他, 「お話・カラー画像処理」, (1999/04/15, CQ出版社), pp.102-111, ISBN4-7898-2005-X.