情報処理装置およびプログラム
【課題】本来属するクラスとは異なるクラスが設定されたUSBデバイスの、想定外の動作を防止する。
【解決手段】USBデバイスが接続されると、当該USBデバイスに対して、ディスクリプタを取得した後、ジェネリッククラスドライバを割り当てる。その後、ディスクリプタから取得したクラスのクラスドライバを保持しているか否かを判定する。保持していると判定した場合、当該USBデバイスが、ディスクリプタから取得したクラスのクラスドライバを割り当てることが許可されているデバイスであるか否かを判定する。許可されていないと判定された場合、当該USBデバイスに対してディスクリプタから取得したクラスのクラスドライバを割り当てるか否かを、ユーザの選択に基づき決定する。
【解決手段】USBデバイスが接続されると、当該USBデバイスに対して、ディスクリプタを取得した後、ジェネリッククラスドライバを割り当てる。その後、ディスクリプタから取得したクラスのクラスドライバを保持しているか否かを判定する。保持していると判定した場合、当該USBデバイスが、ディスクリプタから取得したクラスのクラスドライバを割り当てることが許可されているデバイスであるか否かを判定する。許可されていないと判定された場合、当該USBデバイスに対してディスクリプタから取得したクラスのクラスドライバを割り当てるか否かを、ユーザの選択に基づき決定する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、外部機器を挿抜可能に接続するインターフェイスを有する情報処理装置およびプログラムに関する。
【背景技術】
【0002】
電子機器同士を接続する方法として、ホストマシンと複数の周辺機器(デバイス)との間をシリアル通信で接続する、USB(Universal Serial Bus)接続が普及している。USBは、活線挿抜が可能なインターフェイス規格であり、機器の動作中における抜き取りや接続が可能となっている。
【0003】
従来、コンピュータのUSBインターフェイスに対してUSBデバイスを接続すると、USBデバイスとコンピュータとの間で制御情報の転送処理が行われる。この転送処理により、オペレーションシステム(OS)が、USBデバイスから当該USBデバイス固有の情報が格納されるディスクリプタを取得し、チェックする。このディスクリプタには、USBデバイスの属性を表す「クラス」と呼ばれる情報が含まれる。OSは、このクラス情報から、当該USBデバイスに適したデバイスドライバを判断し、当該USBデバイスに対して自動的に割り当てる。
【0004】
USBデバイスには、本来属するべきクラスとは異なるクラスが設定された特殊な製品があることが既に知られている。例えば、近年では、USB接続により使用するIC(Integrated Circuit)カードリーダが利用されている。一方、OSには、HID(Human Interface Device)クラスに対応するクラスドライバを標準的に装備しているものが多い。HIDクラスに属さないUSBデバイスを、HIDクラスのUSBデバイスとして設定することで、当該USBデバイス固有のデバイスドライバのインストールに要する手間が削減され、利便性が向上する。
【0005】
例えば、特許文献1には、本来HIDクラスのUSBデバイスではないICカードリーダに関し、クラスをHIDクラスとして設定し、HIDクラスのデバイスドライバを利用するICカードリーダが開示されている。
【0006】
また、特許文献2には、本来のクラスのクラスドライバではない、ジェネリックなUSBデバイスドライバを介してアプリケーションが特殊な制御を行うことにより、本来のクラスとは異なるクラスが設定されたUSBデバイスを制御するようにした技術が開示されている。この特許文献2では、HIDクラスとして実装された磁気カードリーダを認証用デバイスとして利用する場合に適用した例が記載されている。特許文献2によれば、本来属するクラスとは異なるクラスが設定されたUSBデバイスを使用することができる。
【発明の概要】
【発明が解決しようとする課題】
【0007】
ところで、USBデバイスに対して本来属するクラスとは異なるクラスを設定して使用する場合、この異なるクラスのクラスドライバに割り当てられたUSBデバイスを正常に動作するように制御できるアプリケーションを用意する必要がある。若し、何らかの制約によりこのアプリケーションを使用できない場合、本来属するクラスとは異なるクラスのクラスドライバが割り当てられたUSBデバイスが使用できないばかりか、想定外の動作をしてしまうおそれがあるという問題点があった。
【0008】
上述した特許文献2に記載の技術では、USBデバイスを制御するためのアプリケーションを使用することが前提となっている。そのため、当該アプリケーションが使用できない場合に、本来属するクラスとは異なるクラスのクラスデバイスが割り当てられたUSBデバイスを正常に制御できないおそれがある問題は、解消できていない。
【0009】
本発明は、上記に鑑みてなされたものであって、本来属するクラスとは異なるクラスが設定されたUSBデバイスの、想定外の動作を防止することを目的とする。
【課題を解決するための手段】
【0010】
上述した課題を解決し、目的を達成するために、本発明は、接続手段に接続された外部機器から、外部機器の少なくとも機能を示す識別情報を取得する取得手段と、外部機器を制御するためのデバイスドライバを保持する保持手段と、デバイスドライバの接続手段に接続された外部機器への割り当てを、制御情報に従い制御する制御手段とを有し、保持手段は、外部機器の機能に依存しない処理を行う汎用デバイスドライバを少なくとも保持し、制御手段は、制御情報が第1の値を示している場合に、接続手段に接続された外部機器に対して汎用デバイスドライバを割り当て、制御情報が第2の値を示している場合に、外部機器から取得された識別情報に示される外部機器の機能に対応するデバイスドライバが保持手段に保持されているか否かを判定する第1の判定を行い、第1の判定により保持されていないと判定した場合に、汎用デバイスドライバを外部機器に割り当てることを特徴とする。
【0011】
また、本発明は、接続手段に接続された外部機器から、外部機器の少なくとも機能を示す識別情報を取得する取得ステップと、制御情報が第1の値を示している場合に、接続手段に接続された外部機器に対して、保持手段に保持される、部機器の機能に依存しない処理を行う汎用デバイスドライバを割り当て、制御情報が第2の値を示している場合に、外部機器から取得された識別情報に示される外部機器の機能に対応するデバイスドライバが保持手段に保持されているか否かの判定を行い、判定により保持されていないと判定した場合に、汎用デバイスドライバを外部機器に割り当てる制御ステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【0012】
本発明によれば、本来属するクラスとは異なるクラスが設定されたUSBデバイスの、想定外の動作を防止できるという効果を奏する。
【図面の簡単な説明】
【0013】
【図1】図1は、本発明の第1の実施形態に適用可能な情報処理装置の一例の構成を概略的に示すブロック図である。
【図2】図2は、本発明の第1の実施形態に適用可能な情報処理装置の機能を説明するための一例の機能ブロック図である。
【図3】図3は、USBスタックの機能を説明するための一例の機能ブロック図である。
【図4】図4は、USBデバイスを特定する識別情報のリストの一例を示す略線図である。
【図5】図5は、デバイスディスクリプタを示す略線図である。
【図6】図6は、コンフィグレーションディスクリプタを示す略線図である。
【図7】図7は、インターフェイスディスクリプタを示す略線図である。
【図8】図8は、エンドポイントディスクリプタを示す略線図である。
【図9】図9は、ディスクリプタ取得処理の一例のシーケンスを示す図である。
【図10】図10は、本発明の第1の実施形態による、USBデバイスに対するクラスドライバ割り当て処理を示す一例のフローチャートである。
【図11】図11は、ディスプレイに表示される入力画面の一例を示す略線図である。
【図12】図12は、本発明の第2の実施形態による複合機の一例の構成を示すブロック図である。
【発明を実施するための形態】
【0014】
(第1の実施形態の構成例)
以下に添付図面を参照して、本発明に係る情報処理装置およびプログラムの第1の実施形態を詳細に説明する。図1は、本第1の実施形態に適用可能な情報処理装置1の一例の構成を概略的に示す。情報処理装置1は、制御部10、USB(Universal Serial Bus)ホストコントローラ11、入力インターフェイス(I/F)12および表示制御部13を有する。制御部10は、例えばCPU(Central Processing Unit)、RAM(Random Access Memory)、ROM(Read Only Memory)、HDD(Hard Disk Drive)などを有し、CPUが、ROMやHDDに予め格納されたプログラムに従い、RAMをワークメモリとして用いて、この情報処理装置1の全体の動作を制御する。
【0015】
USBホストコントローラ11は、外部機器であるUSBデバイス20を接続するためのUSBデバイス接続ポートを有し、制御部10の制御に従い、USBデバイス接続ポートに接続されるUSBデバイス20との通信を制御する。
【0016】
入力I/F12は、例えばキーボードやポインティングデバイス(マウスなど)といった入力デバイス21が接続され、入力デバイス21に対してなされたユーザ入力に応じた制御信号を制御部10に対して出力する。表示制御部13は、ディスプレイ22が接続され、プログラムに従い制御部10で生成された表示制御信号を、ディスプレイ22が表示可能な形式の信号に変換してディスプレイ22に対して出力する。
【0017】
図2は、図1に示した情報処理装置1の機能を説明するための一例の機能ブロック図である。なお、図2において、上述の図1と共通する部分には同一の符号を付し、詳細な説明を省略する。図2において、点線の上側が制御部10上で動作するソフトウェアを示し、点線の下側がハードウェアを示す。制御部10上で動作するソフトウェアは、アプリケーション30と、グラフィクスインターフェイス(I/F)31と、汎用のOS(Operating System)であるOS32とを含む。OS32は、ハードウェアであるUSBホストコントローラ11との仲介を行うUSBスタック40を含む。
【0018】
アプリケーション30は、OS32との間で関数呼び出しとその戻り値送信、ならびに、メッセージの送受信などを行うことで、所定の機能を実現する。グラフィクスI/F31は、アプリケーション30やOS32からの命令に従い描画処理などを行い、所定の表示のための表示制御信号を生成し、表示制御部13に対して出力する。OS32は、ソフトウェアとハードウェアとの仲介を行うと共に、制御部10において動作する各プログラムを統括的に管理する。
【0019】
図3は、USBスタック40の機能を説明するための一例の機能ブロック図である。なお、図3において、上述した図1と共通する部分には同一の符号を付して、詳細な説明を省略する。USBスタック40は、検知部41、判定部42およびドライバ割当部43を有すると共に、クラスドライバ群44を有する。USBスタック40は、OS32の命令に従いUSBホストコントローラ11と通信を行う。また、USBスタック40は、USBホストコントローラ11との通信の結果に応じて、所定の表示を行うためのメッセージなどを出力する。このメッセージは、例えば図示されないグラフィクスI/F31により描画され表示制御信号に変換されて表示制御部13に対して出力される。
【0020】
USBスタック40において、検知部41は、USBホストコントローラ11に対してUSBデバイス20が接続されたことを検知する。判定部42は、検知部41に検知された、接続中のUSBデバイス20に対するデバイスドライバの割り当てに関する判定を行う。ドライバ割当部43は、判定部42の判定結果に基づき、接続中のUSBデバイス20に対してデバイスドライバを割り当てる。
【0021】
クラスドライバ群44は、USBデバイス20を制御するためのデバイスドライバの一種であるクラスドライバを保持する。なお、クラスは、USBデバイス20の機能を抽象化して分類したものである。クラスドライバは、USBデバイス20のクラスとしての動作を制御するための上位のデバイスドライバである。クラスドライバ群44は、少なくともジェネリック(汎用)クラスのクラスドライバ(ジェネリッククラスドライバと呼ぶ)を含む。ジェネリッククラスは、例えば、USBデバイスの機能に依存しない処理のみを行うクラスである。
【0022】
クラスドライバ群44は、ジェネリッククラスのクラスドライバに限られず、ハブクラス、キーボードクラスのドライバなど他のクラスのクラスドライバを含むことができる。また、クラスドライバ群44に対して、他のクラスドライバを適宜追加していくことも可能である。
【0023】
クラスドライバ群44は、さらに、USBデバイス20を特定する識別情報のリストを保持する。このリストは、後述するようにしてUSBデバイス20から取得されたデバイスディスクリプタに示されるクラスに対応するクラスドライバの割り当てを許可したUSBデバイス20を特定する情報が登録される。図4は、このリスト45の一例の構成を示す。この図4の例では、USBデバイス20を特定する識別情報として、USBデバイス20のベンダ名「VendorID」および機種名「ProductID」が用いられている。これらベンダ名「VendorID」および機種名「ProductID」は、それぞれ、後述するデバイスディスクリプタに含まれるフィールド「idVendor」および「idProduct」の情報を用いる。
【0024】
例えば、リスト45は、デフォルトでは空の状態となっており、後述する処理に従い適宜、情報が追加登録される。これに限らず、動作が既知のUSBデバイス20の情報をリスト45に対して予め登録しておいてもよい。
【0025】
(USB通信手順)
次に、USBデバイス20がUSBホストコントローラ11に対して接続された際の、通信までの手順について、概略的に説明する。先ず、例えばUSBデバイス20がUSBホストコントローラ11のUSBデバイス接続ポートに接続されると、USBホストコントローラ11にUSBデバイス20が認識されその旨が検知部41に通知される。また、USBホストコントローラ11は、接続されたUSBデバイス20に対してアドレスを割り当てる。
【0026】
USBホストコントローラ11は、接続されたUSBデバイス20に対するアドレスの割り当てが行われると、当該USBデバイス20のディスクリプタの取得を開始する。USB通信では、USBホストコントローラ11とUSBデバイス20との通信シーケンスにおいて、USBホストコントローラ11は、ターゲットであるUSBデバイス20からコントロール転送によってディスクリプタを取得する。ディスクリプタは、ターゲットの特性、属性などの情報を含み、デバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの4種類がある。
【0027】
なお、以下では、適宜、これらデバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの4つのディスクリプタを纏めて標準ディスクリプタと呼ぶ。
【0028】
図5〜図8を用いて、これら4種類のディスクリプタについて、概略的に説明する。なお、図5〜図8において、オフセットは、先頭からのバイト数を示す。各フィールドは、図5〜図8においてフィールド名の右に示されるデータ長を有し、各ディスクリプタにおいて、オフセットとデータ長とから、特定のフィールドにアクセスすることができる。
【0029】
図5は、デバイスディスクリプタを示す。デバイスディスクリプタは、このディスクリプタを送信したUSBデバイスを識別するための情報が含まれる。図5において、デバイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbcdUSB、フィールドbDeviceClass、フィールドbDeviceSubclass、フィールドbDeviceProtocol、フィールドbMaxPacketSize0、フィールドidVendor、フィールドidProduct、フィールドbcdDevice、フィールドiManufacturer、フィールドiProduct、フィールドiSerialNumberおよびフィールドbNumConfigurationを含む。
【0030】
これらのうち、フィールドbLengthおよびフィールドbDescriptorTypeは、それぞれディスクリプタのバイト長と種類を示す。これらフィールドbLengthおよびフィールドbDescriptorTypeは、各ディスクリプタに設けられる。
【0031】
デバイスディスクリプタにおいて、フィールドbDeviceClass、フィールドbDeviceSubclassおよびフィールドbDeviceProtocolは、このディスクリプタを送信したUSBデバイスのクラスを示す。クラスは、USBデバイスの機能に基づく分類を示す。また、フィールドidVendorは、このディスクリプタを送信したUSBデバイスのベンダを識別するベンダIDである。同様に、フィールドidProductは、ディスクリプタを送信したUSBデバイスの製品を示す。これらフィールドidVendorおよびフィールドidProductにより、USBデバイスの機種を識別することができる。
【0032】
図6は、コンフィグレーションディスクリプタを示す。コンフィグレーションディスクリプタは、ターゲットのUSB構成情報を含み、インターフェイスディスクリプタの数を示す情報を持つ。図6において、コンフィグレーションディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドwTotalLength、フィールドbNumInterface、フィールドbConfigurationValueおよびフィールドiConfiguration、フィールドbmAttributesおよびフィールドbMaxPowerを含む。
【0033】
図7は、インターフェイスディスクリプタを示す。インターフェイスディスクリプタは、インターフェイスの情報を含み、インターフェイスが持つエンドポイントディスクリプタの数を持つ。図7において、インターフェイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbInterfaceNumber、フィールドbAlternateSetting、フィールドbNumEndpoint、フィールドbInterfaceClass、フィールドbInterfaceSubclass、フィールドbInterfaceProtocolおよびフィールドiInterfaceを含む。
【0034】
また、図8は、エンドポイントディスクリプタを示す。エンドポイントディスクリプタは、通信用のポートであるエンドポイントの情報を含む。図8において、エンドポイントディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbEndpointAddress、フィールドbmAttributes、フィールドwMaxPacketSizeおよびフィールドbIntervalを含む。なお、図6〜図8に示したコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタは、本発明と深い関連がないため、説明を省略する。
【0035】
図9は、このディスクリプタ取得処理の一例のシーケンスを示す。図9の例では、USBホストコントローラ11は、USBデバイス20から、処理aでデバイスディスクリプタを取得し、処理bでコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタを取得している。
【0036】
すなわち、USBホストコントローラ11は、USBデバイス20に対して、標準リクエストであるコマンドGET_DESCRIPTORを、デバイスディスクリプタを指定するパラメータを指定して発行する(SEQ100)。USBデバイス20は、このコマンドに応答して、デバイスディスクリプタをUSBホストコントローラ11に返す(SEQ101)。
【0037】
以降、同様にして、USBホストコントローラ11は、コンフィグレーションディスクリプタを指定するパラメータをコマンドGET_DESCRIPTORに指定してUSBデバイス20に対して発行し、コンフィグレーションディスクリプタを取得する(SEQ102、SEQ103)。USBホストコントローラ11は、以降同様にしてSEQ102およびSEQ103の処理を繰り返し、USBデバイス20からインターフェイスディスクリプタおよびエンドポイントディスクリプタを取得する。
【0038】
(第1の実施形態によるクラスドライバ割り当て処理)
次に、本第1の実施形態による、USBデバイス20に対するクラスドライバ割り当て処理について、図10のフローチャートを用いて説明する。このフローチャートによる処理は、制御部10内のOS32に含まれるUSBスタック40において実行される。この図10のフローチャートの処理に先んじて、クラスドライバ割り当てを制御するための制御情報であるクラスドライバフラグの値が「無効」を示す値に初期設定される。
【0039】
ステップS100で、検知部41により、USBホストコントローラ11の所定のUSBデバイス接続ポートにUSBデバイス20が接続されたことが検知され、ステップS101で、当該USBデバイス20のUSBデバイス接続ポートへの電気的な接続が確立され接続状態とされる。次のステップS102で、上述した図9のシーケンスに従い、当該USBデバイス20が持つディスクリプタの取得が行われる。取得したディスクリプタは、USBホストコントローラ11からUSBスタック40に渡される。
【0040】
次のステップS103で、判定部42により、クラスドライバフラグの値が「有効」および「無効」の何れを示すかが判定される。若し、クラスドライバフラグの値が「無効」を示す値であると判定された場合、処理がステップS104に移行される。ステップS104では、ドライバ割当部43が、ジェネリッククラスドライバを、ステップS101で接続状態とされた、接続中のUSBデバイス20に対して割り当てる。
【0041】
ジェネリッククラスドライバは、上述したように、USBデバイス20の機能に依存しない処理のみを行う。したがって、アプリケーション30がジェネリッククラスドライバを介てのUSBデバイス20の制御に対応していない限り、接続中のUSBデバイス20をアプリケーション30から制御することができない。そのため、接続中のUSBデバイス20が想定外の動作を取ることがない。
【0042】
しかしながら、このジェネリッククラスドライバが割り当てられた状態では、接続中のUSBデバイス20が本当に使用したい場合であっても当該USBデバイス20が機能しないことになる。そのため、ステップS105以下の手順に従い、必要に応じて、適当なクラスドライバを当該USBデバイス20に対して割り当てる。
【0043】
次のステップS105で、USBスタック40は、ユーザからのクラスドライバフラグを「有効」にする指示を待機する。当該指示がユーザから与えられたら、処理はステップS106に移行され、クラスドライバフラグの値が「有効」を示す値に変更される。
【0044】
例えば、USBスタック40は、ユーザに対してクラスドライバフラグを「有効」にする指示の入力を促す入力画面を表示するための表示命令をグラフィクスI/F31に渡す。グラフィクスI/F31は、この表示命令に従い描画処理を行い表示制御信号を生成して表示制御部13に対して出力し、表示制御部13は、この表示制御信号に従いディスプレイ22に対して入力画面を表示させる。この入力画面に従い、ユーザにより入力デバイス21が所定に操作されて当該指示が入力される。
【0045】
ステップS106でクラスドライバフラグの値が「有効」を示す値に変更されると、処理はステップS107に移行され、USBスタック40によりUSBデバイス接続ポートがリセットされる。このとき、ドライバ割当部43は、現在USBデバイス接続ポートに接続されているUSBデバイス20に対するジェネリッククラスドライバの割り当てを解除する。これにより、当該USBデバイス20は、USBデバイス接続ポートから一旦USBケーブルを抜いて、再び挿入したのと同様の状態となる。
【0046】
ステップS107でUSBデバイス接続ポートがリセットされると、処理がステップS101に戻される。
【0047】
一方、上述のステップS103で、判定部42によりクラスドライバフラグの値が「有効」を示す値であると判定された場合、処理がステップS108に移行される。ステップS108では、ドライバ割当部43により、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれるか否かが判定される。
【0048】
すなわち、ドライバ割当部43は、ステップS102で当該USBデバイス20から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドbDeviceClassおよびフィールドbDeviceSubclassの値を抽出し、当該USBデバイス20に対して設定されているクラスを取得する。ドライバ割当部43は、このクラスと一致するクラスのクラスドライバがクラスドライバ群44に含まれるか否かを判定する。
【0049】
ステップS108で、ドライバ割当部43が、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれないと判定した場合、処理をステップS109に移行させる。ステップS109では、USBスタック40がクラスドライバフラグの値を「無効」を示す値に変更し、処理をステップS104に移行させる。
【0050】
一方、ステップS108で、ドライバ割当部43が、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれると判定した場合、処理がステップS110に移行される。
【0051】
ステップS110では、ドライバ割当部43が、クラスドライバ群44に保持されるリスト45を参照し、接続中のUSBデバイス20が、リスト45に登録されているか否かを判定する。より具体的には、ドライバ割当部43は、ステップS102で当該USBデバイス20から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドidVendorおよびフィールドidProductの値の組を抽出し、抽出された値の組がリスト45に登録されているか否かを判定する。
【0052】
若し、接続中のUSBデバイス20がリスト45に登録されていると判定した場合、ドライバ割当部43は、処理をステップS111に移行させ、適当なクラスドライバを当該USBデバイス20に対して割り当てる。より具体的には、接続中のUSBデバイス20からステップS102で取得したデバイスディスクリプタに示されるクラスのクラスドライバを、当該USBデバイス20に割り当てる。
【0053】
ステップS111でクラスドライバのUSBデバイス20に対する割り当てが行われると、処理がステップS112に移行され、USBスタック40によりクラスドライバフラグの値が「無効」に変更される。そして、処理がステップS100に戻される。
【0054】
一方、ステップS110で、接続中のUSBデバイス20がリスト45に登録されていないと判定した場合、ドライバ割当部43は、処理をステップS113に移行させる。ステップS113では、ドライバ割当部43は、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可するか否かを判定する。
【0055】
このステップS113での判定は、ユーザ入力に応じて行われる。例えば、ドライバ割当部43は、ユーザに対して判定の入力を促す入力画面を表示させる命令をグラフィクスI/F31に渡す。グラフィクスI/F31は、この命令に応じて入力画面の描画処理などを行い、描画された入力画面を表示させるための表示制御信号を生成する。この表示制御信号は、表示制御部13に対して出力され、表示制御部13により、ディスプレイ22に対して入力画面が表示される。
【0056】
図11は、ステップS113でディスプレイ22に表示される入力画面50の一例を示す。このように、入力画面50は、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスのクラスドライバを当該USBデバイス20に対して割り当てる旨を示すメッセージ53が表示される。この例では、取得したクラスが「キーボード」とされ、メッセージ53が「接続されたUSBデバイスはキーボードとして認識します。よろしいですか?」とされている。入力画面50に対して、さらに、このメッセージ53に対する肯定を選択するOKボタン51と、否定を選択するNGボタン52とが表示される。ユーザは、この入力画面50の表示に従い、入力デバイス21を用いてボタン51およびボタン52のうち何れかを選択する。
【0057】
若し、ステップS113でOKボタン51が選択された場合には、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可すると判定される。この場合、処理はステップS111に移行され、ドライバ割当部43は、接続中のUSBデバイス20のデバイスディスクリプタから取得したクラスのクラスドライバを、当該USBデバイス20に対して割り当てる。それと共に、当該USBデバイス20のデバイスディスクリプタから取得した機種を特定する識別情報(フィールドidVendorおよびフィールドidProduct)の情報を、リスト45に対して追加する。
【0058】
一方、ステップS113でNGボタン52が選択された場合には、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可しないと判定される。この場合、処理はステップS109に移行され、USBスタック40がクラスドライバフラグの値を「無効」を示す値に変更し、ドライバ割当部43がステップS104でジェネリッククラスドライバを当該USBデバイス20に対して割り当てる。
【0059】
上述のように、本第1の実施形態では、USBデバイス20の接続直後には、ジェネリッククラスドライバを当該USBデバイス20に対して割り当てる。そして、その後、当該USBデバイス20のデバイスディスクリプタから取得したクラスのクラスドライバを、当該USBデバイス20に対して割り当てるか否かを、ユーザの選択に基づき決定する。したがって、当該USBデバイス20が本来属するクラスとは異なるクラスが設定されている場合であっても、当該USBデバイス20が想定外の動作をしてしまうことが防がれる。
【0060】
(第2の実施形態)
次に、本発明の第2の実施形態について説明する。本第2の実施形態は、上述の第1の実施形態で説明した情報処理装置1を、画像読取機能、印刷機能、FAX機能、複写機能といった複数の機能を統合させた複合機100に適用させた例である。図12は、本第2の実施形態による複合機100の一例の構成を示す。
【0061】
制御部110において、ASIC(Application Specific Integrated Circuit)120に対して、CPU121と、RAM122と、HDD123と、PCI(Peripheral Component Interconnect)バス115および130とが接続される。
【0062】
PCIバス130に対して、例えばシリアルI/F140と、NIC(Network Interface Card)141と、USBデバイス142と、USBホストコントローラ143とが接続されると共に、その他のH/W(ハードウェア)144が接続される。
【0063】
ASIC120は、CPU121と、RAM122、HDD123およびPCIバス130との間の通信の調停を行う。HDD123は、各種データや、CPU121が動作するためのプログラムが予め格納される。CPU121は、HDD123に格納されるプログラムに従い、RAM122をワークメモリとして用いて、この画像形成装置100の全体の動作を制御する。これらCPU121、RAM122、HDD123、PCIバス130およびASIC120の機能が、図1に示した制御部10の機能に対応する。
【0064】
HDD123は、プログラムの動作に伴い生成される中間データをHDD123に一時的に格納してもよいし、後述する、PCIバス115を介して供給される画像データなどを格納することもできる。また、ユーザ操作に応じた操作部114からの制御信号が、ASIC120を介してCPU121に供給される。これにより、ユーザ操作に応じた複合機100の制御が可能となる。操作部114は、図1に示した入力I/F12および表示制御部13、ならびに、これらに接続される入力デバイス21およびディスプレイ22に対応する。
【0065】
図2に示したアプリケーション30、グラフィクスI/F31およびOS32は、CPU121上で動作するプログラムとして実現される。OS32に含まれるUSBスタック40は、CPU121上で動作するプログラムのモジュールとして実現される。また、USBスタック40のクラスドライバ群44に含まれる各クラスドライバやリスト45は、例えばHDD123に保持される。
【0066】
シリアルI/F140は、例えばRS−232Cといったシリアル通信のためのインターフェイスである。NIC141は、インターネットやLAN(Local Area Network)に対する通信を制御する。USBデバイス142は、この画像形成装置100に内蔵され、固定的に用いられるUSB機器である。USBホストコントローラ143は、USBによるバスの管理を行い、外部機器としてのUSBデバイス102を接続することができる。USBホストコントローラ143は、図1に示すUSBホストコントローラ11に対応する。
【0067】
PCIバス115に対して、スキャナ装置111、プロッタ装置112およびFAX制御ユニット113が接続される。スキャナ装置111は、原稿画像を読みとって画像データとして出力する。出力された画像データは、PCIバス115およびASIC120を介してCPU121に供給され、HDD123に格納される。プロッタ装置112は、例えばHDD123から読み出された画像データがASIC120およびPCIバス115を介して供給され、この画像データに基づき用紙に対して印字処理を行う。FAX制御ユニット113は、例えば公衆電話回線と接続され、スキャナ装置111で読み取った原稿画像を、指定した送信先に送信する。
【0068】
なお、本第2の実施形態の複合機100でプログラムとして実行されるUSBスタック40は、HDD123などに予め記憶されて提供される。これに限らず、本第2の実施形態の複合機100で実行されるUSBスタック40は、インストール可能な形式または実行可能な形式のファイルでCD(Compact Disk)、フレキシブルディスク(FD)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【0069】
さらに、本第2の実施形態の複合機100で実行されるUSBスタック40を、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本第2の実施形態の複合機100で実行されるUSBスタック40をインターネットなどのネットワーク経由で提供または配布するように構成してもよい。
【0070】
本第2の実施形態の複合機100で実行されるプログラムであるUSBスタック40は、上述した各部(検知部41、判定部42およびドライバ割当部43)を含むモジュール構成となっており、実際のハードウェアとしては、CPU121が例えばHDD123などからUSBスタック40を読み出して実行することにより、これら各部が主記憶装置(例えばRAM122)上にロードされ、検知部41、判定部42およびドライバ割当部43が主記憶装置上に生成されるようになっている。また、クラスドライバ群44は、各部の実行に伴い、必要に応じてHDD123から主記憶装置に読み込まれる。
【符号の説明】
【0071】
1 情報処理装置
10 制御部
11 USBホストコントローラ
20 USBデバイス
30 アプリケーション
31 グラフィクスI/F
32 OS
40 USBスタック
41 検知部
42 判定部
43 ドライバ割当部
44 クラスドライバ群
50 入力画面
51 OKボタン
52 NGボタン
【先行技術文献】
【特許文献】
【0072】
【特許文献1】特開2010−039616号公報
【特許文献2】特開2010−165128号公報
【技術分野】
【0001】
本発明は、外部機器を挿抜可能に接続するインターフェイスを有する情報処理装置およびプログラムに関する。
【背景技術】
【0002】
電子機器同士を接続する方法として、ホストマシンと複数の周辺機器(デバイス)との間をシリアル通信で接続する、USB(Universal Serial Bus)接続が普及している。USBは、活線挿抜が可能なインターフェイス規格であり、機器の動作中における抜き取りや接続が可能となっている。
【0003】
従来、コンピュータのUSBインターフェイスに対してUSBデバイスを接続すると、USBデバイスとコンピュータとの間で制御情報の転送処理が行われる。この転送処理により、オペレーションシステム(OS)が、USBデバイスから当該USBデバイス固有の情報が格納されるディスクリプタを取得し、チェックする。このディスクリプタには、USBデバイスの属性を表す「クラス」と呼ばれる情報が含まれる。OSは、このクラス情報から、当該USBデバイスに適したデバイスドライバを判断し、当該USBデバイスに対して自動的に割り当てる。
【0004】
USBデバイスには、本来属するべきクラスとは異なるクラスが設定された特殊な製品があることが既に知られている。例えば、近年では、USB接続により使用するIC(Integrated Circuit)カードリーダが利用されている。一方、OSには、HID(Human Interface Device)クラスに対応するクラスドライバを標準的に装備しているものが多い。HIDクラスに属さないUSBデバイスを、HIDクラスのUSBデバイスとして設定することで、当該USBデバイス固有のデバイスドライバのインストールに要する手間が削減され、利便性が向上する。
【0005】
例えば、特許文献1には、本来HIDクラスのUSBデバイスではないICカードリーダに関し、クラスをHIDクラスとして設定し、HIDクラスのデバイスドライバを利用するICカードリーダが開示されている。
【0006】
また、特許文献2には、本来のクラスのクラスドライバではない、ジェネリックなUSBデバイスドライバを介してアプリケーションが特殊な制御を行うことにより、本来のクラスとは異なるクラスが設定されたUSBデバイスを制御するようにした技術が開示されている。この特許文献2では、HIDクラスとして実装された磁気カードリーダを認証用デバイスとして利用する場合に適用した例が記載されている。特許文献2によれば、本来属するクラスとは異なるクラスが設定されたUSBデバイスを使用することができる。
【発明の概要】
【発明が解決しようとする課題】
【0007】
ところで、USBデバイスに対して本来属するクラスとは異なるクラスを設定して使用する場合、この異なるクラスのクラスドライバに割り当てられたUSBデバイスを正常に動作するように制御できるアプリケーションを用意する必要がある。若し、何らかの制約によりこのアプリケーションを使用できない場合、本来属するクラスとは異なるクラスのクラスドライバが割り当てられたUSBデバイスが使用できないばかりか、想定外の動作をしてしまうおそれがあるという問題点があった。
【0008】
上述した特許文献2に記載の技術では、USBデバイスを制御するためのアプリケーションを使用することが前提となっている。そのため、当該アプリケーションが使用できない場合に、本来属するクラスとは異なるクラスのクラスデバイスが割り当てられたUSBデバイスを正常に制御できないおそれがある問題は、解消できていない。
【0009】
本発明は、上記に鑑みてなされたものであって、本来属するクラスとは異なるクラスが設定されたUSBデバイスの、想定外の動作を防止することを目的とする。
【課題を解決するための手段】
【0010】
上述した課題を解決し、目的を達成するために、本発明は、接続手段に接続された外部機器から、外部機器の少なくとも機能を示す識別情報を取得する取得手段と、外部機器を制御するためのデバイスドライバを保持する保持手段と、デバイスドライバの接続手段に接続された外部機器への割り当てを、制御情報に従い制御する制御手段とを有し、保持手段は、外部機器の機能に依存しない処理を行う汎用デバイスドライバを少なくとも保持し、制御手段は、制御情報が第1の値を示している場合に、接続手段に接続された外部機器に対して汎用デバイスドライバを割り当て、制御情報が第2の値を示している場合に、外部機器から取得された識別情報に示される外部機器の機能に対応するデバイスドライバが保持手段に保持されているか否かを判定する第1の判定を行い、第1の判定により保持されていないと判定した場合に、汎用デバイスドライバを外部機器に割り当てることを特徴とする。
【0011】
また、本発明は、接続手段に接続された外部機器から、外部機器の少なくとも機能を示す識別情報を取得する取得ステップと、制御情報が第1の値を示している場合に、接続手段に接続された外部機器に対して、保持手段に保持される、部機器の機能に依存しない処理を行う汎用デバイスドライバを割り当て、制御情報が第2の値を示している場合に、外部機器から取得された識別情報に示される外部機器の機能に対応するデバイスドライバが保持手段に保持されているか否かの判定を行い、判定により保持されていないと判定した場合に、汎用デバイスドライバを外部機器に割り当てる制御ステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【0012】
本発明によれば、本来属するクラスとは異なるクラスが設定されたUSBデバイスの、想定外の動作を防止できるという効果を奏する。
【図面の簡単な説明】
【0013】
【図1】図1は、本発明の第1の実施形態に適用可能な情報処理装置の一例の構成を概略的に示すブロック図である。
【図2】図2は、本発明の第1の実施形態に適用可能な情報処理装置の機能を説明するための一例の機能ブロック図である。
【図3】図3は、USBスタックの機能を説明するための一例の機能ブロック図である。
【図4】図4は、USBデバイスを特定する識別情報のリストの一例を示す略線図である。
【図5】図5は、デバイスディスクリプタを示す略線図である。
【図6】図6は、コンフィグレーションディスクリプタを示す略線図である。
【図7】図7は、インターフェイスディスクリプタを示す略線図である。
【図8】図8は、エンドポイントディスクリプタを示す略線図である。
【図9】図9は、ディスクリプタ取得処理の一例のシーケンスを示す図である。
【図10】図10は、本発明の第1の実施形態による、USBデバイスに対するクラスドライバ割り当て処理を示す一例のフローチャートである。
【図11】図11は、ディスプレイに表示される入力画面の一例を示す略線図である。
【図12】図12は、本発明の第2の実施形態による複合機の一例の構成を示すブロック図である。
【発明を実施するための形態】
【0014】
(第1の実施形態の構成例)
以下に添付図面を参照して、本発明に係る情報処理装置およびプログラムの第1の実施形態を詳細に説明する。図1は、本第1の実施形態に適用可能な情報処理装置1の一例の構成を概略的に示す。情報処理装置1は、制御部10、USB(Universal Serial Bus)ホストコントローラ11、入力インターフェイス(I/F)12および表示制御部13を有する。制御部10は、例えばCPU(Central Processing Unit)、RAM(Random Access Memory)、ROM(Read Only Memory)、HDD(Hard Disk Drive)などを有し、CPUが、ROMやHDDに予め格納されたプログラムに従い、RAMをワークメモリとして用いて、この情報処理装置1の全体の動作を制御する。
【0015】
USBホストコントローラ11は、外部機器であるUSBデバイス20を接続するためのUSBデバイス接続ポートを有し、制御部10の制御に従い、USBデバイス接続ポートに接続されるUSBデバイス20との通信を制御する。
【0016】
入力I/F12は、例えばキーボードやポインティングデバイス(マウスなど)といった入力デバイス21が接続され、入力デバイス21に対してなされたユーザ入力に応じた制御信号を制御部10に対して出力する。表示制御部13は、ディスプレイ22が接続され、プログラムに従い制御部10で生成された表示制御信号を、ディスプレイ22が表示可能な形式の信号に変換してディスプレイ22に対して出力する。
【0017】
図2は、図1に示した情報処理装置1の機能を説明するための一例の機能ブロック図である。なお、図2において、上述の図1と共通する部分には同一の符号を付し、詳細な説明を省略する。図2において、点線の上側が制御部10上で動作するソフトウェアを示し、点線の下側がハードウェアを示す。制御部10上で動作するソフトウェアは、アプリケーション30と、グラフィクスインターフェイス(I/F)31と、汎用のOS(Operating System)であるOS32とを含む。OS32は、ハードウェアであるUSBホストコントローラ11との仲介を行うUSBスタック40を含む。
【0018】
アプリケーション30は、OS32との間で関数呼び出しとその戻り値送信、ならびに、メッセージの送受信などを行うことで、所定の機能を実現する。グラフィクスI/F31は、アプリケーション30やOS32からの命令に従い描画処理などを行い、所定の表示のための表示制御信号を生成し、表示制御部13に対して出力する。OS32は、ソフトウェアとハードウェアとの仲介を行うと共に、制御部10において動作する各プログラムを統括的に管理する。
【0019】
図3は、USBスタック40の機能を説明するための一例の機能ブロック図である。なお、図3において、上述した図1と共通する部分には同一の符号を付して、詳細な説明を省略する。USBスタック40は、検知部41、判定部42およびドライバ割当部43を有すると共に、クラスドライバ群44を有する。USBスタック40は、OS32の命令に従いUSBホストコントローラ11と通信を行う。また、USBスタック40は、USBホストコントローラ11との通信の結果に応じて、所定の表示を行うためのメッセージなどを出力する。このメッセージは、例えば図示されないグラフィクスI/F31により描画され表示制御信号に変換されて表示制御部13に対して出力される。
【0020】
USBスタック40において、検知部41は、USBホストコントローラ11に対してUSBデバイス20が接続されたことを検知する。判定部42は、検知部41に検知された、接続中のUSBデバイス20に対するデバイスドライバの割り当てに関する判定を行う。ドライバ割当部43は、判定部42の判定結果に基づき、接続中のUSBデバイス20に対してデバイスドライバを割り当てる。
【0021】
クラスドライバ群44は、USBデバイス20を制御するためのデバイスドライバの一種であるクラスドライバを保持する。なお、クラスは、USBデバイス20の機能を抽象化して分類したものである。クラスドライバは、USBデバイス20のクラスとしての動作を制御するための上位のデバイスドライバである。クラスドライバ群44は、少なくともジェネリック(汎用)クラスのクラスドライバ(ジェネリッククラスドライバと呼ぶ)を含む。ジェネリッククラスは、例えば、USBデバイスの機能に依存しない処理のみを行うクラスである。
【0022】
クラスドライバ群44は、ジェネリッククラスのクラスドライバに限られず、ハブクラス、キーボードクラスのドライバなど他のクラスのクラスドライバを含むことができる。また、クラスドライバ群44に対して、他のクラスドライバを適宜追加していくことも可能である。
【0023】
クラスドライバ群44は、さらに、USBデバイス20を特定する識別情報のリストを保持する。このリストは、後述するようにしてUSBデバイス20から取得されたデバイスディスクリプタに示されるクラスに対応するクラスドライバの割り当てを許可したUSBデバイス20を特定する情報が登録される。図4は、このリスト45の一例の構成を示す。この図4の例では、USBデバイス20を特定する識別情報として、USBデバイス20のベンダ名「VendorID」および機種名「ProductID」が用いられている。これらベンダ名「VendorID」および機種名「ProductID」は、それぞれ、後述するデバイスディスクリプタに含まれるフィールド「idVendor」および「idProduct」の情報を用いる。
【0024】
例えば、リスト45は、デフォルトでは空の状態となっており、後述する処理に従い適宜、情報が追加登録される。これに限らず、動作が既知のUSBデバイス20の情報をリスト45に対して予め登録しておいてもよい。
【0025】
(USB通信手順)
次に、USBデバイス20がUSBホストコントローラ11に対して接続された際の、通信までの手順について、概略的に説明する。先ず、例えばUSBデバイス20がUSBホストコントローラ11のUSBデバイス接続ポートに接続されると、USBホストコントローラ11にUSBデバイス20が認識されその旨が検知部41に通知される。また、USBホストコントローラ11は、接続されたUSBデバイス20に対してアドレスを割り当てる。
【0026】
USBホストコントローラ11は、接続されたUSBデバイス20に対するアドレスの割り当てが行われると、当該USBデバイス20のディスクリプタの取得を開始する。USB通信では、USBホストコントローラ11とUSBデバイス20との通信シーケンスにおいて、USBホストコントローラ11は、ターゲットであるUSBデバイス20からコントロール転送によってディスクリプタを取得する。ディスクリプタは、ターゲットの特性、属性などの情報を含み、デバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの4種類がある。
【0027】
なお、以下では、適宜、これらデバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの4つのディスクリプタを纏めて標準ディスクリプタと呼ぶ。
【0028】
図5〜図8を用いて、これら4種類のディスクリプタについて、概略的に説明する。なお、図5〜図8において、オフセットは、先頭からのバイト数を示す。各フィールドは、図5〜図8においてフィールド名の右に示されるデータ長を有し、各ディスクリプタにおいて、オフセットとデータ長とから、特定のフィールドにアクセスすることができる。
【0029】
図5は、デバイスディスクリプタを示す。デバイスディスクリプタは、このディスクリプタを送信したUSBデバイスを識別するための情報が含まれる。図5において、デバイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbcdUSB、フィールドbDeviceClass、フィールドbDeviceSubclass、フィールドbDeviceProtocol、フィールドbMaxPacketSize0、フィールドidVendor、フィールドidProduct、フィールドbcdDevice、フィールドiManufacturer、フィールドiProduct、フィールドiSerialNumberおよびフィールドbNumConfigurationを含む。
【0030】
これらのうち、フィールドbLengthおよびフィールドbDescriptorTypeは、それぞれディスクリプタのバイト長と種類を示す。これらフィールドbLengthおよびフィールドbDescriptorTypeは、各ディスクリプタに設けられる。
【0031】
デバイスディスクリプタにおいて、フィールドbDeviceClass、フィールドbDeviceSubclassおよびフィールドbDeviceProtocolは、このディスクリプタを送信したUSBデバイスのクラスを示す。クラスは、USBデバイスの機能に基づく分類を示す。また、フィールドidVendorは、このディスクリプタを送信したUSBデバイスのベンダを識別するベンダIDである。同様に、フィールドidProductは、ディスクリプタを送信したUSBデバイスの製品を示す。これらフィールドidVendorおよびフィールドidProductにより、USBデバイスの機種を識別することができる。
【0032】
図6は、コンフィグレーションディスクリプタを示す。コンフィグレーションディスクリプタは、ターゲットのUSB構成情報を含み、インターフェイスディスクリプタの数を示す情報を持つ。図6において、コンフィグレーションディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドwTotalLength、フィールドbNumInterface、フィールドbConfigurationValueおよびフィールドiConfiguration、フィールドbmAttributesおよびフィールドbMaxPowerを含む。
【0033】
図7は、インターフェイスディスクリプタを示す。インターフェイスディスクリプタは、インターフェイスの情報を含み、インターフェイスが持つエンドポイントディスクリプタの数を持つ。図7において、インターフェイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbInterfaceNumber、フィールドbAlternateSetting、フィールドbNumEndpoint、フィールドbInterfaceClass、フィールドbInterfaceSubclass、フィールドbInterfaceProtocolおよびフィールドiInterfaceを含む。
【0034】
また、図8は、エンドポイントディスクリプタを示す。エンドポイントディスクリプタは、通信用のポートであるエンドポイントの情報を含む。図8において、エンドポイントディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbEndpointAddress、フィールドbmAttributes、フィールドwMaxPacketSizeおよびフィールドbIntervalを含む。なお、図6〜図8に示したコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタは、本発明と深い関連がないため、説明を省略する。
【0035】
図9は、このディスクリプタ取得処理の一例のシーケンスを示す。図9の例では、USBホストコントローラ11は、USBデバイス20から、処理aでデバイスディスクリプタを取得し、処理bでコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタを取得している。
【0036】
すなわち、USBホストコントローラ11は、USBデバイス20に対して、標準リクエストであるコマンドGET_DESCRIPTORを、デバイスディスクリプタを指定するパラメータを指定して発行する(SEQ100)。USBデバイス20は、このコマンドに応答して、デバイスディスクリプタをUSBホストコントローラ11に返す(SEQ101)。
【0037】
以降、同様にして、USBホストコントローラ11は、コンフィグレーションディスクリプタを指定するパラメータをコマンドGET_DESCRIPTORに指定してUSBデバイス20に対して発行し、コンフィグレーションディスクリプタを取得する(SEQ102、SEQ103)。USBホストコントローラ11は、以降同様にしてSEQ102およびSEQ103の処理を繰り返し、USBデバイス20からインターフェイスディスクリプタおよびエンドポイントディスクリプタを取得する。
【0038】
(第1の実施形態によるクラスドライバ割り当て処理)
次に、本第1の実施形態による、USBデバイス20に対するクラスドライバ割り当て処理について、図10のフローチャートを用いて説明する。このフローチャートによる処理は、制御部10内のOS32に含まれるUSBスタック40において実行される。この図10のフローチャートの処理に先んじて、クラスドライバ割り当てを制御するための制御情報であるクラスドライバフラグの値が「無効」を示す値に初期設定される。
【0039】
ステップS100で、検知部41により、USBホストコントローラ11の所定のUSBデバイス接続ポートにUSBデバイス20が接続されたことが検知され、ステップS101で、当該USBデバイス20のUSBデバイス接続ポートへの電気的な接続が確立され接続状態とされる。次のステップS102で、上述した図9のシーケンスに従い、当該USBデバイス20が持つディスクリプタの取得が行われる。取得したディスクリプタは、USBホストコントローラ11からUSBスタック40に渡される。
【0040】
次のステップS103で、判定部42により、クラスドライバフラグの値が「有効」および「無効」の何れを示すかが判定される。若し、クラスドライバフラグの値が「無効」を示す値であると判定された場合、処理がステップS104に移行される。ステップS104では、ドライバ割当部43が、ジェネリッククラスドライバを、ステップS101で接続状態とされた、接続中のUSBデバイス20に対して割り当てる。
【0041】
ジェネリッククラスドライバは、上述したように、USBデバイス20の機能に依存しない処理のみを行う。したがって、アプリケーション30がジェネリッククラスドライバを介てのUSBデバイス20の制御に対応していない限り、接続中のUSBデバイス20をアプリケーション30から制御することができない。そのため、接続中のUSBデバイス20が想定外の動作を取ることがない。
【0042】
しかしながら、このジェネリッククラスドライバが割り当てられた状態では、接続中のUSBデバイス20が本当に使用したい場合であっても当該USBデバイス20が機能しないことになる。そのため、ステップS105以下の手順に従い、必要に応じて、適当なクラスドライバを当該USBデバイス20に対して割り当てる。
【0043】
次のステップS105で、USBスタック40は、ユーザからのクラスドライバフラグを「有効」にする指示を待機する。当該指示がユーザから与えられたら、処理はステップS106に移行され、クラスドライバフラグの値が「有効」を示す値に変更される。
【0044】
例えば、USBスタック40は、ユーザに対してクラスドライバフラグを「有効」にする指示の入力を促す入力画面を表示するための表示命令をグラフィクスI/F31に渡す。グラフィクスI/F31は、この表示命令に従い描画処理を行い表示制御信号を生成して表示制御部13に対して出力し、表示制御部13は、この表示制御信号に従いディスプレイ22に対して入力画面を表示させる。この入力画面に従い、ユーザにより入力デバイス21が所定に操作されて当該指示が入力される。
【0045】
ステップS106でクラスドライバフラグの値が「有効」を示す値に変更されると、処理はステップS107に移行され、USBスタック40によりUSBデバイス接続ポートがリセットされる。このとき、ドライバ割当部43は、現在USBデバイス接続ポートに接続されているUSBデバイス20に対するジェネリッククラスドライバの割り当てを解除する。これにより、当該USBデバイス20は、USBデバイス接続ポートから一旦USBケーブルを抜いて、再び挿入したのと同様の状態となる。
【0046】
ステップS107でUSBデバイス接続ポートがリセットされると、処理がステップS101に戻される。
【0047】
一方、上述のステップS103で、判定部42によりクラスドライバフラグの値が「有効」を示す値であると判定された場合、処理がステップS108に移行される。ステップS108では、ドライバ割当部43により、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれるか否かが判定される。
【0048】
すなわち、ドライバ割当部43は、ステップS102で当該USBデバイス20から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドbDeviceClassおよびフィールドbDeviceSubclassの値を抽出し、当該USBデバイス20に対して設定されているクラスを取得する。ドライバ割当部43は、このクラスと一致するクラスのクラスドライバがクラスドライバ群44に含まれるか否かを判定する。
【0049】
ステップS108で、ドライバ割当部43が、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれないと判定した場合、処理をステップS109に移行させる。ステップS109では、USBスタック40がクラスドライバフラグの値を「無効」を示す値に変更し、処理をステップS104に移行させる。
【0050】
一方、ステップS108で、ドライバ割当部43が、接続中のUSBデバイス20のクラスに相当するクラスのクラスドライバがクラスドライバ群44に含まれると判定した場合、処理がステップS110に移行される。
【0051】
ステップS110では、ドライバ割当部43が、クラスドライバ群44に保持されるリスト45を参照し、接続中のUSBデバイス20が、リスト45に登録されているか否かを判定する。より具体的には、ドライバ割当部43は、ステップS102で当該USBデバイス20から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドidVendorおよびフィールドidProductの値の組を抽出し、抽出された値の組がリスト45に登録されているか否かを判定する。
【0052】
若し、接続中のUSBデバイス20がリスト45に登録されていると判定した場合、ドライバ割当部43は、処理をステップS111に移行させ、適当なクラスドライバを当該USBデバイス20に対して割り当てる。より具体的には、接続中のUSBデバイス20からステップS102で取得したデバイスディスクリプタに示されるクラスのクラスドライバを、当該USBデバイス20に割り当てる。
【0053】
ステップS111でクラスドライバのUSBデバイス20に対する割り当てが行われると、処理がステップS112に移行され、USBスタック40によりクラスドライバフラグの値が「無効」に変更される。そして、処理がステップS100に戻される。
【0054】
一方、ステップS110で、接続中のUSBデバイス20がリスト45に登録されていないと判定した場合、ドライバ割当部43は、処理をステップS113に移行させる。ステップS113では、ドライバ割当部43は、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可するか否かを判定する。
【0055】
このステップS113での判定は、ユーザ入力に応じて行われる。例えば、ドライバ割当部43は、ユーザに対して判定の入力を促す入力画面を表示させる命令をグラフィクスI/F31に渡す。グラフィクスI/F31は、この命令に応じて入力画面の描画処理などを行い、描画された入力画面を表示させるための表示制御信号を生成する。この表示制御信号は、表示制御部13に対して出力され、表示制御部13により、ディスプレイ22に対して入力画面が表示される。
【0056】
図11は、ステップS113でディスプレイ22に表示される入力画面50の一例を示す。このように、入力画面50は、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスのクラスドライバを当該USBデバイス20に対して割り当てる旨を示すメッセージ53が表示される。この例では、取得したクラスが「キーボード」とされ、メッセージ53が「接続されたUSBデバイスはキーボードとして認識します。よろしいですか?」とされている。入力画面50に対して、さらに、このメッセージ53に対する肯定を選択するOKボタン51と、否定を選択するNGボタン52とが表示される。ユーザは、この入力画面50の表示に従い、入力デバイス21を用いてボタン51およびボタン52のうち何れかを選択する。
【0057】
若し、ステップS113でOKボタン51が選択された場合には、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可すると判定される。この場合、処理はステップS111に移行され、ドライバ割当部43は、接続中のUSBデバイス20のデバイスディスクリプタから取得したクラスのクラスドライバを、当該USBデバイス20に対して割り当てる。それと共に、当該USBデバイス20のデバイスディスクリプタから取得した機種を特定する識別情報(フィールドidVendorおよびフィールドidProduct)の情報を、リスト45に対して追加する。
【0058】
一方、ステップS113でNGボタン52が選択された場合には、接続中のUSBデバイス20から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該USBデバイス20を割り当てることを許可しないと判定される。この場合、処理はステップS109に移行され、USBスタック40がクラスドライバフラグの値を「無効」を示す値に変更し、ドライバ割当部43がステップS104でジェネリッククラスドライバを当該USBデバイス20に対して割り当てる。
【0059】
上述のように、本第1の実施形態では、USBデバイス20の接続直後には、ジェネリッククラスドライバを当該USBデバイス20に対して割り当てる。そして、その後、当該USBデバイス20のデバイスディスクリプタから取得したクラスのクラスドライバを、当該USBデバイス20に対して割り当てるか否かを、ユーザの選択に基づき決定する。したがって、当該USBデバイス20が本来属するクラスとは異なるクラスが設定されている場合であっても、当該USBデバイス20が想定外の動作をしてしまうことが防がれる。
【0060】
(第2の実施形態)
次に、本発明の第2の実施形態について説明する。本第2の実施形態は、上述の第1の実施形態で説明した情報処理装置1を、画像読取機能、印刷機能、FAX機能、複写機能といった複数の機能を統合させた複合機100に適用させた例である。図12は、本第2の実施形態による複合機100の一例の構成を示す。
【0061】
制御部110において、ASIC(Application Specific Integrated Circuit)120に対して、CPU121と、RAM122と、HDD123と、PCI(Peripheral Component Interconnect)バス115および130とが接続される。
【0062】
PCIバス130に対して、例えばシリアルI/F140と、NIC(Network Interface Card)141と、USBデバイス142と、USBホストコントローラ143とが接続されると共に、その他のH/W(ハードウェア)144が接続される。
【0063】
ASIC120は、CPU121と、RAM122、HDD123およびPCIバス130との間の通信の調停を行う。HDD123は、各種データや、CPU121が動作するためのプログラムが予め格納される。CPU121は、HDD123に格納されるプログラムに従い、RAM122をワークメモリとして用いて、この画像形成装置100の全体の動作を制御する。これらCPU121、RAM122、HDD123、PCIバス130およびASIC120の機能が、図1に示した制御部10の機能に対応する。
【0064】
HDD123は、プログラムの動作に伴い生成される中間データをHDD123に一時的に格納してもよいし、後述する、PCIバス115を介して供給される画像データなどを格納することもできる。また、ユーザ操作に応じた操作部114からの制御信号が、ASIC120を介してCPU121に供給される。これにより、ユーザ操作に応じた複合機100の制御が可能となる。操作部114は、図1に示した入力I/F12および表示制御部13、ならびに、これらに接続される入力デバイス21およびディスプレイ22に対応する。
【0065】
図2に示したアプリケーション30、グラフィクスI/F31およびOS32は、CPU121上で動作するプログラムとして実現される。OS32に含まれるUSBスタック40は、CPU121上で動作するプログラムのモジュールとして実現される。また、USBスタック40のクラスドライバ群44に含まれる各クラスドライバやリスト45は、例えばHDD123に保持される。
【0066】
シリアルI/F140は、例えばRS−232Cといったシリアル通信のためのインターフェイスである。NIC141は、インターネットやLAN(Local Area Network)に対する通信を制御する。USBデバイス142は、この画像形成装置100に内蔵され、固定的に用いられるUSB機器である。USBホストコントローラ143は、USBによるバスの管理を行い、外部機器としてのUSBデバイス102を接続することができる。USBホストコントローラ143は、図1に示すUSBホストコントローラ11に対応する。
【0067】
PCIバス115に対して、スキャナ装置111、プロッタ装置112およびFAX制御ユニット113が接続される。スキャナ装置111は、原稿画像を読みとって画像データとして出力する。出力された画像データは、PCIバス115およびASIC120を介してCPU121に供給され、HDD123に格納される。プロッタ装置112は、例えばHDD123から読み出された画像データがASIC120およびPCIバス115を介して供給され、この画像データに基づき用紙に対して印字処理を行う。FAX制御ユニット113は、例えば公衆電話回線と接続され、スキャナ装置111で読み取った原稿画像を、指定した送信先に送信する。
【0068】
なお、本第2の実施形態の複合機100でプログラムとして実行されるUSBスタック40は、HDD123などに予め記憶されて提供される。これに限らず、本第2の実施形態の複合機100で実行されるUSBスタック40は、インストール可能な形式または実行可能な形式のファイルでCD(Compact Disk)、フレキシブルディスク(FD)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【0069】
さらに、本第2の実施形態の複合機100で実行されるUSBスタック40を、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本第2の実施形態の複合機100で実行されるUSBスタック40をインターネットなどのネットワーク経由で提供または配布するように構成してもよい。
【0070】
本第2の実施形態の複合機100で実行されるプログラムであるUSBスタック40は、上述した各部(検知部41、判定部42およびドライバ割当部43)を含むモジュール構成となっており、実際のハードウェアとしては、CPU121が例えばHDD123などからUSBスタック40を読み出して実行することにより、これら各部が主記憶装置(例えばRAM122)上にロードされ、検知部41、判定部42およびドライバ割当部43が主記憶装置上に生成されるようになっている。また、クラスドライバ群44は、各部の実行に伴い、必要に応じてHDD123から主記憶装置に読み込まれる。
【符号の説明】
【0071】
1 情報処理装置
10 制御部
11 USBホストコントローラ
20 USBデバイス
30 アプリケーション
31 グラフィクスI/F
32 OS
40 USBスタック
41 検知部
42 判定部
43 ドライバ割当部
44 クラスドライバ群
50 入力画面
51 OKボタン
52 NGボタン
【先行技術文献】
【特許文献】
【0072】
【特許文献1】特開2010−039616号公報
【特許文献2】特開2010−165128号公報
【特許請求の範囲】
【請求項1】
接続手段に接続された外部機器から、該外部機器の少なくとも機能を示す識別情報を取得する取得手段と、
前記外部機器を制御するためのデバイスドライバを保持する保持手段と、
デバイスドライバの前記接続手段に接続された前記外部機器への割り当てを、制御情報に従い制御する制御手段と
を有し、
前記保持手段は、外部機器の機能に依存しない処理を行う汎用デバイスドライバを少なくとも保持し、
前記制御手段は、
前記制御情報が第1の値を示している場合に、前記接続手段に接続された外部機器に対して前記汎用デバイスドライバを割り当て、
該制御情報が第2の値を示している場合に、該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されているか否かを判定する第1の判定を行い、該第1の判定により保持されていないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てる
ことを特徴とする情報処理装置。
【請求項2】
前記識別情報は、外部機器の機種を特定する情報をさらに含み、
前記保持手段は、外部機器から取得した前記識別情報に示される機能を割り当てることを許可した該外部機器の機種を特定する情報のリストをさらに保持し、
前記制御手段は、
前記第1の判定により、前記取得手段で該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されていると判定した場合に、該識別情報に含まれる前記機種を特定する情報に基づき、該機種を特定する情報が前記リストに存在するか否かを判定する第2の判定を行い、
該第2の判定により存在しないと判定した場合に、該識別情報に示される該外部機器の機能に対応するデバイスドライバを該外部機器に割り当てることを許可するか否かを判定する第3の判定を行い、
該第3の判定により許可しないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てると共に、前記制御情報を前記第1の値に変更する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記制御手段は、
前記第3の判定を、ユーザ入力に従い行う
ことを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記制御手段は、
前記第3の判定により許可すると判定した場合に、デバイスドライバの割り当てを許可する外部機器の機種を特定する情報を前記リストに追加する
ことを特徴とする請求項2または請求項3に記載の情報処理装置。
【請求項5】
前記制御手段は、
前記汎用デバイスドライバを外部機器に割り当てた後、ユーザ入力に応じて、該外部機器に対する該汎用デバイスドライバの割り当てを解除すると共に、前記制御情報を前記第2の値に変更する
ことを特徴とする請求項1乃至請求項4の何れか1項に記載の情報処理装置。
【請求項6】
接続手段に接続された外部機器から、該外部機器の少なくとも機能を示す識別情報を取得する取得ステップと、
制御情報が第1の値を示している場合に、前記接続手段に接続された外部機器に対して、保持手段に保持される、部機器の機能に依存しない処理を行う汎用デバイスドライバを割り当て、
前記制御情報が第2の値を示している場合に、該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されているか否かの判定を行い、該判定により保持されていないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てる制御ステップと
をコンピュータに実行させるためのプログラム。
【請求項1】
接続手段に接続された外部機器から、該外部機器の少なくとも機能を示す識別情報を取得する取得手段と、
前記外部機器を制御するためのデバイスドライバを保持する保持手段と、
デバイスドライバの前記接続手段に接続された前記外部機器への割り当てを、制御情報に従い制御する制御手段と
を有し、
前記保持手段は、外部機器の機能に依存しない処理を行う汎用デバイスドライバを少なくとも保持し、
前記制御手段は、
前記制御情報が第1の値を示している場合に、前記接続手段に接続された外部機器に対して前記汎用デバイスドライバを割り当て、
該制御情報が第2の値を示している場合に、該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されているか否かを判定する第1の判定を行い、該第1の判定により保持されていないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てる
ことを特徴とする情報処理装置。
【請求項2】
前記識別情報は、外部機器の機種を特定する情報をさらに含み、
前記保持手段は、外部機器から取得した前記識別情報に示される機能を割り当てることを許可した該外部機器の機種を特定する情報のリストをさらに保持し、
前記制御手段は、
前記第1の判定により、前記取得手段で該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されていると判定した場合に、該識別情報に含まれる前記機種を特定する情報に基づき、該機種を特定する情報が前記リストに存在するか否かを判定する第2の判定を行い、
該第2の判定により存在しないと判定した場合に、該識別情報に示される該外部機器の機能に対応するデバイスドライバを該外部機器に割り当てることを許可するか否かを判定する第3の判定を行い、
該第3の判定により許可しないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てると共に、前記制御情報を前記第1の値に変更する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記制御手段は、
前記第3の判定を、ユーザ入力に従い行う
ことを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記制御手段は、
前記第3の判定により許可すると判定した場合に、デバイスドライバの割り当てを許可する外部機器の機種を特定する情報を前記リストに追加する
ことを特徴とする請求項2または請求項3に記載の情報処理装置。
【請求項5】
前記制御手段は、
前記汎用デバイスドライバを外部機器に割り当てた後、ユーザ入力に応じて、該外部機器に対する該汎用デバイスドライバの割り当てを解除すると共に、前記制御情報を前記第2の値に変更する
ことを特徴とする請求項1乃至請求項4の何れか1項に記載の情報処理装置。
【請求項6】
接続手段に接続された外部機器から、該外部機器の少なくとも機能を示す識別情報を取得する取得ステップと、
制御情報が第1の値を示している場合に、前記接続手段に接続された外部機器に対して、保持手段に保持される、部機器の機能に依存しない処理を行う汎用デバイスドライバを割り当て、
前記制御情報が第2の値を示している場合に、該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されているか否かの判定を行い、該判定により保持されていないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てる制御ステップと
をコンピュータに実行させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2012−181698(P2012−181698A)
【公開日】平成24年9月20日(2012.9.20)
【国際特許分類】
【出願番号】特願2011−44414(P2011−44414)
【出願日】平成23年3月1日(2011.3.1)
【出願人】(000006747)株式会社リコー (37,907)
【Fターム(参考)】
【公開日】平成24年9月20日(2012.9.20)
【国際特許分類】
【出願日】平成23年3月1日(2011.3.1)
【出願人】(000006747)株式会社リコー (37,907)
【Fターム(参考)】
[ Back to top ]