(57)【特許請求の範囲】
【請求項１】
接続手段に接続された外部機器から、該外部機器の少なくとも機能を示す識別情報を取得する取得手段と、
前記外部機器を制御するためのデバイスドライバを保持する保持手段と、
デバイスドライバの前記接続手段に接続された前記外部機器への割り当てを、制御情報に従い制御する制御手段と
を有し、
前記保持手段は、外部機器の機能に依存しない処理を行う汎用デバイスドライバを少なくとも保持し、
前記制御手段は、
前記制御情報が第１の値を示している場合に、前記接続手段に接続された外部機器に対して前記汎用デバイスドライバを割り当て、
該制御情報が第２の値を示している場合に、該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されているか否かを判定する第１の判定を行い、
該第１の判定により保持されていないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当て、
前記第１の判定により保持されていると判定した場合に、該識別情報に示される該外部機器の機能に対応するデバイスドライバを該外部機器に割り当てることを許可するか否かを判定する第２の判定をユーザ入力に従い行い、
該第２の判定により許可しないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てると共に、該制御情報を該第１の値に変更する
ことを特徴とする情報処理装置。
【請求項２】
前記識別情報は、外部機器の機種を特定する情報をさらに含み、
前記保持手段は、外部機器から取得した前記識別情報に示される機能を割り当てることを許可した該外部機器の機種を特定する情報のリストをさらに保持し、
前記制御手段は、
前記第１の判定により、前記取得手段で該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されていると判定した場合に、該識別情報に含まれる前記機種を特定する情報に基づき、該機種を特定する情報が前記リストに存在するか否かを判定する第３の判定を行い、
該第３の判定により存在しないと判定した場合に、前記第２の判定を行う
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御手段は、
前記第２の判定により許可すると判定した場合に、デバイスドライバの割り当てを許可する外部機器の機種を特定する情報を前記リストに追加する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記制御手段は、
前記汎用デバイスドライバを外部機器に割り当てた後、ユーザ入力に応じて、該外部機器に対する該汎用デバイスドライバの割り当てを解除すると共に、前記制御情報を前記第２の値に変更する
ことを特徴とする請求項１乃至請求項３の何れか１項に記載の情報処理装置。
【請求項５】
接続手段に接続された外部機器から、該外部機器の少なくとも機能を示す識別情報を取得する取得ステップと、
制御情報が第１の値を示している場合に、前記接続手段に接続された外部機器に対して、保持手段に保持される、外部機器の機能に依存しない処理を行う汎用デバイスドライバを割り当て、
前記制御情報が第２の値を示している場合に、該外部機器から取得された前記識別情報に示される該外部機器の機能に対応するデバイスドライバが前記保持手段に保持されているか否かの第１の判定を行い、
該第１の判定により保持されていないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当て、
該第１の判定により保持されていると判定した場合に、該識別情報に示される該外部機器の機能に対応するデバイスドライバを該外部機器に割り当てることを許可するか否かを判定する第２の判定をユーザ入力に従い行い、
該第２の判定により許可しないと判定した場合に、前記汎用デバイスドライバを該外部機器に割り当てると共に、該制御情報を該第１の値に変更する制御ステップと
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部機器を挿抜可能に接続するインターフェイスを有する情報処理装置およびプログラムに関する。
【背景技術】
【０００２】
電子機器同士を接続する方法として、ホストマシンと複数の周辺機器（デバイス）との間をシリアル通信で接続する、ＵＳＢ(Universal  Serial  Bus)接続が普及している。ＵＳＢは、活線挿抜が可能なインターフェイス規格であり、機器の動作中における抜き取りや接続が可能となっている。
【０００３】
従来、コンピュータのＵＳＢインターフェイスに対してＵＳＢデバイスを接続すると、ＵＳＢデバイスとコンピュータとの間で制御情報の転送処理が行われる。この転送処理により、オペレーションシステム（ＯＳ）が、ＵＳＢデバイスから当該ＵＳＢデバイス固有の情報が格納されるディスクリプタを取得し、チェックする。このディスクリプタには、ＵＳＢデバイスの属性を表す「クラス」と呼ばれる情報が含まれる。ＯＳは、このクラス情報から、当該ＵＳＢデバイスに適したデバイスドライバを判断し、当該ＵＳＢデバイスに対して自動的に割り当てる。
【０００４】
ＵＳＢデバイスには、本来属するべきクラスとは異なるクラスが設定された特殊な製品があることが既に知られている。例えば、近年では、ＵＳＢ接続により使用するＩＣ(Integrated  Circuit)カードリーダが利用されている。一方、ＯＳには、ＨＩＤ(Human  Interface  Device)クラスに対応するクラスドライバを標準的に装備しているものが多い。ＨＩＤクラスに属さないＵＳＢデバイスを、ＨＩＤクラスのＵＳＢデバイスとして設定することで、当該ＵＳＢデバイス固有のデバイスドライバのインストールに要する手間が削減され、利便性が向上する。
【０００５】
例えば、特許文献１には、本来ＨＩＤクラスのＵＳＢデバイスではないＩＣカードリーダに関し、クラスをＨＩＤクラスとして設定し、ＨＩＤクラスのデバイスドライバを利用するＩＣカードリーダが開示されている。
【０００６】
また、特許文献２には、本来のクラスのクラスドライバではない、ジェネリックなＵＳＢデバイスドライバを介してアプリケーションが特殊な制御を行うことにより、本来のクラスとは異なるクラスが設定されたＵＳＢデバイスを制御するようにした技術が開示されている。この特許文献２では、ＨＩＤクラスとして実装された磁気カードリーダを認証用デバイスとして利用する場合に適用した例が記載されている。特許文献２によれば、本来属するクラスとは異なるクラスが設定されたＵＳＢデバイスを使用することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、ＵＳＢデバイスに対して本来属するクラスとは異なるクラスを設定して使用する場合、この異なるクラスのクラスドライバに割り当てられたＵＳＢデバイスを正常に動作するように制御できるアプリケーションを用意する必要がある。若し、何らかの制約によりこのアプリケーションを使用できない場合、本来属するクラスとは異なるクラスのクラスドライバが割り当てられたＵＳＢデバイスが使用できないばかりか、想定外の動作をしてしまうおそれがあるという問題点があった。
【０００８】
上述した特許文献２に記載の技術では、ＵＳＢデバイスを制御するためのアプリケーションを使用することが前提となっている。そのため、当該アプリケーションが使用できない場合に、本来属するクラスとは異なるクラスのクラスデバイスが割り当てられたＵＳＢデバイスを正常に制御できないおそれがある問題は、解消できていない。
【０００９】
本発明は、上記に鑑みてなされたものであって、本来属するクラスとは異なるクラスが設定されたＵＳＢデバイスの、想定外の動作を防止することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明は、接続手段に接続された外部機器から、外部機器の少なくとも機能を示す識別情報を取得する取得手段と、外部機器を制御するためのデバイスドライバを保持する保持手段と、デバイスドライバの接続手段に接続された外部機器への割り当てを、制御情報に従い制御する制御手段とを有し、保持手段は、外部機器の機能に依存しない処理を行う汎用デバイスドライバを少なくとも保持し、制御手段は、制御情報が第１の値を示している場合に、接続手段に接続された外部機器に対して汎用デバイスドライバを割り当て、制御情報が第２の値を示している場合に、外部機器から取得された識別情報に示される外部機器の機能に対応するデバイスドライバが保持手段に保持されているか否かを判定する第１の判定を行い、第１の判定により保持されていないと判定した場合に、汎用デバイスドライバを外部機器に割り当て、第１の判定により保持されていると判定した場合に、識別情報に示される外部機器の機能に対応するデバイスドライバを外部機器に割り当てることを許可するか否かを判定する第２の判定をユーザ入力に従い行い、第２の判定により許可しないと判定した場合に、汎用デバイスドライバを外部機器に割り当てると共に、制御情報を第１の値に変更することを特徴とする。
【００１１】
また、本発明は、接続手段に接続された外部機器から、外部機器の少なくとも機能を示す識別情報を取得する取得ステップと、制御情報が第１の値を示している場合に、接続手段に接続された外部機器に対して、保持手段に保持される、部機器の機能に依存しない処理を行う汎用デバイスドライバを割り当て、制御情報が第２の値を示している場合に、外部機器から取得された識別情報に示される外部機器の機能に対応するデバイスドライバが保持手段に保持されているか否かの第１の判定を行い、第１の判定により保持されていないと判定した場合に、汎用デバイスドライバを外部機器に割り当て、第１の判定により保持されていると判定した場合に、識別情報に示される外部機器の機能に対応するデバイスドライバを外部機器に割り当てることを許可するか否かを判定する第２の判定をユーザ入力に従い行い、第２の判定により許可しないと判定した場合に、汎用デバイスドライバを外部機器に割り当てると共に、制御情報を第１の値に変更する制御ステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、本来属するクラスとは異なるクラスが設定されたＵＳＢデバイスの、想定外の動作を防止できるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の第１の実施形態に適用可能な情報処理装置の一例の構成を概略的に示すブロック図である。
【図２】図２は、本発明の第１の実施形態に適用可能な情報処理装置の機能を説明するための一例の機能ブロック図である。
【図３】図３は、ＵＳＢスタックの機能を説明するための一例の機能ブロック図である。
【図４】図４は、ＵＳＢデバイスを特定する識別情報のリストの一例を示す略線図である。
【図５】図５は、デバイスディスクリプタを示す略線図である。
【図６】図６は、コンフィグレーションディスクリプタを示す略線図である。
【図７】図７は、インターフェイスディスクリプタを示す略線図である。
【図８】図８は、エンドポイントディスクリプタを示す略線図である。
【図９】図９は、ディスクリプタ取得処理の一例のシーケンスを示す図である。
【図１０】図１０は、本発明の第１の実施形態による、ＵＳＢデバイスに対するクラスドライバ割り当て処理を示す一例のフローチャートである。
【図１１】図１１は、ディスプレイに表示される入力画面の一例を示す略線図である。
【図１２】図１２は、本発明の第２の実施形態による複合機の一例の構成を示すブロック図である。
【発明を実施するための形態】
【００１４】
（第１の実施形態の構成例）
以下に添付図面を参照して、本発明に係る情報処理装置およびプログラムの第１の実施形態を詳細に説明する。図１は、本第１の実施形態に適用可能な情報処理装置１の一例の構成を概略的に示す。情報処理装置１は、制御部１０、ＵＳＢ(Universal  Serial  Bus)ホストコントローラ１１、入力インターフェイス（Ｉ／Ｆ）１２および表示制御部１３を有する。制御部１０は、例えばＣＰＵ(Central  Processing  Unit)、ＲＡＭ(Random  Access  Memory)、ＲＯＭ(Read  Only  Memory)、ＨＤＤ(Hard  Disk  Drive)などを有し、ＣＰＵが、ＲＯＭやＨＤＤに予め格納されたプログラムに従い、ＲＡＭをワークメモリとして用いて、この情報処理装置１の全体の動作を制御する。
【００１５】
ＵＳＢホストコントローラ１１は、外部機器であるＵＳＢデバイス２０を接続するためのＵＳＢデバイス接続ポートを有し、制御部１０の制御に従い、ＵＳＢデバイス接続ポートに接続されるＵＳＢデバイス２０との通信を制御する。
【００１６】
入力Ｉ／Ｆ１２は、例えばキーボードやポインティングデバイス（マウスなど）といった入力デバイス２１が接続され、入力デバイス２１に対してなされたユーザ入力に応じた制御信号を制御部１０に対して出力する。表示制御部１３は、ディスプレイ２２が接続され、プログラムに従い制御部１０で生成された表示制御信号を、ディスプレイ２２が表示可能な形式の信号に変換してディスプレイ２２に対して出力する。
【００１７】
図２は、図１に示した情報処理装置１の機能を説明するための一例の機能ブロック図である。なお、図２において、上述の図１と共通する部分には同一の符号を付し、詳細な説明を省略する。図２において、点線の上側が制御部１０上で動作するソフトウェアを示し、点線の下側がハードウェアを示す。制御部１０上で動作するソフトウェアは、アプリケーション３０と、グラフィクスインターフェイス（Ｉ／Ｆ）３１と、汎用のＯＳ(Operating  System)であるＯＳ３２とを含む。ＯＳ３２は、ハードウェアであるＵＳＢホストコントローラ１１との仲介を行うＵＳＢスタック４０を含む。
【００１８】
アプリケーション３０は、ＯＳ３２との間で関数呼び出しとその戻り値送信、ならびに、メッセージの送受信などを行うことで、所定の機能を実現する。グラフィクスＩ／Ｆ３１は、アプリケーション３０やＯＳ３２からの命令に従い描画処理などを行い、所定の表示のための表示制御信号を生成し、表示制御部１３に対して出力する。ＯＳ３２は、ソフトウェアとハードウェアとの仲介を行うと共に、制御部１０において動作する各プログラムを統括的に管理する。
【００１９】
図３は、ＵＳＢスタック４０の機能を説明するための一例の機能ブロック図である。なお、図３において、上述した図１と共通する部分には同一の符号を付して、詳細な説明を省略する。ＵＳＢスタック４０は、検知部４１、判定部４２およびドライバ割当部４３を有すると共に、クラスドライバ群４４を有する。ＵＳＢスタック４０は、ＯＳ３２の命令に従いＵＳＢホストコントローラ１１と通信を行う。また、ＵＳＢスタック４０は、ＵＳＢホストコントローラ１１との通信の結果に応じて、所定の表示を行うためのメッセージなどを出力する。このメッセージは、例えば図示されないグラフィクスＩ／Ｆ３１により描画され表示制御信号に変換されて表示制御部１３に対して出力される。
【００２０】
ＵＳＢスタック４０において、検知部４１は、ＵＳＢホストコントローラ１１に対してＵＳＢデバイス２０が接続されたことを検知する。判定部４２は、検知部４１に検知された、接続中のＵＳＢデバイス２０に対するデバイスドライバの割り当てに関する判定を行う。ドライバ割当部４３は、判定部４２の判定結果に基づき、接続中のＵＳＢデバイス２０に対してデバイスドライバを割り当てる。
【００２１】
クラスドライバ群４４は、ＵＳＢデバイス２０を制御するためのデバイスドライバの一種であるクラスドライバを保持する。なお、クラスは、ＵＳＢデバイス２０の機能を抽象化して分類したものである。クラスドライバは、ＵＳＢデバイス２０のクラスとしての動作を制御するための上位のデバイスドライバである。クラスドライバ群４４は、少なくともジェネリック（汎用）クラスのクラスドライバ（ジェネリッククラスドライバと呼ぶ）を含む。ジェネリッククラスは、例えば、ＵＳＢデバイスの機能に依存しない処理のみを行うクラスである。
【００２２】
クラスドライバ群４４は、ジェネリッククラスのクラスドライバに限られず、ハブクラス、キーボードクラスのドライバなど他のクラスのクラスドライバを含むことができる。また、クラスドライバ群４４に対して、他のクラスドライバを適宜追加していくことも可能である。
【００２３】
クラスドライバ群４４は、さらに、ＵＳＢデバイス２０を特定する識別情報のリストを保持する。このリストは、後述するようにしてＵＳＢデバイス２０から取得されたデバイスディスクリプタに示されるクラスに対応するクラスドライバの割り当てを許可したＵＳＢデバイス２０を特定する情報が登録される。図４は、このリスト４５の一例の構成を示す。この図４の例では、ＵＳＢデバイス２０を特定する識別情報として、ＵＳＢデバイス２０のベンダ名「VendorID」および機種名「ProductID」が用いられている。これらベンダ名「VendorID」および機種名「ProductID」は、それぞれ、後述するデバイスディスクリプタに含まれるフィールド「idVendor」および「idProduct」の情報を用いる。
【００２４】
例えば、リスト４５は、デフォルトでは空の状態となっており、後述する処理に従い適宜、情報が追加登録される。これに限らず、動作が既知のＵＳＢデバイス２０の情報をリスト４５に対して予め登録しておいてもよい。
【００２５】
（ＵＳＢ通信手順）
次に、ＵＳＢデバイス２０がＵＳＢホストコントローラ１１に対して接続された際の、通信までの手順について、概略的に説明する。先ず、例えばＵＳＢデバイス２０がＵＳＢホストコントローラ１１のＵＳＢデバイス接続ポートに接続されると、ＵＳＢホストコントローラ１１にＵＳＢデバイス２０が認識されその旨が検知部４１に通知される。また、ＵＳＢホストコントローラ１１は、接続されたＵＳＢデバイス２０に対してアドレスを割り当てる。
【００２６】
ＵＳＢホストコントローラ１１は、接続されたＵＳＢデバイス２０に対するアドレスの割り当てが行われると、当該ＵＳＢデバイス２０のディスクリプタの取得を開始する。ＵＳＢ通信では、ＵＳＢホストコントローラ１１とＵＳＢデバイス２０との通信シーケンスにおいて、ＵＳＢホストコントローラ１１は、ターゲットであるＵＳＢデバイス２０からコントロール転送によってディスクリプタを取得する。ディスクリプタは、ターゲットの特性、属性などの情報を含み、デバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの４種類がある。
【００２７】
なお、以下では、適宜、これらデバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの４つのディスクリプタを纏めて標準ディスクリプタと呼ぶ。
【００２８】
図５〜図８を用いて、これら４種類のディスクリプタについて、概略的に説明する。なお、図５〜図８において、オフセットは、先頭からのバイト数を示す。各フィールドは、図５〜図８においてフィールド名の右に示されるデータ長を有し、各ディスクリプタにおいて、オフセットとデータ長とから、特定のフィールドにアクセスすることができる。
【００２９】
図５は、デバイスディスクリプタを示す。デバイスディスクリプタは、このディスクリプタを送信したＵＳＢデバイスを識別するための情報が含まれる。図５において、デバイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbcdUSB、フィールドbDeviceClass、フィールドbDeviceSubclass、フィールドbDeviceProtocol、フィールドbMaxPacketSize0、フィールドidVendor、フィールドidProduct、フィールドbcdDevice、フィールドiManufacturer、フィールドiProduct、フィールドiSerialNumberおよびフィールドbNumConfigurationを含む。
【００３０】
これらのうち、フィールドbLengthおよびフィールドbDescriptorTypeは、それぞれディスクリプタのバイト長と種類を示す。これらフィールドbLengthおよびフィールドbDescriptorTypeは、各ディスクリプタに設けられる。
【００３１】
デバイスディスクリプタにおいて、フィールドbDeviceClass、フィールドbDeviceSubclassおよびフィールドbDeviceProtocolは、このディスクリプタを送信したＵＳＢデバイスのクラスを示す。クラスは、ＵＳＢデバイスの機能に基づく分類を示す。また、フィールドidVendorは、このディスクリプタを送信したＵＳＢデバイスのベンダを識別するベンダＩＤである。同様に、フィールドidProductは、ディスクリプタを送信したＵＳＢデバイスの製品を示す。これらフィールドidVendorおよびフィールドidProductにより、ＵＳＢデバイスの機種を識別することができる。
【００３２】
図６は、コンフィグレーションディスクリプタを示す。コンフィグレーションディスクリプタは、ターゲットのＵＳＢ構成情報を含み、インターフェイスディスクリプタの数を示す情報を持つ。図６において、コンフィグレーションディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドwTotalLength、フィールドbNumInterface、フィールドbConfigurationValueおよびフィールドiConfiguration、フィールドbmAttributesおよびフィールドbMaxPowerを含む。
【００３３】
図７は、インターフェイスディスクリプタを示す。インターフェイスディスクリプタは、インターフェイスの情報を含み、インターフェイスが持つエンドポイントディスクリプタの数を持つ。図７において、インターフェイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbInterfaceNumber、フィールドbAlternateSetting、フィールドbNumEndpoint、フィールドbInterfaceClass、フィールドbInterfaceSubclass、フィールドbInterfaceProtocolおよびフィールドiInterfaceを含む。
【００３４】
また、図８は、エンドポイントディスクリプタを示す。エンドポイントディスクリプタは、通信用のポートであるエンドポイントの情報を含む。図８において、エンドポイントディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbEndpointAddress、フィールドbmAttributes、フィールドwMaxPacketSizeおよびフィールドbIntervalを含む。なお、図６〜図８に示したコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタは、本発明と深い関連がないため、説明を省略する。
【００３５】
図９は、このディスクリプタ取得処理の一例のシーケンスを示す。図９の例では、ＵＳＢホストコントローラ１１は、ＵＳＢデバイス２０から、処理ａでデバイスディスクリプタを取得し、処理ｂでコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタを取得している。
【００３６】
すなわち、ＵＳＢホストコントローラ１１は、ＵＳＢデバイス２０に対して、標準リクエストであるコマンドGET＿DESCRIPTORを、デバイスディスクリプタを指定するパラメータを指定して発行する（ＳＥＱ１００）。ＵＳＢデバイス２０は、このコマンドに応答して、デバイスディスクリプタをＵＳＢホストコントローラ１１に返す（ＳＥＱ１０１）。
【００３７】
以降、同様にして、ＵＳＢホストコントローラ１１は、コンフィグレーションディスクリプタを指定するパラメータをコマンドGET＿DESCRIPTORに指定してＵＳＢデバイス２０に対して発行し、コンフィグレーションディスクリプタを取得する（ＳＥＱ１０２、ＳＥＱ１０３）。ＵＳＢホストコントローラ１１は、以降同様にしてＳＥＱ１０２およびＳＥＱ１０３の処理を繰り返し、ＵＳＢデバイス２０からインターフェイスディスクリプタおよびエンドポイントディスクリプタを取得する。
【００３８】
（第１の実施形態によるクラスドライバ割り当て処理）
次に、本第１の実施形態による、ＵＳＢデバイス２０に対するクラスドライバ割り当て処理について、図１０のフローチャートを用いて説明する。このフローチャートによる処理は、制御部１０内のＯＳ３２に含まれるＵＳＢスタック４０において実行される。この図１０のフローチャートの処理に先んじて、クラスドライバ割り当てを制御するための制御情報であるクラスドライバフラグの値が「無効」を示す値に初期設定される。
【００３９】
ステップＳ１００で、検知部４１により、ＵＳＢホストコントローラ１１の所定のＵＳＢデバイス接続ポートにＵＳＢデバイス２０が接続されたことが検知され、ステップＳ１０１で、当該ＵＳＢデバイス２０のＵＳＢデバイス接続ポートへの電気的な接続が確立され接続状態とされる。次のステップＳ１０２で、上述した図９のシーケンスに従い、当該ＵＳＢデバイス２０が持つディスクリプタの取得が行われる。取得したディスクリプタは、ＵＳＢホストコントローラ１１からＵＳＢスタック４０に渡される。
【００４０】
次のステップＳ１０３で、判定部４２により、クラスドライバフラグの値が「有効」および「無効」の何れを示すかが判定される。若し、クラスドライバフラグの値が「無効」を示す値であると判定された場合、処理がステップＳ１０４に移行される。ステップＳ１０４では、ドライバ割当部４３が、ジェネリッククラスドライバを、ステップＳ１０１で接続状態とされた、接続中のＵＳＢデバイス２０に対して割り当てる。
【００４１】
ジェネリッククラスドライバは、上述したように、ＵＳＢデバイス２０の機能に依存しない処理のみを行う。したがって、アプリケーション３０がジェネリッククラスドライバを介てのＵＳＢデバイス２０の制御に対応していない限り、接続中のＵＳＢデバイス２０をアプリケーション３０から制御することができない。そのため、接続中のＵＳＢデバイス２０が想定外の動作を取ることがない。
【００４２】
しかしながら、このジェネリッククラスドライバが割り当てられた状態では、接続中のＵＳＢデバイス２０が本当に使用したい場合であっても当該ＵＳＢデバイス２０が機能しないことになる。そのため、ステップＳ１０５以下の手順に従い、必要に応じて、適当なクラスドライバを当該ＵＳＢデバイス２０に対して割り当てる。
【００４３】
次のステップＳ１０５で、ＵＳＢスタック４０は、ユーザからのクラスドライバフラグを「有効」にする指示を待機する。当該指示がユーザから与えられたら、処理はステップＳ１０６に移行され、クラスドライバフラグの値が「有効」を示す値に変更される。
【００４４】
例えば、ＵＳＢスタック４０は、ユーザに対してクラスドライバフラグを「有効」にする指示の入力を促す入力画面を表示するための表示命令をグラフィクスＩ／Ｆ３１に渡す。グラフィクスＩ／Ｆ３１は、この表示命令に従い描画処理を行い表示制御信号を生成して表示制御部１３に対して出力し、表示制御部１３は、この表示制御信号に従いディスプレイ２２に対して入力画面を表示させる。この入力画面に従い、ユーザにより入力デバイス２１が所定に操作されて当該指示が入力される。
【００４５】
ステップＳ１０６でクラスドライバフラグの値が「有効」を示す値に変更されると、処理はステップＳ１０７に移行され、ＵＳＢスタック４０によりＵＳＢデバイス接続ポートがリセットされる。このとき、ドライバ割当部４３は、現在ＵＳＢデバイス接続ポートに接続されているＵＳＢデバイス２０に対するジェネリッククラスドライバの割り当てを解除する。これにより、当該ＵＳＢデバイス２０は、ＵＳＢデバイス接続ポートから一旦ＵＳＢケーブルを抜いて、再び挿入したのと同様の状態となる。
【００４６】
ステップＳ１０７でＵＳＢデバイス接続ポートがリセットされると、処理がステップＳ１０１に戻される。
【００４７】
一方、上述のステップＳ１０３で、判定部４２によりクラスドライバフラグの値が「有効」を示す値であると判定された場合、処理がステップＳ１０８に移行される。ステップＳ１０８では、ドライバ割当部４３により、接続中のＵＳＢデバイス２０のクラスに相当するクラスのクラスドライバがクラスドライバ群４４に含まれるか否かが判定される。
【００４８】
すなわち、ドライバ割当部４３は、ステップＳ１０２で当該ＵＳＢデバイス２０から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドbDeviceClassおよびフィールドbDeviceSubclassの値を抽出し、当該ＵＳＢデバイス２０に対して設定されているクラスを取得する。ドライバ割当部４３は、このクラスと一致するクラスのクラスドライバがクラスドライバ群４４に含まれるか否かを判定する。
【００４９】
ステップＳ１０８で、ドライバ割当部４３が、接続中のＵＳＢデバイス２０のクラスに相当するクラスのクラスドライバがクラスドライバ群４４に含まれないと判定した場合、処理をステップＳ１０９に移行させる。ステップＳ１０９では、ＵＳＢスタック４０がクラスドライバフラグの値を「無効」を示す値に変更し、処理をステップＳ１０４に移行させる。
【００５０】
一方、ステップＳ１０８で、ドライバ割当部４３が、接続中のＵＳＢデバイス２０のクラスに相当するクラスのクラスドライバがクラスドライバ群４４に含まれると判定した場合、処理がステップＳ１１０に移行される。
【００５１】
ステップＳ１１０では、ドライバ割当部４３が、クラスドライバ群４４に保持されるリスト４５を参照し、接続中のＵＳＢデバイス２０が、リスト４５に登録されているか否かを判定する。より具体的には、ドライバ割当部４３は、ステップＳ１０２で当該ＵＳＢデバイス２０から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドidVendorおよびフィールドidProductの値の組を抽出し、抽出された値の組がリスト４５に登録されているか否かを判定する。
【００５２】
若し、接続中のＵＳＢデバイス２０がリスト４５に登録されていると判定した場合、ドライバ割当部４３は、処理をステップＳ１１１に移行させ、適当なクラスドライバを当該ＵＳＢデバイス２０に対して割り当てる。より具体的には、接続中のＵＳＢデバイス２０からステップＳ１０２で取得したデバイスディスクリプタに示されるクラスのクラスドライバを、当該ＵＳＢデバイス２０に割り当てる。
【００５３】
ステップＳ１１１でクラスドライバのＵＳＢデバイス２０に対する割り当てが行われると、処理がステップＳ１１２に移行され、ＵＳＢスタック４０によりクラスドライバフラグの値が「無効」に変更される。そして、処理がステップＳ１００に戻される。
【００５４】
一方、ステップＳ１１０で、接続中のＵＳＢデバイス２０がリスト４５に登録されていないと判定した場合、ドライバ割当部４３は、処理をステップＳ１１３に移行させる。ステップＳ１１３では、ドライバ割当部４３は、接続中のＵＳＢデバイス２０から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該ＵＳＢデバイス２０を割り当てることを許可するか否かを判定する。
【００５５】
このステップＳ１１３での判定は、ユーザ入力に応じて行われる。例えば、ドライバ割当部４３は、ユーザに対して判定の入力を促す入力画面を表示させる命令をグラフィクスＩ／Ｆ３１に渡す。グラフィクスＩ／Ｆ３１は、この命令に応じて入力画面の描画処理などを行い、描画された入力画面を表示させるための表示制御信号を生成する。この表示制御信号は、表示制御部１３に対して出力され、表示制御部１３により、ディスプレイ２２に対して入力画面が表示される。
【００５６】
図１１は、ステップＳ１１３でディスプレイ２２に表示される入力画面５０の一例を示す。このように、入力画面５０は、接続中のＵＳＢデバイス２０から取得したデバイスディスクリプタに示されるクラスのクラスドライバを当該ＵＳＢデバイス２０に対して割り当てる旨を示すメッセージ５３が表示される。この例では、取得したクラスが「キーボード」とされ、メッセージ５３が「接続されたＵＳＢデバイスはキーボードとして認識します。よろしいですか？」とされている。入力画面５０に対して、さらに、このメッセージ５３に対する肯定を選択するＯＫボタン５１と、否定を選択するＮＧボタン５２とが表示される。ユーザは、この入力画面５０の表示に従い、入力デバイス２１を用いてボタン５１およびボタン５２のうち何れかを選択する。
【００５７】
若し、ステップＳ１１３でＯＫボタン５１が選択された場合には、接続中のＵＳＢデバイス２０から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該ＵＳＢデバイス２０を割り当てることを許可すると判定される。この場合、処理はステップＳ１１１に移行され、ドライバ割当部４３は、接続中のＵＳＢデバイス２０のデバイスディスクリプタから取得したクラスのクラスドライバを、当該ＵＳＢデバイス２０に対して割り当てる。それと共に、当該ＵＳＢデバイス２０のデバイスディスクリプタから取得した機種を特定する識別情報（フィールドidVendorおよびフィールドidProduct）の情報を、リスト４５に対して追加する。
【００５８】
一方、ステップＳ１１３でＮＧボタン５２が選択された場合には、接続中のＵＳＢデバイス２０から取得したデバイスディスクリプタに示されるクラスに対応するクラスドライバに当該ＵＳＢデバイス２０を割り当てることを許可しないと判定される。この場合、処理はステップＳ１０９に移行され、ＵＳＢスタック４０がクラスドライバフラグの値を「無効」を示す値に変更し、ドライバ割当部４３がステップＳ１０４でジェネリッククラスドライバを当該ＵＳＢデバイス２０に対して割り当てる。
【００５９】
上述のように、本第１の実施形態では、ＵＳＢデバイス２０の接続直後には、ジェネリッククラスドライバを当該ＵＳＢデバイス２０に対して割り当てる。そして、その後、当該ＵＳＢデバイス２０のデバイスディスクリプタから取得したクラスのクラスドライバを、当該ＵＳＢデバイス２０に対して割り当てるか否かを、ユーザの選択に基づき決定する。したがって、当該ＵＳＢデバイス２０が本来属するクラスとは異なるクラスが設定されている場合であっても、当該ＵＳＢデバイス２０が想定外の動作をしてしまうことが防がれる。
【００６０】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。本第２の実施形態は、上述の第１の実施形態で説明した情報処理装置１を、画像読取機能、印刷機能、ＦＡＸ機能、複写機能といった複数の機能を統合させた複合機１００に適用させた例である。図１２は、本第２の実施形態による複合機１００の一例の構成を示す。
【００６１】
制御部１１０において、ＡＳＩＣ(Application  Specific  Integrated  Circuit)１２０に対して、ＣＰＵ１２１と、ＲＡＭ１２２と、ＨＤＤ１２３と、ＰＣＩ(Peripheral  Component  Interconnect)バス１１５および１３０とが接続される。
【００６２】
ＰＣＩバス１３０に対して、例えばシリアルＩ／Ｆ１４０と、ＮＩＣ(Network  Interface  Card)１４１と、ＵＳＢデバイス１４２と、ＵＳＢホストコントローラ１４３とが接続されると共に、その他のＨ／Ｗ（ハードウェア）１４４が接続される。
【００６３】
ＡＳＩＣ１２０は、ＣＰＵ１２１と、ＲＡＭ１２２、ＨＤＤ１２３およびＰＣＩバス１３０との間の通信の調停を行う。ＨＤＤ１２３は、各種データや、ＣＰＵ１２１が動作するためのプログラムが予め格納される。ＣＰＵ１２１は、ＨＤＤ１２３に格納されるプログラムに従い、ＲＡＭ１２２をワークメモリとして用いて、この画像形成装置１００の全体の動作を制御する。これらＣＰＵ１２１、ＲＡＭ１２２、ＨＤＤ１２３、ＰＣＩバス１３０およびＡＳＩＣ１２０の機能が、図１に示した制御部１０の機能に対応する。
【００６４】
ＨＤＤ１２３は、プログラムの動作に伴い生成される中間データをＨＤＤ１２３に一時的に格納してもよいし、後述する、ＰＣＩバス１１５を介して供給される画像データなどを格納することもできる。また、ユーザ操作に応じた操作部１１４からの制御信号が、ＡＳＩＣ１２０を介してＣＰＵ１２１に供給される。これにより、ユーザ操作に応じた複合機１００の制御が可能となる。操作部１１４は、図１に示した入力Ｉ／Ｆ１２および表示制御部１３、ならびに、これらに接続される入力デバイス２１およびディスプレイ２２に対応する。
【００６５】
図２に示したアプリケーション３０、グラフィクスＩ／Ｆ３１およびＯＳ３２は、ＣＰＵ１２１上で動作するプログラムとして実現される。ＯＳ３２に含まれるＵＳＢスタック４０は、ＣＰＵ１２１上で動作するプログラムのモジュールとして実現される。また、ＵＳＢスタック４０のクラスドライバ群４４に含まれる各クラスドライバやリスト４５は、例えばＨＤＤ１２３に保持される。
【００６６】
シリアルＩ／Ｆ１４０は、例えばＲＳ−２３２Ｃといったシリアル通信のためのインターフェイスである。ＮＩＣ１４１は、インターネットやＬＡＮ(Local  Area  Network)に対する通信を制御する。ＵＳＢデバイス１４２は、この画像形成装置１００に内蔵され、固定的に用いられるＵＳＢ機器である。ＵＳＢホストコントローラ１４３は、ＵＳＢによるバスの管理を行い、外部機器としてのＵＳＢデバイス１０２を接続することができる。ＵＳＢホストコントローラ１４３は、図１に示すＵＳＢホストコントローラ１１に対応する。
【００６７】
ＰＣＩバス１１５に対して、スキャナ装置１１１、プロッタ装置１１２およびＦＡＸ制御ユニット１１３が接続される。スキャナ装置１１１は、原稿画像を読みとって画像データとして出力する。出力された画像データは、ＰＣＩバス１１５およびＡＳＩＣ１２０を介してＣＰＵ１２１に供給され、ＨＤＤ１２３に格納される。プロッタ装置１１２は、例えばＨＤＤ１２３から読み出された画像データがＡＳＩＣ１２０およびＰＣＩバス１１５を介して供給され、この画像データに基づき用紙に対して印字処理を行う。ＦＡＸ制御ユニット１１３は、例えば公衆電話回線と接続され、スキャナ装置１１１で読み取った原稿画像を、指定した送信先に送信する。
【００６８】
なお、本第２の実施形態の複合機１００でプログラムとして実行されるＵＳＢスタック４０は、ＨＤＤ１２３などに予め記憶されて提供される。これに限らず、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０は、インストール可能な形式または実行可能な形式のファイルでＣＤ(Compact  Disk)、フレキシブルディスク（ＦＤ）、ＤＶＤ(Digital  Versatile  Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【００６９】
さらに、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０を、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０をインターネットなどのネットワーク経由で提供または配布するように構成してもよい。
【００７０】
本第２の実施形態の複合機１００で実行されるプログラムであるＵＳＢスタック４０は、上述した各部（検知部４１、判定部４２およびドライバ割当部４３）を含むモジュール構成となっており、実際のハードウェアとしては、ＣＰＵ１２１が例えばＨＤＤ１２３などからＵＳＢスタック４０を読み出して実行することにより、これら各部が主記憶装置（例えばＲＡＭ１２２）上にロードされ、検知部４１、判定部４２およびドライバ割当部４３が主記憶装置上に生成されるようになっている。また、クラスドライバ群４４は、各部の実行に伴い、必要に応じてＨＤＤ１２３から主記憶装置に読み込まれる。
【符号の説明】
【００７１】
１  情報処理装置
１０  制御部
１１  ＵＳＢホストコントローラ
２０  ＵＳＢデバイス
３０  アプリケーション
３１  グラフィクスＩ／Ｆ
３２  ＯＳ
４０  ＵＳＢスタック
４１  検知部
４２  判定部
４３  ドライバ割当部
４４  クラスドライバ群
５０  入力画面
５１  ＯＫボタン
５２  ＮＧボタン
【先行技術文献】
【特許文献】
【００７２】
【特許文献１】特開２０１０−０３９６１６号公報
【特許文献２】特開２０１０−１６５１２８号公報
【図１】
0005703845.tif 000002
【図２】
0005703845.tif 000003
【図３】
0005703845.tif 000004
【図４】
0005703845.tif 000005
【図５】
0005703845.tif 000006
【図６】
0005703845.tif 000007
【図７】
0005703845.tif 000008
【図８】
0005703845.tif 000009
【図９】
0005703845.tif 000010
【図１０】
0005703845.tif 000011
【図１１】
0005703845.tif 000012
【図１２】
0005703845.tif 000013