この章の目次にもどる
前頁:第12章 プリンタにもどる
次頁:第14章 ネットワークデバイスにすすむ

第13章 プリンタイメージドライバ

13.1 概要

プリンタイメージドライバは、プリンタ機種に依存した以下の機能を持つ。

通常のデバイスドライバとは異なり、 対象デバイスを持たず、 必要に応じて一般プロセスとして生成され、 要求に対応した処理を行う。

13.2 プロセス起動パラメータ

なし

13.3 インタフェース

通常のデバイスドライバとは異なり、ランデプポート経由ではなく、 プロセスメッセージ通信、および共有メモリによるインタフェースとする。

要求プロセスは、プリンタイメージドライバの親プロセスに限定される。

インタフェース
図 18 : インタフェース
出力メッセージは、要求の種類によりない場合もある。
この場合、出力メッセージの処理を飛ばして要求応答となる。

13.4 要求/出力メッセージ

要求メッセージ (メッセージタイプ : MS_PRREQ)

  要求プロセス → プリンタイメージドライバへのメッセージ

出力メッセージ (メッセージタイプ : MS_PROUT)

  プリンタイメージドライバ → 要求プロセスへのメッセージ
    #define MS_PRREQ        MS_MNG5         /* 要求メッセージ       */
    #define MS_PROUT        MS_MNG4         /* 出力メッセージ       */

メッセージ形式

    typedef struct {
            W       type;                   /* = MS_PRREQ/MS_PROUT  */
            W       size;                   /* = PrntMsgSz          */
            W       cmd;                    /* コマンド             */
            W       status;                 /* 応答状態             */
            W       dlen;                   /* データサイズ         */
            VP      memptr;                 /* (共有)メモリポインタ */
    } PrntMsg;

    #define PrntMsgSz       (sizeof(PrntMsg) - sizeof(W) * 2)
送信メッセージ:
status は未使用
応答メッセージ:
dlen, memptr は未使用
cmd は対応コマンド + PRNT_RESP
#define PPNT_RESP       0x100
応答状態:
#define EP_OK           (0)             /* 正常                 */
#define EP_CMND         (-1)            /* コマンド形式が不正   */
#define EP_PAR          (-2)            /* パラメータが不正     */
#define EP_NOSPT        (-3)            /* 未サポート           */
#define EP_PAPER        (-4)            /* 用紙サイズが不正     */
#define EP_SPEC         (-5)            /* 印刷仕様が不正       */
#define EP_NOSPC        (-6)            /* 資源が不足した       */
#define EP_OUTBUF       (-7)            /* 出力バッファが未設定 */
#define EP_ABORT        (-8)            /* 中断された           */
コマンド:
#define PRNT_FINISH     0x00            /* 処理終了             */
#define PRNT_SETKIND    0x01            /* プリンタ機種設定     */
#define PRNT_SETPAR     0x02            /* 固有パラメータ設定   */
#define PRNT_GETPAR     0x03            /* 固有パラメータ1取り出し*/
#define PRNT_SETINFO    0x04            /* プリンタ情報設定     */
#define PRNT_GETINFO    0x05            /* プリンタ情報取り出し */
#define PRNT_SETBUF     0x06            /* 出力バッファ設定     */
#deifne PRNT_SETIMAGE   0x07            /* 印刷イメージ設定     */
#define PRNT_FEEDFORM   0x08            /* 改ページ             */
#define PRNT_GETPAR2    0x09            /* 固有パラメータ2取り出し*/
#define PRNT_OUTDATA    0x10            /* プリンタ出力データ   */

13.5 要求メッセージ

○ PRNT_FINISH 処理終了

dlen:   0
memptr: NULL

動作:

プリンタイメージドライバは正常応答を戻した後、 自プロセスを終了する。

status:  EP_OK (エラーを戻してはいけない)

○ PRNT_SETKIND プリンタ機種設定

dlen:   sizeof(TC) * L_PRNM
memptr:
        typedef struct {
                W       spec;           /* プリンタ仕様         */
                SIZE    papermin;       /* 最小用紙サイズ(mm)   */
                SIZE    papermax;       /* 最大用紙サイズ(mm)   */
        } PrntSpec;

        TC      hwname[L_PRNM];         /* 要求: 機種名         */
        PrntSpec        spec;           /* 応答: プリンタ仕様   */

動作:

指定されたプリンタ機種に設定し、そのプリンタの仕様を戻す。

ただし、機種名が指定されなかった場合 ( hwname[0] = TNULL ) は機種設定を行わず、 現在設定されている機種に関するプリンタ仕様を戻す。

プリンタ仕様の spec は以下のビット対応で示す。

#define PR_DRAFT        0x0001  /* ドラフト印刷         */
#define PR_FINE         0x0002  /* 高密度印刷           */
#define PR_COLOR        0x0010  /* カラー印刷           */

