LBP(4) — NEWS-OS Programmer’s Manual
名称
lbp − NEWS レーザービームプリンタインターフェース
形式
lb0 at iop addr xxx intr 108 ( xxx は機種依存 )
/dev/lbp
#include <newsiop/lbp.h>
解説
lbp は、NEWSレーザービームプリンタ(NWP-533/537/543/550)用の インターフェースです。 操作は、/dev/lbp に対して open(2)、ioctl(2)、write(2)、close(2) システム コールを用いることによって行います。 (NWB-242/243 の場合はイメージボードライブラリを使用することができます。 NWP-543 のすべての機能を制御するためにはイメージボードライブラリを 使用してください。また、ラインプリンタデーモン lpd によって起動される プリンタフィルタプログラムを作成するために LBP ライブラリが提供されています。)
基本的な制御手順を次に示します。
1. デバイスをオープンする。
2. デバイスにフレームデータを送る。
2.2 デバイスファイルの先頭に位置付ける。
2.3 デバイスへデータを送る。
2.4 印刷を始める。
2.5 2.1 から 2.4 を繰り返す。
3. デバイスが最後のフレームを出力し終えるまで待つ。
4. デバイスをクローズする。
4.1 デバイスのクローズができるようになるまで待つ。
4.2 デバイスをクローズする。
デバイスを制御するために、次のヘッダファイルが必要です。
#include <sys/ioctl.h>
#include <newsiop/lbp.h>
#include <sys/file.h>
デバイスをオープンする
デバイスをオープンする方法は、次のとおりです。
int lbp; /∗ LBP ファイル記述子 ∗/
lbp = open("/dev/lbp", O_WRONLY);
デバイスファイルのオープンが成功すると、 ファイル記述子が返されます。 オープンされなかった(エラー)場合は、−1 が返されます。
エラーの場合は次の値が大域変数 "errno" に設定されます。
EIOレーザービームプリンタインターフェースの初期化ができない。
レーザービームプリンタの電源が入っていない。
レーザービームプリンタが接続されていない。
レーザービームプリンタの初期化ができない。
ENXIO
レーザービームプリンタインターフェースが NEWS 本体の拡張スロットに 接続されていない。
EBUSY
他のプロセスにより /dev/lbp が既にオープンされている。
イメージリーダー(/dev/ir)がオープンされている。
データをデバイスへ送る
データをデバイスへ送る方法を、次に示します。
1. デバイスがレディになるのを待つ(最初のページでは必要ない)。
ioctl(lbp, LBIOCSTOP);
正常に終了すると、ioctl コールによって 0 が返されます。 エラーが発生した場合は、−1 が返されます。 エラーの場合は、エラーの原因を取り除き、4 の操作を再び実行してください。
2. デバイスファイルの先頭に位置付ける。
lseek(lbp, 0, 0);
3. データをデバイスファイルへ送る。
write システムコールを使用して、データをデバイスのバッファに書き出します。 A4 カートリッジ挿入時の例を以下に示します。
#define FRAME_SIZE (3136∗4516/8)
#define BSIZE (32 ∗ 1024)
char frame[FRAME_SIZE];
register int len;
register char ∗p;
p = frame;
for (len = FRAME_SIZE; len >= BSIZE; len-=BSIZE) {
write(lbp, p, BSIZE);
p += BSIZE;
}
if (len) {
write(lbp, p, len);
}
正常に終了すると、write システムコールによって書き出されたバイト数 が返されます。エラーが発生した場合は、−1 が返されます。 そのときは、次の値が 大域変数 "errno" に設定されます。
EIOレーザビームプリンタのインターフェース中のフレームメモリがアクセスできない。
EFAULT
write システムコールで指定されたデータがアクセスできない。
出力データ長は、フレームバッファサイズ (A4 カートリッジ および NWP-550 の場合:1770272 バイト(3136 × 4516/8)、 B4 カートリッジの場合:2732800 バイト(3904 × 5600/8)) 以下でなければなりません。
4. 印刷スタート
フレームバッファに書かれた出力データを、レーザービームプリンタへ送ります。
ioctl(lbp, LBIOCSTART);
正常に終了すると、ioctl システムコールによって 0 が返されます。 エラーの場合は、−1 が返されます。 エラーの場合、エラーの原因を取り除き、 もう一度実行する必要があります。 NWP-550 が接続されている場合、オプションフィーダーが接続されている場合でも、 手差しトレイに用紙が入っている場合には手差しトレイから給紙されます。
IOCTL
LBIOCRESET
レーザービームプリンタインターフェースの初期化をする。
ioctl(lbp, LBIOCRESET);
LBIOCSTART
印刷を開始する。
ioctl(lbp, LBIOCSTART);
LBIOCSTOP
印刷が終わるのを待つ。
ioctl(lbp, LBIOCSTOP);
LBIOCSTATUS
レーザービームプリンタのステータスを取り出す。
ioctl(lbp, LBOICSTATUS, status);
struct lbp_stat ∗status;
status の構造体は、次の形式です。
struct lbp_stat {
unsigned char stat[6];
};
有効なステータスバイトは最初の 4 バイトです。 MSB(ビット 7)は常に 0 で、LSB(ビット 0)は、 パリティビット(奇数パリティ)に使用されます。 詳しくは、 診断 を参照してください。
LBIOCHAND
NWP-533/537/543 を接続している場合手差しモードに切り替えます。 NWP-550 を接続している場合手指しトレイ給紙モードに切り替えます。
ioctl(lbp, LBIOCHAND);
LBIOCCASSETTE
NWP-533/537/543 を接続している場合カセット給紙モードに切り替えます。 このモードは、NWP-533/537/543 接続時、デフォルトです。 NWP-550 を接続している場合はオプション・カセット・フィーダ給紙モード となります。NWP-550 でオプション・カセット・フィーダが接続されている ときはこのモードがデフォルトになります。
ioctl(lbp, LBIOCCASSETTE);
LBIOCGETTYPE
レーザービームプリンタの種類 (LBP_NWP533、LBP_NWP537、LBP_NWP543、LBP_NWP550 のいずれか) を取り出す。。
ioctl(lbp, LBIOCGETTYPE, type);
int ∗type;
LBIOCGETSIZE
垂直/水平方向の印刷範囲をドット単位で取り出します。
B4 レーザービームプリンタ NWP-537、または イメージボード NWB-243 + A3 レーザービームプリンタ NWP-543 を使用している場合、用紙カセットの交換を 行った場合はこの ioctl を発行することによりデバイスドライバ内部で サイズ切り替え処理が行われます。
ioctl(lbp, LBIOCGETSIZE, size);
struct lbp_size ∗size;
size の構造体の指定の仕方は、次のとおりです。
struct lbp_size {
int lbp_x;
int lbp_y;
};
デバイスをクローズする
最後のページの印刷を開始した後、印刷の終了を待ってから デバイスをクローズします。
ioctl(lbp, LBIOCSTOP);
close(lbp);
出力データ書式
NEWS のレーザービームプリンタ(NWP-533/537/550、NWB-240A/241A/244/245)は、 400 ピクセル/インチの解像度をもち、 最大印刷領域は、NWP-533/550 の場合 4516 ピクセル(垂直)と 3136 ピクセル(水平)、 NWP-537 の場合 3904 ピクセル(垂直)と 5600 ピクセル(水平) です。
レーザービームプリンタインターフェースに接続されるフレームデータは 左上を起点としたバイト単位のデータです。 各バイトは、MSB(ビット 7)がイメージの最左端のピクセルに対応します。
用紙サイズの識別
B4 レーザービームプリンタ NWP-537、A3 レーザービームプリンタ NWP-543 では A4 と B4 のカセットを使用することができます。
LBP のデバイスドライバは、デバイスドライバ内部に 用紙サイズの情報を保持しています。 この情報はデバイスを open した時と、LBIOCGETSIZE の ioctl システムコール が正常終了したときに設定されます。
このため、カセットを交換する場合、アプリケーションプログラムは LBIOCGETSIZE の ioctl システムコールを発行し、カセットが交換されたことを 確認する必要があります。
(NWP-543 を LBP デバイス ドライバで使用する場合、B4 以外のカセットはすべて A4 縦のカセットとして 扱われます。また、下段カセットだけが使用できます。 それ以外のサイズ、給紙装置を扱う場合についてはイメージボードライブラリ または LBP ライブラリを使用してください。)
診断
バイト 0 (基本ステータス)
ビット 4 ST0_REPRINT_REQ
再印刷要求(紙が詰まりが発生したときなど)。
ビット 3 ST0_WAIT
プリンタの定着器が充分に温まっていない。
ビット 2 ST0_PAUSE
プリンタの定着器やモータが停止している。
ビット 1 ST0_CALL
オペレーターコールまたはサービスコールがある。
バイト 1 (オペレーターコールステータス)
ビット 6 ST1_NO_CARTRIGE
カートリッジがないか、適切にセットされていない。
ビット 4 ST1_NO_PAPER
用紙切れ。
ビット 3 ST1_JAM
紙詰まりが発生している。
ビット 2 ST1_OPEN
プリンタのトップドアが開いている。
ビット 1 ST1_TEST
印刷テスト中。
バイト 2 (サービスコールステータス)
ビット 6 ST2_FIXER
プリンタの定着器が故障している。
ビット 5 ST2_SCANNER
プリンタのスキャナ部が故障している。
ビット 4 ST2_MOTOR
プリンタのスキャナ部のモータが作動していない。
バイト 3 (再送信を要求された時に、その枚数)
ビット 6 − 1
このバイトは、再送信を要求された時に、その枚数を示している。 実際のその数は、NREPRINT(x) マクロを使用して得られる。
バイト 4 (用紙サイズステータス)
ビット 6 − 1
現在装着されているカセットサイズを示す。 実際のコードは、PAPERSIZE(x) マクロにより求められる。 そのコードが 00H のときはカセットなし、 01H のときは A4 カセットが、05H のときは B4 カセットが、 それぞれプリンタに装着されていることを示す。 ここで、NWP-550 使用時コードは常に 01H となります。
バイト 5 (Sステータス)
ビット 2 ST5_NO_TONER
トナーなし警告を示す。 このステータスは NWP-533/537/543 を接続しているとき有効である。 NWP-550 接続時にはこのビットはセットされない。
バイト 5 (オプション・カセット・フィーダ・ステータス)
ビット 5 ST5_OPT_FEEDER
オプション・カセット・フィーダが接続されていることを示す。 このステータスは NWP-550 を接続しているときのみ有効である。
関連ファイル
/dev/lbpレーザービームプリンタデバイスファイル
関連事項
「NEWS-OS Release 4.0 I/O デバイスプログラミングガイド/レーザビームプリンタ」
「NEWS-OS Release 4.0 I/O デバイスプログラミングガイド/イメージボード」
「NEWS-OS Release 4.0 プログラマーズガイド/イメージボードライブラリ」
「NEWS-OS Release 4.0 プログラマーズガイド/LBP ライブラリ」
NEWS-OSRelease 4.1C