以下、添付図面を参照して実施の形態を詳しく説明する。尚、以下の実施の形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
まず本明細書で想定する課題の一例を説明する。
複数の情報処理装置がそれぞれアプリケーションを有していると仮定する。また、デバイスは情報処理装置内のステータス通知先(Listener)に対して複数のステータス(ステータスAとステータスB)のうち一つのステータス(ステータスA)を通知するものとする。さらに複数のアプリケーションがステータスAを取得していたものとする。このような場合に、複数の情報処理装置のうちの一つの情報処理装置のアプリケーションが必要なステータスとしてステータスBの通知をデバイスに要求すると、その他のアプリケーションが必要とするステータスAが通知されなくなる可能性がある。その他のアプリケーションは必要とする情報が不足して、動作や表示に不備をきたすという可能性がある。
さらに、ネットワーク環境においては、ネットワーク上に複数の情報処理装置が存在することが想定される。イベント通知を要求した情報処理装置が複数存在する場合、デバイスはそれら全ての情報処理装置にステータス情報を通知しなければならず、デバイスのイベント通知処理の負荷は非常に高い。
そこで、情報処理装置内の複数のアプリケーションが正常に動作可能なイベント情報の通知要求手段を提供するとともに、ネットワーク環境におけるデバイスのイベント通知負荷をより軽減することを目的の一つとする。
<実施形態1>
本明細書では、デバイスは印刷装置、情報処理装置はパソコンを想定して説明する。また、デバイスはスキャナやFAX等の画像形成装置であっても構わない。
図2を用いて、印刷装置250とネットワーク290を介して接続されたパソコン200によって構成された印刷システムを説明する。
なお、ネットワーク290には複数の印刷装置やパソコンが接続されていても構わない。
パソコン200は入力インタフェース202とCPU203、ROM204、RAM205、外部記憶装置206、出力インタフェース208、表示部207、キーボード201、マウス209、ネットワークインタフェース210を有する。ネットワークインタフェース210はネットワーク290にネットワークケーブル211を介して接続してある。ROM204には初期化プログラムが入っており、外部記憶装置206にはアプリケーションプログラム群とOS(Operating System)、プリンタドライバやその他各種のデータが保存されている。RAM205は外部記憶装置206に格納される各種プログラムがワークメモリとして使用する。
加えて、CPU203が外部記憶装置206に記憶されているプログラムに基づき処理を実行することによって、図3に示されるようなパソコン200のソフトウェア構成及び後述するフローチャートの各ステップの処理が実現される。
印刷装置250はネットワークインタフェース251とRAM252、プリントエンジン253、ROM254、CPU256を有する。ネットワークインタフェース251はネットワーク290にネットワークケーブル257を介して接続してある。RAM252はCPU256の主メモリとワークメモリとして用いられ、受信した印刷ジョブを一旦保存するための受信バッファーや各種のデータを保存する。プリントエンジン253はRAM252に保存されたデータに基づき印刷を行う。ROM254にはステータス管理プログラム255等、各種の制御プログラムや各制御プログラムが使用するデータが入っており、CPU256はこれらの制御プログラムに従って印刷装置250の各部を制御する。ステータス管理プログラム255は図示していない印刷装置内部にある各種のセンサの情報を元に印刷装置250の状態を監視し、ステータス情報を作成、RAM252にストアするプログラムである。
加えて、CPU256がROM254に記憶されているプログラムに基づき処理を実行することによって後述するフローチャートの各ステップの処理が実現される。
ここでは例としてパソコン200と印刷装置250の処理分担を上記のように示したが、特にこの分担形態限らず他の形態であっても構わない。
図3はパソコン200のソフトウェア構成を示す図である。同図において、307はEthernet(登録商標)にを制御するEthernet(登録商標)に制御スタックである。306はIP Networkを制御するIP Network制御スタックである。304はWSD(Web Services on Devices)を制御するWSD制御スタック、305はIHV(Independent Hardware Vendor)の独自プロトコルを制御するIHVネイティブプロトコル制御スタックである。303はデバイスドライバ群であり、OSに標準で同梱されている標準ドライバ群とIHVから提供されるIHV製ドライバ群から構成される。印刷装置を制御するプリンタドライバもドライバ群のひとつである。302はアプリケーション/DDIインタフェースであり、Application Programing Interface(API)、Device Driver Interface(DDI)から構成される。301はアプリケーション群であり、後述するインク残量表示アプリケーション及び印刷ステータス監視アプリケーションもアプリケーション群301の一種である。
図4に本実施形態におけるインク残量表示アプリケーションの画面を示す。
図4(a)の400はインク残量表示アプリケーション(以後、インク表示アプリと称す)である。インク表示アプリは、印刷装置250の消耗品であるインクの残量情報を印刷装置250より得て模式的に示す機能を持つ。401にインク残量を表示する対象となる印刷装置250の名称を表示している。402はインク残量表示部であり、403に各種インクの名称を表示し、404にインクの残量を模式的に表示する。405はインクの状態についてユーザーに注意を促すためのアイコン表示部である。406は終了ボタンである。インク表示アプリ400はユーザーにより終了ボタン406が選択されると、処理を終了する。
図5はインク表示アプリ400の処理を示すフローチャートである。
インク表示アプリ400は、ユーザーによるパソコン200の操作またはOSにより起動指示を受けると処理を開始する(S501)。インク表示アプリ400は、初期表示状態として、図4(b)の420に示すよう、通信確立中である旨を表示する(S502)。続いて、インク表示アプリ400は、Private要素通知開始要求を印刷装置に対して発行する(S503)。
ここで後述するEventデータがステータス情報であれば、Private要素には後述する詳細なステータス情報が含まれている。本明細書ではステータス情報のPrivate要素をPrivateステータス情報と呼ぶ。一方、同じく後述するEventデータがステータス情報であれば、Public要素には単純で一般化されたステータス情報が含まれている。本明細書ではステータス情報のPublic要素をPublicステータス情報と呼ぶ。
パソコン200はS503の要求を行うことでPrivateステータス情報とPublicステータス情報の両方を印刷装置250から取得することができる。Private要素通知開始要求(S503)は、具体的にはマイクロソフト社のWSD Print Serviceで定義されるGetPrinterElementsRequestを印刷装置250に通知する処理である。
(ステータス情報とEventデータ)
ここでステータス情報とEventデータ、Public、Privateの関係について説明する。
本明細書ではPrivate要素を含むEventデータをPrivateEventデータと呼ぶ。同様にPublic要素を含むEventデータをPublicEventデータと呼ぶ。
また、Publicステータス情報及びPrivateステータス情報はEventデータに含まれる情報の一例である。なお、Eventデータにはステータス情報の他に印刷装置の構成情報や印刷装置の能力情報が含まれていても構わない。
(Private要素通知開始・終了要求及び応答)
次に、図6(a)を参照して、GetPrinterElementsRequestにて発行するPrivate要素通知開始要求の内容を説明する。GetPrinterElementsRequestはXMLで記述される。601はGetPrinterElementsRequest開始要素である。ここで、「wsdst」という接頭辞は、標準的(Public)なWSD Print Serviceのネームスペースの略称である。602はRequestedElements開始要素である。603はName要素に「ihv:InkErrorDetails」というデータが包まれている様子を示している。「ihv:InkErrorDetails」データを印刷装置250に通知することで、印刷装置250は「ihv:InkErrorDetails」という情報を要求元に応答する処理(後述する)を行う。
ここで、「ihv」という接頭辞は、Private要素のネームスペースの略称である。IHVによりカスタマイズされたVender独自(Private)の要素であることを意味する。
604はparam=“Id”という属性情報が付されたRequirements要素に「11111111」というデータが包まれている様子を示している。「11111111」というデータはパソコン200内で動作するアプリケーションの識別子であり、少なくともパソコン200内で重複しない識別子である。もちろんGUID (Globally Unique Identifier)のように、パソコン外においても固有の識別子であってもよい。「Id」属性情報が付されたRequirements要素にて「11111111」というデータを通知することで、印刷装置250は「ihv:InkErrorDetails」という情報の通知に関する要求元のアプリケーションを識別する情報として用いる(後述する)。605はparam=“Listener”という属性情報が付されたRequirements要素に「Requester Only」というデータが包まれている様子を示している。「Listener」属性が付されたRequirements要素にて「Requester Only」というデータを通知することで、印刷装置250は「ihv:InkErrorDetails」という情報はGetPrinterElementsRequestの要求元のパソコンへのみEvent通知することを記憶する(後述する)。606はparam=“period”という属性情報が付されたRequirements要素に「Begin」というデータが包まれている様子を示している。「period」属性が付されたRequirements要素にて「Begin」というデータを通知することで、印刷装置250は「ihv:InkErrorDetails」という情報は、終了指示があるまで要求元のパソコン200にEvent通知し続けることを記憶する(後述する)。
インク表示アプリ400は、Private要素通知開始要求(S503)にて今後ihv:InkErrorDetailsをEvent通知し続けることを要求すると、その応答の有無を判断する(S504)。S504で、インク表示アプリ400が印刷装置250からの応答が得られなかった場合、インク表示アプリ400は通信エラー表示を行う(S505)。ここで、インク表示アプリ400の表示は、図4(b)の420に印刷装置との通信に失敗した旨を表示する。通信エラー表示(S505)を行った後、インク表示アプリ400はInterval処理を行う(S506)。Interval処理(S506)とは、任意の時間を開けて次の処理へ進むためのWait処理である。Interval処理(S506)を終えると、インク表示アプリ400は再度通信確立中表示(S502)を行う。本実施形態においてInterval処理でWaitする時間は任意に設定される時間であり、固定時間であってもよいし、ネットワーク通信状況を踏まえて動的に生成される時間であってもよい。
S504にて応答があった場合、インク表示アプリ400はPrivate要素通知開始要求の印刷装置250への登録成否を判断する(S507)。登録に失敗した場合は、インク表示アプリ400は通信エラー表示を行う(S505)。登録に成功した場合は、インク表示アプリ400は応答情報からPrivate要素を抽出する(S508)。インク表示アプリ400はS508で抽出した印刷装置250から得たPrivateステータス情報と、Publicステータス情報(後述する)に従ってインク残量表示を行う(S509)。応答情報とは、GetPrinterElementsRequestに対する応答情報であるGetPrinterElementsResponseである。
ここで、図6(b)を参照して、Private要素通知開始要求の応答情報であるGetPirnterElementsResponseの内容について説明する。GetPrinterElementsResponseはXMLで記述される。620はGetPrinterElementsResponse開始要素である。621はElementData開始要素であり、Name属性の属性値に以降のXML情報は「ihv:InkErrorDetails」の応答情報である旨を示し、この応答情報が有効である旨をValid属性の「ture」属性値にて示している。622はInkErrorDetails開始要素である。623はEntry開始要素にname=“Black”という属性情報が付されている。この「Black」という属性値は、以降のXML情報は黒色インクに関する情報であることを示している。624はInkState要素に「Out」というデータが包まれている様子を示す。InkStateの「Out」というデータはインクが無くなった可能性のある旨を示している。625はMessage要素にCDATAで包まれたデータとして「Ink has run out.」データが包まれた様子を示している。626はIcon要素に「Cross」というデータが包まれている様子を示している。627はSupportCode要素に「E2000」というデータが包まれている様子を示している。図6(b)で説明したPrivate要素「inv:InkErrorDetails」を抽出(S508)しステータス情報を得て、インク表示アプリ400は図4(a)で説明したインク表示を行う(S509)。
図6(c)はPrivate要素通知終了要求であるGetPrinterElementsRequestを示す。610のparam=“Id”という属性情報が付されたRequirements要素に「11111111」というアプリケーションの識別子が設定されている。611のRequirements param=“period”要素には「End」データが包まれている。これら610・611に示す情報を受信した印刷装置250はPrivate要素通知登録を解除する(後述する)。
図6(d)はPrivate要素の通知を一度だけ要求するGetPrinterElementsRequestを示す。630はparam=“period”という属性情報が付されたRequirements要素に「Once」というデータが包まれている様子を示している。図6(d)の要求を受け付けた印刷装置250は要求を受け付けた後にパソコン200に一度だけPrivate要素を通知する。
(インク表示アプリ)
図4(c)は図4(a)のインク表示アプリをユーザーが操作したときの表示状態を示している。図4(c)の410のアイコン表示は、626のIcon要素「Cross」データを基に表示している。410アイコンをユーザーが選択した場合、411に示すポップアップ表示にて「Ink has run out.」というメッセージをユーザーに伝える。このメッセージは、625のMessage要素「Ink has run out.」データを基に表示している。412は操作説明書起動ボタンであり、このボタンをユーザーが選択することによって、インク表示アプリは電子的な操作説明書(不図示)を表示する。このとき、操作説明書は「Out」というインク状態について解説するページが初期画面として開かれる。この「Out」インク状態の解説ページを開く動作は、627のSupportCode要素「E2000」データを電子的な操作説明書にパラメータとして渡すことで実現する。ここで説明した各種データは、詳細情報(Private要素)であり、図4で説明したようなアプリケーションのみが必要とする。図4で説明したようなアプリケーションが動作しないパソコン200では、Private要素の情報は不要となる。そのため、Private要素が不要なパソコンには、印刷装置250はPrivate要素を通知しないことが望まれる。
インク表示アプリ400は、インク残量表示(S509)を行った後、ステータス要求処理を行う(S510)。ステータス要求処理(S510)とは、印刷装置250から通知されたEventデータを受信するパソコン200内のListenerモジュールから、ステータスを取得する処理である。本実施形態においては、ListenerモジュールはWSDポートモニターを想定して説明する(後述する)。インク表示アプリ400は、印刷装置250からのステータス要求処理(S510)の応答の有無を判定する(S511)。応答がなかったと判断した場合は、インク表示アプリ400は通信エラーを表示する(S512)。その後、Interval処理(S513)を行い、再度ステータス要求処理(S510)に戻る。
S511にて応答があったと判断した場合、インク表示アプリ400は印刷装置250のステータス情報を解析し、ステータス情報の更新の有無を判定する(S514)。更新があった場合はインク残量表示を更新し(S515)、アプリ終了判定を行う(S516)。S514でステータス更新がないと判断した場合は、インク残量表示を更新せずアプリ終了判定を行う(S516)。ここで、アプリ終了判定(S516)はインク表示アプリ400の終了ボタン406がユーザーにより選択されたかを判定する処理を一例として示す。S516にてユーザーによるアプリ終了指示がないと判断した場合、インク表示アプリ400はInterval処理(S513)を経て、ステータス要求処理(S510)へ戻る。
S516でユーザーによるアプリ終了指示があったと判断した場合、インク表示アプリ400は図6(c)のPrivate要素通知終了要求を印刷装置250に発行し(S517)、処理を終了する(S518)。
(パソコン要求受付処理)
図7(a)は印刷装置250がパソコン200の要求を受付けることで行う処理を示すフローチャートである。要求の一例としてはSubscribeリクエストが挙げられる。
パソコン200のOSはパソコン200内にインストールされたWSDプリンタドライバと関連付けられる印刷装置250がネットワーク上に存在することを確認するとSubscribeリクエストを行う。Subscribeとはパソコン200と印刷装置250との間で行うEventの通知登録処理である。パソコン200のOSはSubscribe時に印刷装置250がパソコン200にどのEventを通知するか指定することができる。ここでは印刷装置250がパソコン200に通知できる全てのEventをSubscribe時に指定したとして説明を進める。
印刷装置250はパソコン要求受付処理を開始する(S721)と、パソコン200の要求がSubscribeであるかどうかを判定する(S722)。判定の結果SubscribeであればS723に進み、Subscribeでなければ後述するS701に進む。
S723ではEventの通知先としてパソコン200を登録する。
S724ではパソコン200にSubscribeレスポンスを行う。
その後、印刷装置250はパソコン要求受付処理を終了する(S725)。
パソコン200は、OSが終了するタイミング、又は、印刷装置250がネットワーク上から存在しなくなる(印刷装置250の電源OFFも含む)タイミングで、Unsubscribeを行う。Unsubscribeとは、Eventの通知登録を解除する処理である。
なお、パソコンのアプリケーションによっては、Subscribeをしていないにも関わらず、Private要素通知開始要求(S503)又はPrivate要素通知終了要求(S517)を行う可能性が考えられる。よって、S722でSubscribeでないと判定した場合に、S701の処理の前にパソコンがSubscribe済みであるかどうか判定して、Subscribe済みであると判定した場合にS701の処理を行うように構成してもよい。また、パソコンがSubscribe済みであるかどうかの判定を行う処理を設けた場合は、判定の結果Subscribe済みでなければ、印刷装置250はパソコン要求受付処理を終了する。
(Private要素通知先の管理)
図7(b)は印刷装置250のPrivate要素登録及び登録解除処理を示すフローチャートである。図7を参照して、インク表示アプリ400のPrivate要素通知開始要求(S503)及びPrivate要素通知終了要求(S517)を受けて行う、印刷装置250のPrivate要素登録及び登録解除処理を説明する。
印刷装置250は、図6(a)で示したようなRequirements要素を含むPrivate要素通知要求を受信すると、Private要素登録及び登録解除処理を開始する(S701)。印刷装置250は、「period」属性値が付されたRequirements要素のデータを判別する(S702)。図6(a)で示すような登録要求であった場合は、印刷装置250はPrivate要素「InkErrorDetails」(603)をEvent発行するよう記憶する(S703)。さらに、「InkErrorDetails」(603)を含んだEventを通知する先として、GetPrinterElementsRequestを発行したパソコン200内のListenerを登録する(S703)。さらに、印刷装置250は要求元アプリIDを記憶する(703)。続いて、印刷装置250は現在のステータス収集を行う(S704)。印刷装置250は、登録完了の旨として現在のステータス情報をGetPrinterElementsResponse(図6(b))によって応答(S705)した後、Private要素登録処理を終了する(S706)。
図8は印刷装置250内で管理するPrivate要素管理テーブルを模式的に示した図である。図6(a)のGetPrinterElementsRequestを印刷装置250が受信することにより、印刷装置250は図8(a)のように情報を保存する。801はPrivate要素名として「InkErrorDetails」が格納されている様子を示す。802は通知先として「情報処理装置xxx」が格納されている様子を示す。803は期間として「Begin」が格納されている様子を示す。804はアプリIDとして「11111111」が格納されている様子を示す。図8(a)のPrivate要素管理テーブルの登録状況だった場合、印刷装置250は「InkErrorDetails」要素801以下の情報に遷移があった場合、通知先「情報処理装置xxx」802に「InkErrorDetails」要素を通知する。
再度図7の説明に戻る。S702にて、図6(c)に示すような登録解除要求であった場合、印刷装置250はPrivate要素通知先として解除すべきアプリIDが、通知先のパソコンの中で最後となるアプリIDかどうかを判定する(S707)。ここで、図8(b)は同一の通知先「情報処理装置xxx」に対し、アプリIDが2つ格納されている様子を示す。810はアプリIDとして「11111111」と「22222222」とが格納されている。これはパソコン200内の異なる2つのアプリケーションが、それぞれPrivate要素「InkErrorDetails」の通知登録要求を行った状態を示している。印刷装置250は、S707において、図8(b)のように一つのPrivate要素の特定の通知先に対し、アプリIDが複数登録されている場合は、アプリIDをPrivate要素管理テーブルから削除する(S708)。図8(b)に示すPrivate要素管理テーブルの状態から、アプリID「22222222」を削除した状態は図8(a)に示すPrivate要素管理テーブルの状態となる。印刷装置250は登録解除完了の旨を応答(S709)し、終了する(S706)。この後、「InkErrorDetails」要素801以下の情報に遷移があった場合でも、アプリID「11111111」804はまだ通知要求を解除していないため、印刷装置250は通知先「情報処理装置xxx」802に「InkErrorDetails」要素を通知する。
S707において、一つのPrivate要素の特定の通知先に対し、アプリIDが一つのみ登録されている状態だった場合は、Private要素通知先から通知先802を解除する(S710)。以降「InkErrorDetails」要素801以下の情報に遷移があった場合、印刷装置250は通知先「情報処理装置xxx」802に「InkErrorDetails」要素を通知しない。この後、印刷装置250は登録解除完了の旨を応答(S711)し、終了する(S706)。
なお、Private要素の通知要求が全て解除された状態にあるパソコン200に対しても、印刷装置250はPublic要素の通知は行う。図6(c)に示すようなPrivate要素登録解除要求は、Private要素をEventに追加することを解除するのみの要求であり、Eventの通知登録を解除する要求とは異なる。
(印刷装置のEvent通知処理)
図21は印刷装置250のEvent通知処理を示すフローチャートである。
印刷装置250はEvent通知処理を開始する(S2151)と、S2152からS2154まで印刷装置250にSubscribeしたパソコンごとに処理を行う。
S2152では対象パソコンがPublicEventデータを通知する登録であるかどうかを判定する。具体的には対象パソコンがS723の処理が行われたパソコンであればPublicEventデータを通知する登録であると判定する。さらに、S710によってPrivateEventデータを通知する登録を解除されたパソコンである場合もPublicEventデータを通知する登録であると判定する。一方、対象パソコンがS723の処理に加えてS703の処理が行われたパソコン(前述のPrivate要素通知先)であればPublicEventデータとPrivateEventデータを通知する登録であると判定する。対象パソコンがPublicEventデータを通知する登録である場合はS2153に進み、対象パソコンがPublicEventデータを通知する登録でない場合はS2154に進む。
S2153では対象パソコンにPublicEventデータを通知してS2155に進む。S2153ではS2154と異なりPrivateEventデータは対象パソコンには通知しない。具体例を挙げると後述する図10(a)に示すPublicEventデータを対象パソコンに通知する。
S2154では対象パソコンにPublicEventデータとPrivateEventデータを通知してS2155に進む。具体例を挙げると後述する図10(a)と図10(b)もしくは図10(c)に示すPublicEventデータとPrivateEventデータを対象パソコンに通知する。
S2155ではSubscribeしたパソコン全てにS2152からS2154までの処理を行ったかどうかを判定する。行なっていなければ次の対象パソコンについてS2152以降の処理を行い、行なっていれば処理を終了する(S2156)。
ここで具体的にパソコンAとパソコンBという2つのパソコンを例に図21の処理を説明する。ここでは印刷装置250において、パソコンAはPublicEventデータとPrivateEventデータを通知する登録であり、パソコンBはPublicEventデータを通知する登録であるとする。
印刷装置250はS2152の判定の結果、対象パソコンがパソコンAである場合はS2154の処理を行い、対象パソコンがパソコンBである場合はS2153の処理を行う。
(Element Cash処理とStatus Response処理)
図9は、WSDポートモニターのElement Cash処理とStatus Response処理を示すフローチャートである。印刷装置250から通知されたEventデータをパソコン200内のListenerモジュールであるWSDポートモニターが受信して記憶し、インク表示アプリ400からのステータス要求(S510)に対しステータス情報を提供する処理を説明する。
初めにWSDポートモニターのElement Cash(要素Cash)処理について説明する。要素Cash処理は、印刷装置250からのEvent通知をWSDポートモニターが受信すると開始する(S901)。要素Cash処理を開始する(S901)と、WSDポートモニターは受信したEventデータの中身を参照する。WSDポートモニターはEventデータに含まれる要素が、Private要素か、Public要素か、を判定する要素Type判定(S902)を行う。要素Type判定処理(S902)により、Private要素が存在すると判断した場合、WSDポートモニターはPrivate要素定義ファイル(S991)を参照する(S903)。Private要素定義ファイル(S991)とは、Microsoft社のOSであるWindows8(登録商標)に導入されたv4 Printer Driverの構成ファイルのひとつであり、「Bidi Extension File」と呼ばれるものである。Bidi Extension Fileには、印刷装置250から受信したEventのPrivate要素の扱い方も記されている。本発明においては、Bidi Extension FileをPrivate要素定義ファイル(S991)と称す。Private要素定義ファイル(S991)を確認(S903)し、受信したEventデータに含まれるPrivate要素をアプリに応答する情報として蓄積すべきかどうかを判断する定義済み判断(S904)を行う。S904にてPrivate要素データを蓄積すべきと判断した場合、WSDポートモニターはPrivate要素データを記憶領域(S990)に保存(S905)した後、処理を終了する(S906)。S904にてPrivate要素データを蓄積すべきではないと判断した場合、Private要素データを保存することなく処理を終了する(S906)。一方、S902により情報はPublic要素であると判断した場合、WSDポートモニターはPublic要素データを記憶領域(S990)に保存(S905)して処理を終了する(S906)。
続いてWSDポートモニターのStatus Response(ステータス応答)処理について説明する。ステータス応答処理は、アプリケーション301からステータスの応答要求があると開始する(S951)。本実施形態においてはインク表示アプリ400からステータス応答要求があった場合について説明する。ステータス応答処理を開始する(S951)と、WSDポートモニターは応答要求された要素データの要素Typeを判定する(S952)。S952にて応答要求された要素データがPrivate要素であると判断した場合、WSDポートモニターはPrivate要素定義ファイル(S991)を確認する(S953)。S953の後、WSDポートモニターはステータス応答要求のあったPrivate要素データが蓄積すべきPrivate要素データとして蓄積されているかを判断する定義済み判断(S954)を行う。S954でステータス応答要求のあったPrivate要素データは蓄積しているPrivate要素データであると判断した場合、WSDポートモニターはPrivate要素データを記憶領域(S990)から読み出す(S955)。続いて、WSDポートモニターは読み出したPrivate要素データをインク表示アプリ400へ応答する(S955)。その後、WSDポートモニターは処理を終了する(S957)。判断(S954)でステータス応答要求のあったPrivate要素データは蓄積していないPrivate要素データだと判断した場合、WSDポートモニターはPrivate要素データが記憶領域(S990)に存在しない旨をインク表示アプリ400へ応答(S956)し、処理を終了する(S957)。一方、S952にて応答要求された要素データがPublic要素であると判断した場合、WSDポートモニターはPublic要素データを記憶領域(S990)から読み出してインク表示アプリ400へ応答する(S955)。その後、WSDポートモニターは処理を終了する(S957)。本実施形態においては、ListenerモジュールとしてWSDポートモニターが印刷装置250からのEventデータを受信し、アプリケーションにEventデータ内のステータス情報を供給する構成を説明した。しかし、パソコン200内にIHV独自のListenerモジュールをサービスとしてインストールし、印刷装置250からのEventデータの受信、及び、アプリケーションへのステータス供給を、IHV独自のListenerモジュールが行ってもよい。
図9の構成を設けることによるメリットを説明する。
例えば図9の構成が用意されていない環境で、印刷装置250から通知されたEventデータをパソコン200が受信した後に、インク表示アプリ400が起動したとする。この場合、Eventデータを誰も記憶していなければ当然インク表示アプリ400はEventデータを取得できない。
しかし、図9のようにWSDポートモニターがEventデータを受信して記憶しておくことで、各アプリケーションはアプリケーションが望むタイミングでEventデータを取得することができる。
(PublicEventデータとPrivateEventデータ)
図10(a)は印刷装置250が通知するEventデータの内容を示している。1000はPrinterElementsChangeEvent開始要素である。PrinterElementsChangeEventはWSD Print ServiceのEventであり、印刷装置の状態に変化があったときに通知されるEventデータのひとつである。1001はPrinterConfigration開始要素である。1002はName=“Black”属性情報が付されたConsumableEmpty開始要素である。この「Black」という属性値は、以降のXML情報は黒色インクに関する情報であることを示している。1003はColor要素に「Black」というデータが包まれている様子を示している。インク表示アプリ400は「Black」データを基に図4で示すインク名称表示部の色名を表示する。1004はLevel要素に「0」というデータが包まれている様子を示している。インク表示アプリ400は「0」データを基に図4で示すインク残量を模式的に示した残量を表示している。1005はModel要素に「Km−01」というデータが包まれている様子を示している。インク表示アプリ400は「Km−01」データを基に図4で示すインク名称表示部のインク型番を表示する。以上図10(a)で示すPrinterConfigration要素1001は標準的な通知情報(Public要素)であり、印刷装置250とパソコン200との間でWSDのSubscribeが行われた全てのパソコン200に等しく印刷装置250は通知を行う。
ここで、図10(b)を用いて、印刷装置250から通知されるEventデータの内容を説明する。本実施形態においては、このEventデータを受信するListenerモジュールはWSDポートモニターである。1010はPrinterElementsChangeEvent開始要素である。
1011はInkErrorDetails開始要素である。InkErrorDetails要素を含むEventはパソコン200側からアプリケーションやOSによって通知開始要求がなされた場合にのみ通知するEventである。
なお、図6(b)で説明したGetPrinterElementsResponse620内のInkErrorDetails622の状態から変化が発生した場合、図10(b)で示すようにPrinterElementsChangeEvent1010として、印刷装置250はパソコン200へEvent通知を行う。
1012はEntry開始要素にname=“Black”という属性情報が付されている。この「Black」という属性値は、以降のXML情報は黒色インクに関する情報であることを示している。
1013はInkState要素に「Empty」というデータが包まれている様子を示す。InkStateの「Empty」というデータはインクが全く無い旨を示している。
1014はMessage要素にCDATAで包まれたデータとして「Ink is empty.」データが包まれた様子を示している。
1015はIcon要素に「Cross」というデータが包まれている様子を示している。
1016はSupportCode要素に「E3000」というデータが包まれている様子を示している。
なお、図10(a)のPrinterConfigration要素1001は「wsdst」接頭辞の示すとおりPublicな情報であり、図10(b)のInkErrorDetails要素1011は「ihv」接頭辞の示すとおりPrivateな情報である。
印刷装置250は、PrinterConfigration要素1001以降の情報とInkErrorDetails要素1011以降の情報とが同時に遷移した場合、子要素にPrinterConfigration要素1001とInkErrorDetails要素1011とを含むPrinterElementsChangeEvnetを発行する。
図10(c)は図10(a)のPublicEventデータと図10(b)のPrivateEventデータを一つのイベント内(PrinterElementsChangeEvent内)の情報に格納した例を示す。
(インク表示アプリの表示更新)
図4(d)は図10(b)のEvent通知を基にインク表示アプリ400の表示を更新したときの表示状態を示している。図4(d)の430のアイコン表示は、1015のIcon要素「Cross」データを基に表示しているが、ここに更新はない。430アイコンをユーザーが選択した場合、431に示すポップアップ表示にて「Ink is empty.」という更新メッセージをユーザーに伝える。このメッセージは、1014のMessage要素のデータを基に表示している。432の操作説明書起動ボタンをユーザーが選択することで開く解説ページは、「Empty」というインク状態について解説するページが初期画面として開かれるよう更新される。この「Empty」インク状態の解説ページを開く動作は、1016のSupportCode要素「E3000」データを電子的な操作説明書にパラメータとして渡すことで実現する。
以上説明した本実施形態に依れば、印刷装置250はPublic要素のEvent通知に限りSubscribeした全てのパソコン200へ通知し、Private要素のEvent通知をパソコン200内のアプリケーション301が要求した期間に限定して通知を行うことが可能となる。Private要素に詳細ステータスを定義しておくことで、印刷装置250は詳細ステータスの変化時にPrivate要素のEvent通知を要求したパソコン200へのみEvent通知を行えばよい。よって印刷装置250のEvent通知の負荷を大幅に軽減することが可能となる。本発明は印刷装置250が高機能化し、パソコン200内のアプリケーション301がより詳細なステータス情報が必要になるほど、効果を発揮するものである。
<実施形態2>
本実施形態では、GetPrinterElementsRequestの発行を、インク表示アプリ400ではなく、OSのWSDポートモニターが発行する形態について説明する。なお、本実施形態はインク表示アプリ400が、Windows8(登録商標)に導入されたWindowsStoreDeviceApplication(WSDA)(登録商標)にである場合を想定したものである。WSDAでは使用できるAPIがOSにより制限される。例えばWSDAはGetPrinterElementsRequestを発行することができない。WSDAのようなApplicationであっても本実施形態によれば本発明の効果を得ることが可能となる。
本実施形態のインク表示アプリ400は、実施形態1で図5のPrivate要素通知開始要求処理(S503)とその成否判定(S504・S507)とPrivate要素抽出処理(S508)、Private要素通知終了要求(S517)が異なる。
インク表示アプリ400は、Private要素通知開始要求(S503)をWSDポートモニターに対して発行する。本実施形態におけるPrivate要素通知開始要求処理(S503)は、具体的にはOSのAPIを呼び出す処理である。インク表示アプリ400は、Private要素の要素名と、Requirementsオプションを引数として設定し、このAPIを呼び出す。IHVカスタム要素の要素名は“ihv:InkErrorDetails”を設定し、Requirementsオプションには“Id:11111111”と、“Listener:RequesterOnly”と、“period:Begin”を設定する。このAPIの呼び出しをOSが処理し、WSDポートモニターが図6(a)を用いて説明したGetPrinterElementsRequestを印刷装置250に発行する。インク表示アプリ400は、S503でAPIを介してPrivate要素通知要求を行うと、APIの戻り値を参照し要求の成否を判定する(S504・S507)。S504とS507とでは、インク表示アプリ400は異なるAPIの戻り値を判定する。S504では、インク表示アプリ400WSDポートモニターが発行したGetPrinterElementsRequestに対する印刷装置250からの応答が受信できていない場合のエラー情報がAPIの戻り値として得られるかどうかを判定する。S507では、WSDポートモニターが印刷装置250から応答を受信したGetPrinterElementsResponseを参照し、登録が成功したかどうかを判定する。S508では、APIの戻り値に含まれるPrivate要素をインク表示アプリ400は参照してPrivate要素を抽出する。S517では、Private要素通知終了要求をWSDポートモニターに対してAPIを介して発行する。本実施形態におけるPrivate要素通知終了要求(S517)は、具体的にはOSのAPIを呼び出す処理である。インク表示アプリ400は、Private要素の要素名と、Requirementsオプションを引数として設定し、このAPIを呼び出す。Private要素の要素名は“ihv:InkErrorDetails”を設定し、Requirementsオプションには“Id:11111111”と、“Listener:RequesterOnly”と、“period:End”を設定する。このAPIの呼び出しをOSが処理し、WSDポートモニターが図6(c)を用いて説明したGetPrinterElementsRequestを発行する。
以上説明した本実施形態に依れば、インク表示アプリ400はWSDポートモニターを仲介し印刷装置から通知されるEventデータの要素データを取得することが可能となる。そのため、パソコン200内のアプリケーション301がWSDAである場合においても、本発明の効果を得ることが可能となる。
<実施形態3>
本実施形態では、インク表示アプリ400からのPrivate要素通知要求の際に、Private要素通知期間として制限時間による有効期限を設ける構成について説明する。本実施形態は、インク表示アプリ400が強制的に終了されるような場合を想定している。強制的に終了とは、OSが何らかの異常を検知した場合や、OSが急遽終了してしまうような場合に、アプリケーション301は強制的に処理を終了させられることを想定している。強制的に終了されると、インク表示アプリ400はPrivate要素通知終了要求(S517)を発行する間もなく処理を強制的に終了させられる。印刷装置250は、インク表示アプリ400からのPrivate要素通知終了要求(S517)を受信する機会がなく、インク表示アプリ400が強制終了した後も、パソコン200へPrivate要素の通知を続けてしまう課題があった。本実施形態はこの課題を解決するものである。
なお、WSDAは処理が一定時間滞るとOSが強制的にアプリケーションを終了する。WSDAは、OSから強制的に終了されるケースを考慮して設計することが重要となる。
本実施形態のインク表示アプリ400は、実施形態1で図5のPrivate要素通知開始要求処理(S503)とステータス要求処理(S509)が異なる。
図11は本実施形態におけるGetPrinterElementsRequestにて発行するPrivate要素通知開始要求の内容である。本実施形態のPrivate要素通知開始要求(S503)は、図6(a)で説明した実施形態1のPrivate要素通知開始要求とは、“Period”属性値が付されたRequirements要素に包まれたデータの内容が「60000」(1101)である点が異なる。「60000」というデータの内容は、図11のGetPrinterElementsRequestをプリンタが受信してから、60秒間Private要素を通知せよというPrivate要素通知の有効期限を示す。本実施形態におけるPrivate要素通知開始要求処理(S503)では、図11で示すGetPrinterElementsRequestを印刷装置250に発行する。なお、本実施形態においては、インク表示アプリ400が発行するPrivate要素通知の有効期限を60秒で説明するが、アプリケーション301毎に任意に設定される時間であってよい。
図14を用いて本実施形態における印刷装置250内に保存されたPrivate要素管理テーブルを説明する。図14(a)は図11で示すPrivate要素通知開始要求を受信し、印刷装置250がPrivate要素管理テーブルに保存した状態を示す。図8(a)で説明したPrivate要素管理テーブルの状態とは、期間に設定された情報が異なる。1401で示すように、Private要素管理テーブルには、期間に60000という値が保存されている。図14(b)は異なる2つのアプリケーションから有効期限が設定されたPrivate要素通知要求を保存した状態を示す。1410はアプリID「11111111」と「22222222」とが保存されている。1411はアプリID「11111111」のPrivate要素通知期間が残り60000msec、アプリID「22222222」のPrivte要素通知期間が残り500msecである状態を示している。
図12のフローチャートを用いて、本実施形態におけるステータス要求処理の処理を説明する。インク表示アプリ400はこのステータス要求処理を、図5の表示S509とS511との間で行う。本実施形態におけるステータス要求処理が開始する(S1201)と、インク表示アプリ400は前回ステータス要求処理を行ってから経過した時間(N)が、50秒(M)より小さいかどうかを比較する(S1202)。S1202でN<Mが成立している場合は、インク表示アプリ400はステータス要求処理(S1203)を行う。ステータス要求処理(S1203)は、実施形態1で図5を用いて説明したステータス要求処理(S509)と同等である。その後、本実施形態におけるインク表示アプリ400のステータス要求処理は終了する(S1204)。
S1202でN<Mが成立していない場合は、インク表示アプリ400はPrivate要素通知開始要求を行う(S1205)。Private通知開始要求(S1205)の内容は、図11を用いて説明したGetPrinterElementsRequestと同等である。続いて、インク表示アプリ400はPrivate要素の通知登録が成功したかどうかを判定する(S1206)。失敗した場合、インク表示アプリ400は処理を終了する(S1204)。成功した場合、図6(b)で説明した、GetPrinterElementsResponse内のPrivate要素を抽出する(S1207)。その後、インク表示アプリ400のステータス要求処理は終了する(S1204)。このように、Private要素通知開始要求(S1205)を定期的に行って有効期限を更新することで、インク表示アプリ400はPrivate要素の情報を取得し続けることができる。
図13は、印刷装置250のPrivate要素の有効期限管理処理を示すフローチャートである。有効期限管理処理は、印刷装置250の動作中定期的に行われる。本実施形態においては、印刷装置250は有効期限管理処理を10秒毎に開始する。印刷装置250は有効期限管理処理を開始する(S1301)と、図14で示したPrivate要素管理テーブルを参照してPrivate要素の通知有効期限を確認する(1302)。本実施形態においては、印刷装置250は有効期限管理処理を10秒毎に行うため、Private要素管理テーブルの期間に格納されている秒数から10秒を減算して保存しなおす。続いて、印刷装置250は有効期限の切れたPrivate要素通知登録の有無を判定する(S1303)。有効期限が切れたPrivate要素通知登録が存在しない場合、印刷装置250は有効期限管理処理を終了する(S1304)。有効期限が切れたPrivate要素通知登録が存在する場合、印刷装置250は判断処理(S1305)へ進む。ここで、図14(b)のアプリID「22222222」の通知残り期間は、1411に示す通り500msecであるため、10秒を減算するとゼロ以下になり、有効期限が切れた状態となる。S1305は、印刷装置250がPrivate要素通知先として解除すべきアプリIDが、通知先のパソコン200の中で最後となるアプリIDかどうかを判定する判断処理である。ここで、図14(b)では同一の通知先「情報処理装置xxx」に対し、アプリIDが2つ格納されているため、S1306において印刷装置250は、アプリIDを削除する処理を行う(S1306)。S1306で、印刷装置250はアプリID「22222222」をPivate要素管理テーブルから削除して有効期限管理処理を終了する(S1304)。S1305において、一つのPrivate要素の特定の通知先に対し、アプリIDが一つのみ登録されている状態だった場合は、印刷装置250はPrivate要素通知先から通知先を削除(S1307)し、有効期限管理処理を終了する(S1304)。
以上説明した本実施形態に依れば、インク表示アプリ400が急遽強制終了されてPrivate要素通知終了要求(S517)が発行できなくなる場合であっても、印刷装置250はPrivate要素通知の有効期限が来れば通知を解除することができる。そのため、印刷装置250はPrivate要素をパソコン200に通知し続けてしまうという課題が解消し、印刷装置250のEvent通知負荷は大幅に軽減される。
<実施形態4>
本実施形態では、Private要素通知要求の際に、Private要素通知期間としてパソコン200からの印刷ジョブの処理期間を指定する構成について説明する。
パソコン200内のアプリケーション301の一つとして、印刷ステータス監視アプリケーション(後述する)を例に挙げる。印刷ステータス監視アプリケーション(ステータス監視アプリ)は、パソコン200内の印刷機能を持ったアプリケーション301から依頼された印刷ジョブを印刷装置250が処理する進捗状況を表示するアプリケーションである。パソコン200内の印刷機能を持ったアプリケーション301は、プリンタドライバ303を介して印刷装置250に印刷ジョブを送信する。
ここで、図15を参照して本実施形態における印刷フローを概念的に表した印刷システムの構成を説明する。アプリケーション1501(アプリケーション群301に含まれる1つのアプリケーション)は、OSの提供する印刷指示を行うAPIを利用し、OSへ印刷処理の要求を行う。印刷処理の要求はOS内のスプーラ1511にて処理される。スプーラ1511はアプリケーション1501からの印刷要求を受け、プリントキュー1512に印刷ジョブ1513として格納する。スプーラ1511はパソコン200内の複数のアプリケーション1501からの複数の印刷ジョブ1513をプリントキュー1512に複数格納する。スプーラ1511はプリントキュー1512に格納した印刷ジョブ1513を順次プリンタドライバ1521(303)へ送信する。プリンタドライバ1521は、印刷ジョブ1513を受信すると、ページ構成モジュール1522にてページ構成処理を行う。ページ構成処理とは、アプリケーション1501から指示された印刷設定情報が印刷ジョブ1513に付加されており、印刷設定情報に基づいて一つの印刷ジョブ1513内のページの順序を並べ替える処理や、複数ページを1ページに構成する処理を指す。ページ構成モジュール1522によるページ構成処理が終了すると、プリンタドライバ1521はコマンド生成モジュール1523で印刷ジョブ1513を印刷データ形式へ変換する処理を行う。印刷データ形式とは印刷装置250が解釈可能なデータである。コマンド生成モジュール1523によって印刷ジョブ1513を印刷データ形式に変換する処理が完了すると、プリンタドライバ1521は印刷装置250へ印刷ジョブ1513を送信する。印刷装置250は印刷ジョブ1513に基づいて用紙などの記録媒体にインクなどの記録材料を用いて印刷を行う。ここで、プリンタドライバ1521は、印刷装置250へPrivate要素通知要求を行う。本実施形態におけるPrivate要素通知要求は、印刷進捗の詳細を示す情報である。
図16(a)は、プリンタドライバ1521がGetPrinterElementsRequestを用いて発行するPrivate要素通知開始要求の内容である。1601はName要素に「ihv:PrintProgressDetails」というデータが包まれている様子を示している。「ihv:PrintProgressDetails」データを印刷装置250に通知することで、印刷装置250は「ihv:PrintProgressDetails」という情報を要求元に応答する処理(後述する)を行う。1602はparam=“Id”という属性情報が付されたRequirements要素に「33333333」というデータ(識別子)が包まれている様子を示している。本実施形態においては、「33333333」という識別子は、プリンタドライバ1521を示す識別子である。「Id」属性情報が付されたRequirements要素にて「33333333」というデータを通知することで、印刷装置250は「ihv:PrintProgressDetails」という情報の通知に関する要求元のアプリケーションを識別する情報として用いる(後述する)。1603はparam=“Listener”という属性情報が付されたRequirements要素に「Requester Only」というデータが包まれている様子を示している。「Listener」属性が付されたRequirements要素にて「Requester Only」というデータを通知することで、印刷装置250は「ihv:PrintProgressDetails」という情報はGetPrinterElementsRequestの要求元のパソコン200へのみEvent通知することを記憶する(後述する)。1604はparam=“period”という属性情報が付されたRequirements要素に「Printing」というデータが包まれている様子を示している。「period」属性が付されたRequirements要素にて「Printing」というデータを通知することで、印刷装置250は印刷ジョブの処理中のみ「ihv:PrintProgressDetails」という情報は、要求元のパソコン200にEvent通知することを記憶する(後述する)。本実施形態では、図16(a)のPrivate要素通知開始要求を、印刷装置250からのEventデータにPrintProgressDetails要素が含まれていないことを認識したプリンタドライバ1521が発行する構成で説明する。しかし、図16(a)のPrivate要素通知開始要求の発行は、ステータス監視アプリが行う構成であってもよいし、その他のOS内のアプリケーション1501が行う構成であってもよい。
図16(a)のPrivate要素通知開始要求を受信した印刷装置250が各種要求情報を登録する処理は、図7を用いて説明したPrivate要素登録処理と同等である。本実施形態のPrivate要素通知は印刷中に限定されているため、Private要素通知解除を行わなくても印刷装置250の負荷はない。そのため、本実施形態におけるPrivate要素の通知を解除する要求はプリンタドライバ1531からは行わず、UnsubscribeにてEvent通知解除とともにPrivate要素通知解除がなされる構成である。しかし、パソコン200内のアプリケーション1501やプリンタドライバ1521が図6(c)を用いて説明したPrivate要素通知終了要求を行う構成でもよい。Private要素通知要求を受けた印刷装置250がPrivate要素通知を登録解除する処理は図7を用いて説明した通りである。
図16(b)を参照して、Private要素通知開始要求の応答情報であるGetPirnterElementsResponseの内容について説明する。1611はGetPrinterElementsResponse開始要素である。1612はElementData開始要素であり、Name属性の属性値に以降のXML情報は「ihv:PrintProgressDetails」の応答情報である旨が示され、この応答情報が有効である旨がValid属性の「ture」属性値にて示されている。1613はPrintProgressDetails開始要素である。1614はJobState開始要素である。1615はJobStatus要素に「Receiving」というデータが包まれている様子を示している。1616はSupportCode要素に「None」というデータが包まれている様子を示している。1617はMessage要素にCDATAで包まれたデータとして「Printer has received your print job.」データが包まれた様子を示している。1618はJobName要素にCDATAで包まれたデータとして「Report.txt」データが包まれている様子を示している。1619はProgress開始要素である。1620はTotalPages要素に「5」というデータが包まれている様子を示している。1621はPrintedPages要素に「0」というデータが包まれている様子を示している。1622はPageState要素に「Receiving」というデータが包まれている様子を示している。この応答情報は、図9を用いて説明した通り、記憶領域S990に記憶される。
図17はステータス監視アプリを示す図である。図17(a)はステータス監視アプリの初期状態、及び、印刷装置250が印刷処理を行っていない場合のステータス状態を示している。1700は、ステータス監視アプリである。1701は印刷ステータスの監視対象となる印刷装置250の名称を表示している。1702はステータス表示領域であり、印刷装置250は印刷処理を行っていない旨を表示している。1703は終了ボタンであり、ステータス監視アプリ1700はユーザーにより終了ボタン1703が選択されると、処理を終了する。1704は印刷ジョブの名前を表示する領域である。1705は印刷ジョブの進捗状況を表示する領域である。
図17(b)は、図16(b)のPrivate要素通知開始要求の応答情報のPrintProgressDetails要素内の情報に基づいて印刷状況を表示した状態を示している。1711はMessage要素1617のデータ「Printer has received your print job.」をステータス表示領域に表示した様子を示している。1712はJobName要素1618のデータ「Report.txt」を表示している。1713はTotalPages要素1620のデータ「5」と、PrintedPages要素1621のデータ「0」とに基づいて、印刷の進捗状況「0/5」を表示している。1714はプログレスバーであり、印刷の進捗状況を模式的に示す。印刷装置250は印刷ジョブの受信中であり、印刷処理は全く処理を行っていない状態として、プログレスバー1714は全く進んでいない。
図18のフローチャートを用いて、印刷装置250のEvent通知判定処理を説明する。印刷装置250はEvent通知判定処理を開始する(S1801)と印刷装置250内のステータス遷移の有無を確認する(S1802)。S1803にて、印刷装置250はステータス遷移の有無を判定し、ステータス遷移は無いと判定した場合はEvent通知判定処理を終了する(S1804)。S1804にて、ステータス遷移が有ったと判定した場合、印刷装置250は遷移の有ったスタータスはPublic要素に関する遷移かどうかを判定する(S1805)。Public要素に遷移があった場合、印刷装置250はPublicEventデータを生成し、PublicEventデータを記憶領域1850に格納する(S1806)。S1805にてPublic要素に遷移がなかったと判定した場合は、S1806を行わずにS1807に進む。印刷装置250はPrivate要素に関するステータス遷移の有無を判定する(S1807)。S1807にて、Private要素に遷移があった場合、印刷装置250はPrivate要素管理テーブル(図8と図14と後に説明する図19を指す)を確認する(S1808)。Private要素管理テーブルを確認し、遷移のあったPrivate要素の通知を要求されているかを判定する(S1809)。S1809にて、いずれのパソコン200(Private要素管理テーブル上の「通知先」)も遷移の有ったPrivate要素の通知を要求していないと判定した場合、印刷装置250はEvent通知処理(S1810)に進む。Event通知S1810では、印刷装置250は記憶領域1850から格納したEventデータを読み出してSubscribeしたパソコン200にEvent通知を行う。その後、印刷装置250はEvent通知判定処理を終了する(S1804)。S1809にて、Private要素の通知を要求があると判断した場合、印刷装置250は遷移のあったPrivate要素の通知は通知要求を行ったパソコン200の印刷ジョブを処理している期間に限定されているかを判定する(S1811)。
ここで、図19(a)を用いて、通知期間として「Printing」が設定されている状態のPrivate要素管理テーブルを説明する。1901はInkErrorDetails要素の通知を、通知先のパソコン200として情報処理装置xxx、60000msecの間のみという通知期間、要求アプリID「11111111」が登録されている状態を示す。また、1902はInkErrorDetails要素の通知を、通知先のパソコン200として情報処理装置xxx、500msecの間のみという通知期間、要求アプリID「22222222」が登録されている状態を示す。1901と1902の示すPrivate要素管理テーブルの登録状態は図14(b)と同等である。1903はPrintProgressDetails要素の通知を、通知先のパソコン200として情報処理装置xxx、「Printing」という通知期間、要求アプリID「33333333」が登録されている状態を示す。1903は、情報処理装置xxx内のプリンタドライバ1521がアプリID「33333333」を設定してPrintProgressDetails要素の通知要求を行った状態である。1904はPrintProgressDetails要素の通知を、通知先のパソコン200として情報処理装置yyy、「Printing」という通知期間、要求アプリID「44444444」が登録されている状態を示す。1904は、情報処理装置yyy内のプリンタドライバ1521がアプリID「44444444」を設定してPrintProgressDetails要素の通知要求を行った状態である。なお、情報処理装置xxxはInkErrorDetailsとPrintProgressDetailsの通知要求を行っているため、印刷装置250は情報処理装置xxxへInkErrorDetailsとPrintProgressDetailsとを含んだEvent通知に含める。
S1811にて、遷移のあったPrivate要素はInkErrorDetails要素だった場合、通知期間は「Printing」という条件ではないため、印刷装置250はPrivateEventデータ生成S1812に進む。一方、S1811にて、遷移のあったPrivate要素はPrintProgressDetails要素だった場合、通知期間は「Printing」という条件であるため、印刷装置250は印刷ジョブの送信元判定処理(S1813)に進む。印刷ジョブの送信元判定処理(S1813)では、印刷装置250が印刷処理を行っている印刷ジョブの送信元であるパソコン200がPrintProgressDetails要素の通知を要求しているかどうかを判断する。S1813にて、図19(a)のPrivate要素管理テーブルにおける情報処理装置xxx又は情報処理装置yyyから送信された印刷ジョブを処理中であった場合は、印刷装置250はPrivateEventデータ生成S1812へ進む。一方、S1813にて、情報処理装置xxx又は情報処理装置yyy以外のパソコン200から送信された印刷ジョブだった場合は、印刷装置250はS1812を行わず、Event通知処理(S1810)へ進む。さらに、S1813にて、印刷ジョブを処理していない場合、印刷装置250はS1812を行わずEvent通知処理(S1810)し、Event通知判定処理を終了する(S1804)。Event通知処理の詳細は図20を用いて後に説明する。
S1812では、PrivateEventデータを生成し、PrivateEventデータを記憶領域1850に格納する(S1812)。
なお、PublicEventデータが既に記憶領域1850に存在していた場合、PublicEventデータを複製し、複製したPublicEventデータにPrivateEventデータをマージ(merge)してもよい。
判断1807にて、Private要素に遷移がなかった場合、印刷装置250はPublic要素の遷移の有無を再度確認(S1814)し、Public要素に遷移があった場合はEvent通知処理(S1810)へ進む。判断1814にて、Public要素に遷移がなかった場合、印刷装置250はEvent通知判定処理を終了する(S1804)。なお、印刷装置250はEvent通知S1810を行った後、Event通知判定処理を終了する(S1804)前に、記憶領域1850内の既に通知したEventデータを削除する。
ここで、図20のフローチャートを用いて、本実施形態におけるEvent通知S1810の詳細処理を説明する。
なお、図20の処理は一律一定時間間隔で実行しても構わない。あるいは印刷装置250の印刷中は一定の時間間隔で実行して、印刷装置250のアイドル中はエラーが発生したとき又は印刷装置250のアイドル中は時間間隔を印刷中の時間時間よりも伸ばしても構わない。
印刷装置250はEvent通知処理を開始する(S2001)と、記憶領域S2050(S1850)からEventデータを読み出す(S2002)。印刷装置250は、読み出したEventデータを確認し、Private要素のみのEventデータであるかを判定する(S2003)。判断2003にて、Eventデータが記憶領域S2050に格納されていなかった場合、印刷装置250はEvent通知処理を終了する(S2005)。S2003にて、Private要素のみのEventデータのみが格納されていたと判断した場合、印刷装置250はPrivate要素の通知を要求しているパソコン200へのみEventデータを通知し(S2004)、Event通知処理を終了する(S2005)。S2003にて、Public要素Eventも記憶領域S2050に格納されていたと判断した場合、EventデータにPrivateEventデータの有無を判定する(S2006)。S2006にて、PrivateEventデータが存在しないと判断した場合、印刷装置250はSubscribeした全てのパソコン200へEventデータを通知し(S2007)、Event通知処理を終了する(S2005)。S2006にて、PrivateEventデータとPublicEventデータとが格納されていた場合は、Private要素の通知要求を行ったパソコン200へはPublicEventデータとPrivateEventデータを通知する(S2008)。
なお、S1812でPublicEventデータにPrivateEventデータをマージ(merge)した場合はS2008でマージされたデータを通知してもよい。
続いて、印刷装置250は、Subscribeした全てのパソコン200のうち、Private要素の通知要求の行っていないパソコン200へPublic要素のみで構成されるEventデータを通知する(S2009)。その後、印刷装置250はEvent通知処理を終了する(S2005)。このように、印刷装置250は、Private要素に関連するステータスに遷移があった場合、Private要素の通知を要求したパソコン200にPrivate要素を含むEvent通知を行うことができる。
なお、S2008にてEventデータを通知するかどうかは、通知要求を行ったパソコン200であっても、Private要素管理テーブル(図8、図14、図19)の登録情報を参照して決定する。本実施形態では、Private要素を「Printing」期間のみ通知するよう要求されている。つまり、要求元のパソコン200からの印刷ジョブの処理中ではない場合、印刷装置250はそのパソコン200へPrivate要素を含まないEventデータを通知する。
図10(d)を用いてPrintProgressDetails要素に遷移があった場合に印刷装置250が通知するPrinterElementsChangeEventデータの内容を説明する。1021はPrinterElementsChangeEvent開始要素である。1022はPrintProgressDetails開始要素である。1023はJobState要素に「Processing」データが包まれた要素を示す。「Processing」というデータにより、印刷装置250は印刷ジョブ1513の処理中であることが分かる。1024はMessage要素にCDATAに包まれたデータとして「Printing.」データが包まれた様子を示している。1025はPrintedPages要素に「2」というデータが包まれている様子を示す。PrintedPages要素1025のデータは、印刷装置250が既に印刷したページ数を示している。1026はPageState要素に「Ejecting」というデータが包まれている様子を示す。「Ejecting」というデータにより、印刷装置250は記録媒体を排出している最中であることが分かる。
図17(c)は、図10(d)のPrintProgressDetails要素の情報に基づいて印刷状況を表示した状態を示している。1721はMessage要素1024のデータ「Printing」をステータス表示領域に表示した様子を示している。1722はPrintedPages要素1025のデータ「2」に基づいて、印刷の進捗状況を「3/5」と表示している。1723はプログレスバーであり、1025のデータ「2」という印刷の進捗状況から全体の2/5だけバーを進め、さらにPageState要素1026のデータ「Ejecting」に基づいて全体の2/15だけ追加でバーを進めた状態を示している。本実施形態におけるプログレスバーの1ページ分の分割量は3を想定しており、内訳は記録媒体を給紙中である「Loading」と、印刷処理中である「Printing」と、記録媒体を排紙中である「Ejecting」で構成される。
以上説明した本実施形態に依れば、パソコン200から印刷ジョブ1513が送信されると、印刷装置250はPrivate要素を印刷ジョブ1513の処理中のみパソコン200に通知する。また、印刷装置250はPrivate要素を他のパソコンには通知しない。これによって印刷装置250のEvent通知の負荷を大幅に軽減することが可能となる。
<実施形態5>
本実施形態では、印刷装置250が任意の期間に発生したPrivate要素の遷移をまとめて通知する構成について説明する。本実施形態は印刷装置250のステータス遷移が頻繁に発生するPrivate要素の通知処理をさらに軽減することを目的としている。例えば印刷速度の速い印刷装置250においては、図16(c)のPrintProgressDetails要素1022のPageState要素1026のデータの遷移が頻繁に遷移する。PageState要素1026のデータとして、「Loading」「Printing」「Ejecting」という3つのページの処理状態が定義されている場合、短い時間間隔でPrintProgressDetails要素1022を含むEventを通知しなくてはならないため印刷装置250のEvent通知負荷は大きい。そのため、印刷装置250で頻繁なPrintProgressDetails要素1022のデータ遷移があった場合は、印刷装置250が勝手にEventデータを集約する手法が考えられる。しかし、パソコン200の役割によっては、そのEventデータの頻繁な遷移情報をも必要とする場合がある。そのため、印刷装置250で勝手にEventデータを集約する判断はできない。本実施形態はこの課題を解決するものである。
図16(c)は、ステータス監視アプリ1700がGetPrinterElementsRequestを用いて発行するPrivate要素通知開始要求の内容である。実施形態4ではPrivate要素通知開始要求をプリンタドライバ1521が行う構成で説明したが、本実施例においてはPrivate要素通知開始要求をステータス監視アプリ1700が行う構成で説明する。ステータス監視アプリ1700は、起動処理を行うとともに図16(c)に示すPrivate要素通知開始要求を行う。1631はName要素に「PrintProgressDetails」データが格納されている様子を示す。1632はparam=“Id”という属性情報が付されたRequirements要素に「44444444」というデータ(識別子)が包まれている様子を示している。本実施形態においては、「44444444」という識別子は、ステータス監視アプリ1700を示す識別子である。1633はparam=“delay”という属性情報が付されたRequirements要素に「3000」というデータが包まれている様子を示している。「delay」属性が付されたRequirement要素にて「3000」というデータを通知することで、印刷装置250はPrintProgressDetails要素1631のEvent通知は3000msecの期間集約して通知してよいという集約許可情報を記憶する。
図19(b)は、図16(c)のPrivate要素通知要求を受信した印刷装置250が登録したPrivate要素管理テーブルである。1911はPrintProgressDetails要素の通知を、通知先のパソコン200として情報処理装置yyy、「Printing」という通知期間、要求アプリID「44444444」が登録されている状態を示す。さらに、1911には集約許可情報として「3000」が登録されている。
図1は印刷装置250のEvent通知集約判定処理と、集約Private要素通知タイマー処理である。先ず、Event通知集約判定処理について説明する。Event通知集約判定処理は、図18のS1812の前に行う処理である。Event通知集約S2001を開始すると、印刷装置250は遷移のあったPrivate要素が集約許可を受けているかどうかを図19(b)に示すPrivate要素管理テーブルを参照して判定する(S2102)。S2102にて、集約許可を受けていないと判定した場合、印刷装置250はEvent通知集約判定処理を終了する(S2103)。S2102にて、集約許可を受けていると判定した場合、印刷装置250は集約許可を受けたPrivateEventデータを記憶領域S2150(S1850、S2050)に格納する(S2104)。もし、既に同一のPrivateEventデータが存在していた場合はS2104にて、印刷装置250は既存のPrivate要素にデータをマージ(merge)する(S2104)。その後、印刷装置250は、集約Private要素通知タイマー処理が開始しているかどうかを判定する(S2105)。S2105にて、既に集約Private要素通知タイマー処理が開始していると判断した場合、印刷装置250はEvent通知集約判定処理を終了する(S2103)。S2105にて、集約Private要素通知タイマーが起動していないと判断した場合、印刷装置250は集約Private要素通知タイマーを起動し(S2106)、Event通知集約判定処理を終了する(S2103)。
ここで、S2104において、集約許可を受けたPrivate要素は既に記憶領域S2150へ格納したため、S1812ではこのPrivate要素の格納は行わない。また、S1810では、印刷装置250は集約許可を受けたPrivate要素のみを含むEventデータのEvent通知は行わず、後述のS2124にて通知する。ただし、印刷装置250は、集約許可を受けたPrivate要素であっても、その他のPrivate要素やPublic要素を含んでいるEventデータは通知を行う。
S2105にて、集約Private要素通知タイマー処理が起動していない場合、印刷装置250は集約Private要素通知タイマー処理を開始し、Event通知集約判定処理を終了する(S2103)。
次に、集約Private要素通知タイマー処理について説明する。印刷装置250は集約Private要素通知タイマー処理を開始する(S2121)と、図19(b)に示すPrivate要素管理テーブルを確認する(S2122)。印刷装置250は、集約Private要素の集約期限は3000msecであることを認識する。続いて、印刷装置250は集約期限が経過するまで集約期限経過判定処理(S2123)を繰り返す。S2123にて、集約期限が経過したと判断した場合、印刷装置250は集約したPrivateEventデータを記憶領域S2150から読み出し、通知要求のあったパソコン200へ集約したPrivateEventデータを通知する(S2124)。その後、印刷装置250は集約Event要素通知タイマー処理を終了する(S2125)。もし、S2124にて既に記憶領域S2150に集約Private要素が存在していなかった場合、印刷装置250はS2124ではEventデータの通知処理を行わず、集約Event要素通知タイマー処理を終了する(S2125)。
以上説明した本実施形態に依れば、パソコン200からPrivate要素の集約許可を印刷装置250に伝えることで、印刷装置250は頻繁なステータス遷移が発生しても即座にEvent通知を行う必要がなくなる。そのため、印刷装置250のEvent通知負荷は大幅に軽減することが可能となる。逆に、頻繁なステータス遷移を取得したいパソコン200ではPrivate要素の集約許可を印刷装置250に伝えないことで、頻繁なステータス遷移を監視したいパソコン200では適切にPrivate要素の情報を得ることができる。
<実施形態6>
なお、実施形態1〜5ではインクエラー及びプリントプログレスを例にEventデータの説明を行った。
この他にEventデータに含める情報の例としては用紙がないことを示す情報及び用紙がない給紙段(カセット)を示す情報、用紙のボリュームを示す情報、ジョブのバッファー量、ジョブのキューの情報が挙げられる。
あるいはEventデータとしてメディアの情報を含め、PublicEventデータにメディアの種類の情報を、PrivateEventデータにメディアの型番の情報を含める構成としてもよい。
さらに、実施形態1〜5では、Private要素通知及び終了の要求手段として、パソコンからWSDのWSD Print ServiceのGetPrinterElementsRequestを用いる形態で説明したが、WSD Print Serviceを用いずにIHV Native Protocolを用いることで実現してもよい。
<その他の実施形態>
本発明の目的は前述した実施例の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUまたはMPU)が記録媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROM、DVDなどを用いることができる。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOSなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
以上説明した実施形態1から6に依れば、Event通知登録を行っているパソコン200であっても、Private要素を通知する期間と通知先のパソコン200を限定することができるため、印刷装置250(1531)のEvent通知負荷を大幅に軽減することが可能となる。