JP2016021208A - コンピュータ組み込み装置 - Google Patents

コンピュータ組み込み装置 Download PDF

Info

Publication number
JP2016021208A
JP2016021208A JP2014145621A JP2014145621A JP2016021208A JP 2016021208 A JP2016021208 A JP 2016021208A JP 2014145621 A JP2014145621 A JP 2014145621A JP 2014145621 A JP2014145621 A JP 2014145621A JP 2016021208 A JP2016021208 A JP 2016021208A
Authority
JP
Japan
Prior art keywords
command
notification
processing unit
layer
response
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2014145621A
Other languages
English (en)
Inventor
真智子 三上
Machiko Mikami
真智子 三上
行成 豊田
Yukinari Toyota
行成 豊田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ricoh Co Ltd
Original Assignee
Ricoh Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ricoh Co Ltd filed Critical Ricoh Co Ltd
Priority to JP2014145621A priority Critical patent/JP2016021208A/ja
Priority to US14/789,237 priority patent/US20160019105A1/en
Publication of JP2016021208A publication Critical patent/JP2016021208A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Accessory Devices And Overall Control Thereof (AREA)
  • Facsimiles In General (AREA)

Abstract

【課題】OS環境に影響されずに、コンピュータ組み込み装置の複雑で正確な制御を行えるようにする。
【解決手段】ソフトウェアにより実現される、複数の階層に分かれ、上位に対して所定のサービスを提供する複数のレイヤと、前記レイヤのそれぞれに設けられ、該レイヤに入出力するメッセージの順序制御を行うメッセージ処理部とを備える。
【選択図】図1

Description

