LBP(4) — UNIX Programmer’s Manual
名前
lbp − NEWS レーザービームプリンタインタフェース
形式
lb0 at iop addr ffedd0 intr 108
/dev/lbp
#include <newsiop/lbp.h>
解説
lbp は、NEWS レーザービームプリンタ(NWP-533/537、NWB-240A/241A)用の インタフェースです。 操作は、/dev/lbp に対して open(2)、ioctl(2)、write(2)、close(2) システム コールを用いることによって行います。
基本的な制御手順を次に示します。
1. デバイスをオープンする。
2. デバイスにフレームデータを送る。
2.2 デバイスファイルの先頭に位置付ける。
2.3 デバイスへデータを送る。
2.4 印刷を始める。
2.5 2.1 から 2.4 を繰り返す。
3. デバイスが最後のフレームを出力し終えるまで待つ。
4. デバイスをクローズする。
4.1 デバイスのクローズができるようになるまで待つ。
4.2 デバイスをクローズする。
デバイスを制御するために、次のヘッダファイルが必要です。
#include <stdio.h>
#include <sys/ioctl.h>
#include <newsiop/lbp.h>
#include <sys/file.h>
デバイスをオープンする
デバイスをオープンする方法は、次のとおりです。
int lbp; /∗ LBP ファイル記述子 ∗/
lbp = open("/dev/lbp", O_WRONLY);
デバイスファイルのオープンが成功すると、 ファイル記述子が返されます。 オープンされなかった(エラー)場合は、−1 が返されます。
エラーの場合は次の値が大域変数 errn0 に設定されます。
EIOレーザービームプリンタインタフェースの初期化ができない。
レーザービームプリンタの電源が入っていない。
レーザービームプリンタが接続されていない。
レーザービームプリンタの初期化ができない。
ENXIOレーザービームプリンタインタフェースが NEWS 本体の拡張スロットに 接続されていない。
他のプロセスにより /dev/lbp が既にオープンされている。
イメージリーダー(/dev/ir)がオープンされている。
データをデバイスへ送る
データをデバイスへ送る方法を、次に示します。
1. デバイスがレディになるのを待つ(最初のページでは必要ない)。
ioctl(lbp, LBIOCSTOP, 0);
正常に終了すると、ioctl コールによって 0 が返されます。 エラーが発生した場合は、−1 が返されます。 エラーの場合は、エラーの原因を取り除き、4 の操作を再び実行してください。
2. デバイスファイルの先頭に位置付ける(最初のページは必要ない)。
lseek(lbp, 0, 0);
3. データをデバイスファイルへ送る。
write システムコールを使用して、データをデバイスのバッファに書き出します。
#define FRAME_SIZE (3136∗4516/8)
char frame[FRAME_SIZE];
write(lbp, frame, FRAME_SIZE);
正常に終了すると、write システムコールによって書き出されたバイト数 が返されます。エラーが発生した場合は、−1 が返されます。 そのときは、次の値が "errono" に設定されます。
EIOレーザビームプリンタのインタフェース中のフレームメモリがアクセスできない。
EFAULTwrite システムコールで指定されたデータがアクセスできない。
出力データ長は、フレームバッファサイズ (NWP-533 の場合:1770272 バイト(3136 × 4516/8)) NWP-537 の場合:2732800 バイト(3904 × 5600) 以下でなければなりません。
4. 印刷スタート
フレームバッファに書かれた出力データを、レーザービームプリンタへ送ります。
ioctl(lbp, LBIOCSTART, 0);
正常に終了すると、ioctl システムコールによって 0 が返されます。 エラーの場合は、−1 が返されます。 エラーの場合、エラーの原因を取り除き、 もう一度実行する必要があります。
IOCTL
LBIOCRESET
レーザービームプリンタインタフェースの初期化をする。
ioctl(lbp, LBIOCRESET, 0);
LBIOCSTART
印刷を開始する。
ioctl(lbp, LBIOCSTART, 0);
LBIOCSTOP
印刷ジョブが終わるのを待つ。
ioctl(lbp, LBIOCSTOP, 0);
LBIOCSTATUS
レーザービームプリンタのステータスを取り出す。
ioctl(lbp, LBOICSTATUS, status);
struct lbp_stat ∗status;
status の構造体は、次の形式です。
struct lbp_stat {
unsigned char stat[6];
};
有効なステータスバイトは最初の 4 バイトです。 MSB(ビット 7)は常に 0 で、LSB(ビット 0)は、 パリティビット(奇数パリティ)に使用されます。 詳しくは、 診断 を参照してください。
LBIOCHAND
手差しモードに切り替えます。
ioctl(lbp, LBIOCHAND, 0);
LBIOCCASSETE
カセット給紙モードに切り替えます。このモードは、デフォルトです。
ioctl(lbp, LBIOCCASSETE, 0);
LBIOCGETSIZE
垂直/水平方向の印刷範囲をドット単位で取り出します。
ioctl(lbp, LBIOCGETSIZE, size);
struct lbp_size ∗size;
size の構造体の指定の仕方は、次のとおりです。
struct lbp_size {
int lbp_x;
int lbp_y;
};
デバイスをクローズする
最後の印刷ジョブの最後で、デバイスの準備ができるまで待つと、 デバイスをクローズできます。
ioctl(lbp, LBIOCSTOP, 0);
close(lbp);
出力データ書式
NEWS のレーザービームプリンタ(NWP-533/537、NWB-240A/241A)は、 400 ピクセル/インチの解像度をもち、 最大印刷領域は、NWP-533 の場合 4516 ピクセル(垂直)と 3136 ピクセル(水平)、 NWP-537 の場合 3904 ピクセル(垂直)と 5600 ピクセル(水平) です。
レーザービームプリンタインタフェースに接続されるフレームデータは 左上を起点としたバイト単位のデータです。 各バイトは、MSB(ビット 7)がイメージの最左端のピクセルに対応します。
診断
バイト 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 カセットが、 それぞれプリンタに装着されていることを示す。
バイト 5 (Sステータス)
ビット 2 ST5_NO_TONER
トナーなし警告を示す。
関連ファイル
/dev/lbpレーザービームプリンタ
NEWS-OSRelease 3.3