Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ lbp(4) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026