LBP(4) — NEWS-OS Programmer’s Manual
名称
lbp − NEWS レーザービームプリンタインターフェース
形式
インターフェースボードに NWB-5501/5551 を用いる場合
lbpx at ap0 sloty addr zzzzzzzz priority 108
( x,y,zzzzzzzz はハードウェア構成依存 )
/dev/lbp[0-3] /dev/lbp
#include <newsiop/lbp.h>
インターフェースボードに NWB-5501/5551 以外を用いる場合
lb0 at iop addr xxx intr 108 ( xxx は機種依存 )
/dev/lbp
#include <newsiop/lbp.h>
解説
lbp は、NEWS レーザービームプリンタ (NWP-533/537/543/550/5501/5551) 用の インターフェースです。 操作は、 /dev/lbp に対して open(2)、 ioctl(2)、 write(2)、 close(2) システム コールを用いることによって行います。 (NWB-242/243、NWB-5501/5551 の場合はイメージボードライブラリを使用することができます。 NWP-543/5551 のすべての機能を制御するためにはイメージボードライブラリを 使用してください。また、ラインプリンタデーモン lpd によって起動される プリンタフィルタプログラムを作成するために LBP ライブラリが提供されています。)
基本的な制御手順を次に示します。
1. デバイスをオープンする。
1.1 NWP-5501 + NWA-5505 カセットフィーダの場合は、 必要に応じて給紙カセットを選択する。
2. デバイスにフレームデータを送る。
2.1 デバイスがレディになるのを待つ (最初のページでは必要ない)。
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>
デバイスをオープンする
デバイスをオープンする方法は、次のとおりです。 ここで、NWB-5501 使用時には /dev/lbp[0-3] も指定可能です。
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、および NWP-5501 の A4 サイズの場合:1770272 バイト (3136 × 4516/8)、B4 カートリッジ および NWP-5501 の B4 サイズの場合:2732800 バイト (3904 × 5600/8)) 以下でなければなりません。
4. 印刷スタート
フレームバッファに書かれた出力データを、レーザービームプリンタへ送ります。
ioctl(lbp, LBIOCSTART);
正常に終了すると、ioctl システムコールによって 0 が返されます。 エラーの場合は、−1 が返されます。 エラーの場合、エラーの原因を取り除き、 もう一度実行する必要があります。
NWP-550 が接続されている場合、オプションフィーダが接続されている場合でも、 手差しトレイに用紙が入っている場合には手差しトレイから給紙されます。
NWP-5501 が接続されている場合、手差しトレイに用紙が入っている場合は 常に手差しトレイから給紙されます。
デバイスをクローズする
最後のページの印刷を開始した後、印刷の終了を待ってから デバイスをクローズします。
ioctl(lbp, LBIOCSTOP);
close(lbp);
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) は、 パリティビット (奇数パリティ) に使用されます。
バイト 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 となる。 また、NWP-5501 使用時は LBIOCPAPERIN ioctl で指定された カセット (内蔵カセットまたはカセットフィーダ) の サイズになる。
バイト 5 (S ステータス)
ビット 2 ST5_NO_TONER
トナーなし警告を示す。 このステータスは NWP-533/537/543/5501 を接続しているとき有効である。 NWP-550 接続時にはこのビットはセットされない。
バイト 5 (オプション・カセット・フィーダ・ステータス)
ビット 5 ST5_OPT_FEEDER
オプション・カセット・フィーダが接続されていることを示す。 このステータスは NWP-550 を接続しているときのみ有効である。
LBIOCHAND
NWP-533/537 を接続している場合手差しモードに切り替えます。 NWP-550/5501 を接続している場合手差しトレイ給紙モードに切り替えます。 NWP-543 には手差し給紙の機能はありません。
ioctl(lbp, LBIOCHAND);
LBIOCCASSETTE
NWP-533/537 を接続している場合カセット給紙モードに切り替えます。 このモードは、NWP-533/537 接続時、デフォルトです。
NWP-550 を接続している場合はオプション・カセット・フィーダ給紙モード となります。 NWP-550 でオプション・カセット・フィーダが接続されている ときはこのモードがデフォルトになります。
NWP-5501 を接続している場合は内蔵カセット給紙モードとなります。 NWP-5501 のときはこのモードがデフォルトになります。
ioctl(lbp, LBIOCCASSETTE);
LBIOCGETTYPE
レーザービームプリンタの種類 (LBP_NWP533、LBP_NWP537、LBP_NWP543、LBP_NWP550 のいずれか) を取り出します。ここで NWP-5501 が接続されている場合、LBP_NWP537 を返します。また、NWP-5551 が接続されている場合、LBP_NWP543 を返します。
ioctl(lbp, LBIOCGETTYPE, type);
int ∗type;
LBIOCGETTYPE2
レーザービームプリンタの種類を示す値 (LBP_NWP533、LBP_NWP537、 LBP_NWP543、LBP_NWP550、LBP_NWP5501, LBP_NWP_5551 のいずれか) がビットアサインされて 返ります。NWP-5501 が接続されている場合は LBP_NWP537 および LBP_NWP5501 の両方のビットが 1 になります。 NWP-5551 が接続されている場合は LBP_NWP543 および LBP_NWP5501 の両方のビットが 1 になります。
ioctl(lbp, LBIOCGETTYPE2, type);
int ∗type;
LBIOCGETSIZE
垂直/水平方向の印刷範囲をドット単位で取り出します。
B4 レーザービームプリンタ NWP-537/NWP-5501/NWP-5551/NWP-543 を使用している場合、用紙カセットの交換を 行った場合はこの ioctl を発行することによりデバイスドライバ内部でサイズ切り替 え処理が行われます。
NWP-537 の場合、印刷範囲の初期値は、 B4 カセットが装着されている状態で open に成功した場合B4 になり、 それ以外の場合は A4 になります。
NWP-5501 の場合、印刷範囲の初期値は、 内蔵カセットに B4 カセットが装着されている状態で open に成功した場合 B4 になり、 それ以外の場合は A4 になります。
ioctl(lbp, LBIOCGETSIZE, size);
struct lbp_size ∗size;
size の構造体の形式は、次のとおりです。
struct lbp_size {
int lbp_x;
int lbp_y;
};
LBIOCGETERROR
NWP-5501 のエラー詳細を報告します。
この ioctl は NWP-5501 を接続している場合のみ有効です。それ以外の LBP 接続時 にこの ioctl を発行すると −1 を返し、エラー終了し、その際、大域変数 "errno" に EINVAL が設定されます。
ioctl(lbp, LBIOCGETERROR, st);
char st[4];
以下に示すビットのみが有効です。
バイト 0 (ミスプリント詳細ステータス)
ビット 6 LBP_MISSBD
BD 信号同期に一時的な異常が生じた。
ビット 5 LBP_MISSVSYNC
VSYNC 信号を受け取れなかった。
バイト 1 (エラー発生ユニットステータス)
ビット 3 LBP_MFEEDERR
手差し給紙部にエラーが発生した。
LBIOCGETCONFIG
NWP-5501 の給紙装置の状態を調べます
この ioctl は NWP-5501 を接続している場合のみ有効です。それ以外の LBP 接続時 にこの ioctl を発行すると −1 を返し、エラー終了し、その際、大域変数 "errno" に EINVAL が設定されます。
ioctl(lbp, LBIOCGETCONFIG, st);
char st[8];
以下に示すビットのみが有効です。
バイト 0 (給紙部構成ステータス)
ビット 5 LBP_BUITINON
内蔵カセットが装着されている。
ビット 4 LBP_OPTON
カセットフィーダ (NWA-5505) が接続されている。
バイト 1 (給紙部紙有無状態ステータス)
ビット 5 LBP_BUITINOK
内蔵カセットに用紙がある。
ビット 4 LBP_OPTOK
カセットフィーダに用紙がある。
バイト 1 (給紙部選択ステータス)
ビット 5 LBP_BUITINSELECT
内蔵カセットが選択されている。
ビット 4 LBP_OPTSELECT
カセットフィーダが選択されている。
LBIOCGETPAPERSIZE
NWP-5501 の用紙サイズをしらべます。
この ioctl は NWP-5501 を接続している場合のみ有効です。それ以外の LBP 接続時 にこの ioctl を発行すると −1 を返し、エラー終了し、その際、大域変数 "errno" に EINVAL が設定されます。
ioctl(lbp, LBIOCGETPAPERSIZE, size);
char size[4];
以下の各バイトに用紙サイズが返ります。A4 サイズの場合 1、 B4 サイズの場合 5、カセットが装着されていない場合 0 が 返ります。
バイト 0 (内蔵カセット用紙サイズ)
バイト 2 (カセットフィーダ用紙サイズ)
LBIOCPAPERIN
NWP-5501 の給紙装置を指定します。
この ioctl は NWP-5501 を接続している場合のみ有効です。それ以外の LBP 接続時 にこの ioctl を発行すると −1 を返し、エラー終了し、その際、大域変数 "errno" に EINVAL が設定されます。
ioctl(lbp, LBIOCPAPERIN, dev);
int ∗dev;
dev に LBP_FROMBUILTIN を 指定した場合、カセットおよび用紙の有無にかかわらず、 給紙元装置として設定されます。
カセットフィーダが接続されているときに dev に LBP_FROMOPT を指定すると、 カセットおよび用紙の有無にかかわらず、給紙元装置として設定されます。 カセットフィーダが接続されていないときに dev に LBP_FROMOPT を指定すると、 内蔵カセットが給紙元となります。
open の直後、および LBIOCRESET の後は内蔵カセットが給紙装置になります。
出力データ書式
NEWS のレーザービームプリンタ(NWP-533/537/543/550/5501、 NWB-240A/241A/242/243/244/245/5501/5551)は、 400 ピクセル/インチの解像度をもち、 最大印刷領域は、NWP-533/550 の場合 4516 ピクセル (垂直) と 3136 ピクセル (水平)、 NWP-537/543/5501 の場合 3904 ピクセル (垂直) と 5600 ピクセル (水平) です。 (ここで説明されるインターフェースによって NWP-5551 の 600dpi の 解像度を使用することはできません。イメージボードライブラリをご使用ください。)
レーザービームプリンタインターフェースに接続されるフレームデータは 左上を起点としたバイト単位のデータです。 各バイトは、MSB (ビット 7) がイメージの最左端のピクセルに対応します。
用紙サイズの識別
B4 レーザービームプリンタ NWP-537/5501、A3 レーザービームプリンタ NWP-543/5551 では A4 と B4 のカセットを使用することができます。
LBP のデバイスドライバは、デバイスドライバ内部に用紙サイズの情報を保持してい ます。この情報はデバイスを open した時と、LBIOCGETSIZE の ioctl システムコー ルが正常終了したときに設定されます。
このため、カセットを交換する場合、アプリケーションプログラムは LBIOCGETSIZE の ioctl システムコールを発行し、カセットが交換されたことを 確認する必要があります。
(NWP-543 を LBP デバイス ドライバで使用する場合、B4 以外のカセットはすべて A4 縦のカセットとして 扱われます。また、下段カセットだけが使用できます。 (NWP-5551 を LBP デバイスドライバで使用する場合、 B4 以外のカセットはすべて A4 縦のカセットとして 扱われます。それ以外のサイズ、600dpi の解像度を扱う場合については イメージボードライブラリ または LBP ライブラリを使用してください。)
関連ファイル
/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.2.1R