以下、本発明を具体化した印刷装置の実施の形態について、図面を参照して説明する。なお、これらの図面は、本発明が採用しうる技術的特徴を説明するために用いられるものであり、記載されている装置の構成、各種処理のフローチャートなどは、特に特定的な記載がない限り、それのみに限定する趣旨ではなく、単なる説明例である。
なお、本実施形態では、印刷装置での印刷処理に使用するために編集プログラム(例えば、エディタ)などで作成された1つのファイルを「印刷ファイル」と称し、この印刷ファイルに含まれる複数のデータを「印刷データ」と称して、両者を文言上区別して説明する。また、「印刷データ」は、印刷装置での印刷処理に必要な最小単位のデータであるものとする。
はじめに、図1を参照し、本発明の印刷装置10およびパソコン20が接続された印刷システム1について説明する。図1は、印刷システム1を示す模式図である。
図1に示すように、印刷システム1は、印刷装置10とパソコン20とがUSBケーブル11を介して接続された構成を有している。印刷装置10は、印字テープに印刷を行う所謂ラベルプリンタである。パソコン20は、本体22、ディスプレイ21、キーボード23、マウス24等を備えたデスクトップコンピュータである。そしてパソコン20は、印刷装置10に対して印刷処理の実行を指示する、印刷システム1のUSBホストとして位置づけられる。
次に、印刷装置10の電気的構成について、図2を参照して説明する。図2は、印刷装置10の電気的構成を示す模式図である。
図2に示すように、印刷装置10は、装置全体の制御を司るCPU31、制御プログラム等を記憶し、書き換え可能であり、CPU31が制御プログラムを実行する場合において発生する一時的なデータ等が記憶される揮発性記憶素子であるSRAM33、電源を切ってもデータが消えない不揮発性記憶素子であるFlashROM34、および、印刷装置10のパラメータ情報や履歴情報等が記憶される不揮発性記憶素子であるEEPROM35を備えている。そして、CPU31によりSRAM33、FlashROM34、およびEEPROM35に記憶されている情報が参照可能となるように、双方間はバスを介して接続している。
また、印刷装置10は、入出力インターフェース36を備えている。入出力インターフェース36は、CPU31と、CPU31に接続される各種デバイス(操作キー37、ディスプレイコントローラ(LCDC)38、駆動回路43、駆動回路44、USBコントローラ42)との間に挿入される。そして、入出力信号間の電圧変換処理、インピーダンス変換処理、タイミング調整処理等を行うことにより、CPU31から各種デバイスに対して出力される信号を各種デバイスにて認識可能となると共に、各種デバイスよりCPU31に対して送信される信号をCPU31にて認識可能となる。
また、印刷装置10は、操作キー37を備えている。操作キー37は、ユーザの操作により、印刷装置10に対して所望する様々な動作を起こさせるために設けられている。そして、ユーザにより操作キー37を操作された場合における操作内容をCPU31にて認識することが可能となるように、操作キー37と入出力インターフェース36とは電気的に接続している。
また、印刷装置10は、ディスプレイコントローラ(以下、「LCDC38」という。)、および液晶ディスプレイ(以下、「LCD39」という。)を備えている。LCDC38は、表示データを記憶する表示用RAM(図示外)を備えており、LCD39を制御して表示データを表示させるために、LCD39と電気的に接続している。また、LCDC38は、CPU31より制御可能となるように、入出力インターフェース36と電気的に接続している。
また、印刷装置10は、サーマルヘッド40と、サーマルヘッド40を制御可能な駆動回路43とを備えている。サーマルヘッド40は、インクリボン(図示外)に熱を加えることにより印字テープにインクを転写することが可能なデバイスである。駆動回路43は、サーマルヘッド40を制御して印字テープに印刷させることが可能となるように、サーマルヘッド40と電気的に接続している。駆動回路43は、CPU31より制御可能となるように、入出力インターフェース36と電気的に接続している。
また、印刷装置10は、テープ送りローラ41と、テープ送りローラ41を制御可能な駆動回路44とを備えている。テープ送りローラ41は、サーマルヘッド40によるインク転写時において印字テープを送出するために設けられている。駆動回路44は、サーマルヘッド40による印字テープへの印字時に、テープ送りローラ41を制御して印字テープを送出させることが可能となるように、テープ送りローラ41と電気的に接続している。駆動回路44は、CPU31により制御可能となるように、入出力インターフェース36と電気的に接続している。
また、印刷装置10は、USBコントローラ42を備えている。USBコントローラ42は、パソコン20とUSBケーブル11を介して接続した状態で、パソコン20と通信を行うことが可能となるように、電圧変換処理およびインピーダンス変換処理を行うためのコントローラデバイスである。そして、USBケーブル11を介してパソコン20から受信した信号をCPU31にて認識可能とするために、または、CPU31により送信された信号をUSBケーブル11を介してパソコン20に送信することが可能となるように、USBコントローラ42と入出力インターフェース36とは電気的に接続している。
次に、印刷装置10が備える記憶素子であるFlashROM34およびSRAM33の各記憶領域について、図3および図4を参照して説明する。図3は、FlashROM34の記憶領域を示す模式図である。図4は、SRAM33の記憶領域を示す模式図である。
図3を参照し、FlashROM34の記憶領域について説明する。FlashROM34には、制御プログラム領域51が設けられている。制御プログラム領域51には、CPU31が各種デバイスを制御して処理を実行する場合に駆動する制御プログラムが記憶されている。制御プログラムは、CPU31が各種処理を実行する場合において、CPU31より読み出される。また、制御プログラム領域51には、アプリケーションプログラム領域52、USBデバイスドライバ領域53およびその他の領域が設けられている。
アプリケーションプログラム領域52には、CPU31が実行する制御プログラムのうち、上位レベルの制御プログラム(ファイル操作(書き込みや読み出し等)、ファイルの内容に基づく判断、各種ドライバプログラムへの命令等)が記憶されている。このような上位レベルの制御プログラムには、印刷装置10の動作全般を司るメインプログラムも含まれる。
USBデバイスドライバ領域53には、USBケーブル11を介した通信のプロトコル制御を実行するUSBデバイスドライバ57が記憶されている。具体的には、USBデバイスドライバ57として、プリンタクラスドライバ58とマスストレージクラスドライバ59とが記憶されている。印刷装置10がUSBケーブル11を介してパソコン20と通信を行う場合、必要に応じていずれかのUSBデバイスドライバ57がCPU31より読み出されて使用される。
CPU31により、USBデバイスドライバ57としてプリンタクラスドライバ58が使用される場合には、印刷装置10はパソコン20により印刷デバイスとして認識される。これにより、従来の一般的な印刷装置の使用方法と同様に、パソコン20から印刷装置10に対して印刷データを送信することによって、印刷装置10にて印字テープに印刷を行うことが可能となる。以下、印刷デバイスとして認識されるような駆動状態を「印刷デバイス状態」という。
CPU31により、USBデバイスドライバ57としてマスストレージクラスドライバ59が使用される場合には、印刷装置10はパソコン20により記憶デバイスとして認識される。これにより、印刷装置10内の特定の記憶領域(後述するディスク領域90およびディスク領域101)がパソコン20の記憶領域として使用可能となる。以下、記憶デバイスとして認識されるような駆動状態を「記憶デバイス状態」という。
また、FlashROM34には、ディスク領域90が設けられている。ディスク領域90は、印刷装置10がパソコン20により記憶デバイスとして認識された状態において、パソコン20の記憶領域として使用可能となるように設定されている。本実施形態では、ディスク領域90上のファイルやディレクトリの管理を行うためのファイルシステムとして、FAT(File Allocation Tables)が採用されている。そのため、ディスク領域90には、MBR領域91、BPB領域92、FAT領域93、RDE領域94およびDATA領域95が設けられている。
MBR(Master Boot Record)領域91には、ディスク領域90における各パーティションのファイルシステムタイプ(本実施形態ではFAT12)、および、BPB領域92の先頭セクタが記憶されている。
BPB(BIOS Parameter Block)領域92には、FAT構成情報として、最小記録単位(物理フォーマット)である1セクタのバイト数(本実施形態では512バイト)や、実際のファイルの読み書き単位である1クラスタのセクタ数(本実施形態では1セクタ)などの物理的な属性が記憶される。
FAT領域93には、DATA領域95にそれぞれ分散配置されている複数のデータの並び(すなわち、ファイルのデータ位置(クラスタ))を管理するテーブルであり、FATを構成する各セクタに次のクラスタ情報をそれぞれ記録することで連続したデータ領域を示す構造を有する。なお、FAT領域93は、同じ内容を持つ2つのFATを備えており、FATを二重化することで信頼性の向上を図っている。
RDE(Root Derectory Entry)領域94には、ディスク領域90に記憶されているファイルの属性情報であるファイル情報データ(ファイル名、最初のクラスタ位置、更新日時、ファイルサイズ等)が記憶されている。なお、RDE領域94に記憶されるファイル情報データの大きさは、1ファイルあたり32バイトである。
DATA領域95は、各種ファイルの実データがクラスタ単位で記憶される領域である。本実施形態では、DATA領域95に、編集プログラム実行ファイル領域96、ステータスファイル領域97、印刷ファイル領域98およびブランクファイル領域99が設けられている。編集プログラム実行ファイル領域96は、印刷ファイルを編集するためのプログラムの実行ファイル(以下、編集プログラム実行ファイルと称する。)を記憶する領域である。ステータスファイル領域97は、印刷装置10に関するステータス(例えば、機種コード、国別コード、エラー情報、メディア情報など)を示す各種データを含むステータスファイルを記憶する領域である。印刷ファイル領域98は、一まとまりの印刷データや印刷開始コマンドデータを含んだ印刷ファイルを記憶する領域である。ただし、FlashROM34のステータスファイル領域97および印刷ファイル領域98に記憶されているステータスファイルおよび印刷ファイルは、後述するようにSRAM33にコピーされてステータスファイル領域105および印刷ファイル領域106(図4参照)の記憶領域を確保するためのダミーファイルである。
ここで、ステータスファイルには、パソコン20にてステータスファイルの更新の有無を判別するためのデータ(以下、ステータス更新データと称する。)が含まれている。「ステータス更新データ」は、ステータスファイルが更新されると、ステータスファイルのデータ内容が変化するか否かに関係なく更新される情報である。本実施形態では、「ステータス更新データ」が、ステータスファイルが更新された時刻を示す時間情報(具体的には、内部タイマ(図示外)により設定されるシステムタイマ値)であるものとする。
なお、DATA領域95において、上記ファイル領域96、97、98以外の領域は、無意味なデータ列(例えば、0)で構成されたブランクファイルが隙間なく記憶されるブランクファイル領域である。そのため、ファイルシステムでは、DATA領域95に他のファイルを記憶可能な空き領域が存在しないように認識される。
次に、図4を参照し、SRAM33の記憶領域について説明する。SRAM33には、ディスク領域101およびローカル領域107が設けられている。ディスク領域101は、FlashROM34から読み出された各種データを一時的に記憶するための領域である。ローカル領域107は、CPU31にて各種処理が実行される場合において必要となる情報を記憶するための領域である。
ディスク領域101は、FAT領域102、RDE領域103およびDATA領域104を有している。ここで、印刷装置10の電源がON状態に操作されると、後述する初期化処理(図7のS11参照)において、CPU31はファイルシステムの一部をSRAM33に展開する。このとき、FlashROM34のFAT領域93、RDE領域94およびDATA領域95がコピーされて、SRAM33のFAT領域102、RDE領域103およびDATA領域104が形成される。なお、SRAM33のDATA領域104には、FlashROM34のDATA領域95のうちでステータスファイル領域97および印刷ファイル領域98がコピーされて、ステータスファイル領域105および印刷ファイル領域106が形成される。
つまり、印刷装置10の電源がON状態に操作されると、FlashROM34のディスク領域90のうちで、SRAM33の一部領域がUSBマスストレージとして動作するために最低限必要な領域(つまり、FAT領域93、RDE領域94、ステータスファイル領域97および印刷ファイル領域98)のみが、SRAM33のディスク領域101として展開される。これにより、SRAM33のディスク領域101も、ディスク領域90と同様に、印刷装置10がパソコン20により記憶デバイスとして認識された状態において、パソコン20の記憶領域として使用可能となるように設定される。
その結果、本実施形態の印刷装置10では、FlashROM34のディスク領域90の代わりにSRAM33のディスク領域101が、USBマスストレージとして動作することになる。つまり、FlashROM34のディスク領域90はデータ読み取り専用であって、実際にデータの読み書きが発生するのはSRAM33のディスク領域101のみである。
ここで、USBマスストレージ(つまり、各ディスク領域90、101)のファイルシステムの管理主体は、USBホスト(つまり、パソコン20)である。そして、本実施形態では、制御プログラム領域51に記憶されているファームウエアの制御によって、物理的に分離されたFlashROM34およびSRAM33が、パソコン20側で連続したメモリ空間として認識される。そのうえで、パソコン20側でファイルシステムにアクセスするときは、SRAM33のディスク領域101(詳細には、FAT領域102、RDE領域103、ステータスファイル領域105および印刷ファイル領域106)に対してデータ操作を行う。
このように、USBマスストレージとして最低限必要な領域のみをFlashROM34からSRAM33に展開してSRAM33上でファイル操作を行うようにした理由は、SRAMはFlashROMとは異なり書き込み回数に制限がなく、かつ、SRAMのほうがFlashROMよりも書き込み時間が早いためである。また、SRAM33にはUSBマスストレージとして最低限必要な領域のみが展開されるため、FAT構造全体をコピーするよりもSRAM33のデータ容量が小さくて済み、印刷装置10の製品コストを抑制することができる。なお、本実施形態では、FlashROM34のデータ容量が4メガバイトであるのに対し、SRAM33のデータ容量は128キロバイトである。
一方、SRAM33のローカル領域107は、印刷バッファ領域108、フラグ領域109、リングバッファ領域110、受信バッファ領域111などを有している。印刷バッファ領域108は、印字テープの印字時に使用される印刷データが一時的に記憶される領域である。フラグ領域109は、各種のフラグ情報を記憶する領域である。リングバッファ領域110は、印刷装置10がパソコン20により印刷デバイスとして認識されている状態において、パソコン20から受信する各種データが記憶される領域である。受信バッファ領域111は、印刷装置10がパソコン20により記憶デバイスとして認識されている状態において、パソコン20から受信する各種データが記憶される領域である。
ところで、本実施形態では印刷装置10のメモリ(SRAM33およびFlashROM34)を管理するファイルシステムとしてFATを採用しているため、1セクタのバイト数や1クラスタのセクタ数などが規定されている。また、各記憶領域90〜99、101〜106は、その記憶容量(セクタサイズ)および記憶位置(クラスタ位置)があらかじめ規定されている。さらに、印刷ファイル領域98、106には、一つの固定長の印刷ファイルのみが記憶されている。
このようなデータ構造によって、SRAM33にて印刷ファイル領域106にてファイル操作が行われる場合、印刷ファイルのデータ書き込み位置またはデータ読み出し位置が常に同じ(すなわち、特定クラスタの先頭セクタ)となる。ステータスファイル領域105についても同様に、一つのステータスファイルのみが記憶されて、ステータスファイルのデータ書き込み位置またはデータ読み出し位置が常に同じである。また、本実施形態では、ステータスファイルは1ファイルあたり512バイト(1セクタ)の固定長データであり、印刷ファイルは1ファイルあたり32キロバイト(40セクタ)の固定長データである。
次に、印刷装置10のCPU31がパソコン20と通信を行う場合における、印刷装置10内のデータの流れについて、図5を参照して説明する。図5は、印刷装置10〜パソコン20間で送受されるデータの流れを示す内部ブロック図である。
図5に示すように、FlashROM34には、先述のように、制御プログラムとしてアプリケーションプログラム54(例えば、メインプログラム)とUSBデバイスドライバ57(ここでは、プリンタクラスドライバ58とマスストレージクラスドライバ59)とを備えている。USBデバイスドライバ57は、実際にUSBコントローラ42を制御してパソコン20とUSBケーブル11を介した通信を実行する場合において、事前にCPU31により読み出されて使用されるプログラムである。
そして、CPU31がUSBデバイスドライバ57としてマスストレージクラスドライバ59を選択した場合には、パソコン20は印刷装置10を記憶デバイスとして認識する。これにより、パソコン20が印刷装置10とUSBケーブル11を介して接続した状態で、ディスク領域90、101をパソコン20の記憶領域として使用可能となる。また、CPU31がUSBデバイスドライバ57としてプリンタクラスドライバ58を選択した場合には、パソコン20は印刷装置10を印刷デバイスとして認識する。これにより、パソコン20が印刷装置10とUSBケーブル11を介して接続した状態で、パソコン20より印刷装置10に対して印刷データを転送し印刷指示を行うことによって、印刷装置10に印刷処理を実行させることが可能な状態となる。
次いで、USBコントローラ42について説明する。USBコントローラ42は、エンドポイント(EP)を使用してUSBケーブル11を介したパケットの送受信を実行する。EPとは、FIFO構造を有する送受信用バッファである。そして、送信用に割り当てられた送信用EP(バッファサイズ64バイトのEP1)にデータが記憶された場合に、USBコントローラ42は記憶されたデータをパケット化してUSBケーブル11に対して送信可能となる。一方、USBコントローラ42がUSBケーブル11を介してパケットを受信した場合には、パケット中のデータは受信用に割り当てられた受信用EP(バッファサイズ64バイトのEP2)に記憶される。従って、CPU31は、送信用EPに送信データを記憶することにより、パソコン20に対してパケットを送信することが可能となる。また、CPU31は、受信用EPに記憶されたデータを読み出すことにより、パソコン20からのパケットを認識することが可能となる。
次いで、USBコントローラ42のパケット通信時における動作について概説する。USBコントローラ42とCPU31との間には、USBコントローラ42の状態をCPU31に通知するための制御信号として、バルクIN転送要求線62と、バルクOUT転送要求線63とが少なくとも設けられている。ここで、バルクIN転送要求線62は、送信用EPにデータが記憶された場合に、USBコントローラ42が電位を変位させる。CPU31は、バルクIN転送要求線62の電位が変位したことを検出した場合に、USBコントローラ42がパソコン20に対してパケットを送信可能な状態であると判断する。そして、CPU31は、パソコン20に対してパケットを送信することが可能なタイミングでUSBコントローラ42を制御し、送信用EPに記憶されているデータをパケット化させてパソコン20に送信させる。
一方、バルクOUT転送要求線63は、受信用EPにデータが記憶された場合に、USBコントローラ42が電位を変位させる。USBケーブル11を介してUSBコントローラ42が受信したパケットのデータは受信用EPに自動的に格納されるので、CPU31は、バルクOUT転送要求線63の電位が変位したことを検出した場合に、USBコントローラ42がパソコン20よりパケットを受信したと判断する。そして、CPU31は、USBコントローラ42を制御し、受信用EPに記憶されているデータを読み出してSRAM33に記憶する。
以上概説した処理を実行することにより、CPU31は、USBケーブル11を介して接続された状態におけるパソコン20に対するパケット送信処理、および、パソコン20からのパケット受信処理を実行する。
次に、印刷装置10〜パソコン20間で実行される通信シーケンスについて、図6を参照して説明する。図6は、印刷装置10〜パソコン20間の通信シーケンスを示す模式図である。
図6に示すように、はじめに、印刷装置10とパソコン20とがUSBケーブル11を介して接続される(81)。この状態では、印刷装置10の電源スイッチがON状態となっていないので、パソコン20は印刷装置10を認識できておらず、印刷装置10〜パソコン20との間で通信はなされていない。
次いで、印刷装置10の電源スイッチがON状態とされる(70)。本実施形態では、印刷装置10は電源スイッチがONとされた直後は、USBデバイスドライバ57としてマスストレージクラスドライバ59を選択して読み込む。これにより、印刷装置10はパソコン20により記憶デバイスとして認識される状態、すなわち「記憶デバイス状態」となる。また、印刷装置10は電源スイッチがONされるのと同時に、USBケーブル11の信号線のうちD+信号をプルアップする。そして、パソコン20にてD+信号のプルアップ状態が検出された場合に、パソコン20は印刷装置10がUSBケーブル11を介して接続されたと判断する。
パソコン20にて印刷装置10が接続されたと判断された場合、次いで、印刷装置10〜パソコン20間でプラグアンドプレイ通信(PnP通信)が実行される(82)。PnP通信では、USBホストとして機能するパソコン20が、ターゲットとなるUSBデバイスとして機能する印刷装置10の駆動状態を把握するためのパケット通信が実行される。この場合、USBコントローラ42にてコントロール転送用に割り当てられた制御用EP(バッファサイズが8バイトのEP0)が使用され、パケットの送受信が実行される。そしてPnP通信により、パソコン20は、接続された印刷装置10の駆動状態が「記憶デバイス状態」となっており、SRAM33およびFlashROM34の各ディスク領域90、101がパソコン20の記憶領域として使用可能な状態であることを認識する。
PnP通信(82)が終了した以後は、各ディスク領域90、101のファイルがパソコン20によって参照される度に、参照されるデータを含むパケットが印刷装置10からパソコン20に対して転送される(83)。また、パソコン20によって各ディスク領域90、101にファイルが記憶される場合に、記憶されるファイルを構成するデータを含むパケットがパソコン20から印刷装置10に対して転送される(84)。
ここで、印刷装置10が「記憶デバイス状態」となっている場合において、パソコン20により印刷装置10に対して印刷処理を実行させる具体例について、図6を参照しつつ説明する。はじめに、パソコン20を操作するユーザにより、FlashROM34のディスク領域90に記憶されている編集プログラム実行ファイルが選択される。すると、編集プログラム実行ファイルが印刷装置10からパソコン20に対して転送される(83)。そして、パソコン20の記憶領域(図示外)に、この転送された編集プログラム実行ファイルが記憶される。これにより、パソコン20のユーザが編集プログラム実行ファイルを使用可能となるので、ユーザは編集プログラム実行ファイルを使用して任意の印刷ファイルを作成する。
印刷ファイルの作成が終了すると、ユーザはパソコン20で作成済みの印刷ファイルを印刷装置10のメモリ上に保存することを指示する。すると、この印刷ファイルが、パソコン20から印刷装置10に対して転送され(84)、SRAM33の印刷ファイル領域106に書き込まれる。そして、印刷装置10は、印刷ファイル領域106に格納されている印刷ファイルに含まれる各データに基づいて印刷処理を実行する。
次いで、印刷装置10の駆動状態が切り替えられる場合について説明する。印刷装置10が「記憶デバイス状態」にて駆動している状態で、ユーザによる操作キー37の操作、または、パソコン20のキーボード23やマウス24などの操作により、印刷装置10の駆動状態の切り替え指示が入力される(71)。すると、パソコン20は、印刷装置10に対して駆動状態を切り替える旨の情報である駆動状態情報を送信する(85)。
駆動状態情報を受信した印刷装置10は、CPU31が使用するUSBデバイスドライバ57をマスストレージクラスドライバ59からプリンタクラスドライバ58に切り替えて、USBの切断・再接続処理を行う(86)。すなわち、まず一旦パソコン20との接続状態を解除するために、USBケーブル11の信号線のうちD+信号のプルアップ状態をクリアし、ハイインピーダンス状態とする。そして、パソコン20にてD+信号のプルアップ状態のクリアが検出された場合に、パソコン20は印刷装置10との接続状態が解除されたものと判断する。
そして、印刷装置10は、USBデバイスドライバ57としてプリンタクラスドライバ58を選択して読み込む。これにより、印刷装置10はパソコン20により印刷デバイスとして認識される状態、すなわち「印刷デバイス状態」となる。そして再度、USBケーブル11の信号線のうちD+信号をプルアップ状態とする。そして、パソコン20にてD+信号のプルアップ状態が検出された場合に、パソコン20は印刷装置10がUSBケーブル11を介して再接続されたと判断する。
パソコン20にて印刷装置が再接続されたことを検出した場合、次いで、印刷装置10〜パソコン20間でPnP通信が実行される(87)。PnP通信では、電源スイッチON時のPnP通信(82)と同様に、USBホストとして機能するパソコン20が、ターゲットとなるUSBデバイスとして機能する印刷装置10の駆動状態を把握するためのパケット通信が実行される。そして、パソコン20は、駆動状態が「印刷デバイス状態」となっており、印刷データを転送することにより印字テープへの印刷処理が実行可能な状態であることを認識する。
PnP通信(87)が終了した後、パソコン20から印刷装置10に対して印刷処理を実行させるために印刷データを送信する度に、印刷データを含むパケットがパソコン20から印刷装置10に対して転送される(88)。
ここで、印刷装置10が「印刷デバイス状態」となっている場合において、パソコン20により印刷装置10に対して印刷処理を実行させる具体例について、図6を参照しつつ説明する。はじめに、パソコン20にて印刷データの作成処理が実行される。ここでは、ユーザにより、予めパソコン20にインストールされている編集プログラムが操作され、印刷データの作成作業が実行される。
ユーザによる印刷データの作成が終了すると、この作成済みの印刷データはパソコン20の記憶領域(図示外)に記憶される。そして、ユーザの操作に応じてパソコン20から印刷装置10に対して印刷データの印刷指示がなされると、この印刷データがパソコン20から印刷装置10に転送される。さらに、印刷装置10に印刷動作を開始させるための印刷開始コマンドデータが、パソコン20から印刷装置10に転送される。印刷装置10では、パソコン20から転送された印刷データに基づき、印刷開始コマンドデータによる指示に従って印刷処理を実行する。
次いで、印刷装置10のCPU31が実行する処理について、図7〜図14を参照して説明する。図7は、メイン処理のフローチャートである。図8は、モード切替処理のフローチャートである。図9は、プリンタ処理のフローチャートである。図10は、マスストレージ処理のフローチャートである。図11は、バルク受信処理のフローチャートである。図12は、コマンド処理のフローチャートである。図13は、印刷動作制御処理のフローチャートである。図14は、印刷処理のフローチャートである。
はじめに、図7を参照して、印刷装置10のメイン処理について説明する。図7に示すメイン処理は、印刷装置10の電源スイッチがONとされた場合において、CPU31が 先述のメインプログラムを起動して開始する処理である。
図7に示すように、印刷装置10のメイン処理では、はじめにCPU31が初期化処理を実行する(S11)。初期化処理では、印刷装置10による印刷処理が実行可能となるように、駆動回路43、駆動回路44およびUSBコントローラ42が初期化される。CPU31は、所定の初期化条件に基づいて、駆動回路43および駆動回路44を初期化(例えば、デバイスリセットや初期化設定など)する。これにより、サーマルヘッド40およびテープ送りローラ41を駆動させ、印字テープに印刷を行うことが可能な状態とする。また、CPU31は、先述のようにファイルシステムの一部をFlashROM34からSRAM33に展開する。
さらに、CPU31は、所定の初期化条件に基づいて、USBコントローラ42を初期化(例えば、デバイスリセットや初期化設定)する。これにより、USBコントローラ42が使用可能な状態となる。なお、この状態では、CPU31によるUSBデバイスドライバ57の選択および読み出しの処理はなされていない。
次いで、CPU31は、モード切替処理を実行する(S13)。モード切替処理では、操作キー37の操作により実行された駆動状態の設定操作の内容に基づいて、パソコン20との再接続処理を実行する。印刷装置10は、操作キー37におけるユーザ操作により、駆動状態(記憶デバイス状態または印刷デバイス状態)を任意に設定可能である。CPU31は、ユーザによって設定された駆動状態を判断し、この設定された駆動状態にて駆動するために必要な処理を実行する。なお、印刷装置10に対する駆動状態の設定方法は、上述のような操作キー37からの入力操作に限定されるものではなく、他の方法で駆動状態が設定されても構わない(例えば、パソコン20から駆動状態を設定するなど)。
図8を参照して、モード切替処理(S13)の詳細について説明する。図8に示すように、モード切替処理では、はじめにCPU31が操作キー37を介してユーザにより設定された駆動状態を検出する(S33)。そして、ユーザにより設定された駆動状態が、「記憶デバイス状態」および「印刷デバイス状態」のいずれであるかを判断する。また、CPU31は、現在の駆動状態を判断する(S33)。現在の駆動状態の情報は、SRAM33のフラグ領域109に記憶されている駆動状態フラグに設定されている。CPU31は、この駆動状態フラグを読み出して現在の駆動状態を判断する。
そして、CPU31は、現在の駆動状態と、ユーザにより設定された駆動状態とを比較する(S35)。なお、電源スイッチON直後においては、駆動状態フラグは「設定なし」の状態となっているので、本判定ではユーザにより異なる駆動状態が設定されたものと必ず判断する。
現在の駆動状態と、ユーザにより設定された駆動状態とが同一である場合は(S35:NO)、印刷装置10は既にユーザにより設定された駆動状態にて駆動しており、USBデバイスドライバ57を新たに読み出して変更する必要はない。従って、特段の処理を行うことなく、モード切替処理を終了してメイン処理(図7参照)に戻る。
一方、現在の駆動状態と、ユーザにより設定された駆動状態とが異なる場合には(S35:YES)、CPU31が使用するUSBデバイスドライバ57を変更して駆動状態を変更する必要がある。そこで、CPU31は、SRAM33のフラグ領域109の駆動状態フラグに駆動状態の情報を記憶した後、先述したUSBの切断・再接続処理として、まずD+信号のプルアップ設定を解除し、その後に新たなUSBデバイスドライバ57を稼動した状態でD+信号のプルアップ設定を有効とする。
以上説明した処理を実行することにより、USBの切断・再接続処理が実行される(S37)。これにより、パソコン20は印刷装置10とUSBケーブル11を介して再接続した状態であると認識するので、次いで、印刷装置10の駆動状態を認識して通信を実行可能とするための通信(PnP通信)が実行される。
すなわち、CPU31は、印刷装置10の駆動状態が「印刷デバイス状態」であれば(S41:YES)、USBデバイスドライバ57としてプリンタクラスドライバ58を稼動してPnP通信を実行する(S43)。これにより、USBホストとして機能するパソコン20は、ターゲットである印刷装置10をUSB印刷デバイスとして認識するとともに、印刷装置10〜パソコン20間でプリンタクラスに準拠した通信規約での通信が実行される。
一方、CPU31は、印刷装置10の駆動状態が「記憶デバイス状態」であれば(S41:NO)、USBデバイスドライバ57としてマスストレージクラスドライバ59を稼動してPnP通信を実行する(S45)。これにより、USBホストとして機能するパソコン20は、ターゲットである印刷装置10をUSB記憶デバイスとして認識するとともに、印刷装置10〜パソコン20間でマスストレージクラスに準拠した通信規約での通信が実行される。
図7のメイン処理に戻り、S13のモード切替処理(図8参照)で印刷装置10の駆動状態が確定されると、CPU31は、電源スイッチの状態を監視する(S15)。ユーザにより電源スイッチがOFF状態に操作されたことを検出した場合には(S15:YES)、OFF処理(S17)にて後処理等を行う。
ユーザにより電源スイッチがOFF状態に操作されなかった場合(S15:NO)、CPU31は、SRAM33の駆動状態フラグを参照して既存の駆動状態を判断する(S19)。そして、S19で判断された駆動状態が「印刷デバイス状態」である場合には(S19:YES)、CPU31は「印刷デバイス状態」でのパソコン20との通信処理であるプリンタ処理(S21)を実行する。他方、S19で判断された駆動状態が「記憶デバイス状態」である場合には(S19:NO)、CPU31は「記憶デバイス状態」でのパソコン20との通信処理であるマスストレージ処理(S23)を実行する。
ここで、図9を参照して、プリンタ処理(S21)の詳細について説明する。図9に示すように、プリンタ処理では、はじめにCPU31がUSBコントローラ42からのバルクOUT転送要求線63の状態を監視し、バルクOUT転送要求があったかどうかを判断する(S51)。バルクOUT転送要求線63における電位の変位を検出した場合(S51:YES)、CPU31はUSBコントローラ42がパソコン20からパケットを受信したと判断し、受信用EPに格納されたパケットのデータを読み出す。そして、SRAM33のリングバッファ領域110にパケットから読み出した受信データを記憶するリングバッファ処理を行う(S57)。その後、プリンタ処理を終了してメイン処理(図7参照)に戻る。
一方、バルクOUT転送要求線63の電位が変位しない場合には(S51:NO)、CPU31はUSBコントローラ42がパケットを受信していないと判断する。次いで、CPU31は、USBコントローラ42からのバルクIN転送要求線62の状態を監視し、バルクIN転送要求があったかどうかを判断する(S53)。バルクIN転送要求線62における電位の変位を検出した場合(S53:YES)、CPU31は印刷時のエラー情報などを含むステータスデータをパソコン20に送信するためのステータスバッファ処理を行う(S55)。
S55のステータスバッファ処理では、CPU31がSRAM33に設けられたステータスバッファ(図示外)からステータスデータを取り出してUSBコントローラ42の送信用EPに格納する。そして、USBコントローラ42を制御して、送信用EPに格納されているステータスデータをパケット化させてパソコン20に送信させる。その後、プリンタ処理を終了してメイン処理(図7参照)に戻る。なお、バルクIN転送要求を検出しなかった場合も(S53:NO)、メイン処理(図7参照)に戻る。
次に、図10を参照して、マスストレージ処理(S23)の詳細について説明する。図10に示すように、マスストレージ処理では、はじめにCPU31が先述のS51と同様に、バルクOUT転送要求があったかどうかを判断する(S61)。バルクOUT転送要求があったと判断される場合(S61:YES)、CPU31はUSBコントローラ42がパソコン20からパケットを受信したと判断して、受信用EPに格納されたパケットのデータをSRAM33の受信バッファ領域111に読み出してバルク受信処理を行う(S63)。バルク受信処理は、USBホスト(ここでは、パソコン20)が送り出したデータを受信する処理であって、各種コマンドを受信するコマンドトランスポート処理、および、ファイルの実データを受信するデータトランスポート処理を含む。
ここで、図11を参照して、バルク受信処理(S63)の詳細について説明する。図11に示すように、バルク受信処理では、はじめにCPU31が受信バッファ領域111に記憶された受信データを解析して、パソコン20から印刷装置10に対するファイルの書き込み要求コマンド(Writeコマンド)を受信したか否かを判断する(S81)。Writeコマンドを受信したと判断した場合(S81:YES)、CPU31は、受信用EPに格納されたパケットのデータをSRAM33の受信バッファ領域111に読み出して、ディスク領域101の各セクタに書き込むべき実データ(セクタデータ)を受信するセクタデータ受信処理を行う(S87)。
なお、本実施形態では、S87のセクタデータ受信処理において、CPU31が、パソコン20から印刷装置10に転送される印刷ファイルを受信して、受信バッファ領域111に格納されている各セクタデータ(印刷データおよび印刷開始コマンドデータ)を、印刷ファイル領域106の各セクタに順次書き込む。そして、CPU31は、印刷ファイル領域106に記憶された印刷ファイルを構成する各セクタデータを、SRAM33のリングバッファ領域110に記憶させるリングバッファ処理を行うものとする。
また、パソコン20から印刷装置10に転送される印刷ファイルには、パソコン20にて実行される編集プログラム実行ファイルによって、後述するステータスリクエストコマンドが書き込まれている。そのため、S87のセクタデータ受信処理では、印刷ファイルに書き込まれているステータスリクエストコマンドも、受信用EPから受信バッファ領域111に読み出されて印刷ファイル領域106に書き込まれたのちに、リングバッファ処理によってリングバッファ領域110に記憶される。
S87のセクタデータ受信処理にて印刷ファイルを構成する全てのセクタデータを受信用EPから読み出すと、CPU31は、USBコントローラ42の送信用EPに応答信号としてCSW(Command Status Wrapper)を格納する(S89)。パソコン20では、印刷装置10から送信されたCSWを受信して、CSWに基づいてセクタデータの受信完了を判断する。
一方、Writeコマンドを受信していない場合(S81:YES)、CPU31は、パソコン20から印刷装置10に対するファイルの読み出し要求コマンド(Readコマンド)を受信したか否かを判断する(S91)。Readコマンドを受信したと判断した場合(S91:YES)、CPU31は、ディスク領域101から対象ファイルを読み出して送信用EPに格納することで、対象ファイルの実データ(セクタデータ)を送信するセクタデータ送信処理を行う(S93)。
本実施形態では、パソコン20で先述の編集プログラム実行ファイルが起動されると、パソコン20(詳細には、編集プログラム実行ファイルを実行するCPU)が、ステータスファイルを要求するReadコマンドを印刷装置10に送信する。すると、CPU31が、S93でステータスファイル領域105からステータスファイルを読み出して送信用EPに格納する。これにより、印刷装置10からパソコン20にステータスファイルが読み込まれて、パソコン20にて印刷装置10の最新ステータスを認識することができる。なお、上記のステータスファイルを要求するReadコマンドは、印刷装置10に印刷動作の開始指示を行う前や、印刷装置10で印刷動作が終了したかを確認するときにも、パソコン20から印刷装置10に送信される。
S93のセクタデータ送信処理にてステータスファイルを構成する全てのセクタデータを送信用EPに格納すると、CPU31は、USBコントローラ42の送信用EPに応答信号としてCSW(Command Status Wrapper)を格納する(S89)。パソコン20では、印刷装置10から送信されたCSWを受信して、CSWに基づいてセクタデータの送信完了を判断する。
一方、Readコマンドを受信していない場合(S91:NO)、CPU31はパソコン20から印刷装置10に対するその他のコマンドを受信したか否かを判断する(S97)。その他のコマンドを受信したと判断した場合(S97:NO)、CPU31はその受信したコマンドに応じた処理を実行する(S99)。その後、バルク受信処理を終了してマスストレージ処理(図10参照)に戻る。また、その他のコマンドを受信していない場合も(S97:NO)、マスストレージ処理(図10参照)に戻る。
図10のマスストレージ処理に戻り、バルクOUT転送要求がないと判断される場合(S61:NO)、CPU31はUSBコントローラ42がパケットを受信していないと判断する。次いで、CPU31は先述のS53と同様に、バルクIN転送要求があったかどうかを判断する(S65)。バルクIN転送要求があったと判断される場合(S65:YES)、CPU31は、USBコントローラ42を制御して、送信用EPに格納されているデータをパケット化させてパソコン20に送信させるバルク送信処理を行う(S67)。バルク送信処理は、USBホスト(ここでは、パソコン20)にデータを送信する処理であって、ステータスファイルを送信するステータストランスポート処理、および、ファイルの実データを送信するデータトランスポート処理を含む。そのため、先述のセクタデータ送信処理(S93)で送信用EPに格納されたセクタデータ(つまり、ステータスファイル)は、S67のバルク送信処理で印刷装置10からパソコン20に転送される。
バルク受信処理(S63)およびバルク送信処理(S67)のいずれかがなされたのちは、または、バルクIN転送要求がないと判断した場合(S91:YES)、CPU31は、マスストレージ処理を終了してメイン処理(図7参照)に戻る。
図7のメイン処理に戻り、S21のプリンタ処理(図9参照)またはS23のマスストレージ処理(図10参照)が終了したのちは、これらのプリンタ処理またはマスストレージ処理においてパソコン20からデータを受信しているか否かが判断される。
すなわち、「印刷デバイス状態」にてパソコン20から受信するデータは、印刷データまたは印刷開始コマンドデータであり、これらのデータを受信した場合、CPU31は印刷処理を実行する必要がある。S21のプリンタ処理で受信したデータは、S57においてSRAM33のリングバッファ領域110に記憶されるので(図9参照)、CPU31はリングバッファ領域110に記憶されているデータを参照する(S25)。そして、リングバッファ領域110にデータが記憶されていると判断した場合には(S25:YES)、CPU31は、リングバッファ領域110に記憶されているデータに基づいて後述のコマンド処理を実行する(S27)。
また、「記憶デバイス状態」にてパソコン20から印刷ファイルを受信した場合も、CPU31は印刷処理を実行する必要がある。S23のマスストレージ処理で受信した印刷ファイルを構成する各セクタデータ(印刷データ、印刷開始コマンドデータおよびステータスリクエストコマンド)は、S87においてSRAM33のリングバッファ領域110に記憶される(図11参照)。そこで、CPU31は、リングバッファ領域110を参照してデータが記憶されている場合には、上記と同様に後述のコマンド処理を実行する(S25、S27)。なお、リングバッファ領域110にデータが記憶されていないと判断した場合には(S25:NO)、S13の処理に戻る。
次に、図12を参照して、コマンド処理(S27)の詳細について説明する。図12に示すように、コマンド処理では、はじめにCPU31が、SRAM33のリングバッファ領域110に印刷データが記憶されているか(言い換えると、パソコン20から印刷データを受信したかどうか)を判断する(S111)。印刷データを受信していると判断した場合(S111:YES)、CPU31は、パソコン20から受信した印刷データに基づいて印刷処理を実行可能とするために、印刷バッファ領域108に印刷データの一部を記憶する印刷イメージ処理を実行する(S113)。
なお、S113の印刷イメージ処理では、印刷データがラスタ形式である場合、1回の走査により印刷可能な印刷データを抽出して印刷バッファに記憶する。また、印刷データがESC/P形式である場合、キャラクタコードの文字データを文字発生し、印刷バッファ領域内の所定位置に記憶する。これにより、続いてパソコン20から印刷開始コマンドデータを受信した場合に、印刷バッファ領域に記憶した印刷データに基づいて印刷することが可能な状態となる。そして、コマンド処理を終了して、メイン処理(図7参照)に戻る。
リングバッファ領域110に記憶されている受信データが印刷データではないと判断した場合(S111:NO)、CPU31は受信データが印刷開始コマンドデータであるか否かを判断する(S115)。そして、受信データが印刷開始コマンドデータであると判断した場合には(S115:YES)、CPU31は、S113にて印刷バッファ領域108に記憶された印刷データに基づいて印刷処理を行う印刷動作制御処理を実行する(S117)。
ここで、図13を参照して、印刷動作制御処理(S117)の詳細について説明する。図13に示すように、印刷動作制御処理では、はじめにCPU31が供給されている電源電圧が所定の範囲内であるかどうかを判断する(S131)。供給電源電圧が所定範囲外であると判断した場合(S131:NO)、CPU31は、供給電源電圧が異常であり駆動回路43、駆動回路44、サーマルヘッド40、テープ送りローラ41等が駆動不能であると判断して、S141のエラー処理を実行する。
供給されている電源電圧が所定の範囲内であると判断した場合(S131:YES)、CPU31は電池の充電容量が所定の範囲内であるかどうかを判断する(S133)。電池充電容量が所定範囲外であると判断した場合(S93:NO)、CPU31は、電池の充電容量が異常であると判断して、S141のエラー処理を実行する。
電池の充電容量が所定の範囲内であると判断した場合(S133:YES)、CPU31は印刷装置10およびサーマルヘッド40の温度が所定の範囲内であるかどうかを判断する(S135)。温度が所定の範囲外であると判断した場合(S135:NO)、CPU31は、温度が異常でありサーマルヘッド40等が駆動不能であると判断して、S141のエラー処理を実行する。
印刷装置10およびサーマルヘッド40の温度が所定の範囲内であると判断した場合(S135:YES)、CPU31は印字テープのテープカセットが収容されているかどうかを判断する(S137)。テープカセットが収容されていないと判断した場合(S137:NO)、CPU31は印刷すべき印字テープが存在しないと判断して、S141のエラー処理を実行する。
S141のエラー処理では、例えば、印刷装置10に付随したLED(図示外)を点灯させたり、パソコン20に対して通知を行って、ディスプレイ21に異常状態が発生して印刷不可能である旨を表示させたりする。なお、印刷装置10が「記憶デバイス状態」である場合、S141のエラー処理において、CPU31は、ステータスファイル領域105に記憶されているステータスファイルを印刷装置10の最新状態に応じて更新するとともに、先述と同様にステータス更新データ(つまり、システムタイマ値)を更新する。そして、印刷動作制御処理を終了し、コマンド処理(図12参照)に戻る。
一方、テープカセットが収容されていると判断した場合(S137:YES)、CPU31は印刷処理を行うために必要な条件を満たしているものと判断して、S139の印刷処理を実行する(S139)。そして、印刷動作制御処理を終了し、コマンド処理(図12参照)に戻る。
ここで、図14を参照して、印刷処理(S139)の詳細について説明する。図14に示すように、印刷処理では、はじめにCPU31が、駆動回路43および駆動回路44の駆動制御を開始するモータ駆動処理(S151)を実行する。そして、CPU31は、印刷装置10にてエラーが発生したか否かを判断する(S153)。なお、印刷処理において発生するエラーとは、例えばサーマルヘッド40やテープ送りローラ41に不具合が発生した場合や、印字テープを切断するためのカッター(図示外)が初期位置(原点位置)にない場合などである。
印刷装置10にてエラーが発生していないと判断した場合(S153:NO)、CPU31は、S113(図12参照)にて印刷バッファ領域108に記憶された印刷データに基づいて、印字テープへの印字を実行する(S155)。そして、CPU31は、印刷バッファ領域108に記憶されている全ての印刷データについて印字したか否かを判断する(S157)。印字処理を行っていない印刷データが存在する場合(S157:NO)、全ての印刷データについて印字処理が完了するまでS153〜S157を繰り返す。
全ての印刷データについて印字処理が完了したと判断すると(S157:YES)、CPU31は、駆動回路43および駆動回路44の駆動制御を終了して(S159)、印刷動作の後処理である印刷完了処理を実行する(S161)。なお、印刷装置10が「記憶デバイス状態」である場合、S161の印刷完了処理において、CPU31は、ステータスファイル領域105に記憶されているステータスファイルを印刷装置10の最新状態に応じて更新するとともに、先述と同様にステータス更新データ(つまり、システムタイマ値)を更新する。その後、印刷処理(S139)を終了して、印刷動作制御処理(図13参照)に戻る。
一方、印刷装置10にてエラーが発生したと判断した場合(S153:YES)、CPU31は、駆動回路43および駆動回路44の駆動制御を終了して(S163)、所定のエラー処理を行う(S165)。なお、印刷装置10が「記憶デバイス状態」である場合、S165のエラー処理では、S141と同様に、エラー発生の報知や、ステータスファイルの更新(ステータス更新データの記録を含む。)を行う。その後、印刷処理(S139)を終了して、印刷動作制御処理(図13参照)に戻る。
図12のコマンド処理に戻り、リングバッファ領域110に記憶されている受信データが印刷開始コマンドデータでないと判断した場合(S115:YES)、CPU31は受信データが、ステータスリクエストコマンドであるか否かを判断する(S119)。「ステータスリクエストコマンド」は、印刷装置10にて印刷動作が開始される前に、パソコン20(詳細には、編集プログラム実行ファイルを実行するCPU)から印刷装置10に、ステータスファイルやステータスデータの更新を要求するコマンドである。
CPU31は、受信データがステータスリクエストコマンドであると判断した場合(S119:YES)、ステータスファイル領域105に記憶されているステータスファイルやステータスデータを印刷装置10の最新状態に応じて更新するステータスリクエスト処理を行う(S121)。S121のステータスリクエスト処理でも、印刷装置10が「記憶デバイス状態」であれば、CPU31は、ステータスファイルの更新と合わせてステータス更新データの記録(すなわち、システムタイマ値の更新)を行う。これにより、印刷装置10にて印刷動作が開始される前にステータスファイルが最新の内容に更新されて、印刷装置10に装着されているメディア(ここでは、印字テープ)や印刷装置10で発生しているエラーなどを示すステータス情報が反映される。
一方、リングバッファ領域110に記憶されている受信データがステータスリクエストコマンドでもない場合(S119:NO)、CPU31は受信データが所定のその他のデータであるか否かを判断する(S123)。所定のその他のデータであると判断した場合には(S123:YES)、CPU31は、リングバッファ領域110に記憶されているデータに従って所定の処理を実行する(S125)。なお、S113、S117、S121およびS125のいずれかを実行したのちは、コマンド処理を終了してメイン処理(図7参照)に戻る。また、リングバッファ領域110に記憶されているデータが所定のデータでないと判断した場合も(S123:NO)、コマンド処理を終了してメイン処理(図7参照)に戻る。なお、図7のメイン処理では、S27のコマンド処理(図12参照)が終了するとS13に移行し、CPU31は上述した処理を繰り返し継続して実行する。
なお、印刷動作制御処理(図13参照)および印刷処理(図14参照)では、印刷装置10が「印刷デバイス状態」であれば、CPU31は、上述のS121、S141、S161、S165において、SRAM33に設けられたステータスバッファ(図示外)に、印刷装置10の最新状態に応じたステータスデータ(例えば、エラー情報や印刷完了を示すデータ)を書き込む。そして、S55のステータスバッファ処理にて、印刷装置10からパソコン20に最新のステータスデータが送信されて、パソコン20にて印刷装置10の最新状態を把握できる。
以上の処理により、印刷装置10とパソコン20との間でパケット通信が実現されるとともに、パソコン20から印刷装置10に対するデータ操作(すなわち、ファイルの読み書きなど)が可能となる。一方、印刷装置10が「記憶デバイス状態」である場合、印刷装置10の状態に影響を与える処理が行われたタイミング(S141、S161、S165参照)や、パソコン20から最新のステータスファイルを要求されたタイミング(S121参照)で、ステータスファイルが更新される。そのため、パソコン20では、印刷装置10から適宜ステータスファイルを読み込むことで、最新のステータス情報を参照して印刷装置10の最新状態を正確に把握したうえで、印刷装置10に対して各種処理を指示することができる。
さらに、印刷装置10が「記憶デバイス状態」である場合、ステータスファイルの更新時にステータス更新データが記録される(本実施形態では、ステータスファイルに含まれるシステムタイマ値が更新される)。そのため、パソコン20では、「記憶デバイス状態」である印刷装置10から最新のステータスファイルを読み込んだ場合に、最新のステータスファイルが前回のステータスファイルから更新されているか否かを、ステータス更新データの変化の有無を参照するだけで判断できる。
ここで、ステータスファイルおよびステータス更新データの具体的なデータ構造を例示して、印刷装置10が「記憶デバイス状態」である場合における、上記フローチャート(図7〜図14)による具体的な処理態様を説明する。図15は、ステータスファイル領域105のデータ構造を示すテーブルである。図16は、印刷装置10〜パソコン20間のステータスファイルに関する通信シーケンスを示す模式図である。
図15に示すように、本実施形態のディスク領域101は、ファイルシステムタイプがFAT12、1セクタが512バイト、1クラスタが1セクタである。ディスク領域101のうち、ステータスファイル領域105には、ステータスファイルの実データが1ファイル、512バイト(1セクタ分)で記憶されている。ただし、ステータスファイルのうちで、実際にステータス情報を示す実データとして使用されるのは32バイトのみであり、その他の480バイトは無意味なデータ列(ダミーデータ)であるため、図15では実データの32バイトのみを図示している。ここで、ステータスファイル領域105に記憶されているステータスファイルのデータ構成を、以下の表1に示す。
表1に示すように、ステータスファイル領域105に記憶されているステータスファイル(実データの32バイト)には、オフセット位置0〜5に、印刷装置10を識別するための会社コードや機種コードなどの識別情報が記憶されている。ステータスファイルのオフセット位置8〜9に、印刷装置10で発生中のエラーを示すエラー情報が記憶されている。ステータスファイルのオフセット位置10〜17に、印刷装置10で使用されるメディア種類やフォントなどの印刷関連情報が記憶されている。ステータスファイルのオフセット位置18〜23に、印刷装置10で実行中のステータスやフェーズなどを示す状態情報が記憶されている。ステータスファイルのオフセット位置28〜31に、印刷装置10の内部タイマ(図示外)に基づいて設定されたシステムタイマ値が記憶されている。その他のオフセット位置は、未使用となっている。
例えば、図15に示すステータスファイルの場合、オフセット位置10「06h」にメディア幅が「6mm」であることが示されている。また、S161の印刷完了設定がなされると、オフセット位置18に「印刷完了」を示すステータス種類「01h」がセットされる。また、S165のエラー処理がなされると、オフセット位置18に「エラー発生」を示すステータス種類「02h」がセットされるとともに、オフセット位置8〜9にエラー原因がカッタージャムであることを示すエラー情報「04h」がセットされる。
本実施形態の印刷装置10は、S121のステータスリクエスト処理、S141のエラー処理、S161の印刷完了処理およびS165のエラー処理において、ステータスファイル領域105に記憶されているステータスファイルを更新するとき、オフセット位置28〜31(図15では下位4バイト)を内部タイマ(図示外)に基づいて現在のシステムタイマ値に更新する。そのため、ステータスファイルのオフセット位置28〜31には、ステータスファイルの最新の更新時間が示される。
ここで、印刷装置10が「記憶デバイス状態」である場合における、印刷装置10〜パソコン20間のステータスファイルに関する処理の流れを、印刷装置10で印刷動作が開始される場合を例示して説明する。なお、印刷装置10では、ステータスファイルのオフセット位置28〜31に、あらかじめシステムタイマ値「12:00:00」がセットされているものとする。
図16に示すように、パソコン20は印刷装置10に印刷動作を開始させる前に(つまり、印刷装置10に印刷ファイルを書き込む前に)、印刷装置10にステータスファイルのReadコマンドを送信する。すると、印刷装置10では、CPU31がステータスファイル領域105からステータスファイルを読み出してパソコン20に送信する(図11のS91〜S95参照)。これにより、パソコン20では、印刷装置10からステータスファイルを読み込んで、最新のステータス情報およびシステムタイマ値「12:00:00」を取得する(201)。
次に、パソコン20は、印刷装置10に印刷動作を開始させるため、印刷装置10に印刷ファイルのWriteコマンドを送信する。すると、印刷装置10では、CPU31がパソコン20から送信されるステータスリクエストコマンドを、印刷ファイル領域106の印刷ファイルに書き込む(図11のS81〜S89参照)(203)。なお、印刷ファイル領域106への書き込みを開始した時点ではステータスファイルの更新が行われていないため、パソコン20がReadコマンドによってステータスファイルを読み込んでも、印刷装置10から読み出されるステータスファイルに含まれるシステムタイマ値は、前回(201)に読み出されたものと同じ「12:00:00」である。そのため、パソコン20は、前回(201)からステータスファイルの更新がないものと認識する(205)。
そして、CPU31は、印刷ファイル領域106の印刷ファイルをリングバッファ領域110に読み出してコマンド解析を行う(図7のS27参照)。このとき、印刷ファイルに含まれるステータスリクエストコマンドを検出すると、ステータスファイル領域105に記憶されているステータスファイルを更新するステータスリクエスト処理を行う(図12のS119〜S121参照)。このとき、CPU31は、ステータスファイルのオフセット位置28〜31を、現在のシステムタイマ値「12:01:38」に更新する(301)。
その後、パソコン20がReadコマンドによってステータスファイルを読み込むと、印刷装置10から読み出されるステータスファイルに含まれるシステムタイマ値は、前回(201、203)に読み出された「12:00:00」とは異なる「12:01:38」である。そのため、パソコン20は、ステータスファイルに含まれる他のステータス情報に変化がなかったとしても、前回(201、203)からステータスファイルの更新があり、印刷装置10にて正常に処理されたものと認識する(207)。
なお、パソコン20が最新のステータスファイルに基づいて印刷装置10にて印刷を実行可能であると判断した場合、印刷装置10ではパソコン20から送信される印刷データおよび印刷開始コマンドを印刷ファイル領域106の印刷ファイルに書き込む(図11のS81〜S89参照)。そして、CPU31は、印刷ファイル領域106の印刷ファイルをリングバッファ領域110に読み出してコマンド解析を行うことで印字テープへの印字を実行する(図7のS27、図12のS113、S117等参照)。
なお、パソコン20によるステータスファイルの読み込み(201、205、207)では、印刷装置10から1セクタ分(512バイト)のステータスファイルが読み込まれることになる。しかし、パソコン20では、ステータスファイルの実データ32バイト(より詳細には、オフセット位置28〜31の4バイト)のみを参照すれば、ステータスファイルの更新の有無を認識できる。
以上説明したように、本実施形態の印刷装置10によれば、ファイル管理の主体でない印刷装置10側でステータスファイルが更新されると、ステータスファイルのシステムタイマ値が更新される。そして、印刷装置10を記憶デバイスとして認識するパソコン20からステータスファイルを要求するReadコマンドを受信すると、印刷装置10からパソコン20にステータスファイルがシステムタイマ値を含めて送信される。これにより、パソコン20では、データ内容に変化が生じないようなステータスファイルの更新が行われた場合でも、システムタイマ値の変化を参照するだけでステータスファイルの更新の有無を迅速かつ正確に判断することができる。そのため、印刷装置10にてデータ内容に変化が生じないようなステータスファイルの更新が行われた場合でも、パソコン20の誤動作によって印刷処理が滞ってしまうような不具合の発生を防止することができる。
ところで、本実施形態において、パソコン20が本発明の「外部端末」に相当する。図9のS55、S57、図10のS63、S67において、パソコン20からパケットを受信する処理およびパソコン20にパケットを送信する処理を行うCPU31が、本発明の「通信手段」に相当する。SRAM33およびFlashROM34が、本発明の「記憶手段」に相当する。マスストレージクラスドライバ59を稼動するCPU31が、本発明の「制御手段」に相当する。図13のS139および図14を実行するCPU31が、本発明の「印刷手段」に相当する。
なお、本発明は上記実施形態に限定されるものではなく、発明の要旨を変更しない範囲での変更が可能である。
例えば、上記実施形態では、ステータスファイル更新の有無を示すためのステータス更新データとして「システムタイマ値」を使用しているが、ステータス更新データとして各種データを使用することができる。図17は、ステータス更新データとして「インクリメント値」を使用した場合における通信シーケンスを示す模式図である。図18は、ステータス更新データとして「乱数値」を使用した場合における通信シーケンスを示す模式図である。
図17に示すように、ステータス更新データとして「インクリメント値」を使用する場合には、ステータスファイルのオフセット位置28〜31または未使用のオフセット位置を、「インクリメント値」を示すデータとする。そして、ステータスファイルの更新を実行する場合(S121、S141、S161、S165)、CPU31はステータスファイルのオフセット位置28〜31の「インクリメント値」を1加算(インクリメント)する(303)。これにより、パソコン20では、ステータスファイルに含まれる他のステータス情報に変化がなかったとしても、ステータスファイルに含まれる「インクリメント値」が例えば「0000」から「0001」に変化したことによって、ステータスファイルの更新があったと判断することができる。
図18に示すように、ステータス更新データとして「乱数値」を使用する場合には、ステータスファイルのオフセット位置28〜31または未使用のオフセット位置を、「乱数値」を示すデータとする。そして、ステータスファイルの更新を実行する場合(S121、S141、S161、S165)、CPU31はステータスファイルのオフセット位置28〜31の「乱数値」を、システム内部で発生させた乱数値で更新する(305)。これにより、パソコン20では、ステータスファイルに含まれる他のステータス情報に変化がなかったとしても、ステータスファイルに含まれる「乱数値」が例えば「E1548AC1」から「9CB71482」に変化したことによって、ステータスファイルの更新があったと判断することができる。
また、上記実施形態では、ステータス更新データである「システムタイマ値」を内部タイマ(図示外)によりカウントされる相対的な時間で更新しているが、「システムタイマ値」を他の手段で更新してもよい。例えば、印刷装置10が、RTC(Real Time Clock)などの計時用デバイスを備えたハードウエア構成である場合には、「システムタイマ値」を現実の時刻で更新してもよい。
また、上記実施形態では、ステータスファイルにステータス更新データを含めているが、ステータス更新データをステータスファイルには含まれない別データとしてもよい。この場合、CPU31は、ステータスファイルを更新するときは、ステータスファイルとは独立したステータス更新データを更新する。そして、パソコン20からステータスファイルの参照要求があったときは、ステータスファイルとともにステータス更新データをパソコン20側に送信すればよい。
また、上記実施形態では、ステータスファイル領域105にステータス更新データを記憶させているが、他の記憶領域に記憶させてもよい。すなわち、ステータス更新データは、ステータスファイルが更新されたことを判別することができるデータであればよいが、オペレーションシステムやファームウエアに誤動作を生じさせないデータであることが好適である。
また、上記実施形態では、ファイルシステムとしてFATを採用した場合を例示したが、本発明を実現できれば他のファイルシステムを採用してもよい。また、FATを採用する場合でも、FAT構造の詳細(ファイルシステムタイプ、1セクタのデータサイズ、1クラスタのデータサイズなど)は、印刷システム1や印刷装置10に合わせて任意に設計すればよい。また、ステータスファイルを含めた各ファイルを固定長データとしたが、可変長データとしてもよい。
また、上記実施形態では、FlashROM34からSRAM33にFAT構造の一部をコピーして、SRAM33で実際のファイルのアクセスを行っているが、かかる態様に限定されない。例えば、FAT構造がコピーされてファイルアクセスが行われるメモリ(本実施形態ではSRAM33)として大容量記憶素子(例えば、DRAMやSDRAMなど)を採用することで、FAT構造の本体を有するメモリ(本実施形態ではFlashROM34)からFAT構造の全体をコピーするようにしてもよい。また、FAT構造がコピーされてファイルアクセスが行われるメモリ(本実施形態ではSRAM33)を設けずに、FAT構造の本体を有するメモリ(本実施形態ではFlashROM34)において直接ファイルアクセスが行われるようにしてもよい。