#define PR_ROTATE       0x0100  /* 縦横逆転サポート     */
#define PR_HWPAR        0x0200  /* 固有パラメータ1有   */
#define PR_SETHWPAR     0x0400  /* 固有パラメータ1要設定 */
#define PR_HWPAR2       0x0800  /* 固有パラメータ2有   */

PR_DRAFT は基本的にサポートしなくてはいけない。 PR_HWPARPRNT_SETPAR, PRNT_GETPAR をサポートしていることを示し、 PR_SETHWPARPRNT_GETPAR を必ず実行する必要があることを示す。
PR_HWPAR2PRNT_GETPAR2 をサポートしていることを示す。

なお、固有パラメータ2の設定・変更によりプリンタ仕様が変化する場合がある。

status: > EP_OK         プリンタ仕様
          EP_NOSPT        サポートしていない機種

○ PRNT_SETPAR 固有パラメータ設定

dlen            L_HWPAR
memptr  VB      hwpar[L_HWPAR];         /* 固有パラメータ       */

動作:

プリンタ固有パラメータを設定する。

status: EP_OK           正常
        EP_NOSPT        固有パラメータはサポートしていない。

○ PRNT_GETPAR 固有パラメータ1取出し

○ PRNT_GETPAR2 固有パラメータ2取出し

dlen    L_HWPAR
memptr  VB      hwpar[L_HWPAR];         /* 固有パラメータ       */

動作:

指定されたプリンタ固有パラメータを初期値として、 プリンタ固有パラメータ設定パネルにより、 パラメータの設定/変更を行い、結果を戻す。

固有パラメータ hwpar は、 PRNT_GETPAR, PRNT_GETPAR2 で共通である。 hwpar 内のどの部分を固有パラメータ1および1として扱うかは、 プリンタイメージドライバが任意に決める。 要求プロセス側は、hwpar の内容に関しては関知しない。

PRNT_GETPAR は印刷直前の設定のために呼び出す。 主に色補正などの設定に使用する。
PRNT_GETPAR2 はプリンタ機種選択時の設定のために呼び出す。 主にプリンタのハードウエアの詳細設定などに使用する。

status: EP_OK           正常
        EP_NOSPT        固有パラメータはサポートしていない。

○ PRNT_SETINFO プリンタ情報設定

dlen:   sizeof(PrntSet)
memptr: typedef struct {
                SIZE    paper;          /* 用紙サイズ (mm)      */
                W       spec;           /* 印刷仕様             */
        } PrntSet;

        paper:  印刷する用紙のサイズ (mm)

        spec:   印刷する仕様

        印刷仕様は下記の組み合わせ。ただし、PR_DRAFT と PR_FINE は
        同時に指定できない。
        PR_DRAFT, PR_FINE とも指定がなければ通常印刷。

        #define PR_DRAFT        0x0001  /* ドラフト印刷         */
        #define PR_FINE         0x0002  /* 高密度印刷           */
        #define PR_COLOR        0x0010  /* カラー印刷           */

動作:

用紙サイズ、印刷仕様を設定する。
設定されるまでは、デフォールト設定となっている。

status: EP_OK           正常
        EP_PAPER        用紙サイズが不正/未サポート
        EP_SPEC         印刷仕様が不正/未サポート

○ PRNT_SETBUF 出力バッファ設定

dlen:   出力バッファのバイトサイズ
memptr: 出力バッファの先頭アドレス

動作:

生成したプリンタへの出力データを格納するための出力バッファを設定する。 設定した出力バッファは、PRNT_SETBUF で再設定されるまでは、 その存在が保証される。

status: EP_OK           正常
        EP_PAR          パラメータが不正

○ PRNT_GETINFO プリンタ情報取り出し

dlen:   sizeof(PrntInfo)
memtr:  typedef struct {
                SIZE    paper;          /* 用紙サイズ (mm)      */
                W       spec;           /* 印刷仕様             */
                SIZE    res;            /* 有効解像度           */
                SIZE    unit;           /* 移動単位(ドット)     */
                RECT    margin;         /* 物理マージン(mm)     */
                UH      headsz;         /* 印字ヘッド縦ドット数 */
                UH      pixbits;        /* ピクセルビット数     */
                CSPEC   cspec;          /* カラー仕様           */
                COLOR   colmap[MAX_CMAPENT]; /* カラーマップ    */
        } PrntInfo;

        #define MAX_CMAPENT     256

        paper, spec:    用紙サイズ、印刷仕様
                PRNT_SETINFO で設定された、またはデフォールト設定情報

        res:    プリンタの横/縦の有効解像度
                < 0 の時: 1 インチ当たりのドット数の負数
                > 0 の時: 1 cm 当たりのドット数
                指定した quality に依存する。

        headsz: 印字ヘッドの縦のドット数 (>= 1)
                縦方向には、このドット単位で印刷することが望ましいこと
                を示す。この値は、unit.v の倍数でなくてはいけない。

        unit:   横/縦方向の移動単位 (ドット)
                このドット数の倍数でのみ横 / 縦方向の位置の移動が可能
                となる。

        margin: 指定した用紙における左、上、右、下の物理マージン(mm)

        pixbits:イメージ作成用ビットマップのピクセルビット数
                 (プレーン数は 1 に固定)

        cpsec:  イメージ作成用ビットマップのカラー仕様
                cspec.colmap の値は意味を持たない。
                cspec.attr は以下のいずれかでなくてはいけない。
                        DA_COLOR_RGB │ DA_HAVECMAP
                        DA_COLOR_RGB
                        DA_COLOR_MONO

        colmap: イメージビットマップのカラーマップ
                cspec.attr & DA_HAVECMAP のときのみ有効で、
                cspec.inf[0] が実際のエントリ数を示す。