本発明は、画像形成装置等のコンピュータ組み込み装置の制御技術に関する。
画像形成装置等のコンピュータ組み込み装置では、プリンタエンジン、スキャナエンジン等のハードウェアについて、複雑で正確な制御が必要になる。
従来、この種のコンピュータ組み込み装置では、シングルプロセッサ(シングルコア)のコンピュータハードウェア上でオープンソースの汎用OS(Operating System)を稼働させて制御を行うことが多かった(特許文献1等を参照。)。
昨今では、従来のシングルプロセッサに代えてマルチプロセッサ(マルチコア)のコンピュータハードウェアが主流となりつつあり、オープンソースの汎用OSもマルチプロセッサに対応してきている。
マルチプロセッサに対応した汎用OSは、OSのスケジューリング機能により実行コードを複数のプロセッサに割り振るマルチスレッド化を行う。しかし、複雑で正確な制御が必要になるコンピュータ組み込み装置では、マルチスレッド化に起因するコード実行のタイミング誤りやスレッドセーフ(処理単位であるスレッドが複数同時に一つのデータを扱ってもデータが正常に保たれる状態)の問題が生じやすい。
そのため、不具合が生じないようにチューニング等の対応が必要であるが、いったん正常な動作を確保したとしても、汎用OSのアップデートによりバージョンが変わると再び不具合が発生することがあり、その都度の対応が困難であった。また、オープンソースの汎用OSはメーカ製品とは異なり、提供元が不具合に対して責任をとらないため、コンピュータ組み込み装置を開発する側で全て対応せざるを得なかった。
本発明は上記の従来の問題点に鑑み提案されたものであり、その目的とするところは、OS環境に影響されずに、コンピュータ組み込み装置の複雑で正確な制御を行えるようにすることにある。
上記の課題を解決するため、本発明にあっては、ソフトウェアにより実現される、複数の階層に分かれ、上位に対して所定のサービスを提供する複数のレイヤと、前記レイヤのそれぞれに設けられ、該レイヤに入出力するメッセージの順序制御を行うメッセージ処理部とを備える。
本発明にあっては、OS環境に影響されずに、コンピュータ組み込み装置の複雑で正確な制御を行うことができる。
画像形成装置の構成例を示す図である。 メッセージ処理部の構成例を示す図である。 メッセージ処理部の処理例を示すフローチャートである。 実機に対する外部からのテストのための構成例を示す図である。 実機がない場合のテストのための構成例を示す図(その1)である。 実機がない場合のテストのための構成例を示す図(その2)である。 画像形成装置、サーバ装置および情報処理装置のコンピュータ部分の構成例を示す図である。 デバイスエミュレータの構成例および他の部分との接続例を示す図である。 テスト例を示すシーケンス図である。
以下、本発明の好適な実施形態につき説明する。なお、組み込み装置として複合機等の画像形成装置を例に説明するが、その他の一般的な情報処理装置が内蔵しないハードウェアを有する装置に適用できることは言うまでもない。
<画像形成装置>
図1は画像形成装置1の構成例を示す図である。図1において、画像形成装置1は、サービスレイヤ112と、サービスサポートレイヤ122と、サービスランタイムレイヤ132と、アブストラクトデバイスレイヤ(抽象機器レイヤ)のモジュール142、143、144、145とを備えている。サービスレイヤ112は、プリント、コピー、スキャン、ファックス等の様々なサービスを提供するレイヤ(層)である。サービスサポートレイヤ122は、サービスを実現するための共通機能を提供するレイヤである。サービスランタイムレイヤ132は、デバイス管理、サービス(ジョブ)管理、認証、ストレージ等の機能を提供するレイヤである。アブストラクトデバイスレイヤは、プリンタ、スキャナ、ファックス等の機器(デバイス)を抽象化したインタフェースを提供するレイヤである。
サービスレイヤ112には、サービスレイヤAPI111が設けられている。サービスレイヤAPI111は、HTTP(HyperText Transfer Protocol)REST(REpresentational State Transfer)等によるサービスレイヤWebAPI(1111)と、Unix Domain Socket等のプロセス間通信によるサービスレイヤプロセス間通信API(1112)とを含んでいる。
サービスサポートレイヤ122には、サービスサポートレイヤAPI121が設けられている。サービスサポートレイヤAPI121は、HTTP REST等によるサービスサポートレイヤWebAPI(1211)と、Unix Domain Socket等のプロセス間通信によるサービスサポートレイヤプロセス間通信API(1212)とを含んでいる。
サービスランタイムレイヤ132にはサービスランタイムレイヤAPI131が設けられている。サービスランタイムレイヤAPI131は、HTTP REST等によるサービスランタイムレイヤWebAPI(1311)と、Unix Domain Socket等のプロセス間通信によるサービスランタイムレイヤプロセス間通信API(1312)とを含んでいる。
アブストラクトデバイスレイヤには、アブストラクトデバイスレイヤAPI141が設けられている。アブストラクトデバイスレイヤAPI141は、HTTP REST等によるアブストラクトデバイスレイヤWebAPI(1411)と、Unix Domain Socket等のプロセス間通信によるアブストラクトデバイスレイヤプロセス間通信API(1412)とを含んでいる。
サービスレイヤ112には、メッセージ処理部1121とプリンタアプリ1122とコピーアプリ1123とスキャナアプリ1124とファックスアプリ1125とが設けられている。メッセージ処理部1121は、サービスレイヤ112における3種類のメッセージ(コマンド、レスポンス、ノーティフィケーション)についての処理を行う機能を有している。内部構成および処理の詳細については後述する。プリンタアプリ1122は、プリントサービスを提供するアプリケーションプログラムである。コピーアプリ1123は、コピーサービスを提供するアプリケーションプログラムである。スキャナアプリ1124は、スキャンサービスを提供するアプリケーションプログラムである。ファックスアプリ1125は、ファックスサービスを提供するアプリケーションプログラムである。
サービスサポートレイヤ122には、メッセージ処理部1221とメール処理部1222と文書管理部1223とレンダリング処理部1224とRIP処理部1225とが設けられている。メッセージ処理部1221は、サービスサポートレイヤ122における3種類のメッセージ(コマンド、レスポンス、ノーティフィケーション)についての処理を行う機能を有している。内部構成および処理の詳細については後述する。メール処理部1222は、メールの受信および送信の処理機能を提供するものである。文書管理部1223は、文書の管理および保存の処理機能を提供するものである。レンダリング処理部1224は、画像の描画の処理機能を提供するものである。RIP処理部1225は、RIP(Raster Image Processing)の処理機能を提供するものである。
サービスランタイムレイヤ132にはメッセージ処理部1321とプリビュー処理部1322とジョブ管理部1323とストレージ処理部1324と認証処理部1325とデバイス管理部1326とが設けられている。メッセージ処理部1321は、サービスランタイムレイヤ132における3種類のメッセージ(コマンド、レスポンス、ノーティフィケーション)についての処理を行う機能を有している。内部構成および処理の詳細については後述する。プリビュー処理部1322は、プリビュー画像生成の処理機能を提供するものである。ジョブ管理部1323は、ジョブ管理の処理機能を提供するものである。ストレージ処理部1324は、ストレージ管理の処理機能を提供するものである。認証処理部1325は、認証の処理機能を提供するものである。デバイス管理部1326は、デバイス管理の処理機能を提供するものである。
アブストラクトデバイスレイヤは、画像形成装置1のコントローラアーキテクチャの中核をなしている。アブストラクトデバイスレイヤは、プリンタ、スキャナ、コピー、ファックスといった複合機のコントローラアーキテクチャ上、最下位に位置するレイヤである。その主な役割として、接続されているハードウェア機器の制御方法を隠蔽して、抽象的なAPIを提供する。例えば、スキャナ機器を考えると、その接続方法や制御方法は、機器ごとに様々である。このような実際の機器の制御方法は、APIに反映することなく、もっと抽象度が高いレベルで機器を使用するAPIを提供するのが抽象機器レイヤである。一方で、アブストラクトデバイスレイヤは、上位クライアントが機器を利用する際に実現したい機能に対して制約を課さないように注意しなければならない。例えば、スキャナ機器では、原稿の1ページごとに様々なパラメータを変更することを可能にしなければならない。それは、読み込んだ1ページ目の原稿内容を解析した結果、2ページ目の読み込み方法を変更することを可能にするようなサービスを実現できるようにするためである。結果として、アブストラクトデバイスレイヤでは、原稿をまとめて読むというAPIではなく、原稿1ページごとのスキャン指示ができるAPIが必要となる。
アブストラクトデバイスレイヤのAPIには、障害回復手順を実現するものも含まれる。通常、アブストラクトデバイスレイヤのクライアントは、機器で発生した障害(例えば、プリンタでの用紙ジャム)からの具体的な回復方法を知っている必要がないようにしなければならない。そうしないと、クライアントは、接続されている機器ごとに障害回復手順を知っていなければならなくなる。しかし、現実には、実際のユーザに対して回復方法を指示しなければならない。例えば、用紙ジャムを取り除く手順を示されなければならない。アブストラクトデバイスレイヤは、クライアントがユーザに対して障害回復手順を示すためのAPIも提供し、機器ごとの障害回復手順を抽象機器レイヤのみが知っていればよいとする。総じて、アブストラクトデバイスレイヤは、制御する機器を細かく制御できるだけでなく、実際の制御方法を隠蔽したAPIを提供することとなる。
プリンタモジュール142は、プリンタエンジン(プロッタエンジン)を抽象化した機能を提供する。基本的には、ページ単位の印刷機能を提供する。ただし、クライアントが十分に多くの印刷要求を発行した場合には、プリンタエンジンの性能を最大限となるような制御をする責任を持つ。
スキャナモジュール143は、スキャナエンジンを抽象化した機能を提供する。基本的には、原稿のページ単位のスキャン機能を提供する。ADF(Auto Document Feeder)等の機器をフルスピードで制御する責任を持つ。
イメージ処理モジュール144は、イメージ処理を抽象化した機能を提供する。論理的に1つのモジュールとして位置付けているが、単独に行えるイメージ処理だけでなく、他のモジュールとも連携したイメージ処理を行う。例えば、スキャンしてjpeg圧縮する場合を考えてみる。接続するスキャナによっては、ハードウェアによってスキャンと同時にjpeg圧縮するハードウェアを持っているかもしれない。あるいは、そのようなjpeg圧縮ハードウェアを持っていないかもしれない。どちらの構成であるかは、アブストラクトデバイスレイヤのクライアントが意識することなく、スキャンしてjpeg圧縮を指示できる必要がある。この場合、クライアントはjpeg圧縮処理をイメージ処理モジュール144へ依頼する。イメージ処理モジュール144は依頼処理を表す記述子を返す。クライアントは、スキャンのパラメータの1つにその記述子を指定することで、スキャン結果を圧縮することをスキャナモジュール143に依頼する。実際のjpeg圧縮はハードウェアで行われるのか、ソフトウェアで行われるのかはクライアントが関知する必要がない。一方で、イメージ処理モジュール144は、単独でイメージ処理を行うための指示も可能である。例えば、ディスク上に保存されている複数ページのドキュメントを読み込んで、サムネイルイメージを持つドキュメントへ変換したり、各ページを回転したドキュメント変換したりすることができる。
ファックスモジュール145は、ファックスの送受信を抽象化した機能を提供する。
なお、各モジュール142、143、144、145は、管理しているハードウェア資源の利用権管理を行う。例えば、スキャナモジュール143に接続されているスキャナが1台しかない場合には、ハードウェア資源の利用は、1クライアントに限定される。そのため、クライアントは利用権を獲得して使用する必要がある。一方で、論理的に同時に利用できるクライアントを制限しない機器もある。例えば、ファックスモジュール145においては、送信指示は複数のクライアントから行える。なぜなら、ファックス送信は、遅延(実際には送信失敗による再送信)が許されるためである。どちらの種類の機器であっても、クライアントはハードウェア資源の獲得要求、資源の利用、資源の解放という手順を踏んでハードウェアを使用する必要がある。ここで述べるところのハードウェア資源とは、それぞれの装置が持つ細かな装置は含まれない。例えば、プリンタモジュール142であれば、用紙トレイやステープラなどのフィニッシャがあるが、そのようなものをハードウェア資源として個別に獲得するということではない。もっと大きな単位で、スキャナやプリンタという単位でハードウェア資源とみなして獲得する。
プリンタモジュール142は、メッセージ処理部1421と印刷処理部1422とエミュレータ/実機選択インタフェース1423とを備えている。メッセージ処理部1421は、プリンタモジュール142における3種類のメッセージ(コマンド、レスポンス、ノーティフィケーション)についての処理を行う機能を有している。内部構成および処理の詳細については後述する。印刷処理部1422は、印刷処理を制御する機能を有している。エミュレータ/実機選択インタフェース1423は、実機でないか実機であるかに応じ、デバイスエミュレータ162かカーネルドライバ15を選択する機能を有している。
スキャナモジュール143は、メッセージ処理部1431とスキャン処理部1432とエミュレータ/実機選択インタフェース1433とを備えている。メッセージ処理部1431は、スキャナモジュール143における3種類のメッセージ(コマンド、レスポンス、ノーティフィケーション)についての処理を行う機能を有している。内部構成および処理の詳細については後述する。スキャン処理部1432は、スキャン処理を制御する機能を有している。エミュレータ/実機選択インタフェース1433は、実機でないか実機であるかに応じ、デバイスエミュレータ162かカーネルドライバ15を選択する機能を有している。
イメージ処理モジュール144は、メッセージ処理部1441とイメージ処理部1442とエミュレータ/実機選択インタフェース1443とを備えている。メッセージ処理部1441は、イメージ処理モジュール144における3種類のメッセージ(コマンド、レスポンス、ノーティフィケーション)についての処理を行う機能を有している。内部構成および処理の詳細については後述する。イメージ処理部1442は、イメージ処理を制御する機能を有している。エミュレータ/実機選択インタフェース1443は、実機でないか実機であるかに応じ、デバイスエミュレータ162かカーネルドライバ15を選択する機能を有している。
ファックスモジュール145は、メッセージ処理部1451とファックス処理部1452とエミュレータ/実機選択インタフェース1453とを備えている。メッセージ処理部1451は、ファックスモジュール145における3種類のメッセージ(コマンド、レスポンス、ノーティフィケーション)についての処理を行う機能を有している。内部構成および処理の詳細については後述する。ファックス処理部1452は、ファックス送受信処理を制御する機能を有している。エミュレータ/実機選択インタフェース1453は、実機でないか実機であるかに応じ、デバイスエミュレータ162かカーネルドライバ15を選択する機能を有している。
アブストラクトデバイスレイヤを構成するモジュール142、143、144、145の下位には、カーネルドライバ15とエミュレータWebAPI161とデバイスエミュレータ162とエンジン17とが設けられている。カーネルドライバ15には、実機上のエンジン17を制御するデバイスドライバが含まれている。デバイスエミュレータ162は、実機上のエンジン17の代わりに、エンジンの処理(用紙への印刷等の物理的な処理を除き、信号上のテスト対象となり得る処理)をエミュレートする機能を有している。エミュレータWebAPI161は、エミュレータWebAPI161に対して、直接にテストを行えるようにするための、HTTP REST等によるAPIである。なお、実機においては、エミュレータWebAPI161およびデバイスエミュレータ162は起動されず、利用の観点からは画像形成装置1内に配置しておくる意義はあまりない。しかし、後述するように、サーバやPC(Personal Computer)等の情報処理装置で実行される仮想画像形成装置と同じソフトウェア構成とすることで、ソフトウェアパッケージの統一性の観点からは管理が容易となる。そのような利点を考慮しない場合は、実機の画像形成装置1からはエミュレータWebAPI161とデバイスエミュレータ162を省略することもできる。
エンジン17は、プロッタ制御部171とスキャナ制御部172とエンジン制御部173とエンジンドラム制御部174とを備えている。プロッタ制御部171は、プロッタの制御を行うものである。スキャナ制御部172は、スキャナの制御を行うものである。エンジン制御部173は、エンジンハードウェアの制御を行うものである。エンジンドラム制御部174は、エンジンドラム(モノクロの場合は1つ、カラーの場合は4つ)の制御を行うものである。
<メッセージ処理部>
図2はメッセージ処理部18(1121、1221、1321、1421、1431、1441、1451)の構成例を示す図である。図2において、メッセージ処理部18は、コマンド処理部181とレスポンス処理部182とノーティフィケーション処理部183と順序制御部184とを備えている。順序制御部184は、処理にあたって待ち合わせルール情報185を参照する。
コマンド処理部181は、コマンド入力部1811とタイプ識別部1812とタイプ別キューイング処理部1814とコマンド出力部1817とを備えている。コマンド入力部1811は、APIを介して自レイヤまたは自モジュールに送信されたコマンドを入力する機能を有している。タイプ識別部1812は、定義情報1813を参照し、コマンド入力部1811が入力したコマンドのタイプを識別する機能を有している。タイプ別キューイング処理部1814は、タイプ識別部1812が識別したタイプ別のキュー1815、1816、・・にコマンドをキューイングする機能を有している。なお、タイプ別キューイング処理部1814は、対応するキューがフルである場合、続くコマンドの入力をブロックする。キューは、タイプにより深さが設定されており、待ち合わせせずに即座に実行するタイプのコマンドに対応するキューは深さが「1」とされている。コマンド出力部1817は、順序制御部184によるコマンド、レスポンス、ノーティフィケーションの順序関係の制御に基づき、許可が行われたコマンドをキュー1815、1816、・・から取り出して処理実体に出力する機能を有している。
レスポンス処理部182は、レスポンス入力部1821とタイプ識別部1822とタイプ別キューイング処理部1824とレスポンス出力部1827とを備えている。レスポンス入力部1821は、処理実体から送信されたレスポンスを入力する機能を有している。タイプ識別部1822は、定義情報1823を参照し、レスポンス入力部1821が入力したレスポンスのタイプを識別する機能を有している。タイプ別キューイング処理部1824は、タイプ識別部1822が識別したタイプ別のキュー1825、1826、・・にレスポンスをキューイングする機能を有している。レスポンス出力部1827は、順序制御部184によるコマンド、レスポンス、ノーティフィケーションの順序関係の制御に基づき、許可が行われたレスポンスをキュー1825、1826、・・から取り出してコマンド送信元に出力する機能を有している。
ノーティフィケーション処理部183は、ノーティフィケーション入力部1831とタイプ識別部1832とタイプ別キューイング処理部1834とノーティフィケーション出力部1837とを備えている。ノーティフィケーション入力部1831は、処理実体から送信されたノーティフィケーションを入力する機能を有している。タイプ識別部1832は、定義情報1833を参照し、ノーティフィケーション入力部1831が入力したノーティフィケーションのタイプを識別する機能を有している。タイプ別キューイング処理部1834は、タイプ識別部1832が識別したタイプ別のキュー1835、1836、・・にノーティフィケーションをキューイングする機能を有している。ノーティフィケーション出力部1837は、順序制御部184によるコマンド、レスポンス、ノーティフィケーションの順序関係の制御に基づき、許可が行われたノーティフィケーションをキュー1835、1836、・・から取り出して該当する宛先に出力する機能を有している。
図3はメッセージ処理部18の処理例を示すフローチャートである。図3において、コマンド処理部181のコマンド入力部1811は、APIを介して自モジュールに送信されたコマンドを入力する(ステップS101)。次いで、タイプ識別部1812は、定義情報1813を参照し、コマンド入力部1811が入力したコマンドのタイプを識別する(ステップS102)。次いで、タイプ別キューイング処理部1814は、タイプ識別部1812が識別したタイプ別のキュー1815、1816、・・にコマンドをキューイングする(ステップS103)。
また、レスポンス処理部182のレスポンス入力部1821は、処理実体から送信されたレスポンスを入力する(ステップS104)。次いで、タイプ識別部1822は、定義情報1823を参照し、レスポンス入力部1821が入力したレスポンスのタイプを識別する(ステップS105)。次いで、タイプ別キューイング処理部1824は、タイプ識別部1822が識別したタイプ別のキュー1825、1826、・・にレスポンスをキューイングする(ステップS106)。
また、ノーティフィケーション処理部183のノーティフィケーション入力部1831は、処理実体から送信されたノーティフィケーションを入力する(ステップS107)。次いで、タイプ識別部1832は、定義情報1833を参照し、ノーティフィケーション入力部1831が入力したノーティフィケーションのタイプを識別する(ステップS108)。次いで、タイプ別キューイング処理部1834は、タイプ識別部1832が識別したタイプ別のキュー1835、1836、・・にノーティフィケーションをキューイングする(ステップS109)。
一方、順序制御部184は、待ち合わせルール情報185を参照し、コマンド、レスポンス、ノーティフィケーションの順序関係を判断して指示を行う(ステップS111)。コマンド処理部181のコマンド出力部1817は、順序制御部184から指示を受けた場合、許可が行われたコマンドをキュー1815、1816、・・から取り出し(ステップS112)、処理実体に出力する(ステップS113)。
レスポンス処理部182のレスポンス出力部1827は、順序制御部184から指示を受けた場合、許可が行われたレスポンスをキュー1825、1826、・・から取り出し(ステップS114)、コマンド送信元に出力する(ステップS115)。
ノーティフィケーション処理部183のノーティフィケーション出力部1837は、順序制御部184から指示を受けた場合、許可が行われたノーティフィケーションをキュー1835、1836、・・から取り出し(ステップS116)、該当する宛先に出力する(ステップS117)。
以下、アブストラクトデバイスレイヤの各モジュール142、143、144、145におけるメッセージ処理部1421、1431、1441、1451の扱うメッセージについて、より詳細に説明する。
アブストラクトデバイスレイヤに対するクライアントのAPIは、コマンド(Command)、レスポンス(Response)、ノーティフィケーション(Notification)の3つのメッセージから構成される。コマンドは、クライアントからアブストラクトデバイスレイヤに対する指示に用いられる。コマンドには、順番に実行されるものと、優先的に実行されるものがある。後者の例としては、「発行済みコマンドをキャンセルするコマンド」等が含まれる。クライアントは、個々のコマンドに対するレスポンスを待つことなく、連続してコマンドを発行することができる。
レスポンスは、コマンドに対するレスポンスとしてアブストラクトデバイスレイヤからクライアントへ返される。ノーティフィケーションは、アブストラクトデバイスレイヤで発生した抽象機器モジュールから何らかの事象を通知するためのものである。ノーティフィケーションには、自発的にアブストラクトデバイスレイヤから通知されるものと、コマンドの実行により発生して通知されるものがある。後者をイベント(Event)と呼び、コマンドを発行したクライアントへのみ通知される。それ以外のノーティフィケーションは、論理的に接続しているすべてのクライアントへ通知される。論理的というのは、物理的に常に接続されているとは限らないことを指して使用している。最終的な実装では、TCP(Transmission Control Protocol)などで常に接続されている場合も考えられる。イベントと他の種類のノーティフィケーションは、メッセージ名の末尾がEVENTで終了するか否かで区別される。
レスポンスとノーティフィケーションは、クライアントに対しては非同期に通知される。アブストラクトデバイスレイヤが、完全な非同期なメッセージ通信方式を利用しているのは、本質的に要求を出された処理が完了するために時間を要するためである。仮にRPC(Remote Procedure Call)などの方式を用いて、レスポンスが返ってくるまでに時間を要することを前提とする設計では、一般にアクティブオブジェクトパターン(もしくはFuture)方式が採用される。しかし、それを前提とした設計は、いわゆるマルチスレッドプログラミングを要求することになり、設計・実装が難しくなる。また、非同期なメッセージ通信方式の上に、クライアントのプログラミングを容易にするようなライブラリを構築することは難しくはない。
コマンドは、大きく、基本コマンドとモジュール固有コマンドに分類される。基本コマンドは、すべてのモジュールがサポートするコマンドである。コマンドの意味はほとんどのモジュールで同じである。モジュール固有コマンドは、その名前の通り、モジュールに固有のコマンドである。コマンドは、その処理形態において、順次キューイングされて実行されるコマンドと、キューイングされずに即時実行されるコマンドの2種類に分類される。
コマンド、レスポンス、ノーティフィケーションの各メッセージには共通なパラメータとしてシーケンス番号を持つ。コマンドを発行する際には、クライアント側がクライアント毎に一意となる1以上の整数のシーケンス番号を割り振って、単調増加するように付与しなければならない。シーケンス番号は、例えば、64ビット整数を使用して表現する。64ビット整数を使用することで、コマンドごとに1増やしながら割り当てても、一巡して戻ってくることを回避することができる。レスポンスに付与されるシーケンス番号は、対応するコマンドのシーケンス番号と同じである。ノーティフィケーションに付与されるシーケンス番号は、常に0である。
基本コマンドとしては、
ENABLE / DISABLE
SHUTDOWN
LOCK-DEVICE / UNLOCK-DEVICE
START-JOB / END-JOB
ABORT-COMMAND
START-FAULT-RECOVERY / END-FAULT-RECOVERY
ATTACH-SHARED-MEMORY / DETACH-SHARED-MEMORY
がある。
ENABLEコマンドは、抽象機器モジュールの動作を開始することを指示する。ここでいう動作の開始とは、様々なノーティフィケーションの通知を行ってよいという意味での開始である。各モジュールは、起動時に必要な機器の初期化を行う。しかし、初期化の結果、機器が使用可能な状態なのか、あるいは何らかの障害が発生して使用できない状態なのかを判断済みである。しかし、そのような状態の通知は、あくまでもクライアントが通知を受ける準備が整ってから送る必要がある。そのために、ENABLEコマンドが用いられる。ENABLEコマンドを受け付けた時点ですでに機器に障害が発生している場合には、コマンドに対するCOMPLETEDレスポンスが返される前に、FAULTEDノーティフィケーションが通知される。
DISABLEコマンドは、システムが終了する際に送られるコマンドであり、それ以降、一切のノーティフィケーションを通知をしない状態となる。なお、これ以降のみ、ENABLEコマンド以外にSHUTDOWNコマンドを受け付ける。
SHUTDOWNコマンドは、ENABLEされていない状態でのみ発行可能なコマンドであり、抽象機器モジュールに対して、プログラムの終了を指示する。SHUTDOWNコマンドに対するレスポンスを送信後、該当モジュールは終了する。
LOCK-DEVICEコマンドは、機器の使用権を獲得する。UNLOCK-DEVICEコマンドは、機器の使用権を解除する。接続されている機器を使用できるクライアントが高々1つだけの場合には、多重にロックはできない。ファックスモジュールなどのような場合には、多重にロックできることもある。スキャナやプリンタ等のエンジンは、通常の複合機の構成では1台しか接続されないが、ここでは、複数台接続される構成も考慮している。一方、1台しか接続されていない場合でも、上位のレイヤからは、一度に1つのクライアントのみがアクセスすることを保証するためにあえてLOCK-DEVICEコマンドを発行してもらう。1台のプリンタが持つトレイやフィニッシャ等は、ロックする対象ではない。それらは、あくまでもアブストラクトデバイスレイヤで管理されるものである。
ABORT-COMMANDコマンドは、すでに依頼済みのコマンドをキャンセルするためのコマンドである。このコマンドを使用して、前述の「ジョブ」全体をキャンセルすることも可能である。どのコマンドをキャンセルするかは、該当コマンドのシーケンス番号を指定することで行う。
START-FAULT-RECOVERYコマンドは、FAULT-RECOVERY-INSTRUCTIONノーティフィケーションの通知を指示するコマンドである。通常、障害(FAULT)は、ノーティフィケーションとして通知されるが、どのように回復するかを指示するノーティフィケーションは自発的には通知されない。START_FAULT_RECOVERYコマンドが発行された時点で障害が発生していない場合にでも、その後に障害が発生するとFAULT-RECOVERY-INSTRUCTIONノーティフィケーションの通知が行われる。そのような通知を停止するには、END_FAULT_RECOVERYコマンドを使用する。
ATTACH-SHARED-MEORYコマンドとDETACH-SHARED-MEMORYコマンドは、上位レイヤとの画像の受け渡しに使用する共有メモリのアッタチとデタッチを行う。ATTACH-SHARED-MEMORYコマンドでは、共有メモリのキーおよび大きさがパラメータとして渡される。DETACH-SHARED-MEMORYコマンドでは、共有メモリのキーが渡される。
REGISTER-EXEC-PARAMSコマンドとUNREGISTER-EXEC-PARAMSコマンドは、アブストラクトデバイスレイヤが提供する各モジュール(プリンタモジュール、スキャナモジュール、イメージ処理モジュール、ファックスモジュール)に対する動作モードパラメータ(各種動作条件)一式を登録および削除する。
全てのコマンドに対するレスポンスには、基本レスポンスとして、
COMPLETED
ABORTED
ILLEGAL-PARAMETER-ERROR
ILLEGAL-STATE-ERROR
NO-SUCH-COMMAND-ERROR
がある。モジュール固有コマンドであってもレスポンスは、ここに記述されたものだけである。
COMPLETEDレスポンスは、コマンドが完了したことを示すレスポンスである。レスポンスには、追加のパラメータを付けることが可能である。
ABORTEDレスポンスは、コマンドが中止されたことを示すレスポンスである。コマンドは、基本的にABORT-COMMANDコマンドでのみ中止されるコマンドと、自発的に中止されるコマンドの2種類に分かれる。例えば、LOCK-DEVICEコマンドの場合には、機器をロックできなければ、ABORTEDレスポンスが返されて、追加のパラメータでその理由が示される。ファックスモジュール等の再送回数オーバの場合は、ABORTEDレスポンスが返されて、追加パラメータで再送回数オーバであることを示す。
ILLEGAL-PARAMETER-ERRORレスポンスは、コマンドに付随するパラメータの値が不正であったり、必要なパラメータが指定されていなかったりした場合に返されるレスポンスである。追加の情報としてどのパラメータが問題であるかを示すパラメータを持つ。
IILLEGAL-STATE-ERRORレスポンスは、コマンドが誤った順序、もしくは、誤った状態の時に発行されたことを示すレスポンスである。
NO-SUCH-COMMAND-ERRORレスポンスは、指定されたコマンドがサポートされていないことを示すレスポンスである。
全てのモジュールに共通な基本ノーティフィケーションとしては、
ENABLED / DISABLED
WARMING-UP / READY
DEVICE-LOCKED / DEVICE-UNLOCKED
FAULTED / FAULT-CLEARED
FAULT-RECOVERY-INSTRUCTION
STATUS
がある。
ENABLEDノーティフィケーションとDISABLEDノーティフィケーションは、ENABLEコマンド/DISABLEコマンドにより状態が変化した場合の通知を行う。これらのノーティフィケーションは、コマンドのレスポンスに先立って通知される。例えば、ENABLEコマンドを受け付けて処理を行うと、ENABLEDノーティフィケーションが通知されて、それから、ENABLEコマンドに対するCOMPLETEDレスポンスが返される。ENABLEコマンドを受け付けた時点で、すでに何らかの障害が発生している場合には、COMPLETEDレスポンスが返される前に、FAULTEDノーティフィケーションの通知が行われる。
WARMING-UPノーティフィケーションとREADYノーティフィケーションは、接続されている機器が使用可能状態である通知を行う。何らかの障害が発生している場合には、FAULTEDノーティフィケーションが代わりに通知される。また、すべての障害がクリア(解消)された場合にも、このREADYノーティフィケーションが通知される。何も障害は発生していないが、機器がウォームアップ中であればREADYノーティフィケーションの代わりにWARMING-UPノーティフィケーションが通知される。
DEVICE-LOCKEDノーティフィケーションとDEVICE-UNLOCKEDノーティフィケーションは、LOCK-DEVICEコマンド/UNLOCK-DEVICEコマンドにより、機器がロックされたりロック解除された場合の通知を行う。このノーティフィケーションは、コマンドのレスポンスに先立って通知される。ノーティフィケーションは、すべてのクライアントに通知されるため、実際にロックを行っていないクライアントも、これらの通知を受けることでロックに関する状態を知ることができる。
FAULTEDノーティフィケーションは、機器に障害が発生したことを通知する。障害ごとに障害番号が自動採番されて付与される。FAULT-CLEAREDノーティフィケーションは、その障害番号を示すことで、該当する障害が解消されたことを示す。
FAULT-RECOVERY-INSTRUCTIONノーティフィケーションは、機器に障害が発生している場合に、START-FAULT-RECOVERYコマンドを受け付けて処理した結果として通知が行われる。障害が無い場合には、START-FAULT-RECOVERYコマンドを受け付けても何も処理されない。このノーティフィケーションは、ユーザが行う障害対応処理に関する情報を含んでおり、ユーザに示されることが想定されている。例えば、印刷時の用紙ジャムが発生している場合には、どのように取り除くかを示すための情報が含まれる。ユーザの障害対応状況に応じて、必要ならば自動的に次のFAULT-RECOVERY-INSTURCTIONノーティフィケーションが通知される。END-FAULT-RECOVERYコマンドが発行されるまでは、新たに障害が発生すると自動的にFAULT-RECOVERY-INSTRUCTIONノーティフィケーションが通知される。FAULT-RECOVERY-INSTRUCTIONノーティフィケーションで通知される情報は、基本的にユーザに障害を取り除かせるための情報であるため、メッセージ、画像、あるいは、両方の情報を含むことになる。詳細を検討する際には、多言語対応を考慮する必要がある。
STATUSノーティフィケーションは各種の状態を通知する。状態が変更になった場合には、自動的に通知される。このノーティフィケーションは通知対象種別とその対象のステータスを含む。STATUSという名前のメッセージは存在しない。STATUSノーティフィケーションとして分類されるのは、メッセージの名前の末尾がSTATUSとなっているものを指す。
なお、ここではメッセージの実際の通信方式の詳細については規定しない。しかし、コマンド/レスポンス/ノーティフィケーションの通信ができればよく、実際の通信ではバイナリデータ形式ではなくASCII文字もしくはUTF−8形式で送受信されることが望ましい。テキスト形式を用いることにより、デバッグ時の情報としてそのまま利用できることが、バイナリデータ形式ではない最大の理由である。また、実際の通信として、REST APIに準拠する可能性を考えると、JSON形式がよいと思われる。
アブストラクトデバイスレイヤと上位レイヤ間でのイメージの受け渡し方式は、基本的にファイルか共有メモリの2通りとなる。ファイルを指定される場合には、アブストラクトデバイスレイヤは、画像データをそのファイルから読み出したり、画像データをそのファイルへ保存したりする。Linux(登録商標)システム上では、mmapを使用することを想定している。mmapされたファイルへscatter/gather DMAを使用してプリンタエンジンへ転送したり、スキャナエンジンから転送したりする。共有メモリに関しては、ATTACH-SHARED-MEMORYコマンドで指定された共有メモリの指定されたオフセットから画像データを読み出したり、指定されたオフセットへ画像データを書き込んだりする。アブストラクトデバイスレイヤでは、共有メモリの管理は行わない。共有メモリをどのように管理するかは上位レイヤの責務である。
<実機によるテスト構成>
図4は実機に対する外部からのテストのための構成例を示す図である。図4において、画像形成装置1はインターネット等のネットワーク3に接続され、ネットワーク3には、サーバ装置2とPC等の情報処理装置4が接続されている。なお、サーバ装置2と情報処理装置4はいずれも「情報処理装置」であるが、ここでは、便宜的に、ネットワーク上にあって共用されるものをサーバ装置2、個々のユーザにより使用されるものを情報処理装置4と呼んでいるに過ぎない。
サーバ装置2には、テストを容易にするための各種のテストコード群21が格納され、情報処理装置4等から参照することができる。なお、実機でのテストでは、原則として画像形成装置1内のデバイスエミュレータ(162)を使用しないため、図示を省略してある。情報処理装置4には、サーバ装置2のテストコード群21を元に作成した操作部コード41と任意レイヤテストコード42が保持されている。
情報処理装置4において、操作部コード41を実行することで、画像形成装置1に対して実際上の操作部(オペレーションパネル)として実機に対するのと同様の操作を行うことができる。画像形成装置1について言えば、操作部のない(操作部レスの)画像形成装置となる。これにより、ユーザ先に納入された多数の画像形成装置1について、所定の操作に対して所定の処理が正常に行えるか否かのテストを実施することができる。
また、情報処理装置4において、任意レイヤテストコード42を実行することで、画像形成装置1の任意のレイヤについて任意のテストを実施することができる。
<実機なしのテスト構成>
図5は実機がない場合のテストのための構成例を示す図である。図5において、インターネット等のネットワーク3にはサーバ装置2とPC等の情報処理装置4が接続されている。サーバ装置2には、テストを容易にするための各種のテストコード群21が格納され、情報処理装置4等から参照することができる。また、サーバ装置2には、実機の画像形成装置1からエンジン部分を除いたソフトウェアのみで実行する仮想画像形成装置1Vが設けられている。仮想画像形成装置1Vは、サービスレイヤAPI111V、サービスレイヤ112V、サービスサポートレイヤAPI121V、サービスサポートレイヤ122V、サービスランタイムレイヤAPI131V、サービスランタイムレイヤ132V、アブストラクトデバイスレイヤAPI141V、プリンタモジュール142V、スキャナモジュール143V、イメージ処理モジュール144V、ファックスモジュール145V、エミュレータWebAPI161V、デバイスエミュレータ162Vを備えている。情報処理装置4には、サーバ装置2のテストコード群21を元に作成した操作部コード41と任意レイヤテストコード42が保持されている。
情報処理装置4において、操作部コード41を実行することで、サーバ装置2上の仮想画像形成装置1Vに対して操作上のテストを行うことができる。また、情報処理装置4において、任意レイヤテストコード42を実行することで、仮想画像形成装置1Vの任意のレイヤについて任意のテストを実施することができる。
図6は実機がない場合のテストのための他の構成例を示す図である。図6において、インターネット等のネットワーク3にはサーバ装置2とPC等の情報処理装置4が接続されている。サーバ装置2には、テストを容易にするための各種のテストコード群21が格納され、情報処理装置4等から参照することができる。また、サーバ装置2には、実機の画像形成装置1からエンジン部分を除いたソフトウェアのみの仮想画像形成装置プログラム22が格納され、情報処理装置4等からダウンロードすることができる。情報処理装置4には、仮想画像形成装置プログラム22をダウンロードして実行することで実現される、実機の画像形成装置1からエンジン部分を除いたソフトウェアのみで実行する仮想画像形成装置1Vが設けられている。仮想画像形成装置1Vは、サービスレイヤAPI111V、サービスレイヤ112V、サービスサポートレイヤAPI121V、サービスサポートレイヤ122V、サービスランタイムレイヤAPI131V、サービスランタイムレイヤ132V、アブストラクトデバイスレイヤAPI141V、プリンタモジュール142V、スキャナモジュール143V、イメージ処理モジュール144V、ファックスモジュール145V、エミュレータWebAPI161V、デバイスエミュレータ162Vを備えている。情報処理装置4には、サーバ装置2のテストコード群21を元に作成した操作部コード41と任意レイヤテストコード42が保持されている。
情報処理装置4において、操作部コード41を実行することで、情報処理装置4上の仮想画像形成装置1Vに対して操作上のテストを行うことができる。また、情報処理装置4において、任意レイヤテストコード42を実行することで、仮想画像形成装置1Vの任意のレイヤについて任意のテストを実施することができる。
図7は画像形成装置1、サーバ装置2および情報処理装置4のコンピュータ部分の構成例を示す図である。図7において、コンピュータ部分は、システムバス1001に接続されたCPU(Central Processing Unit)1002、ROM(Read Only Memory)1003、RAM(Random Access Memory)1004、NVRAM(Non-Volatile Random Access Memory)1005を備えている。また、コンピュータ部分は、I/F(Interface)1006と、I/F1006に接続された、I/O(Input/Output Device)1007、HDD(Hard Disk Drive)1008、NIC(Network Interface Card)1009と、I/O1007に接続されたモニタ1010、キーボード1011、マウス1012等を備えている。I/O1007にはCD/DVD(Compact Disk/Digital Versatile Disk)ドライブ等を接続することもできる。
<デバイスエミュレータ>
図8はデバイスエミュレータ162の構成例および他の部分との接続例を示す図である。原則として実機の画像形成装置1ではデバイスエミュレータ162を使用する実益はあまりないため、図5または図6による利用形態が一般的となる。ただし、実機の画像形成装置1であっても、エンジンに不具合があって利用できない場合や、搭載されたエンジンとは異なる仕様のエンジンについてテストしたい場合等には、デバイスエミュレータ162を使用することは可能である。そのため、図4による利用形態も排除されるものではない。従って、画像形成装置1および仮想画像形成装置1Vの構成要素については、便宜上、画像形成装置1の構成要素の符号を用いて示す。
図8において、デバイスエミュレータ162は、フロントエンド部1621とバックエンド部1622とを備えている。フロントエンド部1621は、エミュレータWebAPI161を介して送受信されるメッセージに対してWebサーバの機能を提供するものであり、エミュレータWebAPI161から受信したメッセージを変換(例えば、RESTから内部プロトコルへ変換)してバックエンド部1622に伝え、バックエンド部1622からのメッセージを変換(例えば、内部プロトコルからRESTへ変換)してエミュレータWebAPI161に送信する。バックエンド部1622は、エンジンの実質的なエミュレーション機能を有しており、アブストラクトデバイスレイヤの各モジュール(スキャナモジュール143についてのみ図示)のエミュレータ/実機選択インタフェース1433、・・との接続と、フロントエンド部1621との接続の2つの接続を有している。
また、図示の例では、情報処理装置4上のテストコード43により、エミュレータWebAPI161にアクセスする経路と、アブストラクトデバイスレイヤWebAPI1411にアクセスする経路と、アブストラクトデバイスレイヤプロセス間通信API1412にアクセスする経路とを示しているが、アクセスする経路はこれに限らない。テストコード43からエミュレータWebAPI161にアクセスする経路は、他のレイヤを通さずに直接にデバイスエミュレータ162によりテストを行う場合に適している。Web経由のみのアクセスであれば、エミュレータWebAPI161を使用するか、サービスレイヤWebAPI1111、サービスサポートレイヤWebAPI1211、サービスランタイムレイヤWebAPI1311、アブストラクトデバイスレイヤWebAPI1411にアクセスする経路を用いることができる。プロセス間通信が使える環境では、サービスレイヤプロセス間通信API1112、サービスサポートレイヤプロセス間通信API1212、サービスランタイムレイヤプロセス間通信API1312、アブストラクトデバイスレイヤプロセス間通信API1412にアクセスする経路を用いることができる。プロセス間通信による経路では、Web経由よりも高速にアクセスを行うことができる。
図9はテスト例を示すシーケンス図であり、テストコード43からアブストラクトデバイスレイヤWebAPI1411またはアブストラクトデバイスレイヤプロセス間通信API1412を介してスキャナモジュール143との間でメッセージのやりとりを行う場合と、テストコード43からエミュレータWebAPI161を介してデバイスエミュレータ162のフロントエンド部1621にメッセージを送信し、バックエンド部1622からスキャナモジュール143とアブストラクトデバイスレイヤWebAPI1411またはアブストラクトデバイスレイヤプロセス間通信API1412を介してテストコード43にメッセージを送信する場合の例について示している。
図9において、テストコード43からENABLEコマンドをアブストラクトデバイスレイヤWebAPI1411またはアブストラクトデバイスレイヤプロセス間通信API1412を介してスキャナモジュール143に送信する(ステップS201)。スキャナモジュール143は、ENABLEDノーティフィケーション、ORIGINAL-STATUSノーティフィケーション、PLATEN-STATUSノーティフィケーション、READYノーティフィケーション、COMPLETEDレスポンスを順にテストコード43に送信する(ステップS202〜S206)。
同様に、テストコード43からLOCK-DEVICEコマンドをアブストラクトデバイスレイヤWebAPI1411またはアブストラクトデバイスレイヤプロセス間通信API1412を介してスキャナモジュール143に送信する(ステップS211)。スキャナモジュール143は、DEVICE-LOCKEDノーティフィケーション、COMPLETEDレスポンスを順にテストコード43に送信する(ステップS212、S213)。
一方、テストコード43からエミュレータWebAPI161を介してコマンド「PUT/scanner/platen {"cover":"open"}」を介してフロントエンド部1621に送信する(ステップS221)。フロントエンド部1621は、内部プロトコルのコマンド「Platen.SetCover(PlatenCoverStatus.OPEN)」に変換してバックエンド部1622に伝える(ステップS222)。バックエンド部1622は、エミュレーションを行い、変更されたステータスをスキャナモジュール143に伝える(ステップS223)。スキャナモジュール143は、PLATEN-STATUSノーティフィケーションをテストコード43に送信する(ステップS224)。
同様に、テストコード43からエミュレータWebAPI161を介してコマンド「PUT/scanner/platen {"cover":"close"}」を介してフロントエンド部1621に送信する(ステップS231)。フロントエンド部1621は、内部プロトコルのコマンド「Platen.SetCover(PlatenCoverStatus.CLOSE)」に変換してバックエンド部1622に伝える(ステップS232)。バックエンド部1622は、エミュレーションを行い、変更されたステータスをスキャナモジュール143に伝える(ステップS233)。スキャナモジュール143は、PLATEN-STATUSノーティフィケーションをテストコード43に送信する(ステップS234)。
一方、テストコード43からSTARTコマンドをアブストラクトデバイスレイヤWebAPI1411またはアブストラクトデバイスレイヤプロセス間通信API1412を介してスキャナモジュール143に送信する(ステップS241)。スキャナモジュール143は、STARTコマンドをバックエンド部1622に伝える(ステップS242)。これにより、スキャンのエミュレーションが開始される。
図8に戻り、デバイスエミュレータ162のバックエンド部1622と、スキャナモジュール143のエミュレータ/実機選択インタフェース1433(他のモジュールについても同様)およびフロントエンド部1621との間の通信について以下に説明する。
バックエンド部1622は、サーバ側として、クライアント側であるスキャナモジュール143のエミュレータ/実機選択インタフェース1433およびフロントエンド部1621からの接続を待ち受ける機能を有している。
サーバ側は、例えば、Unix Domain Socketでクライアント側からの接続を待ち受ける。クライアント側は、例えば、Unix Domain Socketでサーバに接続する。使用するUnix Domain Socketのパス名は予め合意しているものとする。
サーバ側は、同時に一つのクライアント側からだけ接続をアクセプト(Accept)し、コネクタの初期状態のStatusメッセージを送信する。クライアント側は、初期状態のStatusメッセージに対し返答のStatusメッセージを返してから、通信を開始する。
クライアント側は、いつでもサーバ側との接続を切断してもよい。サーバ側は、エラー検出時を除き、クライアント側との接続を切断してはならない。クライアント側とサーバ側は、プロトコル上のエラーや復旧不可能な内部エラーが発生した場合は、接続を切断する。
Statusメッセージでは、コネクタのステータスとして、"ready"、"frozen"、"unavailable"の文字列を送ることができる。サーバ側は、クライアント側に対してStatusメッセージを通知できる。クライアント側は、Statusメッセージを受信すると、メッセージを処理し、返答としてサーバ側に同じStatusメッセージを通知しなければならない。サーバ側は、Statusメッセージの送信後は、クライアント側からその返答のStatusメッセージを受信するまでは次のStatusメッセージを送信してはならない。サーバ側は、最後にクライアント側から受信したStatusメッセージと同じStatusメッセージを通知してはならない。
Commandメッセージでは、一つの内部プロトコルによるコマンドのバイトスライスを送信することができる。サーバ側は、クライアント側からのready Statusメッセージ受信後にCommandメッセージを送信できる。サーバ側は、クライアント側へfrozen Statusメッセージもしくはunavailable Statusメッセージの送信後は、ready Statusメッセージを受信するまではCommandメッセージを送信してはならない。クライアント側は、サーバ側へready Statusメッセージの送信後にCommandメッセージを送信できる。クライアント側は、サーバ側へfrozen Statusメッセージもしくはunavailable Statusメッセージの送信後は、ready Statusメッセージを受信するまではCommandメッセージを送信してはならない。
<総括>
以上説明したように、本実施形態によれば、次のような利点がある。
(1)画像形成装置のソフトウェア部分を構成する各レイヤのそれぞれに、各レイヤに入出力するメッセージの順序制御を行うメッセージ処理部を備えているため、マルチプロセッサ環境でも、OS環境に影響されずに、実行順序の維持やスレッドセーフを実現することができ、コンピュータ組み込み装置の複雑で正確な制御を行うことができる。
(2)各レイヤはメッセージのやりとりだけで所定のサービスを提供することができるため、各レイヤの置かれる物理的な位置に影響されず、位置透過性を実現することができる。
(3)各レイヤは、実装詳細を隠蔽し、実装詳細に影響されないインタフェースを外部に提供しているため、APIを変更することなく、内部構造を変更することができる。そのため、APIを用いたクライアントプログラムの変更は発生せず、工数の大幅な削減を図ることができる。
(4)実機のハードウェアをエミュレートするデバイスエミュレータとその他のソフトウェア部分により、サーバ装置や情報処理装置の上で仮想的な画像形成装置を動作させることができ、実機がなくても任意のレイヤのテストを行うことができる。これにより、コンピュータ組み込み装置のテストを柔軟に行うことができる。
(5)実機に対して任意のレイヤのテストを行うことができるため、顧客に納入後の市場規模の台数のテストを行うことができる。これにより、コンピュータ組み込み装置のテストを柔軟に行うことができる。
(6)最下層のレイヤは、実機のハードウェアとデバイスエミュレータとを切り替える選択インタフェースを備えるため、実機とテスト環境とで同じソフトウェア構成とすることができる。
(7)操作部の機能を画像形成装置の機能から分離して開発することが可能となる。
以上、本発明の好適な実施の形態により本発明を説明した。ここでは特定の具体例を示して本発明を説明したが、特許請求の範囲に定義された本発明の広範な趣旨および範囲から逸脱することなく、これら具体例に様々な修正および変更を加えることができることは明らかである。すなわち、具体例の詳細および添付の図面により本発明が限定されるものと解釈してはならない。
1 画像形成装置
111 サービスレイヤAPI
1111 サービスレイヤWebAPI
1112 サービスレイヤプロセス間通信API
112 サービスレイヤ
1121 メッセージ処理部
1122 プリンタアプリ
1123 コピーアプリ
1124 スキャナアプリ
1125 ファックスアプリ
121 サービスサポートレイヤAPI
1211 サービスサポートレイヤWebAPI
1212 サービスサポートレイヤプロセス間通信API
122 サービスサポートレイヤ
1221 メッセージ処理部
1222 メール処理部
1223 文書管理部
1224 レンダリング処理部
1225 RIP処理部
131 サービスランタイムレイヤAPI
1311 サービスランタイムレイヤWebAPI
1312 サービスランタイムレイヤプロセス間通信API
132 サービスランタイムレイヤ
1321 メッセージ処理部
1322 プリビュー処理部
1323 ジョブ管理部
1324 ストレージ処理部
1325 認証処理部
1326 デバイス管理部
141 アブストラクトデバイスレイヤAPI
1411 アブストラクトデバイスレイヤWebAPI
1412 アブストラクトデバイスレイヤプロセス間通信API
142 プリンタモジュール
1421 メッセージ処理部
1422 印刷処理部
1423 エミュレータ/実機選択インタフェース
143 スキャナモジュール
1431 メッセージ処理部
1432 スキャン処理部
1433 エミュレータ/実機選択インタフェース
144 イメージ処理モジュール
1441 メッセージ処理部
1442 イメージ処理部
1443 エミュレータ/実機選択インタフェース
145 ファックスモジュール
1451 メッセージ処理部
1452 ファックス処理部
1453 エミュレータ/実機選択インタフェース
15 カーネルドライバ
161 エミュレータWebAPI
162 デバイスエミュレータ
1621 フロントエンド部
1622 バックエンド部
17 エンジン
171 プロッタ制御部
172 スキャナ制御部
173 エンジン制御部
174 エンジンドラム制御部
18 メッセージ処理部
181 コマンド処理部
1811 コマンド入力部
1812 タイプ識別部
1813 定義情報
1814 タイプ別キューイング処理部
1815、1816 キュー
1817 コマンド出力部
182 レスポンス処理部
1821 レスポンス入力部
1822 タイプ識別部
1823 定義情報
1824 タイプ別キューイング処理部
1825、1826 キュー
1827 レスポンス出力部
183 ノーティフィケーション処理部
1831 ノーティフィケーション入力部
1832 タイプ識別部
1833 定義情報
1834 タイプ別キューイング処理部
1835、1836 キュー
1837 ノーティフィケーション出力部
184 順序制御部
185 待ち合わせルール情報
2 サーバ装置
21 テストコード群
22 仮想画像形成装置プログラム
3 ネットワーク
4 情報処理装置
41 操作部コード
42 任意レイヤテストコード
43 テストコード
1V 仮想画像形成装置
111V サービスレイヤAPI
112V サービスレイヤ
121V サービスサポートレイヤAPI
122V サービスサポートレイヤ
131V サービスランタイムレイヤAPI
132V サービスランタイムレイヤ
141V アブストラクトデバイスレイヤAPI
142V プリンタモジュール
143V スキャナモジュール
144V イメージ処理モジュール
145V ファックスモジュール
161V エミュレータWebAPI
162V デバイスエミュレータ
特開2002−84383号公報

