JP2006331179A - 周辺装置制御システム、情報処理装置、情報処理装置の制御方法、プログラム - Google Patents
周辺装置制御システム、情報処理装置、情報処理装置の制御方法、プログラム Download PDFInfo
- Publication number
- JP2006331179A JP2006331179A JP2005155536A JP2005155536A JP2006331179A JP 2006331179 A JP2006331179 A JP 2006331179A JP 2005155536 A JP2005155536 A JP 2005155536A JP 2005155536 A JP2005155536 A JP 2005155536A JP 2006331179 A JP2006331179 A JP 2006331179A
- Authority
- JP
- Japan
- Prior art keywords
- function
- communication
- communication interface
- peripheral device
- bluetooth
- 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.)
- Withdrawn
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/00127—Connection or combination of a still picture apparatus with another apparatus, e.g. for storage, processing or transmission of still picture signals or of information associated with a still picture
- H04N1/00278—Connection or combination of a still picture apparatus with another apparatus, e.g. for storage, processing or transmission of still picture signals or of information associated with a still picture with a printing apparatus, e.g. a laser beam printer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3013—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is an embedded system, i.e. a combination of hardware and software dedicated to perform a certain function in mobile devices, printers, automotive or aircraft systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3055—Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1202—Dedicated interfaces to print systems specifically adapted to achieve a particular effect
- G06F3/121—Facilitating exception or error detection and recovery, e.g. fault, media or consumables depleted
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1223—Dedicated interfaces to print systems specifically adapted to use a particular technique
- G06F3/1236—Connection management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1278—Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
- G06F3/1284—Local printer device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1278—Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
- G06F3/1292—Mobile client, e.g. wireless printing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1293—Printer information exchange with computer
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/0008—Connection or combination of a still picture apparatus with another apparatus
- H04N2201/0013—Arrangements for the control of the connected apparatus by the still picture apparatus
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/0008—Connection or combination of a still picture apparatus with another apparatus
- H04N2201/0015—Control of image communication with the connected apparatus, e.g. signalling capability
- H04N2201/0017—Notifying a communication result
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/0008—Connection or combination of a still picture apparatus with another apparatus
- H04N2201/0034—Details of the connection, e.g. connector, interface
- H04N2201/0036—Detecting or checking connection
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/0008—Connection or combination of a still picture apparatus with another apparatus
- H04N2201/0034—Details of the connection, e.g. connector, interface
- H04N2201/0037—Topological details of the connection
- H04N2201/0041—Point to point
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/0008—Connection or combination of a still picture apparatus with another apparatus
- H04N2201/0034—Details of the connection, e.g. connector, interface
- H04N2201/0048—Type of connection
- H04N2201/0049—By wire, cable or the like
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/0008—Connection or combination of a still picture apparatus with another apparatus
- H04N2201/0034—Details of the connection, e.g. connector, interface
- H04N2201/0048—Type of connection
- H04N2201/0055—By radio
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Accessory Devices And Overall Control Thereof (AREA)
Abstract
【課題】 印刷ジョブを印刷中に、電波状況の影響により通信リンクが切断された場合に、印刷ジョブ内の印刷制御コマンドによるプリンタの不正印字等の誤動作を防止する。また、周辺装置の状態モニタ機能において、電波状況の影響により通信リンクが確立されているのか、切断されているのかが不明な状態の時にも、モニタが制御不能な状態に陥ることを防止する。
【解決手段】 通信インタフェースを制御するポートモニタ(PM)によるインタフェース状態確認と、周辺装置を制御するランゲージモニタ(LM)によるインタフェース状態確認と、を行い、LMによる状態確認結果に応じて周辺装置と通信する。また、通信が切断した場合には、送信バッファをクリアする。
【選択図】 図1
【解決手段】 通信インタフェースを制御するポートモニタ(PM)によるインタフェース状態確認と、周辺装置を制御するランゲージモニタ(LM)によるインタフェース状態確認と、を行い、LMによる状態確認結果に応じて周辺装置と通信する。また、通信が切断した場合には、送信バッファをクリアする。
【選択図】 図1
Description
本発明は、情報処理装置とプリンタ等の周辺装置を有する周辺装置制御システム、情報処理装置、情報処理装置の制御方法、プログラムに関する。
従来、情報処理装置と周辺装置等の機器同士の接続インタフェースとして、例えば、パラレル、シリアル、Universal Serial Bus (USB)、IEEE1394、Ethernet(登録商標)等の有線インタフェースが主に利用されていた。このような有線インタフェースにおいては情報処理装置と周辺装置とがその有線インタフェースを介して確実に接続されている為、通信が安定している。従って、ユーザの誤操作等でケーブルが抜かれる等しない限り通信が滞ったり、切断されたりすることはない。
従来利用されてきた有線インタフェースに加え、近年、Bluetooth、無線LAN(IEEE802.11a/b/g等)、Wireless USB Promoter Groupが策定したWireless USB等の新しい無線インタフェースが利用されるようになってきた。このような無線インタフェースにおいては、距離、障害物、周囲の電波状況等の影響を受ける為、有線インタフェースと比較して通信が不安定である。その結果、電波状況等の影響のために一時的に通信が滞ったり、通信が切断されたりする場合がある。
無線インタフェースを利用したシステムにおいて、例えばパーソナルコンピュータ(以下ではPCと略す)等の情報処理装置と、プリンタ等の周辺装置を、無線インタフェースの一例であるBluetoothにより接続する例について考える。
このようなシステムでは、印刷ジョブの開始時にBluetooth通信の通信リンク(ACLとHCRP)を確立する。印刷ジョブの中では印刷画像データを表す印刷制御コマンドをプリンタに送り、印刷ジョブの終了時にBluetooth通信の通信リンク(ACLとHCRP)を切断する。このようなシステムにおいて、印刷制御コマンドをプリンタに送る送信処理中に、例えば無線通信の電波状況が悪くなり通信リンクが切断された場合、送信処理内で通信リンクを再確立するリカバリー処理を行っておらず、その印刷ジョブをエラー終了していた。
一般的なプリンタは、通常のスタンバイ状態であるニュートラルモード、印刷処理中の状態である印刷制御モード、プリンタのメンテナンス中であるメンテナンスモード等の各モードを備えている。プリンタはPCからの制御コマンドに応じてこれらの各モードを遷移する。各モード中は、PCからプリンタに送られてくる制御コマンドを、プリンタがそのモード用の制御コマンドと解釈して制御する。
例えば、印刷制御モードにおいて印刷中に、電波状況が悪くなり通信リンクが切断された場合、誤動作を防止する為に、プリンタがプリンタ内のBluetooth通信を制御する手段(ハードウェアやファームウェア)を初期化する。プリンタ内部の処理も初期化してニュートラルモードに戻すような処理を行うプリンタが存在する。
情報処理装置上のアプリケーションが周辺装置(例えばプリンタ)の状態を確認して、その状態を表示するというような機能を備えるアプリケーションが存在する。以降において、このような機能を備えるアプリケーションをステータスモニタと呼ぶことにする。このステータスモニタは周辺装置からその状態を表す制御コマンド(以降、ステータス制御コマンドと呼ぶ)をある一定時間の間隔でポーリングしながら受信し、このステータス制御コマンドに従ってその状態表示を更新する。前記一定時間を例えば5秒程度に設定することで、ほぼリアルタイムにその周辺装置の状態表示を更新していくことができる。
特開2002−312298号公報
前述したように、無線インタフェースは有線インタフェースと比較して印刷中に通信が滞ったり切断されたりするケースが多いので、通信が切断される度に印刷ジョブがエラー終了されることが問題になるケースがある。このような問題点を解決する手段として、情報処理装置において、無線インタフェースを利用した印刷中に通信リンクが切断された場合に、通信リンクを再確立するリカバリー処理を行って、その印刷ジョブを継続する方法が考えられる。このような新しい印刷制御手段によって実現された印刷システムの場合、プリンタ側もこれに対応する為に、例えば、印刷制御モードにおいて印刷中に、電波状況が悪くなって通信リンクが切断された場合、プリンタがプリンタ内のBluetooth通信を制御する手段(ハードウェアやファームウェア)だけを初期化して、その後もニュートラルモードに移行せずに印刷制御モードを継続するような新しい処理を行う必要がある。
しかしながら、このような印刷制御を行う情報処理装置と、このような印刷制御に対応していない従来のプリンタから構成されるシステムの場合、印刷中に通信リンクが切断されるとプリンタ内部の処理を初期化してニュートラルモードに戻ってしまう。そのため、継続された印刷ジョブ内の印刷制御コマンドをプリンタが受信してもそれを正しく解釈することができず、例えば不正な印字を行う等の誤動作を引き起こしてしまうことがある。
本発明では、例えば、上記印刷制御を行う情報処理装置からの印刷ジョブを、上記印刷制御に対応していないプリンタで印刷中に、電波状況等の影響により通信リンクが切断されても、継続された印刷ジョブ内の印刷制御コマンドによってプリンタが不正な印字等の誤動作をしないようにする。
また、通信インタフェースとして、USB等の有線インタフェースを利用する場合と、Bluetooth等の無線インタフェースを利用する場合が考えられる。有線インタフェースの場合、例えば5秒の間隔でポーリングしてステータス制御コマンドを受信し、周辺装置の状態表示を更新する場合、安定して状態表示を更新することが可能である。
しかしながら、無線インタフェースの場合、例えば5秒の間隔でポーリングして周辺装置の状態表示を更新する場合、例えば、電波状況が悪くなって通信リンクが確立されているのか、切断されているのかが不明な状態な場合がある。このような時に、ポーリングによるステータス制御コマンドの受信を試みると、無線インタフェースを制御するハードウェアやファームウェアが受信をリトライを繰り返す。そのため、ステータス制御コマンドを受信することができず、ステータスモニタに処理が返って来ない場合がある。この間、ステータスモニタが制御不能な状態に陥るという問題がある。
本発明では例えば、無線インタフェースを利用したステータスモニタにおいても、通信リンクが確立されているのか、切断されているのかが不明な状態の時にも、ステータスモニタが制御不能な状態に陥ることなく安定した状態を継続することができ、操作性を向上させる。
本発明の目的は、通信インタフェースの通信状態の変化による周辺装置の誤動作を防止することである。また、通信インタフェースの通信状態の変化により制御不能状態を防止することである。
本発明は、情報処理装置と、前記情報処理装置と通信インタフェースを介して接続される周辺装置を有する周辺装置制御システムであって、前記情報処理装置は、前記通信インタフェースの通信状態を確認する第1の確認手段を有し、前記通信インタフェースを制御する通信インタフェース制御手段と、前記通信インタフェースの通信状態を確認する第2の確認手段を有し、前記周辺装置を制御する周辺装置制御手段を有し、前記周辺装置制御手段は、前記第2の確認手段による前記通信インタフェースの通信状態の確認結果に応じて、前記周辺装置と通信することを特徴とする周辺装置制御システムを提供する。
また、通信インタフェースを介して周辺装置と通信する情報処理装置あって、前記通信インタフェースの通信状態を確認する第1の確認手段を有し、前記通信インタフェースを制御する通信インタフェース制御手段と、前記通信インタフェースの通信状態を確認する第2の確認手段を有し、前記周辺装置を制御する周辺装置制御手段と、を有し、前記周辺装置制御手段は、前記第2の確認手段による前記通信インタフェースの通信状態の確認結果に応じて、前記周辺装置と通信することを特徴とする情報処理装置を提供する。
また、通信インタフェースを介して周辺装置と通信する情報処理装置であって、前記通信インタフェースを制御する通信インタフェース制御手段と、前記周辺装置を制御する周辺装置制御手段とを有する情報処理装置の制御方法であって、前記通信インタフェース手段は、前記通信インタフェースの通信状態を確認する第1の確認工程を有し、前記周辺装置制御手段は、前記通信インタフェースの通信状態を確認する第2の確認工程を有し、前記周辺装置制御手段は、前記第2の確認工程における前記通信インタフェースの通信状態の確認結果に応じて、前記周辺装置と通信することを特徴とする情報処理装置の制御方法を提供する。
また、通信インタフェースを介して周辺装置と通信する情報処理装置により実行されるプログラムであって、前記通信インタフェースを制御する通信インタフェース制御モジュールが、前記通信インタフェースの通信状態を確認する第1の確認工程を有し、前記周辺装置を制御する周辺装置制御モジュールが、前記通信インタフェースの通信状態を確認する第2の確認工程を有し、前記周辺装置制御モジュールは、前記第2の確認工程における前記通信インタフェースの通信状態の確認結果に応じて、前記周辺装置と通信するための処理を行うことを特徴とするプログラムを提供する。
また、上記プログラムの前記通信インタフェースモジュール、もしくは、前記周辺装置制御モジュールの一方を有することを特徴とするプログラムを提供する。
本発明によれば、通信インタフェースの通信状態の変化による周辺装置の誤動作を防止することができる。また、通信インタフェースの通信状態の変化により制御不能状態を防止することができる。
以下、本発明を適用した好適な実施形態を、添付図面を参照しながら説明する。
以下の説明で引用される関数(情報)の内、特に詳しい説明を付加していないものに関しては、2005年5月8日現在、Microsoft Developer Network(MSDN)のサイトhttp://msdn.microsoft.com/library/default.aspでインターネット上で公開されている関数(情報)であるので、必要以上の説明を省略する。
以下において、USBとはUniversal Serial Busの略であり、双方向通信が可能な公知のインタフェースであるので、その詳細説明は省略する。
以下において、Bluetoothは双方向通信が可能な公知の無線インタフェースであり、その仕様は次のインターネットサイトhttps://www.bluetooth.org/で公開されているので、その詳細説明は省略する。なお、以下の説明では公開されていない関数も記述しているが、これらの関数は各コーリングシーケンスから推測される処理を行う関数の例である。
図1は本発明の情報処理装置及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。同図において、1は情報処理装置であり、一般的なパーソナルコンピュータ(以下、PCと略す場合がある)で構成される。PC1は図2で後述するようなハードウェアで構成され、OS(Operating System)として米国マイクロソフト社のWindows(登録商標) XPがインストールされている。5はUSBポートであり、USBを制御するハードウェアで構成される。7はBluetoothポートであり、Bluetooth通信を制御するハードウェアで構成される。3はプリンタであり、カラーインクジェットプリンタで構成され、本実施形態における周辺装置である。プリンタ3はXYZ社製のkmmnというモデル名のプリンタである。
尚、本発明における周辺装置としては、プリンタ、複写機、ファクシミリ、またはこれらの複合機などの画像形成装置、スキャナ、デジタルカメラであってもよい。プリンタ3は図3で後述するようなハードウェアで構成される。6はUSBポートであり、USBを制御するハードウェアで構成される。8はBluetoothポートであり、Bluetooth通信を制御するハードウェアで構成される。
プリンタ3はPC1とUSBインタフェース4ないしBluetoothインタフェース9の何れかを介して接続されており、互いに双方向通信が可能である。
36は図4で後述するランゲージモニタ(以降、LMと略す場合がある)、37は図4で後述するポートモニタ(以降、PMと略す場合がある)である。それぞれWindows(登録商標)用のダイナミックリンクライブラリで構成される。30はアプリケーションであり、Windows(登録商標)用の実行可能形式のファイル(*.EXE)で構成される。アプリケーション30の一例としては、Windows(登録商標) XP OS に標準で同梱されているテキストエディタであるメモ帳/Notepad(Notepad.exe)のような印刷可能なアプリケーションが挙げられる。メモ帳のようなアプリケーション30により印刷指示を行うと、PC1に接続されているプリンタ3用のドライバを選択して印刷を開始する。これにより、テキスト文書の内容をプリンタ3にて記録出力(印刷)することができる。
図2はPC1のハードウェア構成の一例を表すブロック図である。PC1はランダムアクセスメモリ部(RAM1201)、記憶部であるハードディスクドライブ部(HDD1202)、入力部の一例であるキーボード部(KBD1203)、制御部のCPU1204、表示部の一例である表示用ディスプレイ(LCD1205)、通信制御部の一例であるネットワークボード(NB1207)、以上のPC1の構成要素を互いに接続するバス1206から構成される。
NB1207にはUSBインタフェース4用のUSBポート5、Bluetoothインタフェース9用のBluetoothポート7が含まれている。それぞれUSB、Bluetoothの通信を制御する。なお、記憶部は、可搬性CD−ROMまたは内部据付のROMなどであってもよい。図1に示すPC1の各モジュール(アプリケーション30、LM36、PM37)は、HDD1202に記憶され、必要に応じてRAM1201に読み出されてCPU1204により実行される。これにより、CPU1204が、図1に示す各モジュールの機能を実現する。
図3はプリンタのハードウェア構成を表すブロック図である。同図において、15はマイクロプロセッサ等から構成されるCPUであり、中央処理装置として、ROM16に記憶されているプログラムに従って、RAM17、通信部18、記録部19を制御する。ROM16にはプリンタドライバ50(図4で後述する)の制御に従ってプリンタ3が記録出力(印刷)処理を行うプログラムが記憶されている。RAM17は主にPC1から送られて、それをもとに記録部19によって印刷される印字データが一時的に記憶される。通信部18にはUSBインタフェース4用のUSBポート6、Bluetoothインタフェース9用のBluetoothポート8が含まれており、それぞれUSB、Bluetoothの通信を制御する。記録部19は、インクジェット方式等により印刷を行う。
印刷時には、アプリケーション上での印刷操作によって、アプリケーションにより開かれているファイルの表示内容(画像データ)が、EMF形式のスプールファイルとしてPC1のHDD1202に一時的に格納される。このEMF形式のスプールファイルは、プリンタドライバ50を介してプリンタ3制御用コマンドを含む印字データに変換された後、USBインタフェース4ないしBluetoothインタフェース9の何れかを介してプリンタ3に送られる。プリンタ3にて受信された印字データは、記録部19によって印字用パルスに変換されて、記録紙上に印刷される。プリンタ3は、図4で後述するプリンタドライバ50によって生成されてPC1から送られてくる印刷制御コマンドに従って印刷制御を行う。尚、前記印字データは印刷制御コマンドの内の1つである。
プリンタ3が起動すると、まず通常のスタンバイ状態を表すニュートラルモードに移行する。このニュートラルモードにおいて、プリンタ3が印刷の開始を表す印刷開始コマンドを受信すると印刷制御モードに移行する。そして、以降の処理において印刷終了コマンドを受信する迄の間は印刷制御モードとして、PC1から送られてくるデータを印刷制御コマンドと判断して処理を行う。
ニュートラルモードにおいて、メンテナンス処理を行う各メンテナンスコマンドをプリンタ3が受信すると、メンテナンスモードに移行する。その後そのメンテナンスコマンドに従って適切なメンテナンス処理を行い、メンテナンス処理が終了した後ニュートラルモードに戻る。メンテナンス処理の例としては、記録ヘッドのクリーニング等が挙げられる。
通信部18は、Bluetooth通信の通信リンク(ACL(Asynchronous Connection Less)とHCRP(Hardcopy Cable Replacement Profile))が確立されている状態において、例えば無線通信の電波状況が悪くなって通信リンクが切断された場合、誤動作を防止する為にニュートラルモードに移行する。従って、例えば印刷制御モードで印刷中に無線通信の電波状況が悪くなって通信リンクが切断された場合、印刷制御モードからニュートラルモードに移行する。この状態において、もし無線通信の電波状況が良好となって通信リンクを再確立し、印刷制御コマンドが送られてくると、プリンタ3はニュートラルモードに移行してしまっているので、印刷制御コマンドを解釈することができない。そのため、送られてきた印刷制御コマンドのデータの内容によっては、不正印字等の誤動作を引き起こすような結果に至る。
図4は、PC1におけるプリンタドライバの構成を表すブロック図である。同図において、プリンタドライバ50はPC1にインストールされているドライバであり、33〜38で示す複数のモジュールを備えている。アプリケーション30は印刷指令が可能なアプリケーションソフトウェアであり、例えば、Windows(登録商標) XP OS に標準で同梱されているテキストエディタであるメモ帳/Notepad(Notepad.exe)や、図32で後述するようなステータスモニタ等に相当する。31はGDI(Graphics Device Interface)であり、Windows(登録商標) XP OSの一部である。32はプリンタキューで、Windows(登録商標) XP OSのスプーラ(Spooler)の一部であり、印刷ジョブをキューイングする。
次にプリンタドライバ50の構成を説明する。33はプリントプロセッサであり、印刷レイアウトの変更や印刷画像の特殊処理を行う。34はグラフィックスドライバであり、プリンタドライバ50の画像処理のコアとして動作する。グラフィックスドライバ34は、GDI31から送られて来る描画命令に基づき印刷用の画像処理を行い、印刷制御コマンドを作成する。35はUIモジュールであり、プリンタドライバ50のユーザインタフェースの提供及び制御を行う。36は図1で説明したランゲージモニタ(LM)であり、データの通信インタフェース(I/F)としてデータの送受信を制御する。37は図1で説明したポートモニタ(PM)である。PM37は、LM36から送られてくるデータを適切なポートに対して送信したり、プリンタ3から送られてくるデータを、クラスドライバ38を介して受信したりする。クラスドライバ38は、最もポートに近いローレベルのモジュールである。本実施形態で説明するクラスドライバ38は、USBのPrinter Classのスタックを制御するドライバ、BluetoothのHardcopy Cable Replacement Profile(HCRP)のスタックを制御するドライバに相当し、ポート(USBポート5、Bluetoothポート7)を制御する。
図27はLM36がエクスポートしている関数の定義を表す図である。ここでは本実施形態を説明する上で必要な部分に関して説明する。
LM_StartDocPort()関数は、印刷ジョブの開始時にSpoolerからコールされる関数である。
LM_WritePort()関数は、印刷開始コマンド、印刷制御コマンド、印刷終了コマンド等のデータをプリンタ3に送信する時に、Spoolerからコールされる関数である。この関数の引数pBufferにはプリンタ3に送信するデータが、引数cbBufにはこのデータのサイズ(単位:バイト)が、それぞれセットされる。LPDWORDは符号なしダブルワード(unsigned long、32ビット)を指すポインタである。引数pcbWrittenには、この関数がリターンされた時にプリンタ3に実際に送信されたデータのサイズがセットされて返される。また、pcbWrittenは符号なしダブルワードのポインタ変数(*pcbWrittenのアドレスを表す変数)であり、*pcbWrittenで参照できるデータはpcbWrittenのアドレスにあるメモリの値を表す。
LM_ReadPort()関数は、ステータスモニタがプリンタ3からステータス制御コマンド等を取得する時にSpoolerからコールされる関数である。この関数の引数pBufferには、この関数がリターンされた時にPC1が実際に取得したプリンタ3から送られてきたデータがセットされ、引数pcbReadにはこのデータのサイズがセットされて返される。また、pcbReadは符号なしダブルワードのポインタ変数(*pcbReadのアドレスを表す変数)であり、*pcbReadで参照できるデータはpcbReadのアドレスにあるメモリの値を表す。
LM_EndDocPort()関数は、印刷ジョブの終了時にSpoolerからコールされる関数である。
図28はPM37がエクスポートしている関数の定義を表す図である。ここでは本実施形態を説明する上で必要な部分に関して説明する。
PM_StartDocPort()関数は、印刷ジョブの開始時にLM36からコールされる関数である。
PM_WritePort()関数は、印刷開始コマンド、印刷制御コマンド、印刷終了コマンド等のデータをプリンタ3に送信する時に、LM36からコールされる関数である。この関数の引数pBufferにはプリンタ3に送信するデータが、引数cbBufにはこのデータのサイズ(単位:バイト)が、それぞれセットされる。LPDWORDは符号なしダブルワード(unsigned long、32ビット)を指すポインタである。引数pcbWrittenには、この関数がリターンされた時にプリンタ3に実際に送信されたデータのサイズがセットされて返される。また、pcbWrittenは符号なしダブルワードのポインタ変数(*pcbWrittenのアドレスを表す変数)であり、*pcbWrittenで参照できるデータはpcbWrittenのアドレスにあるメモリの値を表す。
PM_ReadPort()関数は、ステータスモニタがプリンタ3からステータス制御コマンド等を取得する時にLM36からコールされる関数である。この関数の引数pBufferには、この関数がリターンされた時にPC1が実際に取得したプリンタ3から送られてきたデータがセットされ、引数pcbReadにはこのデータのサイズがセットされて返される。また、pcbReadは符号なしダブルワードのポインタ変数(*pcbReadのアドレスを表す変数)であり、*pcbReadで参照できるデータはpcbReadのアドレスにあるメモリの値を表す。
PM_EndDocPort()関数は印刷ジョブの終了時にLM36からコールされる関数である。
図29はPM37がエクスポートしている関数とこの関数が使用する本実施形態で新たに提案する定数の定義を表す図である。ここでは本発明を説明する上で必要な部分に関して説明する。
PM_GetPrinterDataFromPort()関数は、デバイス(プリンタ3)用のクラスドライバ38を制御してデバイス(プリンタ3)の通信インタフェース(USBインタフェース4、Bluetoothインタフェース9)の状態を取得したり、I/Oを制御したりする時に、LM36からコールされる関数である。この関数の引数ControlIDにはI/O control codeがセットされ、各I/O control codeに割り当てられている制御が行われる。LPWSTRはNULLで終わるUnicode文字列を指すポインタである。引数lpOutBufferにはこの関数がリターンされた時に、取得した情報等がセットされて返される。lpOutBufferはNULLで終わるUnicode文字列のポインタ変数(*lpOutBufferのアドレスを表す変数)であり、*lpOutBufferで参照できるデータはlpOutBufferのアドレスにあるメモリの値を表す。
IOCTL_BLUETOOTH_COMMUNICATIONは本実施形態で新たに提案するI/O control codeの定義であり、Bluetooth通信の通信リンク(ACLとHCRP)の状態を確認する制御が割り当てられている。BLUETOOTH_CONNECTED、BLUETOOTH_RECOVERED、BLUETOOTH_DISCONNECTED、BLUETOOTH_UNKNOWNも本実施形態で新たに提案するI/O control codeの定義であり、それぞれ、Bluetooth通信の通信リンクが次のような状態であることを表す。
BLUETOOTH_CONNECTED:Bluetooth通信の通信リンクが確立されていて正常な状態
BLUETOOTH_RECOVERED:Bluetooth通信がリカバリーされ、通信リンクが確立されて正常な状態に復帰した状態
BLUETOOTH_DISCONNECTED:Bluetooth通信の通信リンクが切断されている状態
BLUETOOTH_UNKNOWN:Bluetooth通信の通信リンクが確立されているのか切断されているのかが不明な状態
図30はUSB HW (Stack)がエクスポートしている関数の定義を表す図である。尚、図5、図26ではこれらの関数がPM37からコールされるように図示されているが、実際にはこれらの図で省略しているクラスドライバ38からコールされる。
BLUETOOTH_CONNECTED:Bluetooth通信の通信リンクが確立されていて正常な状態
BLUETOOTH_RECOVERED:Bluetooth通信がリカバリーされ、通信リンクが確立されて正常な状態に復帰した状態
BLUETOOTH_DISCONNECTED:Bluetooth通信の通信リンクが切断されている状態
BLUETOOTH_UNKNOWN:Bluetooth通信の通信リンクが確立されているのか切断されているのかが不明な状態
図30はUSB HW (Stack)がエクスポートしている関数の定義を表す図である。尚、図5、図26ではこれらの関数がPM37からコールされるように図示されているが、実際にはこれらの図で省略しているクラスドライバ38からコールされる。
USB_Send()関数は、印刷開始コマンド、印刷制御コマンド、印刷終了コマンド等のデータをプリンタ3に送信する時にコールされる関数である。この関数の引数pBufferにはプリンタ3に送信するデータがセットされ、引数cbBufにはこのデータのサイズ(単位:バイト)がセットされる。
LPDWORDは符号なしダブルワード(unsigned long、32ビット)を指すポインタである。引数pcbWrittenには、この関数がリターンされた時にプリンタ3に実際に送信されたデータのサイズがセットされて返される。また、pcbWrittenは符号なしダブルワードのポインタ変数(*pcbWrittenのアドレスを表す変数)であり、*pcbWrittenで参照できるデータはpcbWrittenのアドレスにあるメモリの値を表す。
USB_Receive()関数は、ステータスモニタがプリンタ3からステータス制御コマンド等を取得する時にコールされる関数である。この関数の引数pBufferには、この関数がリターンされた時にPC1が実際に取得したプリンタ3から送られてきたデータがセットされ、引数pcbReadにはこのデータのサイズがセットされて返される。また、pcbReadは符号なしダブルワードのポインタ変数(*pcbReadのアドレスを表す変数)であり、*pcbReadで参照できるデータはpcbReadのアドレスにあるメモリの値を表す。
図31はBluetooth HW (Stack)がエクスポートしている関数の定義を表す図である。尚、図6、図7、図24、図25ではこれらの関数がPM37からコールされるように図示されているが、実際にはこれらの図で省略しているクラスドライバ38からコールされる。
BT_Send1()関数、BT_Send2()関数は、印刷開始コマンド、印刷制御コマンド、印刷終了コマンド等のデータをプリンタ3に送信する時にコールされる関数である。これらの関数の引数pBufferにはプリンタ3に送信するデータがセットされ、引数cbBufにはこのデータのサイズ(単位:バイト)がセットされる。LPDWORDは符号なしダブルワード(unsigned long、32ビット)を指すポインタである。引数pcbWrittenには、これらの関数がリターンされた時にプリンタ3に実際に送信されたデータのサイズがセットされて返される。また、pcbWrittenは符号なしダブルワードのポインタ変数(*pcbWrittenのアドレスを表す変数)であり、*pcbWrittenで参照できるデータはpcbWrittenのアドレスにあるメモリの値を表す。
BT_Receive1()関数、BT_Receive2()関数は、ステータスモニタがプリンタ3からステータス制御コマンド等を取得する時にコールされる関数である。これの関数の引数pBufferには、この関数がリターンされた時にPC1が実際に取得したプリンタ3から送られてきたデータがセットされ、引数pcbReadにはこのデータのサイズがセットされて返される。また、pcbReadは符号なしダブルワードのポインタ変数(*pcbReadのアドレスを表す変数)であり、*pcbReadで参照できるデータはpcbReadのアドレスにあるメモリの値を表す。
BT_Connect()関数は、Bluetooth通信の通信リンク(ACLとHCRP)を確立する時にコールされる関数である。BT_Disconnect()関数は、Bluetooth通信の通信リンク(ACLとHCRP)を切断する時にコールされる関数である。
BT_CheckConnection()関数は、Bluetooth通信の通信リンク(ACLとHCRP)の状態を確認する時にコールされる関数である。
図5はUSBインタフェース4を介して印刷を行った時の関数フローを表す図である。同図では関数成功時に成功を表すTRUEを返すリターン処理やエラー時の処理の一部、及びクラスドライバ38における処理を省略している。
最上段は処理の実行元を表しており、Userはユーザにおける操作(処理)、Spoolerは図4で説明したWindows(登録商標) XP OSのSpoolerにおける処理、LMはLM36における処理、PMはPM37における処理を表す。また、USB HW (Stack)はUSBポート5を構成するハードウェアまたはファームウェアのスタックにおける処理をそれぞれ表す。例えば、Userの列を見ると「USBでPCとプリンタを接続」というようなユーザの操作(処理)が示されている。この例のように、それぞれの列がその列の実行元における処理を表す。
同図において、ユーザがPC1とプリンタ3をUSBインタフェース4を介して接続した時(S501)、USB HW (Stack)においてUSBの接続が完了されて送受信可能な状態になる(S502)。ユーザが印刷を開始すると(S503)、Spooler内のStartPrintJob()関数が実行される(S504)。
StartPrintJob()関数が実行されると(S504)、Spoolerは、LM36内のLM_StartDocPort()関数をコールする(S505)。LM_StartDocPort()関数が実行されると(S506)、OSの標準関数であるSetCommTimeouts()関数をコールして、USB通信のWrite/Readのタイムアウト時間を次のように設定する(S533)。
Writeのタイムアウト時間: 3秒
Readのタイムアウト時間: 1秒
ステップS533の後、LM36は、PM37内のPM_StartDocPort()関数をコールする(S507)。PM_StartDocPort()関数が実行されると(S508)、PM37は、必要に応じて適切な処理を行う(S509)。ここでは、例えばPM37内の変数の初期化や、USB HW (Stack)の初期化等が行われるが、その詳細説明は省略する。ステップS509の後、PM37からLM36にPM_StartDocPort()関数がリターンされ(S510)、LM36からSpoolerに、LM_StartDocPort()関数がリターンされる(S511)。そして、Spoolerは、StartPrintJob()関数内においてLM36内のLM_WritePort()関数をコールする(S512)。この時、図27に示すpBufferに前記印刷開始コマンドが含まれていて、cbBufにそのサイズ(単位:バイト)がセットされている。
Writeのタイムアウト時間: 3秒
Readのタイムアウト時間: 1秒
ステップS533の後、LM36は、PM37内のPM_StartDocPort()関数をコールする(S507)。PM_StartDocPort()関数が実行されると(S508)、PM37は、必要に応じて適切な処理を行う(S509)。ここでは、例えばPM37内の変数の初期化や、USB HW (Stack)の初期化等が行われるが、その詳細説明は省略する。ステップS509の後、PM37からLM36にPM_StartDocPort()関数がリターンされ(S510)、LM36からSpoolerに、LM_StartDocPort()関数がリターンされる(S511)。そして、Spoolerは、StartPrintJob()関数内においてLM36内のLM_WritePort()関数をコールする(S512)。この時、図27に示すpBufferに前記印刷開始コマンドが含まれていて、cbBufにそのサイズ(単位:バイト)がセットされている。
LM_WritePort()関数が実行されると(S513)、LM36は、PM37内のPM_WritePort()関数をコールする(S514)。PM_WritePort()関数が実行されると(S515)、PM37は、USB HW(Stack)内のUSB_Send()関数をコールする(S516)。
USB_Send()関数が実行されると(S517)、図15で後述する処理を行い(S518)、USB HW (Stack)からPM37に、このUSB_Send()関数がリターンされる(S519)。このUSB_Send()関数が成功した場合は、プリンタ3が前記印刷開始コマンドを受信して印刷制御モードに移行する。ステップS519の後、PM37からLM36に、PM_WritePort()関数がリターンされ(S520)、LM36からSpooler に、LM_WritePort()関数がリターンされる(S521)。その後、Spoolerは、印刷画像データを表す印刷制御コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S522)。これ以降において、実行されるLM_WritePort()関数の処理はステップS513で説明した処理と同様であるので、ここではその説明を省略する。
LM_WritePort()関数が成功した場合、プリンタ3が前記印刷制御コマンドを受信してそのコマンドに従って記録出力(印刷)を行う。印刷画像データを表す印刷制御コマンドの送信が全て完了すると、Spoolerは、前記印刷終了コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S523)。LM_WritePort()関数が成功した場合、プリンタ3が前記印刷終了コマンドを受信して、ニュートラルモードに移行する。そして、LM36内のLM_EndDocPort()関数をコールする(S524)。LM_EndDocPort()関数が実行されると(S525)、LM36はPM37内のPM_EndDocPort()関数をコールする(S526)。PM_EndDocPort()関数が実行されると(S527)、PM37は必要に応じて適切な処理を行う(S528)。ここでは、例えばエラー終了時の初期化処理等が行われるが、その詳細説明は省略する。ステップS528の後、このPM_EndDocPort()関数がLM26にリターンされ(S529)、LM_EndDocPort()関数がSpoolerにリターンされ(S530)、Spooler内のStartPrintJob()関数を終了する(S531)。印刷が正常に終了した場合、その後もUSB HW (Stack)において送受信可能な状態が維持される(S532)。
図6はBluetoothインタフェース9を介して印刷を行った時の従来例の関数フローを表す図である。同図では関数成功時に成功を表すTRUEを返すリターン処理やエラー時の処理の一部、及びクラスドライバ38における処理を省略している。同図において、最上段は処理の実行元を表しており、Userはユーザにおける操作(処理)、Spoolerは図4で説明したWindows(登録商標) XP OSのSpoolerにおける処理、LMはLM36における処理、PMはPM37における処理、Bluetooth HW (Stack)はBluetoothポート7を構成するハードウェアまたはファームウェアのスタックにおける処理をそれぞれ表す。例えば、Userの列を見ると「プリンタの電源をオン」というようなユーザの操作(処理)が示されている。この例のように、それぞれの列がその列の実行元における処理を表す。
同図において、ユーザがプリンタの電源をオンにした時(S601)、Bluetooth HW (Stack)においてデバイス(プリンタ3)が認識される(S602)。ユーザが印刷を開始すると(S603)、Spooler内のStartPrintJob()関数が実行される(S604)。StartPrintJob()関数が実行されると(S604)、SpoolerはLM36内のLM_StartDocPort()関数をコールする(S605)。LM_StartDocPort()関数が実行されると(S606)、LM36はOSの標準関数であるSetCommTimeouts()関数をコールして、Bluetooth通信のWrite/Readのタイムアウト時間を次のように設定する(S639)。
Writeのタイムアウト時間: 3秒
Readのタイムアウト時間: 1秒
ステップS639の後、LM36はPM37内のPM_StartDocPort()関数をコールする(S607)。PM_StartDocPort()関数が実行されると(S608)、PM37はBluetooth HW (Stack)内のBT_Connect()関数をコールする(S609)。BT_Connect()関数が実行されると(S610)、Bluetooth HW (Stack)は図22で後述する処理を行い(S611)、Bluetooth HW(Stack)からPM37に、このBT_Connect()関数がリターンされる(S612)。そして、PM37からLM36に、PM_StartDocPort()関数がリターンされ(S613)、LM36からSpoolerからLM_StartDocPort()関数がリターンされる(S614)。そして、Spoolerは、StartPrintJob()関数内においてLM36内のLM_WritePort()関数をコールする(S615)。この時、図27に示す引数pBufferに前記印刷制御コマンドが含まれていて、cbBufにそのサイズ(単位:バイト)がセットされている。
Writeのタイムアウト時間: 3秒
Readのタイムアウト時間: 1秒
ステップS639の後、LM36はPM37内のPM_StartDocPort()関数をコールする(S607)。PM_StartDocPort()関数が実行されると(S608)、PM37はBluetooth HW (Stack)内のBT_Connect()関数をコールする(S609)。BT_Connect()関数が実行されると(S610)、Bluetooth HW (Stack)は図22で後述する処理を行い(S611)、Bluetooth HW(Stack)からPM37に、このBT_Connect()関数がリターンされる(S612)。そして、PM37からLM36に、PM_StartDocPort()関数がリターンされ(S613)、LM36からSpoolerからLM_StartDocPort()関数がリターンされる(S614)。そして、Spoolerは、StartPrintJob()関数内においてLM36内のLM_WritePort()関数をコールする(S615)。この時、図27に示す引数pBufferに前記印刷制御コマンドが含まれていて、cbBufにそのサイズ(単位:バイト)がセットされている。
LM_WritePort()関数が実行されると(S616)、LM36はPM37内のPM_WritePort()関数をコールする(S617)。PM_WritePort()関数が実行されると(S618)、PM37はBluetooth HW (Stack)内のBT_Send1()関数をコールする(S619)。BT_Send1()関数が実行されると(S620)、Bluetooth HW (Stack)は図15で後述する処理を行い(S621)、Bluetooth HW (Stack)からPM37に、このBT_Send1()関数がリターンされる(S622)。BT_Send1()関数がリターンされると、PM37はLM36にPM_WritePort()関数がリターンされ(S623)、LM36からSpoolerにLM_WritePort()関数がリターンされる(S624)。その後、Spoolerは印刷画像データを表す印刷制御コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S625)。これ以降において、実行されるLM_WritePort()関数の処理はステップS616で説明した処理と同様であるので、ここではその説明を省略する。
LM_WritePort()関数が成功した場合、プリンタ3が前記印刷制御コマンドを受信してそのコマンドに従って記録出力(印刷)を行う。印刷画像データを表す印刷制御コマンドの送信が全て完了すると、Spoolerは前記印刷終了コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S626)。LM_WritePort()関数が成功した場合、プリンタ3が前記印刷終了コマンドを受信して、ニュートラルモードに移行する。そして、LM36内のLM_EndDocPort()関数をコールする(S627)。LM_EndDocPort()関数が実行されると(S628)、LM36はPM37内のPM_EndDocPort()関数をコールする(S629)。PM_EndDocPort()関数が実行されると(S630)、PM37はBluetooth HW (Stack)内のBT_Disconnect()関数をコールする(S631)。BT_Disconnect()関数が実行されると(S632)、図23で後述する処理を行い(S633)、Bluetooth HW (Stack)からPM37に、このBT_Disconnect()関数がリターンされ(S634)、PM37からLM36にPM_EndDocPort()関数がリターンされる(S635)。PM_EndDocPort()関数がリターンされると、LM36からSpoolerにLM_EndDocPort()関数がリターンされ(S636)、SpoolerはSpooler内のStartPrintJob()関数を終了する(S637)。印刷が正常に終了した場合、Bluetooth HW (Stack)においてデバイス(プリンタ3)が認識された状態が維持される(S638)。
図7、図8はBluetoothインタフェース9を介して印刷を行った時の本実施形態で新たに提案する関数フローを表す図である。これらの図では関数成功時に成功を表すTRUEを返すリターン処理やエラー時の処理の一部、及びクラスドライバ38における処理を省略している。これらの図において、最上段は処理の実行元を表しており、Userはユーザにおける操作(処理)、Spoolerは図4で説明したWindows(登録商標) XP OSのSpoolerにおける処理、LMはLM36における処理、PMはPM37における処理、Bluetooth HW (Stack)はBluetoothポート7を構成するハードウェアまたはファームウェアのスタックにおける処理をそれぞれ表す。例えば、Userの列を見ると「プリンタの電源をオン」というようなユーザの操作(処理)が示されている。この例のように、それぞれの列がその列の実行元における処理を表す。図7において、ユーザがプリンタの電源をオンにした時(S701)、Bluetooth HW (Stack)においてデバイス(プリンタ3)が認識される(S702)。ユーザが印刷を開始すると(S703)、Spooler内のStartPrintJob()関数が実行される(S704)。StartPrintJob()関数が実行されると(S704)、SpoolerはLM36内のLM_StartDocPort()関数をコールする(S705)。LM_StartDocPort()関数が実行されると(S706)、LM36はOSの標準関数であるSetCommTimeouts()関数をコールして、Bluetooth通信のWrite/Readのタイムアウト時間を次のように設定する(S742)。
Writeのタイムアウト時間: 3秒
Readのタイムアウト時間: 1秒
ステップS742の後、LM36はBluetooth通信の接続状態を表す通信接続フラグBT_Connection_Flagをクリア(0)して初期化し(S707)、PM37内のPM_StartDocPort()関数をコールする(S708)。PM_StartDocPort()関数が実行されると(S709)、PM37はBluetooth HW (Stack)内のBT_Connect()関数をコールする(S710)。BT_Connect()関数が実行されると(S710)、Bluetooth HW (Stack)は図22で後述する処理を行い(S712)、このBT_Connect()関数がPM37にリターンされ(S713)、LM36にPM_StartDocPort()関数がリターンされる(S714)。
Writeのタイムアウト時間: 3秒
Readのタイムアウト時間: 1秒
ステップS742の後、LM36はBluetooth通信の接続状態を表す通信接続フラグBT_Connection_Flagをクリア(0)して初期化し(S707)、PM37内のPM_StartDocPort()関数をコールする(S708)。PM_StartDocPort()関数が実行されると(S709)、PM37はBluetooth HW (Stack)内のBT_Connect()関数をコールする(S710)。BT_Connect()関数が実行されると(S710)、Bluetooth HW (Stack)は図22で後述する処理を行い(S712)、このBT_Connect()関数がPM37にリターンされ(S713)、LM36にPM_StartDocPort()関数がリターンされる(S714)。
ステップS708でコールしたPM_StartDocPort()関数が成功した場合、LM36はBluetooth通信の接続状態を表す通信接続フラグBT_Connection_Flagをセット(1)し(S715)、ステップS708の処理を終了し(S716)、SpoolerにLM_StartDocPort()関数がリターンされる(S717)。そして、SpoolerはStartPrintJob()関数内においてLM36内のLM_WritePort()関数をコールする(S718)。この時、図27に示す引数pBufferに前記印刷制御コマンドが含まれていて、cbBufにそのサイズ(単位:バイト)がセットされている。LM_WritePort()関数が実行されると(S719)、通信接続フラグBT_Connection_Flagがセット(1)されている場合(S720)、図29に示す通りControlIDにIOCTL_BLUETOOTH_COMMUNICATIONをセットしてPM37内のPM_GetPrinterDataFromPort()関数をコールする(S721)。PM_GetPrinterDataFromPort()関数が実行されると(S722)、PM37はBluetooth HW (Stack)内のBT_CheckConnection()関数をコールする(S723)。BT_CheckConnection()関数が実行されると(S724)、Bluetooth HW (Stack)は図20で後述する処理を行い(S725)、PM37に、このBT_CheckConnection()関数がリターンされ(S726)、その戻り値が図29に示す*lpOutBufferに代入され(S723)、PM_GetPrinterDataFromPort()関数がLM36にリターンされる(S727)。*lpOutBufferの値が、Bluetooth通信の通信リンクが確立されていて正常な状態であることを表すBLUETOOTH_CONNECTEDの場合(S728)、LM36はPM37内のPM_WritePort()関数をコールする(S729)。PM_WritePort()関数が実行されると(S730)PM37はBluetooth HW (Stack)内のBT_Send2()関数をコールする(S731)。BT_Send2()関数が実行されると(S732)、Bluetooth HW (Stack)は図21で後述する処理を行い(S733)、PM37にこのBT_Send2()関数がリターンされ(S734)、LM36にPM_WritePort()関数がリターンされ(S735)、ステップS728に戻る。ステップS728において、*lpOutBufferの値がBLUETOOTH_CONNECTED以外の場合、通信状態に異常があると判断してステップS728の処理を終了し(S736)、ステップS737に進む。ステップS737の処理が開始されると、LM36は通信接続フラグBT_Connection_Flagをクリア(0)し(S738)、失敗を表すFALSEをSpoolerに返し(S739)、ステップS737の処理を終了し(S740)、ステップS720に戻る。ステップS720において、通信接続フラグBT_Connection_Flagがクリア(0)されている場合、LM26はステップS720の処理を終了し(S741)、図8のステップS801に進む。
ステップS801の処理が開始されると、LM36はSpoolerに失敗を表すFALSEを返し(S802)、ステップS801の処理を終了し(S803)、SpoolerにLM_WritePort()関数がリターンされる(S804)。ステップS718のLM_WritePort()関数が成功した後、Spoolerは印刷画像データを表す印刷制御コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S805)。これ以降において、実行されるLM_WritePort()関数の処理はステップS719で説明した処理と同様であるので、ここではその説明を省略する。LM_WritePort()関数が成功した場合、プリンタ3が前記印刷制御コマンドを受信してそのコマンドに従って記録出力(印刷)を行う。
印刷画像データを表す印刷制御コマンドの送信が全て完了すると、Spoolerは前記印刷終了コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S806)。LM_WritePort()関数が成功した場合、プリンタ3が前記印刷終了コマンドを受信して、ニュートラルモードに移行する。そして、SpoolerはLM36内のLM_EndDocPort()関数をコールする(S807)。LM_EndDocPort()関数が実行されると(S808)、LM36はPM37内のPM_EndDocPort()関数をコールする(S809)。PM_EndDocPort()関数が実行されると(S810)、PM37はBluetooth HW (Stack)内のBT_Disconnect()関数をコールする(S811)。BT_Disconnect()関数が実行されると(S812)、Bluetooth HW (Stack)は図23で後述する処理を行い(S813)、このBT_Disconnect()関数がPM37にリターンされる(S814)。BT_Disconnect()関数がリターンされると、PM37からLM36にPM_EndDocPort()関数がリターンされ(S815)、LM36はBluetooth通信の接続状態を表す通信接続フラグBT_Connection_Flagをクリア(0)して初期化し(S816)、SpoolerにLM_EndDocPort()関数がリターンされ(S817)、Spooler内のStartPrintJob()関数を終了する(S818)。印刷が正常に終了した場合、Bluetooth HW (Stack)においてデバイス(プリンタ3)が認識された状態が維持される(S819)。ステップS739、S802において、失敗を表すFALSEが返された場合、LM36内のLM_WritePort()関数の戻り値もFALSEとなり、これがSpooler内のStartPrintJob()関数に返され、それ以降Spooler内のStartPrintJob()関数がLM36内のLM_WritePort()関数をコールせず、印刷ジョブがエラー終了される。従って、図3で前述したような、例えばプリンタ3が印刷制御モードで印刷中に無線通信の電波状況が悪くなって通信リンクが切断され、印刷制御モードからニュートラルモードに移行してしまっている状態において、その後無線通信の電波状況が良好となっても、それ以降、続きの印刷制御コマンドが送られることはない。これにより、不正印字等の誤動作を引き起こすこともなくなる。
以上説明したように、ステップS721において、LM36がPM37内のPM_GetPrinterDataFromPort()関数をコールして、その引数で渡す*lpOutBufferにセットされた戻り値を確認する。この戻り値が、Bluetooth通信の通信リンクが確立されていて正常な状態であることを表すBLUETOOTH_CONNECTEDの場合は、LM36はPM37内のPM_WritePort()関数をコールして、前記印刷開始コマンド、前記印刷制御コマンド、前記印刷終了コマンド等のコマンド(データ)を送信する。BLUETOOTH_CONNECTED以外の場合は、通信状態に異常があると判断して失敗を表すFALSEを上位関数に返して印刷ジョブをエラー終了させるので、不正な印字等の誤動作をしないように防止することができる。
このように、図15、図21で後述するようなBluetooth HW (Stack)におけるBluetooth通信の通信リンクの通信状態確認手段(第1の通信状態確認手段)とは別に、処理のロジックが異なるLM36におけるBluetooth通信の通信リンクの通信状態確認手段(第2の通信状態確認手段)を新たに設け、プリンタドライバ50がこの第2の通信状態確認手段を利用してPC1からプリンタ3への安全なデータ送信を制御する、という点が特徴的な新規技術である。
図32はプリンタの状態をモニタするステータスモニタを表す図である。ここでは、同図のステータスモニタが、PC1にインストールされているアプリケーション30であると仮定する。同図において、201はステータスモニタのメインウィンドウであり、プリンタ3(XYZ社製のkmmnというモデル名のプリンタ)の現在の状態を表している。
202はプリンタ情報(Printer Information)表示部であり、プリンタがOnline(オンライン)の状態であることを表している。203はインク情報(Ink Information)表示部であり、プリンタ3のインクの情報を表す。204はインク残量表示部であり、プリンタ3に搭載されている各インクの残量を表示する。同図に示す通り、プリンタ3には黒(Black)、黄(Yellow)、マゼンタ(Magenta)、シアン(Cyan)の4色のインクが装着されており、それぞれの色のインクの残量が80%、50%、0%(インク残量無し)、100%(インク残量満タン)であることを表している。このステータスモニタは、プリンタ3からステータス制御コマンドを5秒間隔でポーリングしながら受信し、このステータス制御コマンドに従ってその状態表示を更新する仕組みで、プリンタ3の状態表示をほぼリアルタイムで更新する。このような制御方法に関しては一般的な方法であるので、ここではその詳細説明を省略する。
Bluetoothのような無線通信の場合に、PC1が例えば5秒の間隔でポーリングしてステータス制御コマンドを受信し、プリンタ3の状態表示を更新するとする。Bluetoothの無線通信の電波状況が悪くなって通信リンクが確立されているのか、切断されているのかが不明な状態の時に、前記ポーリングによるステータス制御コマンドの受信を試みると、Bluetoothを制御するハードウェアやファームウェア(Bluetoothポート7)が受信をリトライする。このリトライ処理を行っても、プリンタ3からステータス制御コマンドを受信することができないときは、ステータスモニタに処理が返って来ない場合がある。この間、ステータスモニタが制御不能な状態に陥る、という問題がある。
図26は図32のステータスモニタを起動した状態でUSBインタフェース4を介して印刷を行った時の関数フローを表す図である。同図では関数成功時に成功を表すTRUEを返すリターン処理やエラー時の処理の一部、及びクラスドライバ38における処理を省略している。同図において、最上段は処理の実行元を表しており、Userはユーザにおける操作(処理)、Spoolerは図4で説明したWindows(登録商標) XP OSのSpoolerにおける処理、LMはLM36における処理、PMはPM37における処理、USB HW (Stack)はUSBポート5を構成するハードウェアまたはファームウェアのスタックにおける処理をそれぞれ表す。例えば、Userの列を見ると「USBでPCとプリンタを接続」というようなユーザの操作(処理)が示されている。この例のように、それぞれの列がその列の実行元における処理を表す。同図では、図5で説明した処理と同じ処理に関しては、図5で使用したステップ番号を記し、その説明を省略している。同図において、ユーザがPC1とプリンタ3をUSBインタフェース4を介して接続した時(S501)、USB HW (Stack)においてUSBの接続が完了されて送受信可能な状態になる(S502)。ユーザが印刷を開始すると(S503)、Spooler内のStartPrintJob()関数が実行される(S504)。StartPrintJob()関数が実行されると(S504)、SplooerはLM36内のLM_StartDocPort()関数をコールし(S505)、LM36内のLM_WritePort()関数をコールする(S512)。この時、図27に示すpBufferに前記印刷開始コマンドが含まれていて、cbBufにそのサイズ(単位:バイト)がセットされている。
図32のステータスモニタから5秒間隔でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2601)。LM_ReadPort()関数が実行されると(S2602)、LM36はPM37内のPM_ReadPort()関数をコールする(S2603)。PM_ReadPort()関数が実行されると(S2604)、PM37はUSB HW (Stack)内のUSB_Receive()関数をコールする(S2605)。USB_Receive()関数が実行されると(S2606)、USB HW (Stack)は図15で後述する処理を行い(S2607)、PM37にこのUSB_Receive()関数がリターンされる(S2608)。USB_Receive()関数がリターンされると、LM36にPM_ReadPort()関数がリターンされ(S2609)、SpoolerにLM_ReadPort()関数がリターンされる(S2610)。この時、プリンタ3からPC1に送られてきたステータス制御コマンドが図27に示すLM_ReadPort()関数のpBufferに格納され、cbBufferにそのサイズ(単位:バイト)がセットされている。そしてこのステータス制御コマンドが図32のステータスモニタに返され、図32のステータスモニタがこのステータス制御コマンドに従ってその状態表示を更新する。これ以降において、実行されるLM_ReadPort()関数の処理は後述のステップS2402で説明する処理と同様であるので、ここではその説明を省略する。ステップS512のLM_WritePort()関数が成功した後、Spoolerは印刷画像データを表す印刷制御コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S522)。図32のステータスモニタから5秒感覚でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2611)。印刷画像データを表す印刷制御コマンドの送信が全て完了すると、Spoolerは前記印刷終了コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S523)。図32のステータスモニタから5秒感覚でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2612)。そして、SpoolerはLM36内のLM_EndDocPort()関数をコールし(S524)、Spooler内のStartPrintJob()関数を終了する(S531)。印刷が正常に終了した場合、その後もUSB HW (Stack)において送受信可能な状態が維持される(S532)。
図24は図32のステータスモニタを起動した状態でBluetoothインタフェース9を介して印刷を行った時の従来例の関数フローを表す図である。同図では関数成功時に成功を表すTRUEを返すリターン処理やエラー時の処理の一部、及びクラスドライバ38における処理を省略している。同図において、最上段は処理の実行元を表しており、Userはユーザにおける操作(処理)、Spoolerは図4で説明したWindows(登録商標) XP OSのSpoolerにおける処理、LMはLM36における処理、PMはPM37における処理、Bluetooth HW (Stack)はBluetoothポート7を構成するハードウェアまたはファームウェアのスタックにおける処理をそれぞれ表す。例えば、Userの列を見ると「プリンタの電源をオン」というようなユーザの操作(処理)が示されている。この例のように、それぞれの列がその列の実行元における処理を表す。同図では、図6で説明した処理と同じ処理に関しては、図6で使用したステップ番号を記し、その説明を省略している。
同図において、ユーザがプリンタの電源をオンにした時(S601)、Bluetooth HW (Stack)においてデバイス(プリンタ3)が認識される(S602)。ユーザが印刷を開始すると(S603)、Spooler内のStartPrintJob()関数が実行される(S604)。StartPrintJob()関数が実行されると(S604)、SpoolerはLM36内のLM_StartDocPort()関数をコールし(S605)、LM36内のLM_WritePort()関数をコールする(S615)。この時、図27に示す引数pBufferに前記印刷制御コマンドが含まれていて、cbBufにそのサイズ(単位:バイト)がセットされている。図32のステータスモニタから5秒感覚でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2401)。LM_ReadPort()関数が実行されると(S2402)、LM36はPM37内のPM_ReadPort()関数をコールする(S2403)。PM_ReadPort()関数が実行されると(S2404)、PM37はBluetooth HW (Stack)内のBT_Receive1()関数をコールする(S2405)。BT_Receive1()関数が実行されると(S2406)、Bluetooth HW (Stack)は図15で後述する処理を行い(S2407)、このBT_Receive1()関数がPM37にリターンされる(S2408)。このBT_Receive1()関数がリターンされると、LM36にPM_ReadPort()関数がリターンされ(S2409)、SpoolerにLM_ReadPort()関数がリターンされる(S2410)。
この時、プリンタ3からPC1に送られてきたステータス制御コマンドが図27に示すLM_ReadPort()関数のpBufferに格納され、cbBufferにそのサイズ(単位:バイト)がセットされている。そしてこのステータス制御コマンドが図32のステータスモニタに返され、図32のステータスモニタがこのステータス制御コマンドに従ってその状態表示を更新する。これ以降において、実行されるLM_ReadPort()関数の処理はステップS2402で説明した処理と同様であるので、ここではその説明を省略する。ステップS615のLM_WritePort()関数が成功した後、Spoolerは印刷画像データを表す印刷制御コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S625)。図32のステータスモニタから5秒感覚でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2411)。Spoolerは印刷画像データを表す印刷制御コマンドの送信が全て完了すると、前記印刷終了コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S626)。図32のステータスモニタから5秒感覚でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2412)。そして、LM36内のLM_EndDocPort()関数をコールし(S627)、Spooler内のStartPrintJob()関数を終了する(S637)。印刷が正常に終了した場合、Bluetooth HW (Stack)においてデバイス(プリンタ3)が認識された状態が維持される(S638)。
図25は図32のステータスモニタを起動した状態でBluetoothインタフェース9を介して印刷を行った時の本実施形態で新たに提案する関数フローを表す図である。同図では関数成功時に成功を表すTRUEを返すリターン処理やエラー時の処理の一部、及びクラスドライバ38における処理を省略している。同図において、最上段は処理の実行元を表しており、Userはユーザにおける操作(処理)、Spoolerは図4で説明したWindows(登録商標) XP OSのSpoolerにおける処理、LMはLM36における処理、PMはPM37における処理、Bluetooth HW (Stack)はBluetoothポート7を構成するハードウェアまたはファームウェアのスタックにおける処理をそれぞれ表す。例えば、Userの列を見ると「プリンタの電源をオン」というようなユーザの操作(処理)が示されている。この例のように、それぞれの列がその列の実行元における処理を表す。同図では、図7、図8で説明した処理と同じ処理に関しては、図7、図8で使用したステップ番号を記し、その説明を省略している。
同図において、ユーザがプリンタの電源をオンにした時(S701)、Bluetooth HW (Stack)においてデバイス(プリンタ3)が認識される(S702)。ユーザが印刷を開始すると(S703)、Spooler内のStartPrintJob()関数が実行される(S704)。StartPrintJob()関数が実行されると(S704)、SpoolerはLM36内のLM_StartDocPort()関数をコールし(S705)、LM36内のLM_WritePort()関数をコールする(S718)。この時、図27に示す引数pBufferに前記印刷制御コマンドが含まれていて、cbBufにそのサイズ(単位:バイト)がセットされている。図32のステータスモニタから5秒感覚でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2501)。LM_ReadPort()関数が実行されると(S2502)、LM36は通信接続フラグBT_Connection_Flagがセット(1)されている場合(S2503)、図29に示す通りControlIDにIOCTL_BLUETOOTH_COMMUNICATIONをセットしてPM37内のPM_GetPrinterDataFromPort()関数をコールする(S2504)。PM_GetPrinterDataFromPort()関数が実行されると(S2505)、PM37はBluetooth HW (Stack)内のBT_CheckConnection()関数をコールする(S2506)。
BT_CheckConnection()関数が実行されると(S2507)、Bluetooth HW (Stack)は図20で後述する処理を行い(S2508)、このBT_CheckConnection()関数がPM37にリターンされ(S2509)、その戻り値が図29に示す*lpOutBufferに代入され(S2506)、LM36にPM_GetPrinterDataFromPort()関数がリターンされる(S2510)。*lpOutBufferの値がBluetooth通信の通信リンクが確立されていて正常な状態であることを表すBLUETOOTH_CONNECTEDの場合(S2511)、LM36はPM37内のPM_ReadPort()関数をコールする(S2512)。PM_ReadPort()関数が実行されると(S2513)、PM37はBluetooth HW (Stack)内のBT_Receive2()関数をコールする(S2514)。BT_Receive2()関数が実行されると(S2515)、Bluetooth HW (Stack)は図21で後述する処理を行い(S2516)、このBT_Receive2()関数がPM37にリターンされ(S2517)、LM36にPM_ReadPort()関数がリターンされ(S2518)、ステップS2511に戻る。
ステップS2511において、*lpOutBufferの値がBLUETOOTH_CONNECTED以外の場合、通信状態に異常があると判断してステップS2511の処理を終了し(S2519)、ステップS2520に進む。ステップS2520の処理が開始されると、LM36は通信接続フラグBT_Connection_Flagをクリア(0)し(S2521)、失敗を表すFALSEをSpoolerに返し(S2522)、ステップS2520の処理を終了し(S2523)、ステップS2503に戻る。
ステップS2503において、LM36は通信接続フラグBT_Connection_Flagがクリア(0)されている場合、ステップS2503の処理を終了し(S2524)、ステップS2525に進む。ステップS2525の処理が開始されると、失敗を表すFALSEをSpoolerに返し(S2526)、ステップS2525の処理を終了し(S2527)、LM_ReadPort()関数がリターンされる(S2528)。この時、プリンタ3からPC1に送られてきたステータス制御コマンドが図27に示すLM_ReadPort()関数のpBufferに格納され、cbBufferにそのサイズ(単位:バイト)がセットされている。そしてこのステータス制御コマンドが図32のステータスモニタに返され、図32のステータスモニタがこのステータス制御コマンドに従ってその状態表示を更新する。これ以降において、実行されるLM_ReadPort()関数の処理はステップS2502で説明した処理と同様であるので、ここではその説明を省略する。
ステップS718のLM_WritePort()関数が成功した後、Spoolerは印刷画像データを表す印刷制御コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S805)。図32のステータスモニタから5秒感覚でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2529)。印刷画像データを表す印刷制御コマンドの送信が全て完了すると、前記印刷終了コマンドを含む(引数pBufferで渡される)LM_WritePort()関数をコールする(S806)。図32のステータスモニタから5秒感覚でポーリングされるRead要求が印刷ジョブ内に割り込んで入ってくると、SpoolerはLM36内のLM_ReadPort()関数をコールする(S2530)。そして、LM36内のLM_EndDocPort()関数をコールし(S807)、Spooler内のStartPrintJob()関数を終了する(S818)。
印刷が正常に終了した場合、Bluetooth HW (Stack)においてデバイス(プリンタ3)が認識された状態が維持される(S819)。ステップS2522、S2526において、Spoolerに失敗を表すFALSEが返された場合、LM36内のLM_ReadPort()関数の戻り値もFALSEとなり、これがSpooler内のStartPrintJob()関数に返され、それ以降Spooler内のStartPrintJob()関数がLM36内のLM_ReadPort()関数やLM_WritePort()関数をコールせず、印刷ジョブがエラー終了される。従って、図3で前述したような、例えばプリンタ3が印刷制御モードで印刷中に無線通信の電波状況が悪くなって通信リンクが切断され、印刷制御モードからニュートラルモードに移行してしまっている状態になり、その後無線通信の電波状況が良好となっても、それ以降、続きの印刷制御コマンドが送られることはない。その結果、不正印字等の誤動作を引き起こすこともなくなる。
また、図32で前述したような、例えばBluetoothの無線通信の電波状況が悪くなって通信リンクが確立されているのか、切断されているのかが不明な状態の時において、それ以降、前記ポーリングによるステータス制御コマンドの受信を試みない。よって、ステータス制御コマンドを受信することができないままステータスモニタに処理が返って来ないようなケースに陥ることがなく、ステータスモニタが制御不能な状態に陥ることもない。
以上説明したように、ステップS2504において、LM36がPM37内のPM_GetPrinterDataFromPort()関数をコールして、その引数で渡す*lpOutBufferにセットされた戻り値を確認する。この戻り値が、Bluetooth通信の通信リンクが確立されていて正常な状態であることを表すBLUETOOTH_CONNECTEDの場合はPM37内のPM_ReadPort()関数をコールして、前記ステータス制御コマンドの受信を試みる。BLUETOOTH_CONNECTED以外の場合は、通信状態に異常があると判断して失敗を表すFALSEを上位関数に返して印刷ジョブをエラー終了させ、それ以降、前記ポーリングによるステータス制御コマンドの受信を試みない。これにより、不正な印字等の誤動作をしないように防止することができ、また、ステータス制御コマンドを受信することができないままステータスモニタに処理が返って来ないようなケースに陥ることがなく、ステータスモニタが制御不能な状態に陥ることもない。このように、図15、図21で後述するようなBluetooth HW (Stack)におけるBluetooth通信の通信リンクの通信状態確認手段(第1の通信状態確認手段)とは別に、処理のロジックが異なるLM36におけるBluetooth通信の通信リンクの通信状態確認手段(第2の通信状態確認手段)を新たに設ける。プリンタドライバ50はこの第2の通信状態確認手段を利用してPC1からプリンタ3への安全なデータ送信を制御し、また、PC1がプリンタ3からの安全なデータ受信の制御も行う、という点が特徴的な新規技術である。
図9は図5及び図6で説明したLM36内のLM_StartDocPort()関数の従来例の処理を表すフローチャートである。
同図において、LM_StartDocPort()関数が開始されると(S901)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化し(S902)、SetCommTimeouts()関数をコールし、USB通信またはBluetooth通信のWrite/Readのタイムアウト時間を設定する(S906)。そして、図12で後述するPM37のPM_StartDocPort()関数をコールする(S903)。PM_StartDocPort()関数が成功してPM37からTRUEが返ってきた場合(S904)、bRetに成功を表すTRUEを代入し(S905)、bRetをSpoolerに返してこの関数を終了する(S907)。ステップS904において、PM_StartDocPort()関数が失敗して失敗を表すFALSEが返ってきた場合、ステップS907に進みbRetを返してこの関数を終了する。
図10は図5及び図6で説明したLM36内のLM_WritePort()関数と図24で説明したLM36内のLM_ReadPort()関数の従来例の処理を表すフローチャートである。同図において、ステップ内に括弧( )で括られた部分があるステップに関しては、括弧で括られている方がLM_ReadPort()関数における処理を表し、他方(括弧で括られていない方)がLM_WritePort()関数における処理を表す。また、ステップ内に括弧( )で括られた部分がないステップに関しては、LM_WritePort()関数とLM_ReadPort()関数の両者における共通の処理を表す。以下の説明においても、LM_ReadPort()関数における処理を括弧( )で括って説明する。
同図において、LM_WritePort()関数(LM_ReadPort()関数)が開始されると(S1001)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化する(S1002)。また、図27に示すLM_WritePort()関数の*pcbWritten(LM_ReadPort()関数の*pcbRead)に0を代入して初期化し(S1003)、図13で後述するPM37のPM_WritePort()関数(PM_ReadPort()関数)をコールする(S1004)。PM_WritePort()関数(PM_ReadPort()関数)が成功した場合(S1005)、*pcbWrittenに送信したデータ数(*pcbReadに受信したデータ数)を代入し(S1006)、bRetに成功を表すTRUEを代入し(S1007)、SpoolerにbRetを返してこの関数を終了する(S1008)。ステップS1005において、PM_WritePort()関数(PM_ReadPort()関数)が失敗して失敗を表すFALSEが返ってきた場合、ステップS1008に進みbRetを返してこの関数を終了する。
図11は図5及び図6で説明したLM36内のLM_EndDocPort()関数の従来例の処理を表すフローチャートである。
同図において、LM_EndDocPort()関数が開始されると(S1101)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化し(S1102)、図14で後述するPM37のPM_EndDocPort()関数をコールする(S1103)。PM_EndDocPort()関数が成功してPM37からTRUEが返ってきた場合(S1104)、bRetに成功を表すTRUEを代入し(S1105)、SpoolerにbRetを返してこの関数を終了する(S1106)。ステップS1104において、PM_EndDocPort()関数が失敗して失敗を表すFALSEが返ってきた場合、ステップS1106に進みbRetを返してこの関数を終了する。
図12は図5及び図6で説明したPM37内のPM_StartDocPort()関数の従来例の処理を表すフローチャートである。
同図において、PM_StartDocPort()関数が開始されると(S1201)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化し(S1202)、Bluetooth通信の場合(S1203)、図22で後述するBT_Connect()関数をコールする(S1204)。BT_Connect()関数が成功してBluetooth HW (Stack)からTRUEが返ってきた場合(S1205)、bRetに成功を表すTRUEを代入し(S1206)、bRetをLM36に返してこの関数を終了する(S1207)。ステップS1205において、BT_Connect()関数が失敗して失敗を表すFALSEが返ってきた場合、ステップS1207に進みbRetを返してこの関数を終了する。ステップS1203において、Bluetooth通信でない場合(USB通信の場合)、ステップS1206に進む。
図13は図5及び図6で説明したPM37内のPM_WritePort()関数と図24で説明したPM37内のPM_ReadPort()関数の従来例の処理を表すフローチャートである。同図において、ステップ内に括弧( )で括られた部分があるステップに関しては、括弧で括られている方がPM_ReadPort()関数における処理を表し、他方(括弧で括られていない方)がPM_WritePort()関数における処理を表す。また、ステップ内に括弧( )で括られた部分がないステップに関しては、PM_WritePort()関数とPM_ReadPort()関数の両者における共通の処理を表す。以下の説明においても、PM_ReadPort()関数における処理を括弧( )で括って説明する。
同図において、PM_WritePort()関数(PM_ReadPort()関数)が開始されると(S1301)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化する(S1302)。また、図28に示すPM_WritePort()関数の*pcbWritten(PM_ReadPort()関数の*pcbRead)に0を代入して初期化する(S1303)。Bluetooth通信の場合(S1304)、図15で後述するBT_Send1()関数(BT_Receive1()関数)をコールする(S1305)。ステップS1304において、Bluetooth通信でない場合(USB通信の場合)、USB_Send()関数(USB_Receive()関数))をコールする(S1309)。Bluetooth通信の場合はBT_Send1()関数(BT_Receive1()関数)が、USB通信の場合はUSB_Send()関数(USB_Receive()関数))が成功した場合(S1306)、*pcbWrittenに送信したデータ数(*pcbReadに受信したデータ数)を代入し(S1307)、bRetに成功を表すTRUEを代入し(S1308)、bRetをLM36に返してこの関数を終了する(S1310)。ステップS1306において、Bluetooth通信の場合はBT_Send1()関数(BT_Receive1()関数)が、USB通信の場合はUSB_Send()関数(USB_Receive()関数))が失敗して失敗を表すFALSEが返ってきた場合、ステップS1310に進みbRetを返してこの関数を終了する。
図14は図5及び図6で説明したPM37内のPM_EndDocPort()関数の従来例の処理を表すフローチャートである。
同図において、PM_EndDocPort()関数が開始されると(S1401)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化する(S1402)。Bluetooth通信の場合(S1403)、図23で後述するBT_Disconnect()関数をコールする(S1404)。BT_Disconnect()関数が成功してBluetooth HW (Stack)からTRUEが返ってきた場合(S1405)、bRetに成功を表すTRUEを代入し(S1406)、bRetをLM36に返してこの関数を終了する(S1407)。ステップS1405において、BT_Disconnect()関数が失敗して失敗を表すFALSEが返ってきた場合、ステップS1407に進みbRetを返してこの関数を終了する。ステップS1403において、Bluetooth通信でない場合(USB通信の場合)、ステップS1406に進む。
図22は図6及び図7で説明したBluetooth HW (Stack)内のBT_Connect()関数の処理を表すフローチャートである。同図において、BT_Connect()関数が開始されると(S2201)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化し(S2202)、Bluetooth通信の通信リンク(ACLとHCRP)の状態を確認する(S2203)。通信リンクが既に確立されている場合(S2204)、bRetに成功を表すTRUEを代入し(S2207)、bRetをPM37に返してこの関数を終了する(S2208)。ステップS2204において、通信リンクが確立されていない場合、通信リンクの確立を試みる(S2205)。通信リンクが確立された場合(S2206)、ステップS2207に進む。ステップS2206において、通信リンクが確立されなかった場合、ステップS2208に進みbRetを返してこの関数を終了する。
図15は図5及び図6で説明したUSB HW (Stack)内のUSB_Send()関数及びBluetooth HW (Stack)内のBT_Send1()関数と、図26及び図24で説明したUSB HW (Stack)内のUSB_Receive()関数及びBluetooth HW (Stack)内のBT_Receive1()関数の従来例の処理を表すフローチャートである。同図において、ステップ内に括弧( )で括られた部分があるステップに関しては、括弧で括られている方がUSB_Receive()関数またはBT_Receive1()関数における処理を表し、他方(括弧で括られていない方)がUSB_Send()関数またはBT_Send1()関数における処理を表す。また、ステップ内に括弧( )で括られた部分がないステップ(但し、ステップS1512を除く)に関しては、USB_Send()関数またはBT_Send1()関数と、USB_Receive()関数またはBT_Receive1()関数の両者における共通の処理を表す。以下の説明においても、USB_Receive()関数またはBT_Receive1()関数における処理を括弧( )で括って説明する。
同図において、USB_Send()またはBT_Send1()関数(USB_Receive()関数またはBT_Receive1()関数)が開始されると(S1501)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化する(S1502)。また、図30に示すUSB_Send()関数または図31に示すBT_Send1()関数の*pcbWritten(図30に示すUSB_Receive()関数または図31に示すBT_Receive1()関数の*pcbRead)に0を代入して初期化する(S1503)。プリンタ3が接続されているUSBインタフェース4またはBluetoothインタフェース9のアイドル状態を確認する(S1504)。アイドル中の場合(1505)、データパケットを送信(受信)し(S1506)、*pcbWrittenに送信したデータ数(*pcbReadに受信したデータ数)を加える(S1507)。この*pcbWrittenの値が図30または図31に示すcbBufの値と同じ(*pcbReadの値が0より大きくcbBufferの値以下)である場合(S1508)、bRetに成功を表すTRUEを代入し(S1510)、bRetをPM37に返してこの関数を終了する(S1513)。ステップS1508において、*pcbWrittenの値がcbBufの値より小さい(*pcbReadの値が0の)場合、ステップS1510に進む。また、図5のステップS533または図6のステップS639でセットしたWrite(Read)のタイムアウト時間を経過してタイムアウトしている場合も(S1509)、ステップS1510に進む。ステップS1509において、タイムアウトしていない場合、ステップS1504に戻る。ステップS1505において、アイドル中でない場合、プリンタ3のUSBポート6またはBluetoothポート8からNAKが返されているかを確認する(S1511)。PC1からプリンタ3へのデータ転送速度が速く、プリンタ3での印刷制御が間に合わず、プリンタ3の受信バッファがフルとなってしまった場合、プリンタ3で記録紙が不足して記録紙無しエラーが発生し、プリンタ3の受信バッファがフルとなってしまった場合などには、プリンタ3は、PC1からのデータを受け付けられなくなる。この場合、プリンタ3はPC1にNAKを送信する。PC1は、プリンタ3とのBluetooth通信もしくはUSB通信の通信リンクが確立されていて正常に通信が行えるときはこのNAKを受信できるが、通信リンクが確立されていない場合などプリンタ3との通信が正常に行えない場合には、NAKを受信することができない。従って、ステップS1511において、プリンタ3のUSBポート6またはBluetoothポート8からNAKが返されているかを確認することにより通信路の異常を判定できる。
ステップS1511において、プリンタ3のUSBポート6またはBluetoothポート8からNAKが返されている場合は、プリンタ3との通信が正常に行えるので、ステップS1508に進む。ステップS1511において、NAKが返されていない場合、USB通信またはBluetooth通信に異常があると判断し、USB_Send()関数またはBT_Send1()関数の場合は未送信データのバッファをクリアして、これ以降の処理における誤送信を防止する(S1512)。その後、ステップS1513に進みbRetをPM37に返してこの関数を終了する。このように、従来例において、ステップS1504でUSBインタフェース4またはBluetoothインタフェース9のアイドル状態を確認する第1の通信状態確認手段が設けられている。この第1の通信状態確認手段は通信リンクが確立していることを前提として、プリンタ3がデータを受信(送信)できる状態にあるかどうかを確認する手段である。
図23は図6及び図8で説明したBluetooth HW (Stack)内のBT_Disconnect()関数の処理を表すフローチャートである。
同図において、BT_Disconnect()関数が開始されると(S2301)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化し(S2302)、Bluetooth通信の通信リンク(ACLとHCRP)の状態を確認する(S2303)。通信リンクが確立されている場合(S2304)、通信リンクの切断を試み(S2306)、通信リンクが切断された場合(S2306)、bRetに成功を表すTRUEを代入し(S2307)、bRetをPM37に返してこの関数を終了する(S2308)。ステップS2306において、通信リンクが切断されなかった場合、ステップS2308に進みbRetを返してこの関数を終了する。ステップS2304において、通信リンクが確立されていない場合、ステップS2307に進む。
図16は図7で説明したLM36内のLM_StartDocPort()関数の本実施形態で新たに提案する処理を表すフローチャートである。尚、同図に示す処理は、図5、図26で説明したLM36内のLM_StartDocPort()関数としても使えるように設計されている。
同図において、LM_StartDocPort()関数が開始されると(S1601)、この関数の戻り値となるbRetに失敗を表すFALSEを代入して初期化する(S1602)。また、SetCommTimeouts()関数をコールし、USB通信またはBluetooth通信のWrite/Readのタイムアウト時間を設定する(S1610)。Bluetooth通信かを判定(もしくはUSB通信かを判定)し、Bluetooth通信の場合(S1603)、Bluetooth通信の接続状態を表す通信接続フラグBT_Connection_Flagをクリア(0)して初期化する(S1604)。そして、図12で前述したPM37のPM_StartDocPort()関数をコールする(S1605)。PM_StartDocPort()関数が成功してTRUEが返ってきた場合において(S1606)、Bluetooth通信の場合(S1607)、通信接続フラグBT_Connection_Flagをセット(1)し(S1608)、ステップS1609に進む。ステップS1609では、bRetに成功を表すTRUEを代入し(S1609)、bRetをSpoolerに返してこの関数を終了する(S1611)。ステップS1603において、Bluetooth通信でない場合(USB通信の場合)、ステップS1605に進む。ステップS1606において、PM_StartDocPort()関数が失敗して失敗を表すFALSEが返ってきた場合、ステップS1611に進みbRetを返してこの関数を終了する。ステップS1607において、Bluetooth通信でない場合(USB通信の場合)、ステップS1609に進む。
図17は図7で説明したLM36内のLM_WritePort()関数と図25で説明したLM36内のLM_ReadPort()関数の本実施形態で新たに提案する処理を表すフローチャートである。尚、同図に示す処理は、図5、図26で説明したLM36内のLM_WritePort()関数としても使えるように設計されている。同図において、ステップ内に括弧( )で括られた部分があるステップに関しては、括弧で括られている方がLM_ReadPort()関数における処理を表し、他方(括弧で括られていない方)がLM_WritePort()関数における処理を表す。また、ステップ内に括弧( )で括られた部分がないステップに関しては、LM_WritePort()関数とLM_ReadPort()関数の両者における共通の処理を表す。以下の説明においても、LM_ReadPort()関数における処理を括弧( )で括って説明する。
同図において、LM_WritePort()関数(LM_ReadPort()関数)が開始されると(S1701)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化する(S1702)。また、図27に示すLM_WritePort()関数の*pcbWritten(LM_ReadPort()関数の*pcbRead)に0を代入して初期化する(S1703)。Bluetooth通信かを判定(もしくはUSB通信かを判定)し、Bluetooth通信の場合であり(S1704)、Bluetooth通信の接続状態を表す通信接続フラグBT_Connection_Flagがセット(1)されている場合(S1705)、図29に示す通りControlIDにIOCTL_BLUETOOTH_COMMUNICATIONをセットしてPM37内のPM_GetPrinterDataFromPort()関数をコールする(S1706)。PM_GetPrinterDataFromPort()関数がPM37からリターンされて図29に示す*lpOutBufferの値がBluetooth通信の通信リンクが確立されていて正常な状態であることを表すBLUETOOTH_CONNECTEDの場合(S1707)、図19で後述するPM_WritePort()関数(PM_ReadPort()関数)をコールする(S1708)。PM_WritePort()関数(PM_ReadPort()関数)が成功して成功を表すTRUEがPM37から返ってきた場合(S1709)、*pcbWrittenに送信したデータ数(*pcbReadに受信したデータ数)を代入し(S1710)、bRetに成功を表すTRUEを代入し(S1711)、bRetをSpoolerに返してこの関数を終了する(S1713)。ステップS1709において、PM_WritePort()関数(PM_ReadPort()関数)が失敗して失敗を表すFALSEが返ってきた場合、ステップS1713に進みbRetを返してこの関数を終了する。ステップS1707において、*lpOutBufferの値がBLUETOOTH_CONNECTED以外の場合、通信状態に異常があると判断して通信接続フラグBT_Connection_Flagをクリア(0)し(S1712)、ステップS1713に進みbRetを返してこの関数を終了する。ステップS1705において、通信接続フラグBT_Connection_Flagがクリア(0)されている場合、ステップS1713に進みbRetを返してこの関数を終了する。ステップS1704において、Bluetooth通信でない場合(USB通信の場合)、ステップS1708に進む。
図18は図8で説明したLM36内のLM_EndDocPort()関数の本実施形態で新たに提案する処理を表すフローチャートである。尚、同図に示す処理は、図5、図26で説明したLM36内のLM_EndDocPort()関数としても使えるように設計されている。
同図において、LM_EndDocPort()関数が開始されると(S1801)、この関数の戻り値となるbRetに失敗を表すFALSEを代入して初期化し(S1802)、図14で前述したPM37のPM_EndDocPort()関数をコールする(S1803)。PM_EndDocPort()関数が成功してPM37からTRUEが返ってきた場合(S1804)、Bluetooth通信かを判定(もしくはUSB通信かを判定)する(S1805)。Bluetooth通信の場合(S1805)、Bluetooth通信の接続状態を表す通信接続フラグBT_Connection_Flagをクリア(0)して初期化し(S1806)、bRetに成功を表すTRUEを代入し(S1807)、bRetをSpoolerに返してこの関数を終了する(S1808)。ステップS1805において、Bluetooth通信でない場合(USB通信の場合)、ステップS1807に進む。ステップS1804において、PM_EndDocPort()関数が失敗して失敗を表すFALSEが返ってきた場合、ステップS1808に進みbRetを返してこの関数を終了する。
図19は図7で説明したPM37内のPM_WritePort()関数と図25で説明したPM37内のPM_ReadPort()関数の本実施形態で新たに提案する処理を表すフローチャートである。尚、同図に示す処理は、図5、図26で説明したLM36内のPM_WritePort()関数としても使えるように設計されている。同図において、ステップ内に括弧( )で括られた部分があるステップに関しては、括弧で括られている方がPM_ReadPort()関数における処理を表し、他方(括弧で括られていない方)がPM_WritePort()関数における処理を表す。また、ステップ内に括弧( )で括られた部分がないステップに関しては、PM_WritePort()関数とPM_ReadPort()関数の両者における共通の処理を表す。以下の説明においても、PM_ReadPort()関数における処理を括弧( )で括って説明する。
同図において、PM_WritePort()関数(PM_ReadPort()関数)が開始されると(S1901)、この関数の戻り値となるbRetに失敗を表すFALSEを代入して初期化する(S1902)。また、図28に示すPM_WritePort()関数の*pcbWritten(PM_ReadPort()関数の*pcbRead)に0を代入して初期化する(S1903)。次に、Bluetooth通信かを判定(もしくはUSB通信かを判定)し、Bluetooth通信の場合(S1904)、図21で後述するBT_Send2()関数(BT_Receive2()関数)をコールする(S1905)。ステップS1904において、Bluetooth通信でない場合(USB通信の場合)、図15で前述したUSB_Send()関数(USB_Receive()関数)をコールする(S1909)。Bluetooth通信の場合はBluetooth HW (Stack)からBT_Send2()関数(BT_Receive2()関数)が、USB通信の場合はUSB HW (Stack)からUSB_Send()関数(USB_Receive()関数)が成功して成功を表すTRUEが返ってきた場合(S1906)、*pcbWrittenに送信したデータ数(*pcbReadに受信したデータ数)を代入し(S1907)、bRetに成功を表すTRUEを代入し(S1908)、bRetをLM36に返してこの関数を終了する(S1910)。ステップS1906において、BT_Send2()関数(BT_Receive2()関数)が失敗して失敗を表すFALSEが返ってきた場合、ステップS1910に進みbRetを返してこの関数を終了する。
図20は図7、図25で説明したBluetooth HW (Stack)内のBT_CheckConnection()関数の本実施形態で新たに提案する処理を表すフローチャートである。
同図において、BT_CheckConnection()関数が開始されると(S2001)、この関数の戻り値となるdwRet にBluetooth通信の通信リンクが切断されていることを表すBLUETOOTH_DISCONNECTEDを代入して初期化する(S2002)。そして、Bluetooth通信の通信リンク(ACLとHCRP)の状態を確認し(S2003)、通信リンクが確立されていて正常な状態である場合(S2004)、dwRetにBluetooth通信の通信リンクが確立されていて正常な状態であることを表すBLUETOOTH_CONNECTEDを代入し(S2012)、dwRetをPM37に返してこの関数を終了する(S2014)。ステップS2004において、通信リンクが正常に確立されていない場合、プリンタ3のBluetoothポート8から通信切断の要求を表す通信切断要求パケットが送られてきたかどうかを確認し(S2005)、通信切断要求パケットが送られてきた場合(S2006)、図23で示すBT_Disconnect()関数をコールして通信リンクを切断し(S2013)、ステップS2014に進みdwRetを返してこの関数を終了する。このケースのようにプリンタ3のBluetoothポート8から通信切断要求パケットが送られてくるケースとしては、例えば、印刷中にユーザがプリンタ3の電源スイッチを操作して強制的にプリンタ3の電源をオフにするケース等が考えられる。ステップS2006において、通信切断要求パケットが送られてきていない場合、Bluetooth通信のリカバリー処理を行う(S2007)。このケースとしては、例えば、印刷中にBluetoothの無線通信の電波状況が悪くなって通信リンクが確立されているのか、切断されているのかが不明な状態に陥っているケース等が考えられる。ステップS2007において、Bluetooth通信のリカバリー処理が成功した場合(S2008)、dwRetに、Bluetooth通信がリカバリーされ、通信リンクが確立されて正常な状態に復帰したことを表すBLUETOOTH_RECOVEREDを代入し(S2009)、ステップS2014に進みdwRetをPM37に返してこの関数を終了する。ステップS2008において、Bluetooth通信のリカバリー処理が失敗した場合、Bluetooth通信の仕様においてデバイス(プリンタ3のBluetoothポート8)からの応答がなくなってから通信リンクを維持することができる最大時間を経過しておらず、リカバリー中の場合(S2010)、dwRetにBluetooth通信の通信リンクが確立されているのか切断されているのかが不明な状態であることを表すBLUETOOTH_UNKNOWNを代入し(S2011)、ステップS2014に進みdwRetをPM37に返してこの関数を終了する。ステップS2010において、前記最大時間を経過してリカバリーが不可能になった場合、ステップS2013に進む。
以上説明したように、図7、図25に示す本実施形態で新たに設けたLM36におけるBluetooth通信の通信リンクの通信状態確認手段(第2の通信状態確認手段)により、同図に示すBT_CheckConnection()関数の処理が実行される。プリンタドライバ50はこの第2の通信状態確認手段を利用してPC1からプリンタ3への安全なデータ送信を制御する、という点が特徴的な新規技術である。このBT_CheckConnection()関数におけるBluetooth通信の通信リンクの通信状態確認手段のロジックは、図15、図21で示すようなBluetooth HW (Stack)におけるBluetooth通信の通信リンクの通信状態確認手段(第1の通信状態確認手段)のロジックと異なるものである。一度でも、Bluetooth通信がリカバリーされ、通信リンクが確立されて正常な状態に復帰したことを表すBLUETOOTH_RECOVEREDや、Bluetooth通信の通信リンクが確立されているのか切断されているのかが不明な状態であることを表すBLUETOOTH_UNKNOWNとなった場合、これらの状態に至る前にBluetooth通信の通信リンクが一度切断されている可能性がある。そのため本実施形態においては、プリンタ3における不正な印字等の誤動作を防止する為に、図7のステップS728や図25のステップS2511において、Bluetooth通信の通信リンクが確立されていて正常な状態であることを表すBLUETOOTH_CONNECTED以外のケース(BLUETOOTH_RECOVERED、BLUETOOTH_UNKNOWN、BLUETOOTH_DISCONNECTED)を全てエラーとして処理している。
図21は図7で説明したBluetooth HW (Stack)内のBT_Send2()関数と、図25で説明したBluetooth HW (Stack)内のBT_Receive2()関数の本実施形態で新たに提案する処理を表すフローチャートである。同図において、ステップ内に括弧( )で括られた部分があるステップに関しては、括弧で括られている方がBT_Receive2()関数における処理を表し、他方(括弧で括られていない方)がBT_Send2()関数における処理を表す。また、ステップ内に括弧( )で括られた部分がないステップ(但し、ステップS2116を除く)に関しては、BT_Send2()関数とBT_Receive2()関数の両者における共通の処理を表す。以下の説明においても、BT_Receive2()関数における処理を括弧( )で括って説明する。
同図において、BT_Send2()関数(BT_Receive2()関数)が開始されると(S2101)、この関数の戻り値となるbRet に失敗を表すFALSEを代入して初期化する(S2102)。また、図31に示すBT_Send2()関数の*pcbWritten(BT_Receive2()関数の*pcbRead)に0を代入して初期化する(S2103)。そして、図20に示すBT_CheckConnection()関数をコールして、Bluetooth通信の通信リンク(ACLとHCRP)の状態を確認する(S2104)。通信リンクが既に確立されている場合(S2105)、プリンタ3が接続されているUSBインタフェース4またはBluetoothインタフェース9のアイドル状態を確認する(S2108)。
アイドル中の場合(2109)、データパケットを送信(受信)し(S2110)、*pcbWrittenに送信したデータ数(*pcbReadに受信したデータ数)を加え(S2111)、*pcbWrittenの値が図31に示すcbBufの値と同じ(*pcbRead の値が0より大きくcbBufferの値以下)かを判定する(S2112)。*pcbWrittenの値が図31に示すcbBufの値と同じ場合(S2112)、bRetに成功を表すTRUEを代入し(S2114)、bRetをPM37に返してこの関数を終了する(S2117)。ステップS2112において、*pcbWrittenの値がcbBufの値より小さい(*pcbRead の値が0の)場合であり、図6のステップS639でセットしたWrite(Read)のタイムアウト時間を経過してタイムアウトしている場合(S2113)、ステップS2114に進む。ステップS2113において、タイムアウトしていない場合、ステップS2108に戻る。ステップS2109において、アイドル中でない場合、プリンタ3のBluetoothポート8からNAKが返されているかを確認する(S2115)。図15で説明したように、プリンタ3のUSBポート6またはBluetoothポート8からNAKが返されているかを確認することにより通信路の異常を判定する。NAKが返されている場合(S2115)、Bluetooth通信が正常に行えているので、ステップS2112に進む。ステップS2115において、NAKが返されていない場合、Bluetooth通信に異常があると判断し、BT_Send2()関数の場合は未送信データのバッファをクリアして、これ以降の処理における誤送信を防止する(S2116)。そして、ステップS2117に進み、bRetをPM37に返してこの関数を終了する。ステップS2105において、通信リンクが確立されていない場合、図22に示すBT_Connect()関数をコールして、Bluetooth通信の通信リンク(ACLとHCRP)の確立を試みる(S2106)。通信リンクが確立された場合(S2107)、ステップS2108に進む。ステップS2107において、通信リンクが確立されなかった場合、ステップS2116に進む。
このように、本実施形態で新たに提案する処理においても、図15に示す従来例と同様に、ステップS2108でBluetoothインタフェース9のアイドル状態を確認する第1の通信状態確認手段が設けられている。この第1の通信状態確認手段は通信リンクが確立していることを前提として、プリンタ3がデータを受信(送信)できる状態にあるかどうかを確認する手段である。
また、ステップS2104において、Bluetooth通信の通信リンクの状態を確認し、通信リンクが確立されていない場合はステップS2106で通信リンクを(再度)確立してリカバリーすることで、印刷中に通信が滞ったり切断されたりするケースにおいても、通信が切断される度に印刷ジョブをエラー終了することなく、印刷ジョブを続行して完了することもできる。これにより、図6に示す従来例では、印刷開始時にステップS605においてLM36内のLM_StartDocPort()関数をコールした時に、ステップS611で行われていたBluetooth通信の通信リンクを確立する処理が、図7のステップS718等のLM36内のLM_WritePort()関数をコールした時、図25のステップS2501等のLM36内のLM_ReadPort()関数をコールした時にもステップS2106でも行われる。従って、例えば、印刷中にBluetooth通信の無線通信の電波状況が悪くなって通信リンクが切断された場合等においても、印刷ジョブをエラー終了することなく、最後まで確実に印刷を完了することができる。このリカバリー処理は、図20のステップS2007で行うリカバリー処理とは異なるロジックである。このようにロジックの異なる2つ(複数)のリカバリー処理、すなわち、Bluetooth通信の通信リンクの再確立処理を行うことは、特徴的な新規技術である。
以下、図33に示すメモリマップを参照して、上記実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムで読み出し可能なデータ処理プログラムの構成について説明する。
図33は、本実施形態に係る周辺装置制御システムで読み出し可能な各種データ処理プログラムを格納する記憶媒体のメモリマップを示す図である。なお、特に図示しないが、記憶媒体に記憶されるプログラム群を管理する情報、例えばバージョン情報,作成者等もこの記憶媒体に記憶され、かつ、プログラム読み出し側のOS等に依存する情報、例えばプログラムを識別表示するアイコン等も記憶される場合もある。
64は記憶媒体であり、ここではハードディスクで構成されているものとする。65はディレクトリ情報管理部であり、各種プログラムに従属するデータがこのディレクトリ情報管理部65で管理されている。66はプログラム格納部であり、各種プログラムを情報処理装置にインストールするためのプログラムや、インストールするプログラムが圧縮されている場合に解凍するためのプログラム等も記憶される場合がある。本発明の実施の形態における図5〜図8、図24〜図26にそれぞれ示す各関数フロー、及び、図9〜図23にそれぞれ示す各フローチャートで実現される処理は、このプログラム格納部66に記憶されており、それぞれ実行される。これらの各関数フロー及び各フローチャートの実行によって実現できる各機能が、外部からインストールされるプログラムによって、情報処理装置によって実現されるようにしてもよい。そして、その場合、CD−ROMやフラッシュメモリやフレキシブルディスク等の記憶媒体により、あるいはネットワークを介して外部の記憶媒体から、プログラムを含む情報群が情報処理装置や周辺装置に供給される場合でも、本発明は適用されるものである。
上記実施の形態では、アプリケーション30の例としてメモ帳/Notepad(Notepad.exe)のような印刷可能なアプリケーションやステータスモニタを挙げたが、これらの例に限られることなく、例えば印刷機能を備える任意のアプリケーションや、周辺装置から情報を取得して、それを利用するような任意のアプリケーションで実現可能であり、有効である。
また、上記実施の形態では、アプリケーション(ステータスモニタ)30でプリンタ3に搭載されているインクの情報及び状態をモニタする例を説明したが、この例に限られることなく、例えば、周辺装置の動作状態や、警告、エラーの状態、オプションの装着状態等の任意の情報や状態の取得に有効活用できる。
また、上記実施の形態では、プリンタの例としてカラーインクジェットプリンタを使用したが、この例に限られることなく、例えば、モノクロLBP等の任意のプリンタを使用することができる。
また、上記実施の形態では、情報処理装置としてパーソナルコンピュータを想定したが、この例に限られることなく、例えばデジタルカメラ、デジタルビデオカメラ、DVDビデオプレーヤー、ゲーム、セットトップボックス、インターネット家電等、同様な使用方法が可能な任意の端末に対して実現することができ、有効である。
また、上記実施の形態では、周辺装置としてプリンタを例示しているが、周辺装置として他に、複写機、ファクシミリ、スキャナ、デジタルカメラ、デジタルビデオカメラ、及びこれらの複合機能を備える装置などのいずれかが、本発明の適用対象となり得る。
また、上記実施の形態では、OSに例としてWindows(登録商標) XPを使用したが、このOSに限られることなく、任意のOSを使用することができる。
また、上記実施の形態では、PC1とプリンタ3との間のインタフェースとして、Bluetoothインタフェースを用いたが、このインタフェースに限られることなく、例えば、無線LAN(IEEE 802.11a/b/g等)、Wireless USB Promoter Groupが策定したWireless USB等の任意の無線インタフェースを用いるようにしてもよい。
上記説明によれば、無線通信を利用した印刷システムにおいて、印刷ジョブを印刷中に、例えば、無線通信の電波状況が悪くなって通信リンクが切断された場合、継続された印刷ジョブ内の印刷制御コマンドによってプリンタが不正な印字等の誤動作をしないように防止することができる。
また、無線通信を利用した周辺装置の状態をモニタする機能(ステータスモニタ)において、例えば、無線通信の電波状況が悪くなって通信リンクが確立されているのか、切断されているのかが不明な状態の時にも、ステータスモニタが制御不能な状態に陥ることなく安定した状態を継続することができ、操作性を向上することができる。
また、本発明の目的は、前述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROM等を用いることができる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(基本システム或いはオペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
1 情報処理装置(PC)
3 プリンタ
4 USBインタフェース
5 USBポート
6 USBポート
7 Bluetoothポート
8 Bluetoothポート
9 Bluetoothインタフェース
30 アプリケーション(メモ帳/Notepad(Notepad.exe)、ステータスモニタ)
36 ランゲージモニタ(LM)
37 ポートモニタ(PM)
3 プリンタ
4 USBインタフェース
5 USBポート
6 USBポート
7 Bluetoothポート
8 Bluetoothポート
9 Bluetoothインタフェース
30 アプリケーション(メモ帳/Notepad(Notepad.exe)、ステータスモニタ)
36 ランゲージモニタ(LM)
37 ポートモニタ(PM)
Claims (25)
- 情報処理装置と、前記情報処理装置と通信インタフェースを介して接続される周辺装置を有する周辺装置制御システムであって、
前記情報処理装置は、
前記通信インタフェースの通信状態を確認する第1の確認手段を有し、前記通信インタフェースを制御する通信インタフェース制御手段と、
前記通信インタフェースの通信状態を確認する第2の確認手段を有し、前記周辺装置を制御する周辺装置制御手段を有し、
前記周辺装置制御手段は、前記第2の確認手段による前記通信インタフェースの通信状態の確認結果に応じて、前記周辺装置と通信することを特徴とする周辺装置制御システム。 - 通信インタフェースを介して周辺装置と通信する情報処理装置あって、
前記通信インタフェースの通信状態を確認する第1の確認手段を有し、前記通信インタフェースを制御する通信インタフェース制御手段と、
前記通信インタフェースの通信状態を確認する第2の確認手段を有し、前記周辺装置を制御する周辺装置制御手段と、を有し、
前記周辺装置制御手段は、前記第2の確認手段による前記通信インタフェースの通信状態の確認結果に応じて、前記周辺装置と通信することを特徴とする情報処理装置。 - 前記通信インタフェースは無線通信インタフェースであることを特徴とする請求項2記載の情報処理装置。
- 前記第1の確認手段における前記通信インタフェースの通信状態を確認する処理と、前記第2の確認手段における前記通信インタフェースの通信状態を確認する処理は、確認処理が異なることを特徴とする請求項2または3記載の情報処理装置。
- 前記通信インタフェース制御手段は、前記通信インタフェースの通信リンクを確立する確立手段を備えることを特徴とする請求項2から4のいずれかに記載の情報処理装置。
- 前記通信インタフェース制御手段は、通信リンクが切断されている場合、前記確立手段により通信リンクを確立した後、前記周辺装置と通信することを特徴とする請求項5記載の情報処理装置。
- 前記第1の確認手段が前記通信インタフェースの通信リンクの切断を検出した場合、前記周辺装置に送信するデータを記憶するバッファ内の未送信データを破棄することを特徴とする請求項2から6のいずれかに記載の情報処理装置。
- 前記第2の確認手段は、前記通信インタフェースの通信状態が、正常、切断、再接続、不明の何れかであることを確認することを特徴とする請求項2から7のいずれかに記載の情報処理装置。
- 情報処理装置は、前記第2の確認手段により、前記通信インタフェースの通信状態が正常であると検出された場合、前記周辺装置と通信することを特徴とする請求項8記載の情報処理装置。
- 前記周辺装置制御手段は、前記通信インタフェースが第1の通信インタフェースか、第2の通信インタフェースかを判定する判定手段を有することを特徴とする請求項2から9のいずれかに記載の情報処理装置。
- 前記周辺装置制御手段は、前記判定手段による判定に応じて、前記通信インタフェースの状態を管理することを特徴とする請求項10記載の情報処理装置。
- 前記第2の確認手段は、前記判定手段による判定に応じて、前記通信インタフェースの通信状態を確認することを特徴とする請求項請求項10または11記載の情報処理装置。
- 通信インタフェースを介して周辺装置と通信する情報処理装置であって、前記通信インタフェースを制御する通信インタフェース制御手段と、前記周辺装置を制御する周辺装置制御手段とを有する情報処理装置の制御方法であって、
前記通信インタフェース手段は、前記通信インタフェースの通信状態を確認する第1の確認工程を有し、
前記周辺装置制御手段は、前記通信インタフェースの通信状態を確認する第2の確認工程を有し、
前記周辺装置制御手段は、前記第2の確認工程における前記通信インタフェースの通信状態の確認結果に応じて、前記周辺装置と通信することを特徴とする情報処理装置の制御方法。 - 通信インタフェースを介して周辺装置と通信する情報処理装置により実行されるプログラムであって、
前記通信インタフェースを制御する通信インタフェース制御モジュールが、前記通信インタフェースの通信状態を確認する第1の確認工程を有し、
前記周辺装置を制御する周辺装置制御モジュールが、前記通信インタフェースの通信状態を確認する第2の確認工程を有し、
前記周辺装置制御モジュールは、前記第2の確認工程における前記通信インタフェースの通信状態の確認結果に応じて、前記周辺装置と通信するための処理を行うことを特徴とするプログラム。 - 前記通信インタフェースは無線通信インタフェースであることを特徴とする請求項14記載のプログラム。
- 前記第1の確認工程における前記通信インタフェースの通信状態を確認する処理と、前記第2の確認工程における前記通信インタフェースの通信状態を確認する処理は、確認処理が異なることを特徴とする請求項14または15記載のプログラム。
- 前記通信インタフェース制御モジュールは、前記通信インタフェースの通信リンクを確立する確立工程を備えることを特徴とする請求項14から16のいずれかに記載のプログラム。
- 前記通信インタフェース制御モジュールは、通信リンクが切断されている場合、前記確立工程において通信リンクを確立した後、前記周辺装置と通信するための処理を行うことを特徴とする請求項17記載のプログラム。
- 前記第1の確認工程が前記通信インタフェースの通信リンクの切断を検出した場合、前記周辺装置に送信するデータを記憶するバッファ内の未送信データを破棄することを特徴とする請求項14から18のいずれかに記載のプログラム。
- 前記第2の確認工程は、前記通信インタフェースの通信状態が、正常、切断、再接続、不明の何れかであることを確認することを特徴とする請求項14から19のいずれかに記載のプログラム。
- 前記第2の確認工程により、前記通信インタフェースの通信状態が正常であると検出された場合、前記周辺装置と通信することを特徴とする請求項20記載のプログラム。
- 前記周辺装置制御モジュールは、前記通信インタフェースが第1の通信インタフェースか、第2の通信インタフェースかを判定する判定工程を有することを特徴とする請求項14から21のいずれかに記載のプログラム。
- 前記周辺装置制御モジュールは、前記判定工程における判定に応じて、前記通信インタフェースの状態を管理することを特徴とする請求項22記載のプログラム。
- 前記第2の確認工程は、前記判定工程における判定に応じて、前記通信インタフェースの通信状態を確認することを特徴とする請求項請求項22または23記載のプログラム。
- 通信インタフェースを介して周辺装置を通信する情報処理装置により実行されるプログラムであって、
請求項14から24のいずれかにおける前記通信インタフェースモジュール、もしくは、前記周辺装置制御モジュールの一方を有することを特徴とするプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005155536A JP2006331179A (ja) | 2005-05-27 | 2005-05-27 | 周辺装置制御システム、情報処理装置、情報処理装置の制御方法、プログラム |
US11/435,519 US20070011679A1 (en) | 2005-05-27 | 2006-05-17 | Peripheral apparatus control system, information processing apparatus, method for controlling information processing apparatus, and program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005155536A JP2006331179A (ja) | 2005-05-27 | 2005-05-27 | 周辺装置制御システム、情報処理装置、情報処理装置の制御方法、プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006331179A true JP2006331179A (ja) | 2006-12-07 |
Family
ID=37552792
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005155536A Withdrawn JP2006331179A (ja) | 2005-05-27 | 2005-05-27 | 周辺装置制御システム、情報処理装置、情報処理装置の制御方法、プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20070011679A1 (ja) |
JP (1) | JP2006331179A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009163633A (ja) * | 2008-01-09 | 2009-07-23 | Ricoh Co Ltd | 情報処理装置およびデータ通信方法 |
JP2013502008A (ja) * | 2009-08-13 | 2013-01-17 | アップル インコーポレイテッド | 自己構成可能な周辺装置に適合するホスト/周辺装置ローカル相互接続 |
JP2016054390A (ja) * | 2014-09-03 | 2016-04-14 | キヤノン株式会社 | 通信装置、通信装置の制御方法、プログラム |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5023005B2 (ja) | 2008-06-30 | 2012-09-12 | キヤノン株式会社 | 画像出力装置、その方法及びプログラム |
JP5149715B2 (ja) * | 2008-06-30 | 2013-02-20 | キヤノン株式会社 | 通信システム、通信装置及びその制御方法、プログラム |
JP5039681B2 (ja) * | 2008-10-29 | 2012-10-03 | キヤノン株式会社 | 通信システム、通信装置、その通信処理方法及びプログラム |
JP2011004235A (ja) * | 2009-06-19 | 2011-01-06 | Canon Inc | ジョブ処理装置、ジョブ処理装置の制御方法、及びプログラム |
JP5587050B2 (ja) * | 2010-06-22 | 2014-09-10 | キヤノン株式会社 | 情報処理装置、情報処理装置の制御方法、及び、プログラム |
US20140082406A1 (en) * | 2012-09-18 | 2014-03-20 | Sandisk Technologies Inc. | Data protection through power loss prediction |
JP6003629B2 (ja) | 2012-12-27 | 2016-10-05 | ブラザー工業株式会社 | プログラム、および携帯端末 |
JP6015499B2 (ja) | 2013-03-07 | 2016-10-26 | ブラザー工業株式会社 | プログラム、および携帯端末 |
JP5983474B2 (ja) | 2013-03-14 | 2016-08-31 | ブラザー工業株式会社 | 印刷装置、印刷装置のプログラム、携帯端末および携帯端末のプログラム |
JP2015215664A (ja) * | 2014-05-08 | 2015-12-03 | セイコーエプソン株式会社 | 印刷制御装置および印刷制御装置の制御方法 |
JP6451251B2 (ja) * | 2014-11-20 | 2019-01-16 | セイコーエプソン株式会社 | 印刷装置、及び、印刷システム |
US10200843B1 (en) * | 2017-09-08 | 2019-02-05 | Apple Inc. | Bluetooth audio role-based scheduling |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5566225A (en) * | 1994-11-21 | 1996-10-15 | Lucent Technologies Inc. | Wireless data communications system for detecting a disabled condition and simulating a functioning mode in response to detection |
US6195712B1 (en) * | 1997-06-13 | 2001-02-27 | Intel Corporation | Dynamic discovery of wireless peripherals |
US20020124046A1 (en) * | 2001-02-20 | 2002-09-05 | Fischer William A. | Peripheral devices which manage application upload to computing devices |
US6742052B2 (en) * | 2001-08-09 | 2004-05-25 | International Business Machines Corporation | Wireless system bus |
-
2005
- 2005-05-27 JP JP2005155536A patent/JP2006331179A/ja not_active Withdrawn
-
2006
- 2006-05-17 US US11/435,519 patent/US20070011679A1/en not_active Abandoned
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009163633A (ja) * | 2008-01-09 | 2009-07-23 | Ricoh Co Ltd | 情報処理装置およびデータ通信方法 |
JP2013502008A (ja) * | 2009-08-13 | 2013-01-17 | アップル インコーポレイテッド | 自己構成可能な周辺装置に適合するホスト/周辺装置ローカル相互接続 |
JP2016054390A (ja) * | 2014-09-03 | 2016-04-14 | キヤノン株式会社 | 通信装置、通信装置の制御方法、プログラム |
Also Published As
Publication number | Publication date |
---|---|
US20070011679A1 (en) | 2007-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2006331179A (ja) | 周辺装置制御システム、情報処理装置、情報処理装置の制御方法、プログラム | |
JP4827445B2 (ja) | 周辺装置制御システム及びその制御方法及び情報処理装置、並びに、コンピュータプログラム | |
EP1862897B1 (en) | Information processing apparatus, printing system, and monitoring method | |
US5832301A (en) | Printer server system for interrupting a job from a first terminal for a job from a second terminal based on detected priorities | |
JP3945468B2 (ja) | 印刷装置、印刷装置の制御方法、印刷装置の制御プログラムおよびこれを記録したコンピュータ読み取り可能な記録媒体。 | |
US9063687B2 (en) | Information processing apparatus, method for controlling information processing apparatus, image forming apparatus, method for controlling image forming apparatus, and recording medium | |
JP2006227908A (ja) | 印刷指令装置、印刷実行装置、印刷指令印刷実行システム、それらの方法及びプログラム | |
JP4795151B2 (ja) | 情報処理方法、情報処理装置、プログラム及び記憶媒体 | |
KR20030057443A (ko) | 화상 처리 장치의 내부 인터페이스 및 그 제어 방법 | |
JP2009130850A (ja) | 画像処理装置及び通信装置、並びに画像処理システム | |
JP2007272832A (ja) | 印刷システム、ホスト装置、印刷装置、印刷制御方法、印刷方法、それらの方法をコンピュータに実行させるプログラム、および記録媒体 | |
US6804028B1 (en) | Image processing apparatus and method, and storage medium storing computer-readable program | |
WO2000028402A1 (fr) | Dispositif d'interface, procede de commande de dispositif d'interface, et dispositif d'enregistrement d'informations | |
US8928924B2 (en) | Printing system, printing control apparatus, control method of printing control apparatus, and program | |
JP2008097226A (ja) | 情報処理装置及び情報処理方法 | |
US9229508B2 (en) | Image processing apparatus, information processing method, and storage medium | |
JP6016481B2 (ja) | 画像形成装置、無線設定方法及びプログラム | |
JP3991971B2 (ja) | 印刷装置、印刷方法、印刷プログラムおよびこれを記録したコンピュータ読み取り可能な記録媒体 | |
EP1128260B1 (en) | Printer to avoid unnecessary printing | |
JP2007140952A (ja) | 分散処理システム及びその処理方法 | |
EP1041508B1 (en) | Image forming apparatus having data compression/decompression system | |
JP7305710B2 (ja) | 印刷制御装置及びその制御方法 | |
JP4307358B2 (ja) | プロトコル変換装置、該装置の制御方法及び制御プログラム | |
JP6907365B2 (ja) | システム | |
JP4323824B2 (ja) | 情報処理装置、画像形成装置、システム、方法、及び制御プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080521 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20091009 |