動作:

現在の設定における情報を取り出す。

status: EP_OK           正常

○ PRNT_SETIMAGE 印刷イメージ設定

dlen:   sizeof(PrntImage)
memptr: typedef struct {
                PNT     offset;         /* 印刷オフセット       */
                RECT    area;           /* 印刷領域             */
                BMP     bmp;            /* 印刷イメージ         */
        } PrntImage;

        offset: 印刷を開始するオフセットドット数
                開始 Y 位置: 現在の Y 位置 + offset.y
                開始 X 位置: offset.x
                実際のオフセットドット数は、移動単位の倍数となる。
                >= 0 でなくてはいけない。

        area:   印刷イメージビットマップ上で実際に印刷する領域
                有効印刷領域からはみ出た領域は印刷されない。
                実際に印刷される領域は、移動単位の倍数となる。
                空の時は、offset.y のフィード動作のみとなる。

        bmp:    印刷対象のビットマップ
                PR_GETINFO で取り出されたビットマップ形式でなくては
                いけない。
                ビットマップの baseaddr[0] で示される領域は、共有メモリ
                領域であり、かつ、応答が戻るまで内容を変更してはいけ
                ない。

動作:

印刷開始位置を offset で指定された分だけ進め、 area で指定された領域のイメージを印刷するためのプリンタへの出力データを生成して、 出力メッセージを送信する。

出力メッセージの応答として、エラー応答を受け取った場合は、 即座に、エラー応答を戻す。

PRNT_SETBUF により出力バッファが設定されていないときは、 エラーとなる。

処理後は以下の Y 位置となる。

   開始 Y 位置 + 実際に出力された領域の高さ

status: EP_OK           正常
        EP_PAR          パラメータが不正
        EP_NOSPC        資源が不足した
        EP_OUTBUF       出力バッファが未設定
        EP_ABORT        中断した

○ PRNT_FEEDFORM 改ページ

dlen:   0
memptr: NULL

動作:

改ページを行うためのプリンタへの出力データを生成して、 出力メッセージを送信する。

出力メッセージの応答として、エラー応答を受け取った場合は、 即座に、エラー応答を戻す。

PRNT_SETBUF により出力バッファが設定されていないときは、 エラーとなる。

status: EP_OK           正常
        EP_NOSPC        資源が不足した
        EP_OUTBUF       出力バッファが未設定
        EP_ABORT        中断した

13.6 出力メッセージ

○ PRNT_OUTDATA プリンタ出力データ

dlen:   nbytes
memptr: UB      dat[nbytes]             /* 変換バイト列 */

memptrPR_SETBUF により設定された出力バッファである(先頭である必要はない)。

動作:

生成したプリンタへの出力データを出力する。 dlen に 0 を指定した場合は、プリンタへの出力をフラッシュする。

応答として、エラー応答 (EP_ABORT) を受け取った場合は、 即座に、出力処理を中断して、 元になった要求コマンドに対応するエラー応答を戻す。

status: EP_OK           正常
        EP_ABORT        何らかの理由により処理を中断した。

13.7 印刷

印刷
図 19 : 印刷

13.8 システム構成

○ プリンタイメージドライバ ( /SYS/$$PRINTER.BOX/* )

プリンタイメージドライバは /SYS/$$PRINTER.BOX/* に置く必要がある。 プリンタイメージドライバの数は任意であり、 通常は 1 つのプリンタイメージドライバは、 同一メーカー 1 個以上の機種をサポートする。 ドライバファイル名は一意的でなくはいけない。

プリンタイメージドライバは、 第 2 レコード以降に以下の機種名レコードを持っていなくてはいけない。

    レコードタイプ: 15
    サブタイプ:     0 (任意)
    内容:           サポートしている機種名の TC 文字列リスト
                            <プリンタ機種-1> <TNULL>
                            <プリンタ機種-2> <TNULL>
                            ....
                            <プリンタ機種-N> <TNULL>
なお、/SYS/$$PRINTER.BOX には、 プリンタ情報レコードも含まれる (BTRON3仕様書「3.11 印刷マネージャ」を参照のこと)。

13.9 全体構成

全体構成
図 20 : 全体構成

この章の目次にもどる
前頁:第12章 プリンタにもどる
次頁:第14章 ネットワークデバイスにすすむ