Claims (6)

  1. ソフトウェアにより実現される、複数の階層に分かれ、上位に対して所定のサービスを提供する複数のレイヤと、
    前記レイヤのそれぞれに設けられ、該レイヤに入出力するメッセージの順序制御を行うメッセージ処理部と
    を備えたことを特徴とするコンピュータ組み込み装置。
  2. 請求項1に記載のコンピュータ組み込み装置において、
    前記メッセージ処理部が入出力するメッセージは、コマンド、レスポンスおよびノーティフィケーションの3種類とする
    ことを特徴とするコンピュータ組み込み装置。
  3. 請求項2に記載のコンピュータ組み込み装置において、
    前記メッセージ処理部は、
    コマンドの入出力処理を行うコマンド処理部と、
    レスポンスの入出力処理を行うレスポンス処理部と、
    ノーティフィケーションの入出力処理を行うノーティフィケーションと、
    コマンド、レスポンスおよびノーティフィケーションの順序制御を行う順序制御部と
    を備えたことを特徴とするコンピュータ組み込み装置。
  4. 請求項3に記載のコンピュータ組み込み装置において、
    前記コマンド処理部は、コマンドを入力し、タイプ別にコマンドをキューに格納し、前記順序制御部の制御に従ってキューからコマンドを取り出して出力し、
    前記レスポンス処理部は、レスポンスを入力し、タイプ別にレスポンスをキューに格納し、前記順序制御部の制御に従ってキューからレスポンスを取り出して出力し、
    前記ノーティフィケーション処理部は、ノーティフィケーションを入力し、タイプ別にノーティフィケーションをキューに格納し、前記順序制御部の制御に従ってキューからノーティフィケーションを取り出して出力し、
    前記順序制御部は、待ち合わせルール情報に基づいてコマンド、レスポンスおよびノーティフィケーションの順序制御を行う
    ことを特徴とするコンピュータ組み込み装置。
  5. 請求項1乃至4のいずれか一項に記載のコンピュータ組み込み装置において、
    前記レイヤは、実装詳細を隠蔽し、実装詳細に影響されないインタフェースを外部に提供する
    ことを特徴とするコンピュータ組み込み装置。
  6. コンピュータ組み込み装置を構成するコンピュータを、
    複数の階層に分かれ、上位に対して所定のサービスを提供する複数のレイヤ、
    前記レイヤのそれぞれに設けられ、該レイヤに入出力するメッセージの順序制御を行うメッセージ処理部
    として機能させるプログラム。
