次に、本発明の実施形態について、いくつかの具体的な例を挙げて説明する。
(1)第1実施形態
まず、第1実施形態について説明する。
[ファイル伝送システムの構成]
図1は、本発明の実施形態の一例として例示するファイル伝送システム全体のブロック図である。
このファイル伝送システムは、複合機1およびPC(Personal Computer)2を中心に構成されたものである。複合機1およびPC2は、双方ともUSBインターフェースを有するもので、USB−HUB3を介して接続されて相互間でデータ伝送ができるようになっている。また、USB−HUB3には、他のUSBデバイス4なども接続されている。
また、複合機1およびPC2は、双方ともLANインターフェースを有し、複合機1は、LAN5に接続された機器(例えば、PC6)との間でデータ伝送可能、PC2は、LAN7に接続された機器(例えば、PC8)との間でデータ伝送可能となっている。
本実施形態において、複合機1は、プリンタ機能、スキャナ機能、PC−FAX機能、カードリーダ機能などを備える多機能デバイスで、これらの機能をPC2から制御できるようになっている。
[複合機の内部構成]
図2は、複合機1の内部構成を示すブロック図である。
複合機1は、USBインターフェースを構成するためのハードウェアとして、USBプロトコルエンジン101、共通制御回路102、プリンタ系データ入出力回路103、スキャナ系データ入出力回路104、PC−FAX系データ入出力回路105、およびカードリーダ系データ入出力回路106などを備えている。
PC2との間でデータ伝送を行う際には、上記USBプロトコルエンジン101による制御下で、USB規格の通信プロトコルにてデータが伝送される。これらのハードウェアは、エンドポイントを介してPC2との間でデータを伝送するように構成されている。
具体的には、共通制御回路102は、コントロール転送用のエンドポイント(以下、EP0と称する。)を介して、PC2との間で各種制御データの入出力(双方向通信)を行う。
また、プリンタ系データ入出力回路103、スキャナ系データ入出力回路104、PC−FAX系データ入出力回路105、およびカードリーダ系データ入出力回路106は、それぞれが入力データ用のエンドポイントおよび出力データ用のエンドポイント(以下、EP1〜8と称する。)を介して、PC2との間でデータを伝送する。
プリンタ系データ入出力回路103へデータが伝送された場合、そのデータはプリンタ入出力タスク111へと伝送される。プリンタ入出力タスク111へ伝送されたデータは、さらに印字制御タスク113へと伝送されて、印字制御タスク113によってプリンタハードウェア115が制御される。
また、スキャナ系データ入出力回路104へデータが伝送された場合、そのデータはスキャナ入出力タスク121へと伝送される。スキャナ入出力タスク121へ伝送されたデータは、さらにスキャナ制御タスク123へと伝送されて、スキャナ制御タスク123によってスキャナハードウェア125が制御される。
また、PC−FAX系データ入出力回路105へデータが伝送された場合、そのデータはPC−FAX入出力タスク131へと伝送される。PC−FAX入出力タスク131へ伝送されたデータは、さらにモデム制御タスク133へと伝送されて、モデム制御タスク133によってモデムハードウェア135が制御される。
また、カードリーダ系データ入出力回路106へデータが伝送された場合、そのデータはSCSIコマンド解析タスク141へと伝送される。
SCSIコマンド解析タスク141は、データ中に含まれる情報に基づいて、2系統あるデータ処理系のいずれかへデータを振り分ける。このSCSIコマンド解析タスク141は、本発明でいうデータ解析手段の一例に相当するものである。
具体的には、SCSIコマンド解析タスク141へ伝送されてくるデータ中には、PC2において発行されたSCSIデータのコマンド(以下、SCSIコマンドともいう。)が含まれており、そのSCSIコマンド内には、LUNフィールドと呼ばれる領域が設けられている。
SCSIコマンド解析タスク141では、上記LUNフィールドの格納値(以下、SCSI−LUNと称する。)に基づいて、PC2からの出力データの振り分け先を判断する。なお、SCSIコマンド解析タスク141において実行される具体的な処理の詳細については後述する。
SCSIコマンド解析タスク141が、SCSI−LUN=0側(図2参照)へデータを振り分けた場合、そのデータは物理セクタ単位入出力タスク143へと伝送される。この物理セクタ単位入出力タスク143は、本発明でいう物理領域単位アクセス手段の一例に相当する。
物理セクタ単位入出力タスク143は、受け取ったデータをメモリスロット制御タスク145へと伝送する処理などを実行するが、この処理の詳細については後述する。そして、メモリスロット制御タスク145は、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154に対する制御を実行する。
第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、第4メモリスロット154は、いずれもメモリカードが装着されるスロットで、それぞれが他のスロットとは異なる規格のメモリカードを装着できる構造になっている。これら第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、第4メモリスロット154は、本発明でいうデータ記憶手段の一例に相当する。
なお、本実施形態において、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154は、それぞれが排他的に利用可能となるものである。例えば、第1メモリスロット151にメモリカードが装着された場合、そのメモリカードが取り外されるまで、他のスロットは利用不能となる。
一方、SCSIコマンド解析タスク141が、SCSI−LUN=1側(図2参照)へデータを振り分けた場合、そのデータはファイル単位入出力タスク161へと伝送される。このファイル単位入出力タスク161は、本発明でいうファイル単位アクセス手段の一例に相当する。
ファイル単位入出力タスク161は、受け取ったデータをファイルシステムタスク163経由でメモリスロット制御タスク145へと伝送する処理を実行する。また、物理セクタ単位入出力タスク143に対してモードチェンジを要求する処理なども実行する。これらの処理の詳細については後述する。なお、ファイルシステムタスク163は、本発明でいうファイルシステムの一例に相当する。
ファイル単位入出力タスク161からファイルシステムタスク163経由でメモリスロット制御タスク145へデータが伝送されたら、この場合も、メモリスロット制御タスク145は、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154に対する制御を実行する。
さらに、複合機1は、メディアプリント機能171およびFTP(File Transfer Protocol)サーバータスク173を備えている。これらメディアプリント機能171およびFTPサーバータスク173は、本発明でいうデータ処理手段の一例に相当し、PC2とは独立に複合機1単体で実行可能な機能を制御するものである。
具体的には、メディアプリント機能171は、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154の内、いずれかに装着されたメモリカードから画像ファイルを読み込んで、その画像ファイルを印刷する機能を制御するものである。
このメディアプリント機能171が画像ファイルを読み込む際には、ファイル単位入出力タスク161同様、ファイルシステムタスク163経由でデータをメモリスロット制御タスク145へと伝送する。これにより、画像ファイルへのアクセスが実行されることになる。
また、FTPサーバータスク173は、複合機1が接続されたLAN5上に存在する機器(例えば、PC6)から、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154の内、いずれかに装着されたメモリカード上のファイルに対するアクセス要求があった場合に、そのアクセス要求を処理するものである。
このFTPサーバータスク173がファイルにアクセスする際にも、ファイル単位入出力タスク161同様、ファイルシステムタスク163経由でデータをメモリスロット制御タスク145へと伝送することにより、ファイルへのアクセスが実行されることになる。
[PCの内部構成]
図3は、PC2の内部構成を示すブロック図である。
PC2においては、OSによる標準機能として、USBプロトコルスタック201、USB複合デバイスドライバ202、USBストレージドライバ203、SCSIコマンド処理部211、リムーバブルディスクドライバ221、ファイルシステム231などが機能する。
また、PC2においては、複合機1に対応する専用ソフトウェアとして、プリントポートドライバ223、スキャナドライバ225、COMポートドライバ227、プリンタドライバ261などが機能する。
また、PC2においては、これらの機能を利用するアプリケーションソフトウェアとして、印刷可能アプリケーション271、スキャン可能アプリケーション273、PC−FAXアプリケーション275などが機能する。
さらに、本実施形態において、PC2が備えるOSとしては、Windows(登録商標)が利用されており、PC2においては、Windows(登録商標)付属のソフトウェアであるエクスプローラ277なども機能する。ただし、PC2が備えるOSは、同等な機能を実現できるものであれば、Windows(登録商標)以外のOSであってもよい。
加えて、PC2では、FTPサーバーアプリケーション281、TCP/IPプロトコル283などが機能する。FTPサーバーアプリケーション281は、FTPクライアントとして機能するWEBブラウザ285からのアクセス要求を受けて、複合機1に対してファイルアクセス要求を発行するソフトウェアである。
なお、PC2においては、他のUSBデバイス4に対応する他のUSBデバイスのドライバ287なども機能する。
[複合機およびPCの機能概要]
複合機1は、PC2側で利用者が所定の操作を行うことにより、2つのモードをいずれかに切り替えることができる。
一方のモードは、USBストレージモード(本発明でいう第1のモードに相当;以下、USBモードとも称する。)で、このモードに切り替えた場合、PC2によるUSBストレージデバイスへのアクセスが許可される。
この場合、複合機1が備える第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154は、通常のUSBストレージデバイスと同様に機能する。
もう一方のモードは、FTPサーバーモード(本発明でいう第2のモードに相当;以下、FTPモードとも称する。)で、このモードに切り替えた場合、PC2によるUSBストレージデバイスへのアクセスが禁止される。
この場合、複合機1が備える第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154は、通常のUSBストレージデバイスと同様には機能しない状態となる。具体的には、各スロットにメディアを装着して、そのメディアにPC2からアクセスしようとしても、複合機1からはメディアが装着されていない旨の応答が返る状態になる。
ただし、FTPモードに切り替えた場合でも、FTPモードに対応したアプリケーションは、複合機1が備える第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154にアクセスすることができる。
なお、FTPモードに対応したアプリケーションは、通常のUSBストレージデバイス対応アプリケーションが複合機1に対して伝送するデータ列(本発明でいう標準データ列)とは異なるデータ列(本発明でいう特殊データ列)を複合機1に対して伝送する。これについては、後でさらに詳しく説明する。
複合機1は、PC2から伝送されてくるデータ列が、標準データ列か特殊データ列かを解析し、標準データ列であれば、USBストレージデバイスに対するデータ列としての処理を実行する。具体的には、標準データ列は、物理セクタ単位入出力タスク143へと伝送されて、メディアに対するアクセスは、物理セクタ単位で実行されることになる。
これに対し、特殊データ列であれば、USBストレージデバイスに対するデータ列とは別の処理を実行し、これにより、各スロットへのアクセスを実現する。具体的には、特殊データ列は、ファイル単位入出力タスク161へと伝送されて、メディアに対するアクセスは、ファイルシステムタスク163経由にてファイル単位で実行される。
なお、複合機1において、以上のようなモードをいずれかに切り替えるための構成が、本発明でいうモード切り替え手段の一例に相当する。
[標準データ列および特殊データ列の仕様と伝送方法]
次に、上述の標準データ列および特殊データ列の仕様と伝送方法について説明する。
複合機1において、標準データ列か特殊データ列かは、上述のSCSIコマンド内にあるLUNフィールドの格納値(SCSI−LUN)に基づいて判断される。
具体的には、SCSI−LUN=0の場合は、USBストレージデバイスにアクセスするための標準データ列であると判断される。また、SCSI−LUN=1の場合は、USBストレージデバイス以外のものにアクセスするための特殊データ列であると判断される。
このSCSI−LUNは、SCSI規格上の論理ユニットを指定するための番号であり、換言すれば、複合機1は、SCSI規格上の論理ユニットを2つ有するデバイスであることを意味する。そして、それら2つの論理ユニットの内、一方がUSBストレージデバイス相当の機能を持つ論理ユニット、もう一方が別の論理ユニットとなっていることを意味する。
ただし、USB規格上、PC2が備えるOSには、USBストレージデバイス相当の機能を持つ一方の論理ユニットのみが認識される。そのため、もう一方の別の論理ユニットへアクセスできるのは、この別の論理ユニットへのアクセス方法を知っている専用ソフトウェアのみとなる。
また、この複合機1において、上記SCSI−LUN=0の論理ユニットは、SCSI規格上、リムーバブルHDとして扱われる論理ユニットとされている。一方、上記SCSI−LUN=1の論理ユニットは、SCSI規格上、コミュニケーションデバイスとして扱われる論理ユニットとされている。
SCSI−LUN=0の論理ユニットへのデータ伝送は、通常のUSBストレージデバイスと全く同様に行われる。なお、通常のUSBストレージデバイスへのデータ伝送方法については周知なので、ここでの説明は省略する。
一方、SCSI−LUN=1の論理ユニットへのデータ伝送は、SCSIコマンドである「GetMessage」、「SendMessage」を利用して行われる。これら「GetMessage」、「SendMessage」を利用するに当たっては、SCSI規格の仕様上、機器毎に定義することになっているストリーム・セレクションを、以下の通りに定義して使用する。
0x0100:ファイルアクセスコマンド出力(アスキー転送)
0x0101:ファイルアクセスデータ出力(バイナリ転送)
0x0102:ファイルアクセスデータ入力(バイナリ転送)
0x0103:ファイルアクセスステータス入力(アスキー転送)
すなわち、ファイルアクセスデータ出力、ファイルアクセスデータ入力は、バイナリデータをそのまま転送すると定義し、ファイルアクセスコマンド出力、ファイルアクセスステータス入力は、1または複数の文字列を転送すると定義する。ファイルアクセスコマンド出力、ファイルアクセスステータス入力において数値を転送したい場合は、その数値を文字列化する。
また、1または複数の文字列を転送する際には、そのデータ構造を、以下の通りに定義する。
(第1文字列)[0x00](第2文字列)[0x00](第3文字列)[0x00]
すなわち、各文字列は、ヌル[0x00]でターミネートされる。また、文字列をターミネートするためのヌル[0x00]に続いて、もう1つヌル[0x00]があった場合は、すべての文字列の終了を表す。
1または複数の文字列を転送する際、文字列の数は、ファイルアクセスコマンドまたはファイルアクセスステータス毎に異なるものの、少なくとも第1文字列は常に存在する。
ファイルアクセスコマンド出力の場合、第1文字列はファイルアクセスコマンドを表す文字列となっており、例えば、fopen、fread、fwrite、fseek、fclose、modeget、modesetなどの文字列が利用される。
また、ファイルアクセスコマンド出力の場合、第2文字列以降はパラメータを表し、例えば、fopenの場合は、第2文字列がファイル名、第3文字列がオープンモードとなっている。また、fcloseの場合は、第2文字列がハンドル番号(=文字列化された数値)となっている。なお、これらのパラメータは、C言語の標準関数に準じた仕様としてある。
一方、ファイルアクセスステータス入力の場合、第1文字列は「0」か「1」で、「0」は失敗、「1」は成功を表している。また、ファイルアクセスステータス入力の場合、第2文字列以降は第1文字列以外のリターンデータが格納される。
例えば、fopenの場合、第1文字列が「0(失敗)」なら、第2文字列は無し、第1文字列が「1(成功)」なら、第2文字列はハンドル番号(=文字列化された数値)とされる。また、fcloseの場合は、第2文字列はなしとされる。
さらに、以上説明したファイルアクセスコマンドは、1つのファイルアクセスコマンドが、2〜3つのSCSIコマンドを組み合わせて構成される。そして、これら2〜3つのSCSIコマンドがPC2から複合機1へと伝送され、各SCSIコマンドに対する応答データが複合機1からPC2へと伝送される。
具体的には、例えば、大量のデータ転送がないファイルアクセスコマンド(fopen、fseek、fclose、modeget、modesetなど)は、「SendMessage/ストリーム・セレクション 0x0100:ファイルアクセスコマンド出力」、「GetMessage/ストリーム・セレクション 0x0103:ファイルアクセスステータス入力」、以上2つのSCSIコマンドによって構成される。
また、大量のデータ出力を伴うファイルアクセスコマンド(fwriteなど)は、「SendMessage/ストリーム・セレクション 0x0100:ファイルアクセスコマンド出力」、「SendMessage/ストリーム・セレクション 0x0101:ファイルアクセスデータ出力」、「GetMessage/ストリーム・セレクション 0x0103:ファイルアクセスステータス入力」、以上3つのSCSIコマンドによって構成される。
また、大量のデータ入力を伴うファイルアクセスコマンド(freadなど)は、「SendMessage/ストリーム・セレクション 0x0100:ファイルアクセスコマンド出力」、「GetMessage/ストリーム・セレクション 0x0102:ファイルアクセスデータ入力」、「GetMessage/ストリーム・セレクション 0x0103:ファイルアクセスステータス入力」、以上3つのSCSIコマンドによって構成される。
[SCSIコマンド解析タスクにおいて実行される処理]
次に、複合機1各部で実行される処理の内、複合機1が備えるSCSIコマンド解析タスク141において実行される処理について、図4に基づいて説明する。
この処理を開始すると、複合機1は、まず、PC2からSCSIコマンドが来たか否かを判断する(S105)。ここで、PC2からSCSIコマンドが来なければ(S105:来ない)、S105の処理へ戻る。
一方、PC2からSCSIコマンドが来たら(S105:来た)、そのSCSIコマンド内にあるLUNフィールドの格納値(SCSI−LUN)が“0”、“1”のいずれであるのかを判断する(S110)。
S110の処理による判断の結果、SCSI−LUNが“0”の場合(S110:SCSI−LUN=0)、複合機1は、SCSIコマンドを物理セクタ単位入出力タスク143へ伝送し、物理セクタ単位入出力タスク143側での処理終了を待つ(S115)。
このS115の処理においては、PC2から伝送されてきたSCSIコマンドは、SCSIコマンド解析タスク141から物理セクタ単位入出力タスク143へと伝送される。また、S115の処理において、SCSIコマンドを物理セクタ単位入出力タスク143へ伝送した後は、物理セクタ単位入出力タスク143側での処理が終了するのを待つ。
物理セクタ単位入出力タスク143側での処理が終了した場合、物理セクタ単位入出力タスク143側から応答が返るので、S115の処理では、物理セクタ単位入出力タスク143からの応答を、PC2側へと伝送し、S115の処理を終了する。なお、S115の処理を終了したら、S105の処理へと戻る。
以上のようなS115の処理について、より具体的な例を交えて説明すると、例えば、PC2側からは、メディア(本実施形態の場合、メモリカード)へのデータ書き込みを要求するSCSIコマンドが伝送されてくる場合がある。この場合、S115の処理では、SCSIコマンド解析タスク141が受け取ったSCSIコマンドを物理セクタ単位入出力タスク143へと伝送する。
このとき、物理セクタ単位入出力タスク143では、所定の処理(詳しくは後述)が実行される。そして、その所定の処理を実行した結果に関する情報が、応答として物理セクタ単位入出力タスク143からSCSIコマンド解析タスク141へ返される。
SCSIコマンド解析タスク141は、上記S115の処理の中で、物理セクタ単位入出力タスク143の処理終了を待つ。そして、物理セクタ単位入出力タスク143から応答を受け取ったら、その応答をSCSIコマンドに対する応答としてPC2側へ返して、S115の処理を終了する。
また、例えば、PC2側からは、メディアからのデータ読み込みを要求するSCSIコマンドが伝送されてくる場合がある。この場合も、S115の処理では、SCSIコマンド解析タスク141が受け取ったSCSIコマンドを物理セクタ単位入出力タスク143へと伝送する。
このとき、物理セクタ単位入出力タスク143では、所定の処理(詳しくは後述)が実行される。そして、その所定の処理を実行した結果に関する情報や読み出されたデータが、応答として物理セクタ単位入出力タスク143からSCSIコマンド解析タスク141へ返される。
SCSIコマンド解析タスク141は、上記S115の処理の中で、物理セクタ単位入出力タスク143の処理終了を待つ。そして、物理セクタ単位入出力タスク143から応答を受け取ったら、その応答をSCSIコマンドに対する応答としてPC2側へ返して、S115の処理を終了する。
この他にも、様々なSCSIコマンドがあるが、いずれのSCSIコマンドが伝送されてきた場合でも、S115の処理では、SCSIコマンドがSCSIコマンド解析タスク141からコマンドを物理セクタ単位入出力タスク143へと伝送される。そして、物理セクタ単位入出力タスク143からSCSIコマンド解析タスク141へと返される応答が、PC2側へと伝送されるのである。
なお、上述の通り、PC2から物理セクタ単位入出力タスク143へ伝送されるSCSIコマンドには様々なものがあるので、物理セクタ単位入出力タスク143側で実行される処理の内容は、SCSIコマンドに応じた様々な処理内容となる。
さて、S110の処理による判断の結果、SCSI−LUNが“1”の場合(S110:SCSI−LUN=1)、複合機1は、SCSIコマンドをファイル単位入出力タスク161へ伝送し、ファイル単位入出力タスク161側での処理終了を待つ(S120)。
このS120の処理においては、PC2から伝送されてきたSCSIコマンドは、SCSIコマンド解析タスク141からファイル単位入出力タスク161へと伝送される。また、S120の処理において、SCSIコマンドをファイル単位入出力タスク161へ伝送した後は、ファイル単位入出力タスク161側での処理が終了するのを待つ。
ファイル単位入出力タスク161側での処理が終了した場合、ファイル単位入出力タスク161側から応答が返るので、S120の処理では、ファイル単位入出力タスク161からの応答をPC2側へと伝送し、S120の処理を終了する。なお、S120の処理を終了したら、S105の処理へと戻る。
[物理セクタ単位入出力タスクで実行される処理]
次に、複合機1が備える物理セクタ単位入出力タスク143において実行される処理について、図5および図6に基づいて説明する。
この処理を開始すると、複合機1は、まず、SCSIコマンド解析タスク141からSCSIコマンドが来たか否かを判断する(S205)。ここで、SCSIコマンド解析タスク141からSCSIコマンドが来たら(S205:来た)、メディアへのアクセスが必要なコマンドか否かを判断する(S210)。
メディアへのアクセスが必要なコマンドであった場合(S210:はい)、現在メモリスロット制御タスク145の使用権を取得中か否かの判断を行う(S215)。このメモリスロット制御タスク145の使用権は、物理セクタ単位入出力タスク143またはファイルシステムタスク163が排他的に取得できる権利である。物理セクタ単位入出力タスク143とファイルシステムタスク163は、使用権を取得した場合にのみ、メモリスロット制御タスク145へのアクセスができる。これにより、両者が同時にメモリスロット制御タスク145に対してデータ伝送を行わないようにすることができる。
S215の処理で、メモリスロット制御タスク145の使用権を取得中ではないと判断した場合(S215:いいえ)、続いて、USBモードか否かを判断する(S220)。このS220の処理を実行する手段が、本発明でいうモード判定手段の一例に相当する。
S220の処理において、USBモードであった場合(S220:はい)、メモリスロット制御タスク145の使用権を取得する(S225)。メモリスロット制御タスク145の使用権は、状況により取得できる場合もあれば取得に失敗する場合もあるので、S225の処理を終えたら、メモリスロット制御タスク145の使用権取得に成功したか否かを判断する(S230)。
取得に失敗していた場合(S230:いいえ)、メモリスロット制御タスク145の使用権はファイルシステムタスク163が取得しているものと考えられる。そこで、この場合は、SCSIコマンド解析タスク141から受け取ったSCSIコマンドに対応した処理として、擬似的にメディアが入っていない時に相当する応答のみを返す処理を実行し(S235)、S205の処理へと戻る。なお、S235の処理を実行する手段が、本発明でいう疑似応答手段の一例に相当する。
また、S220の処理において、USBモードでなかった場合(S220:はい)、USBストレージデバイスへのアクセスが禁止されるモードなので、この場合は、S225、S230の処理を実行することなく、直ちに上記S235の処理へと進む。
すなわち、この場合も、SCSIコマンド解析タスク141から受け取ったSCSIコマンドに対応した処理として、擬似的にメディアが入っていない時に相当する応答のみを返す処理を実行し(S235)、S205の処理へと戻る。
なお、メディアが入っていない時に相当する応答がPC2側に返されると、PC2は、図7に示すようなダイヤログを表示する。これにより、利用者は、USBストレージデバイスへのアクセスができない状態にあると理解することができる。
さて一方、上記S230の処理において、メモリスロット制御タスク145の使用権取得に成功した場合は(S230:はい)、S240処理へと進む。また、上記S215の処理において、メモリスロット制御タスク145の使用権を既に取得中であると判断した場合(S215:はい)も、S240処理へと進む。
S240の処理へと進んだ場合、権利解放までのタイマーをクリアして(S240)、SCSIコマンドを実行する(S245)。S245の処理では、SCSIコマンド解析タスク141から受け取ったSCSIコマンドに対応した処理が実行される。
より具体的には、例えば、SCSIコマンドがメディアからのデータ読み込みを要求するものであれば、S245の処理では、物理セクタ単位入出力タスク143からメモリスロット制御タスク145に対してメディアからのデータ読み込み指令が伝送される。
この指令を受けたメモリスロット制御タスク145では、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、または第4メモリスロット154のいずれかに装着されたメディアから、物理セクタ単位でデータが読み出される。
そして、そのデータがメモリスロット制御タスク145から物理セクタ単位入出力タスク143へと返されるので、物理セクタ単位入出力タスク143では、メモリスロット制御タスク145から受け取ったデータを、SCSIコマンド解析タスク141へ返す。
また、例えば、SCSIコマンドがメディアへのデータ書き込みを要求するものであれば、S245の処理では、物理セクタ単位入出力タスク143からメモリスロット制御タスク145に対してメディアからのデータ書き込み指令が伝送される。
この指令を受けたメモリスロット制御タスク145では、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、または第4メモリスロット154のいずれかに装着されたメディアに対して、物理セクタ単位でデータが書き込まれる。
その書き込み結果を示すデータは、メモリスロット制御タスク145から物理セクタ単位入出力タスク143へと返される。そこで、物理セクタ単位入出力タスク143は、メモリスロット制御タスク145から受け取ったデータを、SCSIコマンド解析タスク141へ返す。
こうしてS245の処理を終えたら、続いて、図6に示すように、現在メディアロック中か否かを判断し(S250)、メディアロック中でない場合は(S250:いいえ)、権利解放の所定時間を過ぎたか否かを判断する(S255)。そして、権利解放の所定時間を過ぎていれば(S255:過ぎた)、メモリスロット制御タスク145の使用権を解放する(S260)。
これらS250〜S260の処理において、メディアロックは、PC2側から伝送されてくる指示に基づいて設定されるもので、メディアロック中である場合、PC2はメディアが取り出されないことを前提とした処理を実行する可能性がある。
また、権利解放の所定時間は、PC2側から最後のアクセス要求が到来した後、所定時間が経過するまでは、メモリスロット制御タスク145の使用権を保持するために設定されている。これは、メディアロックが解除された場合でも、PC2側での遅延書き込み制御等に起因して、PC2側からメディアへのアクセス要求が到来する可能性があるために設けられたものである。
したがって、S250〜S260の処理では、メディアロック中でなく、且つ、権利解放の所定時間が経過している場合にのみ、メモリスロット制御タスク145の使用権を解放することになる。
逆に、現在メディアロック中である場合(S250:はい)、または、権利解放の所定時間を過ぎていない場合は(S255:まだ)、S260の処理はスキップされて、メモリスロット制御タスク145の使用権を保持したままとなる。
そして、以上のようなS250〜S260の処理を終えたら、S205の処理(図5参照)へと戻る。
さて、以上が、S205の処理においてSCSIコマンドが来たと判断された場合の処理となるが、S205の処理では、SCSIコマンド解析タスク141からSCSIコマンドが来ないと判断されることもある(S205:来ない)。
この場合は、図6に示すS265の処理へと進み、ファイル単位入出力タスク161からモードチェンジ要求が来たかどうかを判断する(S265)。モードチェンジ要求は、ファイル単位入出力タスク161が実行する処理の中で発行されるが、その処理の詳細については後述する。
S265の処理において、モードチェンジ要求が来たと判断した場合(S265:来た)、USBモードへのチェンジか否かを判断する(S270)。S270の処理において、USBモードへのチェンジではなかった場合は(S270:いいえ)、FTPモードへのチェンジであったことを意味する。
そこで、物理セクタ単位入出力タスク143では、現在メモリスロット制御タスク145の使用権を取得中か否かの判断を行う(S275)。
S275の処理において、メモリスロット制御タスク145の使用権を取得中でない場合(S275:いいえ)、FTPモードへのチェンジが可能である。また、S270の処理において、USBモードへのチェンジであった場合も(S270:はい)、USBモードへのチェンジが可能である。
そこで、これらの場合は、モードチェンジを受け入れて(S280)、S205の処理(図5参照)へと戻る。これにより、FTPモードまたはUSBモードへのチェンジが実行されることになる。
一方、S275の処理において、メモリスロット制御タスク145の使用権を取得中であった場合(S275:いいえ)、引き続きPC2からのアクセスを受ける可能性があるため、FTPモードへのチェンジができない。
そこで、この場合は、モードチェンジを拒否する(S285)。なお、S285の処理を終えたら、S250の処理へと進むが、S250以降の処理については既に説明したので、ここでの説明は省略する。
[ファイル単位入出力タスクで実行される処理]
次に、複合機1が備えるファイル単位入出力タスク161において実行される処理について、図8および図9に基づいて説明する。
この処理を開始すると、複合機1は、まず、SCSIコマンド解析タスク141からSCSIコマンドが来たか否かを判断する(S305)。ここで、SCSIコマンド解析タスク141からSCSIコマンドが来ない場合は(S305:来ない)、S305の処理へと戻る。
一方、SCSIコマンド解析タスク141からSCSIコマンドが来たら(S305:来た)、SCSIコマンドが「SendMessage/ストリームセレクション0x0100」か否かを判断する(S310)。ここで、「SendMessage/ストリームセレクション0x0100」でない場合(S310:いいえ)、S305の処理へ戻る。
一方、「SendMessage/ストリームセレクション0x0100」であった場合は(S310:はい)、SCSIコマンド解析タスク141から伝送されてきたコマンド文字列群を受け取る(S315)。そして、その中の第1文字列に基づいて、引き続いてファイルアクセスデータ出力が到来するファイルアクセスコマンドか否かを判断する(S320)。
S320の処理において、ファイルアクセスデータ出力があるコマンドであると判断した場合(S320:はい)、「SendMessage/ストリームセレクション0x0101」が到来するまで待つ(S325:待ち)。そして、「SendMessage/ストリームセレクション0x0101」が到来したら(S325:来た)、データを受け取って(S330)、S335の処理へと進む。
なお、S320の処理において、ファイルアクセスデータ出力があるコマンドではないと判断した場合(S320:いいえ)、上記S325およびS330の処理はスキップして、S335の処理へと進む。
こうしてS335の処理へと進んだ場合、コマンド文字列群中の、第1文字列のコマンドを実行する(S335)。このS335の処理は、詳しくは図9に示す処理となる。
すなわち、複合機1は、まず第1文字列を判断する(S405)。このS405の処理を実行する手段が、本発明でいうファイルアクセス要求判定手段ないしモード切り替え要求判定手段の一例に相当する。
S405の処理において、第1文字列がfopenまたはfcloseであった場合(S405:fopen/fclose)、関数fopen()または関数fclose()をコールする(S410)。これにより、ファイル単位入出力タスク161では、ファイルシステムタスク163を経由してファイルをオープンまたはクローズすることができる。
また、S405の処理において、第1文字列がfreadまたはfwriteであった場合(S405:fread/fwrite)、関数fread()または関数fwrite()をコールする(S415)。これにより、ファイル単位入出力タスク161では、ファイルシステムタスク163を経由してファイルを読み書きすることができる。
また、S405の処理において、第1文字列がmodegetであった場合(S405:modeget)、現在のモードを取得する(S420)。このS420の処理によって取得されるモードは、USBモードまたはFTPモードのいずれかとなる。
また、S405の処理において、第1文字列がmodesetであった場合(S405:modeset)、物理セクタ単位入出力タスク143にモードチェンジを要求する(S425)。このS425の処理によって物理セクタ単位入出力タスク143に対して発行される要求が、上述のS265の処理における判断対象になるものとなる。
そして、上記S410〜S425いずれかの処理を終えたら、その処理結果となるデータやステータスをGetMessage用のバッファにセットする(S430)。これにより、バッファにセットしたデータがPC2から取り出されるのを待つ状態になる。
以上のようなS405〜S430の処理を終えると、図8に示したS335の処理を終えたことになるので、引き続いて、第1文字列に基づいて、ファイルアクセスデータ入力のあるファイルアクセスコマンドか否かを判断する(S340)。
S340の処理において、ファイルアクセスデータ入力があるコマンドであると判断した場合(S340:はい)、「GetMessage/ストリームセレクション0x0102」が到来するまで待つ(S345:待ち)。そして、「GetMessage/ストリームセレクション0x0102」が到来したら(S345:来た)、複合機1からPC2へデータを転送し(S350)、S355の処理へと進む。
なお、S340の処理において、ファイルアクセスデータ入力があるコマンドではないと判断した場合(S340:いいえ)、上記S345およびS350の処理はスキップして、S355の処理へと進む。
こうしてS355の処理へと進んだら、「GetMessage/ストリームセレクション0x0103」が到来するまで待つ(S355:待ち)。そして、「GetMessage/ストリームセレクション0x0103」が到来したら(S355:来た)、複合機1からPC2へステータス文字列群を転送し(S360)、S305の処理へと戻る。
[複合機内部ファイルシステムタスクで実行される処理]
次に、複合機1が備えるファイルシステムタスク163において実行される処理について、図10に基づいて説明する。
この処理を開始すると、複合機1は、まず、別タスクからファイルアクセス関連のリクエストが来たか否かを判断する(S505)。別タスクの具体例としては、例えば、ファイル単位入出力タスク161、メディアプリント機能171、FTPサーバータスク173などを挙げることができる。
ただし、複合機1に実装された機能によっては、具体例として列挙した上記のもの以外にも、ファイルシステムタスク163へのリクエストを発行するタスクが存在する場合がある。
S505の処理において、別タスクからリクエストが来ない場合は(S505:来ない)、S505の処理へと戻る。一方、別タスクからリクエストが来た場合(S505:はい)、そのリクエストがfopenであれば(S505:fopen)、現在メモリスロット制御タスク145の使用権を取得中か否かの判断を行う(S510)。
このメモリスロット制御タスク145の使用権は、既に説明したとおり、物理セクタ単位入出力タスク143またはファイルシステムタスク163が排他的に取得できる権利である。
S510の処理で、メモリスロット制御タスク145の使用権を取得中ではないと判断した場合(S510:いいえ)、メモリスロット制御タスク145の使用権を取得する(S515)。メモリスロット制御タスク145の使用権は、状況により取得できる場合もあれば取得に失敗する場合もある。
ここで、使用権取得に成功した場合(S515:成功)、あるいは、既に使用権を取得済みであった場合は(S510:はい)、該当ファイルのオープン処理(ハンドル作成)を実行して(S520)、S505の処理へと戻る。
一方、使用権取得に失敗した場合(S515:失敗)、メモリスロット制御タスク145の使用権は物理セクタ単位入出力タスク143が取得しているものと考えられるので、該当ファイルのオープンに失敗する(S525)。この場合、ハンドルは作成せず、S505の処理へと戻る。
また、S505の処理において、別タスクからのリクエストがfreadまたはfwriteであった場合(S505:fread/fwrite)、ハンドルファイルに対して読み書きを行って(S530)、S505の処理へと戻る。
また、S505の処理において、別タスクからのリクエストがfcloseであった場合(S505:fclose)、ハンドルのクローズ処理(ハンドル破棄)を行う(S535)。そして、すべてのハンドルが破棄されたか否かを判断する(S540)。
S540の処理において、すべてのハンドルが破棄されたと判断された場合は(S540:はい)、メモリスロット制御タスク145の使用権を解放して(S545)、S505の処理へと戻る。また、破棄されていないハンドルが残っていると判断された場合は(S540:いいえ)、S545の処理をスキップして、S505の処理へと戻る。
また、S505の処理において、別タスクからのリクエストがflistであった場合(S505:flist)、現在メモリスロット制御タスク145の使用権を取得中か否かの判断を行う(S550)。
S550の処理で、メモリスロット制御タスク145の使用権を取得中ではないと判断した場合(S550:いいえ)、メモリスロット制御タスク145の使用権を取得する(S555)。メモリスロット制御タスク145の使用権は、状況により取得できる場合もあれば取得に失敗する場合もある。
ここで、使用権取得に成功した場合(S555:成功)、あるいは、既に使用権を取得済みであった場合は(S550:はい)、該当ファイルのオープン処理(ハンドル作成)を実行する(S560)。
そして、ハンドルフォルダからファイル一覧を作成し(S565)、ハンドルのクローズ処理(ハンドル破棄)を行う(S535)。なお、S570の処理を終えたら、S540の処理へと進むが、S540以降の処理については既に説明したので、ここでの説明は省略する。
さらに、上記S555の処理において、使用権取得に失敗した場合(S555:失敗)、ファイルは1つもないというファイル一覧を作成し(S575)、S505の処理へと戻る。
[複合機内部メディアプリント機能で実行される処理]
次に、複合機1が備えるメディアプリント機能171において実行される処理について、図11に基づいて説明する。
この処理を開始すると、複合機1は、まず、カードのルートディレクトリのファイル一覧を作成する(S605)。このS605の処理では、関数flist()がコールされることにより、メディアプリント機能171経由でメモリカード上のファイルに対するアクセスが実行されることになる。
続いて、ルートディレクトリのファイル一覧に基づいて、サブディレクトリがあるかどうかを判断し、サブディレクトリがある場合は、さらに、サブディレクトリについてもファイル一覧を作成する(S610)。このS610の処理でも、関数flist()がコールされることにより、メディアプリント機能171経由でメモリカード上のファイルに対するアクセスが実行される。なお、S610の処理は、すべてのサブディレクトリを対象にして実行される。
そして、S605およびS610の処理によって得られたファイル一覧から、画像ファイルを抽出して(S615)、画像ファイルが1個以上あるか否かを判断する(S620)。ここで、画像ファイルがない場合は(S620:ない)、複合機1が備える表示部に「カードに画像ファイルがありません」とのメッセージを表示して(S625)、図11に示す処理を終了する。
一方、S620の処理で、画像ファイルが1個以上あると判断された場合は(S620:ある)、画像ファイルのサムネイルを作成する(S630)。S630の処理では、関数fopen()、fread()、fclose()などがコールされることにより、メディアプリント機能171経由でメモリカード上のファイルに対するアクセス(画像ファイルの読み込み)が実行され、読み込まれた画像ファイルがサムネイル化される。
続いて、複合機1の表示部に、カード内の画像ファイルを表示する(S635)。S635の処理では、画像ファイルのファイル名とS630の処理で作成されたサムネイルとを対にして、複合機1の表示部に表示する処理を実行する。
この後、複合機1は、ユーザーからの入力待ち状態となり、ユーザーが印刷する画像ファイルを選択可能な状態になる(S640)。この状態において、ユーザーがキャンセル操作を行った場合(S640:キャンセル)、図11に示した処理を終了する。
一方、S640の処理において、ユーザーが画像ファイルを選択して、印刷開始を指示する入力操作を行った場合(S640:選択、印刷開始)、複合機1は、印刷する画像ファイルをリードする(S645)。S645の処理では、関数fopen()、fread()、fclose()などがコールされることにより、メディアプリント機能171経由でメモリカード上のファイルに対するアクセス(画像ファイルの読み込み)が実行される。
そして、カードから読み込まれた画像ファイルを印刷して(S650)、図11に示す処理を終了する。
[PCで機能するFTPサーバーアプリケーションを起動したときに実行される処理]
次に、PC2で機能するFTPサーバーアプリケーション281を起動したときに実行される処理について、図12に基づいて説明する。
FTPサーバーアプリケーション281は、どのようなタイミングで起動されてもよいが、この機能を常時利用する可能性がある場合は、PC2の起動に連動して起動されるように設定しておくと好ましい。
FTPサーバーアプリケーション281が起動されて、この処理を開始すると、PC2は、modegetを実行する(S705)。具体的には、SCSI−LUN=1を指定して、SCSIコマンド「SendMessage/ストリーム・セレクション 0x0100:ファイルアクセスコマンド出力」、「GetMessage/ストリーム・セレクション 0x0103:ファイルアクセスステータス入力」を発行することにより、modegetコマンドの実行を複合機1に要求する。
このmodegetコマンドの実行要求が複合機1側に伝送されると、SCSIコマンド解析タスク141は、図4に示した処理により、SCSIコマンドをファイル単位入出力タスク161へと振り分ける。そして、ファイル単位入出力タスク161では、図8および図9に示した処理により、modegetに対応した処理(S420参照)を実行し、S430の処理により、現在のモードがGetMessage用のバッファにセットされる。
そして、GetMessage用のバッファにセットされたデータが、S360の処理により、PC2へと伝送される。その結果、PC2は、複合機1の現在のモードを取得することになる。
こうして複合機1のモードを取得したら、そのモードを記憶し(S710)、FTPサーバーアプリケーション起動時にFTPモードに切り替える設定か否かを判断する(S715)。FTPサーバーアプリケーション起動時にFTPモードに切り替えるか否かは、ユーザーが任意に設定可能で、どのような設定がなされたかは、FTPサーバーアプリケーション用の設定ファイル等に記憶されている。
FTPモードに切り替える設定であった場合(S715:はい)、現在の複合機1のモード(S705の処理で取得し、S710の処理で記憶したモード)がFTPモードか否かを判断する(S720)。
ここで、FTPモードでなかった場合(S720:いいえ)、PC2は、modesetを実行する(S725)。具体的には、SCSI−LUN=1を指定して、SCSIコマンド「SendMessage/ストリーム・セレクション 0x0100:ファイルアクセスコマンド出力」、「GetMessage/ストリーム・セレクション 0x0103:ファイルアクセスステータス入力」を発行することにより、modesetコマンドの実行を複合機1に要求する。
このmodesetコマンドの実行要求が複合機1側に伝送されると、SCSIコマンド解析タスク141は、図4に示した処理により、SCSIコマンドをファイル単位入出力タスク161へと振り分ける。そして、ファイル単位入出力タスク161では、図8および図9に示した処理により、modesetに対応した処理(S425参照)を実行する。これにより、物理セクタ単位入出力タスク143では、S270〜285の処理が実行される。
モードチェンジに成功したか否かは、S430の処理により、GetMessage用のバッファにセットされる。そして、GetMessage用のバッファにセットされたデータが、S360の処理により、PC2へと伝送される。その結果、PC2は、モードの切り替えに成功したか否かの情報を取得することになる。
そこで、PC2は、モードの移行に成功したか否かを判断する(S730)。ここで、モードの移行に成功した場合は(S730:はい)、現在の複合機1のモードをFTPモードと記憶して(S735)、S740の処理へと進む。
なお、S715の処理において、FTPモードに切り替える設定ではないと判断した場合(S715:いいえ)、あるいは、S720の処理において、既にFTPモードであった場合は(S720:はい)、モード切り替えの必要がない。したがって、この場合は、S725〜S735の処理をスキップして、S740の処理へと進む。
また、S730の処理において、モードの移行に失敗した場合は(S730:はい)、移行失敗を一定時間表示して(S737)、S740の処理へと進む。
そして、S740の処理へと進んだら、現在の複合機1のモードに従いタスクトレイアイコンを決定し(S740)、FTPサーバースレッドの起動、およびTCP/IPのFTPサーバーポートのオープンを行い(S745)、図12に示した処理を終了する。
以上のようにして図12に示した処理を終えると、PC2の表示部にあるタスクトレイ(OSであるWindows(登録商標)が標準で備える情報通知領域)には、図13(a)および同図(b)に示すようなアイコンで、現在の複合機1のモードが表示される。
また、このアイコンをポインティングデバイスでクリック操作すると、図13(c)に示すように、ポップアップウィンドウが表示される。ポップアップウィンドウ中には、モードの一覧とアプリケーションの終了を指示するための項目が表示される。ここで、これらのいずれかをポインティングデバイスでクリック操作すると、モード変更やアプリケーションの終了を、利用者がFTPサーバーアプリケーション281に対して指令できる。
なお、利用者がモード変更を指示した場合に、FTPサーバーアプリケーション281が実行する処理については、以下に引き続いて説明する。
[FTPサーバーアプリケーションによるFTPモードへの切り替え処理]
次に、利用者がFTPサーバーアプリケーション281に対して、FTPモードへの切り替えを指示した際に、FTPサーバーアプリケーション281によって実行される処理について、図14に基づいて説明する。
この処理を開始すると、PC2は、まず、現在の複合機1のモードがFTPモードか否かを判断する(S805)。ここで、FTPモードであった場合は(S805:はい)、モードの切り替えを行う必要がないので、そのまま図14に示した処理を終了する。
一方、S805の処理で、FTPモードではなかった場合(S805:いいえ)、PC2は、modesetを実行する(S810)。具体的には、SCSI−LUN=1を指定して、SCSIコマンド「SendMessage/ストリーム・セレクション 0x0100:ファイルアクセスコマンド出力」、「GetMessage/ストリーム・セレクション 0x0103:ファイルアクセスステータス入力」を発行することにより、modesetコマンドの実行を複合機1に要求する。なお、この処理は、先に説明したS725と同等な処理なので、これ以上の説明は省略する。
S810の処理を終えたら、PC2は、モードの移行に成功したか否かを判断する(S815)。ここで、モードの移行に成功した場合は(S815:はい)、現在の複合機1のモードをFTPモードと記憶して(S820)、現在の複合機1のモードに従いタスクトレイアイコンを変更し(S825)、図14に示した処理を終了する。
一方、S815の処理で、モードの移行に失敗したと判断された場合(S815:いいえ)、PC2は、移行失敗のダイヤログを表示して(S830)、図14に示した処理を終了する。
[FTPサーバーアプリケーションによるUSBモードへの切り替え処理]
次に、利用者がFTPサーバーアプリケーション281に対して、USBモードへの切り替えを指示した際に、FTPサーバーアプリケーション281によって実行される処理について、図15に基づいて説明する。
この処理を開始すると、PC2は、まず、現在の複合機1のモードがUSBモードか否かを判断する(S905)。ここで、USBモードであった場合は(S905:はい)、モードの切り替えを行う必要がないので、そのまま図15に示した処理を終了する。
一方、S905の処理で、USBモードではなかった場合(S905:いいえ)、現在FTPサーバー経由でファイル転送中か否かを判断する(S910)。ここで、FTPサーバー経由でファイル転送中であった場合(S910:はい)、ダイヤログを表示する(S915)。
このダイヤログには、「現在FTPサーバー経由でファイル転送中です。モードを切り替えると転送がエラーで中断します。それでもモードを切り替えますか?」とのメッセージが表示され、このメッセージに対し、利用者は「はい」「いいえ」いずれかを選択することができる。
利用者が「いいえ」を選択した場合(S915:いいえ)、そのまま図15に示した処理を終了する。一方、利用者が「はい」を選択した場合(S915:はい)、S920の処理へと進む。また、S910の処理において、FTPサーバー経由でファイル転送中ではないと判断された場合は(S910:いいえ)、S915の処理はスキップされて、S920の処理へと進む。
こうしてS920の処理へと進むと、PC2は、modesetを実行する(S920)。具体的には、SCSI−LUN=1を指定して、SCSIコマンド「SendMessage/ストリーム・セレクション 0x0100:ファイルアクセスコマンド出力」、「GetMessage/ストリーム・セレクション 0x0103:ファイルアクセスステータス入力」を発行することにより、modesetコマンドの実行を複合機1に要求する。なお、この処理は、USBモードへの切り替えである点を除き、先に説明したS725やS810と同等な処理なので、これ以上の説明は省略する。
S920の処理を終えたら、PC2は、モードの移行に成功したか否かを判断する(S925)。ここで、モードの移行に成功した場合は(S925:はい)、現在の複合機1のモードをUSBモードと記憶して(S930)、現在の複合機1のモードに従いタスクトレイアイコンを変更し(S935)、図15に示した処理を終了する。
一方、S925の処理で、モードの移行に失敗したと判断された場合(S925:いいえ)、PC2は、移行失敗のダイヤログを表示して(S940)、図15に示した処理を終了する。
[第1実施形態の効果]
以上説明した通り、上記複合機1によれば、PC1側からの指令により、USBモードとFTPモードとを切り替えることができる。そして、USBモードに切り替えた際には、複合機1が備える第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154を、PC2側からUSBストレージデバイスとして認識、利用することができる。
したがって、USBストレージデバイス対応の各種アプリケーションで、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154にセットされたカード上のファイルにアクセスすることができる。
また、FTPモードに切り替えた際には、複合機1対応の専用アプリケーション(例えば、FTPサーバーアプリケーション281)で、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154にセットされたカード上のファイルにアクセスすることができる。
しかも、複合機1対応の専用アプリケーション(例えば、FTPサーバーアプリケーション281)は、複合機1側にあるファイルシステムタスク163経由でカード上のファイルにアクセスすることにより、ファイル単位でのアクセスを実行する。
すなわち、FTPサーバーアプリケーション281は、PC2側のファイルシステム231経由で、カード上のファイルに対してアクセスするUSBストレージデバイス対応の各種アプリケーションとは異なり、カード上のファイルに対し、物理セクタ単位でのアクセスを実行することがない。
このようなFTPサーバーアプリケーション281であれば、ファイルへのアクセス開始(fopen)、アクセス終了(fclose)については、複合機1側で管理できる。そのため、先に説明したメディアプリント機能171等と全く対等にファイルシステムタスク163経由でファイルアクセスを行うことができる。そして、ファイルアクセスが終了すれば、ファイルシステムタスク163はメモリスロット制御タスク145の使用権を直ちに解放することもできる。
そのため、物理セクタ単位入出力タスク143を利用することになるUSBストレージデバイスとは異なり、S250およびS255の処理によってメモリスロット制御タスク145の使用権解放に時間を要することが多くなるといった問題は無く、メモリスロット制御タスク145が無駄に占有される期間を少なくすることができる。
したがって、PC2からのアクセス要求、およびデバイス内蔵のデータ処理手段(メディアプリント機能171やFTPサーバータスク173)からのアクセス要求について、いずれか一方の処理が完了すれば直ちに他方の処理に移ることができ、どちらも迅速な処理が可能となる。
また、上記のようなPC2からのアクセス要求、およびデバイス内蔵のデータ処理手段からのアクセス要求が同時に発生するような状況下でも、それらの要求すべてがデバイス内蔵のファイルシステムタスク163によって適切に管理・処理される。
そのため、物理セクタ単位の入出力とファイルシステムタスク経由の入出力が同時に発生する場合とは異なり、複数のアクセス要求が同時に発生しても何ら問題はなく、各要求に対する処理については、ファイルシステムタスク163の管理下で見かけ上同時処理ないし並列処理することも可能となる。
よって、上記のように、PC2からのアクセス要求、およびデバイス内蔵のデータ処理手段からのアクセス要求すべてをファイルシステムタスク163が管理するように構成されていれば、メディアプリント機能171やFTPサーバータスク173が、PC2からのアクセス要求に起因して待たされてしまうことがなく、第1メモリスロット151、第2メモリスロット152、第3メモリスロット153、および第4メモリスロット154にセットされたカード上のファイルにアクセスできる可能性を高めることができる。
さらに、上記のようなUSBモード、FTPモードのいずれに切り替えられている場合でも、PC2が複合機1にアクセスする際には、単一のUSBインターフェースを介してアクセスができる。
したがって、USBモード、FTPモードの各モードで利用するために、それぞれ専用の通信インターフェースを設ける必要はない。よって、その分だけ複合機1やPC2において必要となる通信インターフェース用のハードウェアを削減し、ハードウェアの簡素化を図ることができる。
(2)第2実施形態
次に、第2実施形態について説明する。
第2実施形態は、上記第1実施形態で例示したFTPサーバーに代えて、FTPサーバー以外のサーバーアプリケーションを採用した場合の構成を例示するものである。
すなわち、上記実施形態では、PC2側にFTPサーバーアプリケーション281を設けてFTPサーバーとして機能させ、FTPクライアントからの要求に応じて複合機1側のファイルにアクセスする例を示したが、ファイルを伝送可能なプロトコルであれば、FTP以外を採用してもよい。
具体例を挙げれば、FTPサーバーの代わりに、HTTP(HyperText Transfer Protocol)サーバーとしたり、CIFS(Common Internet File System)サーバーとしてもよい。以下、CIFSサーバーを採用した場合の例について説明する。
CIFSサーバーを採用する場合は、図16に例示するように、PC2側には、FTPサーバーアプリケーション281に代えてCIFSサーバーアプリケーション291を設ける。そして、クライアントコンピュータ上にあるCIFSクライアント(例えば、エクスプローラ293)を利用して、ファイルシステム295、マイクロソフト(登録商標)ネットワーククライアント297等を介して、TCP/IPプロトコル283経由で、CIFSサーバーアプリケーション291にアクセスする。
CIFSサーバーアプリケーション291には、FTPサーバーアプリケーション281と同等な「複合機1に対するファイルアクセス機能」を設け、CIFSクライアントからの要求に応じて複合機1側のファイルにアクセス可能とする。このように構成すれば、上述の第1実施形態と同等の効果を期待することができる。
また、第2実施形態として上述した例は、FTPサーバーの代わりにCIFSサーバーを採用する例であったが、必要があれば、FTPサーバー、CIFSサーバーの双方を利用可能な構成としてもよい。この場合、上記第1実施形態で例示したUSBモード、およびFTPモードに加え、CIFSモードが加わることになる。
これらのモードは、上記実施形態の場合と同様、PC2の表示部にアイコン表示するとよい。具体的には、CIFSモードになっている場合についても、図17(a)に示すように、PC2の表示部に現在の複合機1のモードを表示するとよい。
また、このアイコンをポインティングデバイスでクリック操作すると、図17(b)に示すように、ポップアップウィンドウが表示される点も、上記実施形態と同等に構成すればよい。また、その中で、モード変更やアプリケーションの終了を、利用者がクリック操作で指令できる点も、上記実施形態と同等に構成すればよい。
(3)第3実施形態
次に、第3実施形態について説明する。
先に説明した第1,第2実施形態では、PC2からUSBストレージデバイスとして認識されるデバイスの例として、複合機1を例示したが、本発明は、USBストレージデバイスとして認識されるデバイスであれば、複合機1以外のデバイスにおいても採用可能である。
特に、上記複合機1の場合、PC2にはUSB複合デバイスとして認識され、USB複合デバイスが備える複数の論理ユニットの1つとして、USBストレージデバイスを備えていたが、USB複合デバイスとして認識されるものか否かは任意である。
すなわち、USB複合デバイスと認識されるもの以外にも、例えば、単一の論理ユニットで構成されるUSBストレージデバイスとして認識されるものであっても、本発明の構成を採用することができる。あるいは、USBストレージデバイスには、単一の論理ユニットで構成されるものの他、USB規格上のLUN(注:上述のSCSI−LUNとは別のもの)で区別される複数論理ユニットを備えるものがある。そのようなデバイスにおいても本発明の構成を採用することができる。
以下、第3実施形態では、単一論理ユニットで構成されたUSBストレージデバイスとして認識されるデバイスの具体例として、デジタルカメラ(デジタルスチルカメラ)について説明する。
図18に示すデジタルカメラ30の場合、上述した複合機1と同じく、USBインターフェースを介してPC2と接続可能となっている(図18ではUSB−HUB3を介して接続した状態を例示)。
より具体的には、デジタルカメラ30は、USBプロトコルエンジン101、制御回路102、カードリーダ系データ入出力回路106、SCSIコマンド解析タスク141、物理セクタ単位入出力タスク143、メモリスロット制御タスク145、第1メモリスロット151、第2メモリスロット152などを備えている。
これらの構成は、上述の複合機1において同じ符号を付した各構成とほぼ同等に機能するものであり、これらの構成により、デジタルカメラ30をUSBストレージデバイスとして機能させることができる。
また、デジタルカメラ30は、撮影タスク301、CCD制御タスク303、CCD305、撮影用レンズ307、といった撮影系の構成、表示タスク311、LCD制御タスク313、LCDコントローラLSI315、表示用LCD317、といった表示系の構成、ボタン制御タスク321、ボタン類323、といった操作系の構成を備えている。
そして、上記撮影系の構成によって撮影されたデータを第1メモリスロット151や第2メモリスロット152にセットされたメモリカードに書き込む場合には、ファイルシステムタスク163経由にてファイル単位でのアクセスが行われるようになっている。
また、第1メモリスロット151や第2メモリスロット152にセットされたメモリカードから読み込んだデータを、上記表示系の構成によって表示する場合にも、ファイルシステムタスク163経由にてファイル単位でのアクセスが行われるようになっている。
これら撮影系、表示系、および操作系の構成やデジタルカメラ内蔵のファイルシステムは、いずれも一般的なデジタルカメラにおいても採用されている周知の構成である。
以上のような構成に加え、デジタルカメラ30は、さらに、ファイル単位入出力タスク161を備えている。このファイル単位入出力タスク161は、上述の複合機1において同じ符号を付したものと同等に機能し、これにより、デジタルカメラ30を、上述の複合機1同様、FTPサーバーモードで作動させることができる。
すなわち、これらデジタルカメラ30が備える構成と上述の複合機1が備える構成とを対比すれば明らかなように、このデジタルカメラ30も、上述の複合機1と全く同様に、USBストレージモードとFTPサーバーモードとを切り替えて利用可能なデバイスとして構成されている。
このようなデジタルカメラ30をPC2に接続すると、PC2においては、USBプロトコルスタック201、USBストレージドライバ203、SCSIコマンド処理部211、リムーバブルディスクドライバ221、ファイルシステム231などが機能する。
これにより、デジタルカメラ30がUSBストレージモードに切り替えられた際には、上記複合機1の場合と同様に、デジタルカメラ30をUSBストレージデバイスとして利用することができる。具体的には、例えば、エクスプローラ277などのソフトウェアで、デジタルカメラ30内のファイルにアクセスができるようになる。
また、PC2では、FTPサーバーアプリケーション281、TCP/IPプロトコル283なども機能し、デジタルカメラ30がFTPサーバーモードに切り替えられた際にも、上記複合機1の場合と同様に機能する。
すなわち、FTPクライアントとして機能するWEBブラウザ285からのアクセス要求を受けて、FTPサーバーアプリケーション281からデジタルカメラ30に対してファイルアクセス要求を発行することができる。
一般に、PCとの接続時にUSBストレージデバイスとして認識されるデジタルカメラの場合、PCに接続すると撮影機能や写真表示機能は使用不能になり、USBストレージデバイスとしての機能(カードリーダー機能)のみが有効な状態になる。したがって、撮影機能や写真表示機能を利用したい場合は、必ずPCとの接続を解除せざるを得ない。
これに対し、上記デジタルカメラ30の場合は、FTPサーバーモードに切り替えれば、PC2との接続を解除せず、PC2からのファイルアクセスを許容したまま(すなわち、カードリーダー機能が利用できる状態のまま)、撮影機能や写真表示機能をも利用することができる。
(4)第4実施形態
第4実施形態では、単一論理ユニットで構成されたUSBストレージデバイスとして認識されるデバイスの具体例として、MP3プレーヤー(ポータブルオーディオプレーヤー)について説明する。
図21は、MP3プレーヤー40の内部構成を示すブロック図である。このMP3プレーヤー40も、上述した複合機1やデジタルカメラ30と同じく、USBプロトコルエンジン101、制御回路102、カードリーダ系データ入出力回路106、SCSIコマンド解析タスク141、物理セクタ単位入出力タスク143などを備えている。これらの構成は、上述の複合機1やデジタルカメラ30において同じ符号を付した各構成とほぼ同等に機能するものである。
また、MP3プレーヤー40は、再生タスク401、DA制御タスク403、DAコンバータ405、ヘッドホンジャック407、といった再生系の構成、ボタン制御タスク411、ボタン類413、といった操作系の構成を備えている。
さらに、MP3プレーヤー40は、フラッシュメモリ制御タスク421、内蔵フラッシュメモリ423などを備えている。これらは、上述した複合機1やデジタルカメラ30が備えていたメモリスロット制御タスク145や、第1メモリスロット151、第2メモリスロット152に相当する構成であるが、メモリーカードの装着/脱着をできない点でのみ、複合機1やデジタルカメラ30とは相違する構成となっている。
このように構成されたMP3プレーヤー40も、PC2と接続した際には、USBストレージデバイスとして機能させることができる。また、内蔵フラッシュメモリ423から読み込んだデータを、上記再生系の構成によって再生する場合には、ファイルシステムタスク163経由にてファイル単位でのアクセスが行われるようになっている。
以上のような構成に加え、MP3プレーヤー40は、さらに、ファイル単位入出力タスク161を備えている。このファイル単位入出力タスク161は、上述の複合機1やデジタルカメラ30において同じ符号を付したものと同等に機能し、これにより、MP3プレーヤー40を、上述の複合機1同様、FTPサーバーモードで作動させることができる。
すなわち、これらMP3プレーヤー40が備える構成と上述の複合機1が備える構成とを対比すれば明らかなように、このMP3プレーヤー40も、上述の複合機1やデジタルカメラ30と全く同様に、USBストレージモードとFTPサーバーモードとを切り替えて利用可能なデバイスとなる。
一般に、PCとの接続時にUSBストレージデバイスとして認識されるMP3プレーヤーの場合、PCに接続すると音楽再生機能は使用不能になり、USBストレージデバイスとしての機能(カードリーダー機能)のみが有効な状態になる。したがって、音楽再生機能を利用したい場合は、必ずPCとの接続を解除せざるを得ない。
これに対し、上記MP3プレーヤー40の場合は、FTPサーバーモードに切り替えれば、PC2との接続を解除せず、PC2からのファイルアクセスを許容したまま(すなわち、カードリーダー機能が利用できる状態のまま)、音楽再生機能をも利用することができる。
(5)変形例等
以上、本発明の実施形態について説明したが、本発明は上記の具体的な一実施形態に限定されず、この他にも種々の形態で実施することができる。
例えば、上記第1,第2実施形態では、PCとの接続時にUSB複合デバイスとして認識されるデバイスの具体例として複合機を例示し、上記第3,第4実施形態では、PCとの接続時にUSBストレージデバイスとして認識されるデバイスの具体例として、デジタルカメラおよびMP3プレーヤーを例示したが、これら以外の機能を持つデバイスであっても、本発明の構成を採用できるのはもちろんである。例えば、ICレコーダーや携帯電話機などにおいて、本発明の構成を採用してもよい。
また、上記第1実施形態において、FTPサーバーアプリケーション281は、複合機1がFTPモードのときにアクセス要求を発行し、複合機1がUSBモードのときにはアクセス要求を発行しない構成としてあったが、これも他の構成を考え得る。
例えば、FTPサーバーアプリケーション281がアクセス要求を発行し、複合機1がアクセスを拒否する応答を返す構成としてもよい。この場合、アクセスを拒否する応答の一例としては、メディアが入っていない旨の応答を返す、といったものを考えることができる。
また、上記第1実施形態において、USBストレージデバイスとして認識されるデバイスは、リムーバブルメディアを装着可能な複合機1であったが、本発明において、USBストレージデバイスとして認識されるデバイスが、実際にリムーバブルメディアとしての構成を有するか否かは、特に限定されない。
具体的には、上記第4実施形態で例示したMP3プレーヤー40のように、内蔵フラッシュメモリ423を備えるデバイスであってもよく、この場合、内蔵フラッシュメモリ423がMP3プレーヤー40に対して装着/脱着可能な構造となっているか否かは、本発明において任意である。
さらに、上記第1実施形態においては、FTPクライアントであるWEBブラウザ285と、FTPサーバーアプリケーション281が、同一のPC2に搭載されている例を示したが、これらはLAN経由で通信可能な別のPCにそれぞれが搭載されていてもよい。
すなわち、FTPクライアントであるWEBブラウザ285を備えるクライアントコンピュータと、FTPサーバーアプリケーション281を備えるサーバーコンピュータは、TCP/IPによる論理的なデータ伝送路を介して通信可能なものであれば、物理的な実態が同一PCなのか別PCなのかについては問われない。これは、FTPに代えて、HTTPやCIFSを採用した場合でも同じである。
1・・・複合機、2・・・PC、3・・・USB−HUB、4・・・他のUSBデバイス、5・・・LAN、6・・・PC、7・・・LAN、8・・・PC、30・・・デジタルカメラ、40・・・MP3プレーヤー、101・・・USBプロトコルエンジン、102・・・共通制御回路(制御回路)、103・・・プリンタ系データ入出力回路、104・・・スキャナ系データ入出力回路、105・・・PC−FAX系データ入出力回路、106・・・カードリーダ系データ入出力回路、111・・・プリンタ入出力タスク、113・・・印字制御タスク、115・・・プリンタハードウェア、121・・・スキャナ入出力タスク、123・・・スキャナ制御タスク、125・・・スキャナハードウェア、131・・・PC−FAX入出力タスク、133・・・モデム制御タスク、135・・・モデムハードウェア、141・・・SCSIコマンド解析タスク、143・・・物理セクタ単位入出力タスク、145・・・メモリスロット制御タスク、151・・・第1メモリスロット、152・・・第2メモリスロット、153・・・第3メモリスロット、154・・・第4メモリスロット、161・・・ファイル単位入出力タスク、163・・・ファイルシステムタスク、171・・・メディアプリント機能、173・・・FTPサーバータスク、173・・・サーバータスク、201・・・USBプロトコルスタック、202・・・USB複合デバイスドライバ、203・・・USBストレージドライバ、211・・・SCSIコマンド処理部、221・・・リムーバブルディスクドライバ、223・・・プリントポートドライバ、225・・・スキャナドライバ、227・・・COMポートドライバ、231,295・・・ファイルシステム、261・・・プリンタドライバ、271・・・印刷可能アプリケーション、273・・・スキャン可能アプリケーション、275・・・PC−FAXアプリケーション、277,293・・・エクスプローラ、281・・・FTPサーバーアプリケーション、283・・・TCP/IPプロトコル、285・・・WEBブラウザ、287・・・他のUSBデバイスのドライバ、291・・・CIFSサーバーアプリケーション、297・・・マイクロソフト(登録商標)ネットワーククライアント、301・・・撮影タスク、303・・・CCD制御タスク、307・・・撮影用レンズ、311・・・表示タスク、313・・・LCD制御タスク、315・・・LCDコントローラLSI、317・・・表示用LCD、321,411・・・ボタン制御タスク、323,413・・・ボタン類、401・・・再生タスク、403・・・DA制御タスク、405・・・DAコンバータ、407・・・ヘッドホンジャック、421・・・フラッシュメモリ制御タスク、423・・・内蔵フラッシュメモリ。