JP2014145621A 2014-07-16 2014-07-16 コンピュータ組み込み装置 Pending JP2016021208A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014145621A JP2016021208A (ja) 2014-07-16 2014-07-16 コンピュータ組み込み装置
US14/789,237 US20160019105A1 (en) 2014-07-16 2015-07-01 Computer embedded apparatus, recording medium and computer embedded apparatus test system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014145621A JP2016021208A (ja) 2014-07-16 2014-07-16 コンピュータ組み込み装置

Publications (1)

Publication Number Publication Date
JP2016021208A true JP2016021208A (ja) 2016-02-04

Family

ID=55265998

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014145621A Pending JP2016021208A (ja) 2014-07-16 2014-07-16 コンピュータ組み込み装置

Country Status (1)

Country Link
JP (1) JP2016021208A (ja)

Similar Documents

Publication Publication Date Title
JP3679349B2 (ja) 画像形成装置、画像形成方法、画像形成プログラムおよびアプリケーションプログラム
US20100073707A1 (en) Systems and methods for facilitating virtual cloud printing
JP5602592B2 (ja) ネットワークシステム、サーバ、ログ登録方法、及び、プログラム
US20110205585A1 (en) Image processing system, image processing system control method, and storage medium
JP2010191596A (ja) 動作定義ファイル生成装置、システム、画像形成装置、動作定義ファイル生成方法およびプログラム
JP2009129340A (ja) ジョブフロー処理装置
JP4817994B2 (ja) データ管理システム
US20160019105A1 (en) Computer embedded apparatus, recording medium and computer embedded apparatus test system
JP2006285840A (ja) 文書管理システム
JP6195357B2 (ja) 画像処理装置、その制御方法、及びプログラム
JP2016021209A (ja) コンピュータ組み込み装置テストシステム
EP4155937A1 (en) Information processing system, information processing apparatus, program, and information processing method
JP2016021208A (ja) コンピュータ組み込み装置
JP2007336077A (ja) 画像形成装置、設定変更通知方法および設定変更通知プログラム
JP5636757B2 (ja) 画像処理装置、画像処理システム、画像処理方法、およびプログラム
JP4246560B2 (ja) 情報処理装置、情報処理方法、プログラム、及び記録媒体
JP5918172B2 (ja) 画像形成システムおよび画像形成装置
JP5842671B2 (ja) 機器、情報処理方法及びプログラム
JP2004005503A (ja) Webサービス機能を有する画像形成装置
JP2009044742A (ja) 画像処理装置、画像処理装置の動作方法及びプログラム
EP4152156A1 (en) Information processing system, information processing apparatus, and program
JP2009043078A (ja) シミュレータプログラム及び記録媒体
JP5708713B2 (ja) システム、画像形成装置および設定処理方法
JP2012221198A (ja) プリントシステム
JP2004001425A (ja) 複数の通信プロトコルを有する画像形成装置