(57)【要約】【課題】少ないユーザの負担で、本来属するクラスとは異なるクラスが設定されたＵＳＢデバイスの、想定外の動作を防止する。【解決手段】外部機器に依存しない汎用デバイスドライバで、インターフェイスを制御する制御手段と、制御可能な外部機器を特定する制御可能機器識別情報を保持する手段と、入力された機能識別情報に対応したデバイスドライバを有しているかを判定する第１の判定手段と、機器識別情報と保持されている制御可能機器識別情報とを比較して制御可能か否かを判定する第２の判定手段と、外部機器の機能識別情報に対応したデバイスドライバを有していると判定し、インターフェイスを制御可能と判定した場合に、汎用デバイスドライバを外部機器に割り当てる割当手段と、を有する。【選択図】図１３
2014120057.tif 000002
【特許請求の範囲】
【請求項１】
外部機器を活線挿抜可能なインターフェイスと、
前記外部機器に依存しない汎用デバイスドライバで、前記インターフェイスを制御する制御手段と、
前記汎用デバイスドライバを介して前記制御手段から制御可能な外部機器を特定する情報が登録されている制御可能機器識別情報を保持するリスト保持手段と、
前記外部機器を前記インターフェイスに接続時に、前記外部機器から入力された機器仕様情報から前記外部機器の機能識別情報に対応したデバイスドライバを有しているかを判定する第１の判定手段と、
当該機器仕様情報の機器識別情報と前記リスト保持手段により保持されている前記制御可能機器識別情報とを比較して前記制御手段で制御可能か否かを判定する第２の判定手段と、
前記第１の判定手段により前記外部機器の機能識別情報に対応したデバイスドライバを有していると判定し、前記第２の判定手段により前記インターフェイスを前記制御手段で制御可能と判定した場合に、汎用デバイスドライバを前記インターフェイスに接続された外部機器のデバイスドライバに割り当てる割当手段と、
を有する情報処理装置。
【請求項２】
前記リスト保持手段が前記制御可能機器識別情報を取得するのは、情報処理装置の起動後または制御可能機器識別情報更新時の少なくともいずれか一方が行われた場合に取得することを特徴とする、
請求項１に記載の情報処理装置。
【請求項３】
前記制御可能機器識別情報が取得済みであるか否かを判定する第３の判定手段を更に備え、
前記第３の判定手段は、情報処理装置の起動後または制御可能機器識別情報の更新後の少なくともいずれか一方が発生した場合に未取得状態となり、制御可能機器識別情報取得後に取得状態となることを特徴とする、
請求項１に記載の情報処理装置。
【請求項４】
前記第１の判定手段により前記外部機器の機能識別情報に対応しているデバイスドライバを有していないと判定した場合に、汎用デバイスドライバを割り当てることを特徴とする、
請求項１乃至請求項３に記載の情報処理装置。
【請求項５】
前記第２の判定手段により前記インターフェイスを前記制御手段で制御不可能と判定した場合に、前記外部機器の機能識別情報に対応したデバイスドライバを割り当てることを特徴とする、
請求項１乃至請求項３に記載の情報処理装置。
【請求項６】
前記制御可能機器識別情報は、オペレーティングシステムのカーネル部分と、不揮発性メモリ内の少なくともいずれか一方に含まれることを特徴とする
請求項１乃至請求項５に記載の情報処理装置。
【請求項７】
前記不揮発性メモリに格納される前記制御可能機器識別情報は、前記オペレーティングシステムにより更新されることを特徴とする、
請求項１乃至請求項６に記載の情報処理装置。
【請求項８】
前記カーネル部分に格納される前記制御可能機器識別情報は、外部の更新プログラムにより更新されることを特徴とする、
請求項１乃至請求項６に記載の情報処理装置。
【請求項９】
外部機器を活線挿抜可能なインターフェイスと前記外部機器に依存しない汎用デバイスドライバで、前記インターフェイスを制御する制御手段を備えたコンピュータを、
前記汎用デバイスドライバを介して前記制御手段から制御可能な外部機器を特定する情報が登録されている制御可能機器識別情報を保持するリスト保持手段と、
前記外部機器を前記インターフェイスに接続時に、前記外部機器から入力された機器仕様情報から前記外部機器の機能識別情報に対応したデバイスドライバを有しているかを判定する第１の判定手段と、
当該機器仕様情報の機器識別情報と前記リスト保持手段により保持されている前記制御可能機器識別情報とを比較して前記制御手段で制御可能かを判定する第２の判定手段と、
前記第１の判定手段により前記外部機器の機能識別情報に対応したデバイスドライバを有していると判定し、前記第２の判定手段により前記インターフェイスを前記制御手段で制御可能と判定した場合に、汎用デバイスドライバを前記インターフェイスに接続された外部機器のデバイスドライバに割り当てる割当手段と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部機器を接続するインターフェイスを有する情報処理装置、およびプログラムに関する。
【背景技術】
【０００２】
電子機器同士を接続する方法として、ホストマシンと複数の周辺機器（デバイス）との間をシリアル通信で接続する、ＵＳＢ(Universal  Serial  Bus)接続が普及している。ＵＳＢは、活線挿抜が可能なインターフェイス規格であり、機器の動作中における抜き取りや接続が可能となっている。
【０００３】
従来、コンピュータのＵＳＢインターフェイスに対してＵＳＢデバイスを接続すると、ＵＳＢデバイスとコンピュータとの間で制御情報の転送処理が行われる。この転送処理により、オペレーティングシステム（ＯＳ）が、ＵＳＢデバイスから当該ＵＳＢデバイス固有の情報が格納されるディスクリプタを取得し、チェックする。このディスクリプタには、ＵＳＢデバイスの属性を表す「クラス」と呼ばれる情報が含まれる。ＯＳは、このクラス情報から、当該ＵＳＢデバイスに適したデバイスドライバを判断し、クラス情報から判断されたデバイスドライバを、当該ＵＳＢデバイスに対して自動的に割り当てる。
【０００４】
ところで、ＵＳＢデバイスには、本来属するべきクラスとは異なるクラスが設定された特殊な製品があることが既に知られている。例えば、近年では、ＵＳＢ接続により使用するＩＣ(Integrated  Circuit)カードリーダが利用されている。一方、ＯＳには、ＨＩＤ(Human  Interface  Device)クラスに対応するクラスドライバを標準的に装備しているものが多い。ＨＩＤクラスに属さないＵＳＢデバイスを、ＨＩＤクラスのＵＳＢデバイスとして設定することで、当該ＵＳＢデバイス固有のデバイスドライバのインストールに要する手間が削減され、利便性が向上する。
【０００５】
例えば、特許文献１には、本来ＨＩＤクラスのＵＳＢデバイスではないＩＣカードリーダに関し、クラスをＨＩＤクラスとして設定し、ＨＩＤクラスのデバイスドライバを利用するＩＣカードリーダが開示されている。
【０００６】
一方、ＵＳＢデバイスに対して本来属するクラスとは異なるクラスを設定して使用する場合、この異なるクラスのクラスドライバに割り当てられたＵＳＢデバイスを正常に動作するように制御できるアプリケーションを用意する必要がある。若し、何らかの制約によりこのアプリケーションを使用できない場合、本来属するクラスとは異なるクラスのクラスドライバが割り当てられたＵＳＢデバイスが使用できないばかりか、想定外の動作をしてしまうおそれがある。
【０００７】
これに対して、特許文献２には、クラスドライバではないジェネリックなデバイスドライバを介してアプリケーションが特殊な制御を行うことにより、異なるクラスが設定されたＵＳＢデバイスを制御する方法が開示されている。特許文献２によれば、本来属するべきクラスとは異なるクラスが設定されたＵＳＢデバイスを使用することが可能となる。
【０００８】
また、本来属するべきクラスとは異なるクラスが設定されたＵＳＢデバイスを使用する際に、異なるクラスのデバイスドライバに割り当てられて想定外の動作をしてしまうことを防ぐために、デバイスドライバを動的に切り替える技術が提案されている。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところが、上述の特許文献２に開示される技術は、ＵＳＢデバイスを制御するための専用のアプリケーションソフトウェアを使用することが前提とされたもので、アプリケーションソフトウェアに大きく依存する。そのため、若し何らかの制約でＵＳＢデバイスを制御するためのアプリケーションソフトウェアを使用できない場合、異なるクラスのデバイスは異なるクラスドライバに割り当てられてしまい、使用できないどころか、想定外の動作をしてしまうおそれがあるという問題点があった。
【００１０】
また、上述の提案技術では、下記のように、ユーザへの負担が大きかった。第１に、デバイスドライバの割当を動的に切り替えるためには、ＵＳＢデバイスの接続されたポートのリセットが必須であり、リセット後再度ＵＳＢデバイスの接続を認識するまでユーザが待機する必要がある。第２に、提案技術では、動的なドライバの切り替えをユーザからの指示に応じて行うため、適切な切り替え指示を出すためには、ユーザがＵＳＢのクラスの知識を有している必要がある。第３に、提案技術では、リストに登録されていないデバイスを接続する度に、ユーザに対してクラスドライバへの割当の要否の入力を要求するため、ユーザは、その都度判断する必要がある。
【００１１】
本発明は、上記に鑑みてなされたものであって、少ないユーザの負担で、本来属するクラスとは異なるクラスが設定されたＵＳＢデバイスの、想定外の動作を防止することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するために、本発明の情報処理装置は、外部機器を活線挿抜可能なインターフェイスと、前記外部機器に依存しない汎用デバイスドライバで、前記インターフェイスを制御する制御手段と、前記汎用デバイスドライバを介して前記制御手段から制御可能な外部機器を特定する情報が登録されている制御可能機器識別情報を保持するリスト保持手段と、前記外部機器を前記インターフェイスに接続時に、前記外部機器から入力された機器仕様情報から前記外部機器の機能識別情報に対応したデバイスドライバを有しているかを判定する第１の判定手段と、当該機器仕様情報の機器識別情報と前記リスト保持手段により保持されている前記制御可能機器識別情報とを比較して前記制御手段で制御可能かを判定する第２の判定手段と、前記第１の判定手段により前記外部機器の機能識別情報に対応したデバイスドライバを有していると判定し、前記第２の判定手段により前記インターフェイスを前記制御手段で制御可能と判定した場合に、汎用デバイスドライバを前記インターフェイスに接続された外部機器のデバイスドライバに割り当てる割当手段と、を有する。
【００１３】
上述した課題を解決し、目的を達成するために、本発明のプログラムは、外部機器を活線挿抜可能なインターフェイスと制御手段を備えたコンピュータを、前記外部機器に依存しない汎用デバイスドライバで、前記インターフェイスを制御する制御手段と、前記汎用デバイスドライバを介して前記制御手段から制御可能な外部機器を特定する情報が登録されている制御可能機器識別情報を保持するリスト保持手段と、前記外部機器を前記インターフェイスに接続時に、前記外部機器から入力された機器仕様情報から前記外部機器の機能識別情報に対応したデバイスドライバを有しているかを判定する第１の判定手段と、当該機器仕様情報の機器識別情報と前記リスト保持手段により保持されている前記制御可能機器識別情報とを比較して前記制御手段で制御可能かを判定する第２の判定手段と、前記第１の判定手段により前記外部機器の機能識別情報に対応したデバイスドライバを有していると判定し、前記第２の判定手段により前記インターフェイスを前記制御手段で制御可能と判定した場合に、汎用デバイスドライバを前記インターフェイスに接続された外部機器のデバイスドライバに割り当てる割当手段と、して機能させる。
【発明の効果】
【００１４】
本発明によれば、少ないユーザの負担で、本来属するクラスとは異なるクラスが設定されたＵＳＢデバイスの、想定外の動作を防止できるという効果を奏する。
【００１５】
さらに、本来属するクラスとは異なるデバイスドライバが設定されたＵＳＢデバイスを接続して使用する際に、予めデバイスリストを取得することでデバイスリストの読み込み時間を削減し、ユーザの不要な待ち時間が発生することを防ぐことができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、第１の実施形態に係る情報処理装置の一例の構成を概略的に示すブロック図である。
【図２】図２は、制御部の一例の構成を示すブロック図である。
【図３】図３は、情報処理装置の機能を説明するための一例の機能ブロック図である。
【図４】図４は、ＵＳＢスタックの機能を説明するための一例の機能ブロック図である。
【図５】図５は、ＮＶＲＡＭからのデバイスリスト取得の処理を概略的に示す図である。
【図６】図６は、デバイスリストの一例の構成を示す略線図である。
【図７】図７は、デバイスディスクリプタを示す略線図である。
【図８】図８は、コンフィグレーションディスクリプタを示す略線図である。
【図９】図９は、インターフェイスディスクリプタを示す略線図である。
【図１０】図１０は、エンドポイントディスクリプタを示す略線図である。
【図１１】図１１は、ディスクリプタ取得処理の一例を示すシーケンス図である。
【図１２】図１２は、ＵＳＢ規格に定義されるクラスの例を示す略線図である。
【図１３】図１３は、クラスドライバ割り当て処理を示す一例のフローチャートである。
【図１４】図１４は、デバイスリストの更新時の取得済みデバイスリストフラグの処理図である。
【図１５】図１５は、デバイスリストの更新時の処理図である。
【図１６】図１６は、第２の実施形態による複合機の一例の構成を示すブロック図である。
【発明を実施するための形態】
【００１７】
（第１の実施形態の構成例）
以下に添付図面を参照して、本発明に係る情報処理装置およびプログラムの第１の実施形態を詳細に説明する。図１は、本第１の実施形態に係る情報処理装置１の一例の構成を概略的に示す。情報処理装置１は、制御部１０、ＵＳＢ(Universal  Serial  Bus)ホストコントローラ１１、入力インターフェイス（Ｉ／Ｆ）１２および表示制御部１３を有する。制御部１０は、例えばＣＰＵ(Central  Processing  Unit)を有し、プログラムに従いこの情報処理装置１の全体の動作を制御する。
【００１８】
ＵＳＢホストコントローラ１１は、外部機器であるＵＳＢデバイス２０を接続するためのインターフェイスであるＵＳＢデバイス接続ポートを有し、制御部１０の制御に従い、ＵＳＢデバイス接続ポートに接続されるＵＳＢデバイス２０との通信を制御する。
【００１９】
入力Ｉ／Ｆ１２は、例えばキーボードやポインティングデバイス（マウスなど）といった入力デバイス２１が接続され、入力デバイス２１に対してなされたユーザ入力に応じた制御信号を制御部１０に対して出力する。表示制御部１３は、ディスプレイ２２が接続され、プログラムに従い制御部１０で生成された表示制御信号を、ディスプレイ２２が表示可能な形式の信号に変換してディスプレイ２２に対して出力する。
【００２０】
図２は、本第１の実施形態に係る制御部１０の一例の構成を示す。制御部１０は、ＣＰＵ５０、ＲＯＭ(Read  Only  Memory)５１、ＲＡＭ(Random  Access  Memory)５２およびストレージ装置５３を有し、これら各部バス６０で互いに通信可能に接続される。また、上述したＵＳＢホストコントローラ１１、入力Ｉ／Ｆ１２および表示制御部１３は、例えばバス６０に接続される。
【００２１】
ストレージ装置５３は、ＨＤＤ(Hard  Disk  Drive)やフラッシュメモリといった書き換え可能な大容量の記憶媒体である。さらに、制御部１０は、ＮＶＲＡＭ(Non  Volatile  RAM)５５を有する。ＮＶＲＡＭ５５は、例えば、ＣＰＵ５０に対して直接的に接続され、ＣＰＵ５０上で動作するＯＳ(Operating  System)によりアクセスされる。
【００２２】
制御部１０において、ＣＰＵ５０が、ＲＯＭ５１やストレージ装置５３に予め格納されたプログラムに従い、ＲＡＭ５２をワークメモリとして用いて、この情報処理装置１の全体の動作を制御する。また、ＮＶＲＡＭ５５は、制御部１０やこの情報処理装置１の設定情報が記憶される。例えば、ＣＰＵ５０は、起動時にこのＮＶＲＡＭ５５から設定情報を読み出し、制御部１０や情報処理装置１に対して設定する。
【００２３】
図３は、図１に示した情報処理装置１の機能を説明するための一例の機能ブロック図である。なお、図３において、上述の図１と共通する部分には同一の符号を付し、詳細な説明を省略する。図３において、点線の上側が制御部１０上で動作するソフトウェアを示し、点線の下側がハードウェアを示す。制御部１０上で動作するソフトウェアは、アプリケーション３０と、グラフィクスインターフェイス（Ｉ／Ｆ）３１と、汎用のＯＳ(Operating  System)であるＯＳ３２とを含む。
【００２４】
ＣＰＵ５０を制御手段として機能させるアプリケーション３０は、ＯＳ３２との間で関数呼び出しとその戻り値送信、ならびに、メッセージの送受信などを行うことで、所定の機能を実現する。グラフィクスＩ／Ｆ３１は、アプリケーション３０やＯＳ３２からの命令に従い描画処理などを行い、所定の表示のための表示制御信号を生成し、グラフィクスＩ／Ｆ３１に対して出力する。ＯＳ３２は、ソフトウェアとハードウェアとの仲介を行うと共に、制御部１０において動作する各プログラムを統括的に管理する。
【００２５】
ＯＳ３２において、中核的な機能を実現する部分をカーネル３３と呼ぶ。カーネル３３は、例えば情報処理装置１のリソースを管理し、上述のソフトウェアとハードウェアとの仲介を実現する。カーネル３３は、ハードウェアであるＵＳＢホストコントローラ１１との仲介を行うＵＳＢスタック４０を含む。ＣＰＵ５０は、情報処理装置１が起動されると、所定の手順に従いＯＳ３２のプログラムを例えばストレージ５３から読み出し、主記憶であるＲＡＭ５２上に展開する。
【００２６】
図４は、ＵＳＢスタック４０の機能を説明するための一例の機能ブロック図である。なお、図４において、上述した図１および図３と共通する部分には同一の符号を付して、詳細な説明を省略する。ＵＳＢスタック４０は、検知部４１、ドライバ割当部４２、クラスドライバ群４３、デバイスリスト取得済みフラグ４５、第１の判定部４６、第２の判定部４７および第３の判定部４８を有する。ＵＳＢスタック４０は、ＯＳ３２の命令に従いＵＳＢホストコントローラ１１と通信を行う。また、ＵＳＢスタック４０は、ＵＳＢホストコントローラ１１との通信の結果に応じて、所定の表示を行うためのメッセージなどを出力する。このメッセージは、例えばグラフィクスＩ／Ｆ３１により描画され表示制御信号に変換されて表示制御部１３に対して出力される。
【００２７】
ＵＳＢスタック４０において、検知部４１は、ＵＳＢホストコントローラ１１に対してＵＳＢデバイス２０が接続されたことを検知する。第１の判定手段である第１の判定部４６と第２の判定手段である第２の判定部４７と第３の判定手段である第３の判定部４８は、検知部４１に検知された、接続中のＵＳＢデバイス２０に対するデバイスドライバの割り当てに関する判定を行う。割当手段であるドライバ割当部４２は、第１の判定部４６および第２の判定部４７の判定結果に基づき、接続中のＵＳＢデバイス２０に対してデバイスドライバを静的に割り当てる。デバイスリスト取得済みフラグ４５については、後述する。
【００２８】
クラスドライバ群４３は、ＵＳＢデバイス２０を制御するためのデバイスドライバの一種であるクラスドライバを保持する。なお、クラスは、ＵＳＢデバイス２０の機能を抽象化して分類した機能識別情報である。クラスドライバは、ＵＳＢデバイス２０のクラスとしての動作を制御するための上位のデバイスドライバである。クラスドライバ群４３は、少なくともジェネリック（汎用）クラスのクラスドライバ（ジェネリッククラスドライバと呼ぶ）を含む。ジェネリッククラスは、例えば、ＵＳＢデバイスの機能に依存しない処理のみを行うクラスである。
【００２９】
一例として、ジェネリッククラスドライバには、関数として、単純な初期化とデータの送受信を行う関数のみが定義される。したがって、アプリケーション３０がジェネリッククラスドライバを介してのＵＳＢデバイス２０の制御に対応している場合には、接続中のＵＳＢデバイス２０を、当該ＵＳＢデバイス２０の機器仕様情報であるディスクリプタ（後述する）に定義付けられたクラスに関わらずアプリケーション３０から制御することができる。
【００３０】
クラスドライバ群４３は、ジェネリッククラスのクラスドライバに限られず、ハブクラス、キーボードクラスのドライバなど他のクラスのクラスドライバを含むことができる。また、クラスドライバ群４３に対して、他のクラスドライバを追加することも可能である。
【００３１】
クラスドライバ群４３は、さらに、ＵＳＢデバイス２０を特定する識別情報のリスト（デバイスリストと呼ぶ）を保持するリスト保持手段でもある。このデバイスリスト４４は、汎用デバイスドライバであるジェネリッククラスドライバを介して特定のアプリケーション３０から制御可能なＵＳＢデバイス２０を特定する情報が登録される。図５は、このデバイスリスト４４の一例の構成を示す。本第１の実施形態では、ＵＳＢデバイス２０を特定する機器識別情報として、ＵＳＢデバイス２０のベンダ名「VendorID」および機種名「ProductID」が用いられている。これらベンダ名「VendorID」および機種名「ProductID」は、それぞれ、後述するデバイスディスクリプタに含まれるフィールドidVendorおよびidProductの情報を用いる。
【００３２】
制御可能機器識別情報であるデバイスリスト４４は、ＵＳＢデバイス２０を特定する識別情報が予め登録される。これに限らず、デバイスリスト４４に対して、当該識別情報を追加することも可能である。図６の例では、ＵＳＢデバイス２０として、ベンダ名「VenderID」および機種名「ProductID」が、それぞれ「０ｘ０００１」および「０ｘ０００２」で特定されるデバイスと、それぞれ「０ｘ０００３」および「０ｘ０００４」で特定される他のデバイスとが登録されている。
【００３３】
また、デバイスリスト４４は、ＯＳ３２からのアクセスが可能であり、且つ、ユーザが容易に干渉できない部位に保持するのが好ましい。さらに、デバイスリスト４４は、ＵＳＢデバイス２０を情報処理装置１に接続したまま当該情報処理装置１を起動させた（例えば電源をＯＮした）場合の、当該ＵＳＢデバイス２０に対するドライバ割当を考慮して、情報処理装置１の起動後の比較的早期にアクセス可能となる部位に保持すると、より好ましい。
【００３４】
図４を用いて、第３の判定部４８の判定基準であるデバイスリスト取得済みフラグ４５について説明する。デバイスリスト取得済みフラグ４５は、デバイスリスト４４が既に取得されているか否かの判定に用いるフラグである。デバイスリスト取得済みフラグ４５の初期値は、０でありデバイスリスト４４が未取得であることを示している。デバイスリスト４４が取得された場合に、デバイスリスト取得済みフラグ４５を１にする。
【００３５】
本第１の実施形態では、デバイスリスト４４を、例えばＯＳ３２のカーネル３３に予めハードコーディングして保持する。これに限らず、デバイスリスト４４をＮＶＲＡＭ５５に記憶させて保持してもよい。さらに、デバイスリスト４４は、カーネル３３内とＮＶＲＡＭ５５とに分散させて保持してもよい。図５は、ＮＶＲＡＭからのデバイスリスト取得を示す図である。この場合、カーネル３３は、多数の識別情報を保持可能である一方で、内容の更新が容易ではない。また、ＮＶＲＡＭ５５は、保持可能な識別情報の量はカーネル３３に比べて少ないが、内容の更新が容易である。そのため、カーネル３３内には、更新の可能性が低い識別情報を登録し、ＮＶＲＡＭ５５には、更新の可能性が高い識別情報や、追加する識別情報を登録すると好ましい。
【００３６】
図５は、ＮＶＲＡＭ５５からのデバイスリスト取得の処理を概略的に示す図である。ＮＶＲＡＭ５５に記憶されるデバイスリスト４４の更新は、ＯＳ３２により行われる。例えば、ＯＳ３２は、入力デバイス２１に対するユーザ入力に応じて、ＮＶＲＡＭ５５に記憶されるデバイスリスト４４の内容を書き換え、デバイスリスト４４を更新することができる。ＮＶＲＡＭ５５を更新するためのベンダ名「VenderID」および機種名「ProductID」は、ユーザ操作により一々入力してもよいし、ＣＤ(Compact  Disk)やＤＶＤ(Digital  Versatile  Disk)といったディスク記憶媒体、挿抜可能な不揮発性の半導体メモリなどに記憶させ、図示されないドライブ装置やインターフェイスから読み込んで入力してもよい。また、インターネットなどのネットワークを介してこれらベンダ名「VenderID」および機種名「ProductID」を入力してもよい。
【００３７】
また、カーネル３３に予めハードコーディングされたデバイスリスト４４は、カーネル３３そのものを書き換える方法を用いて更新することができる。一例として、上述のＣＤ(Compact  Disk)やＤＶＤ(Digital  Versatile  Disk)といったディスク記憶媒体、挿抜可能な不揮発性の半導体メモリなどに、デバイスリスト４４の更新内容を含むカーネル３３を情報処理装置１にインストールするインストーラを格納して提供することが考えられる。例えば、ＣＰＵ５０が図示されないドライブ装置やインターフェイスを介して、この、記憶媒体に記憶されたインストーラを起動させることで、情報処理装置１においてカーネル３３が上書きインストールされ、デバイスリスト４４が更新される。
【００３８】
（ＵＳＢ通信手順）
次に、ＵＳＢデバイス２０がＵＳＢホストコントローラ１１に対して接続された際の、通信までの手順について、概略的に説明する。先ず、例えばＵＳＢデバイス２０がＵＳＢホストコントローラ１１のＵＳＢデバイス接続ポートに接続されると、ＵＳＢホストコントローラ１１にＵＳＢデバイス２０が認識されその旨が検知部４１に通知される。また、ＵＳＢホストコントローラ１１は、接続されたＵＳＢデバイス２０に対してアドレスを割り当てる。
【００３９】
ＵＳＢホストコントローラ１１は、接続されたＵＳＢデバイス２０に対するアドレスの割り当てが行われると、当該ＵＳＢデバイス２０のディスクリプタの取得を開始する。ＵＳＢ通信では、ＵＳＢホストコントローラ１１とＵＳＢデバイス２０との通信シーケンスにおいて、ＵＳＢホストコントローラ１１は、ターゲットであるＵＳＢデバイス２０からコントロール転送によってディスクリプタを取得する。ディスクリプタは、ターゲットの特性、属性などの情報を含み、デバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの４種類がある。
【００４０】
なお、以下では、適宜、これらデバイスディスクリプタ、コンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタの４つのディスクリプタを纏めて標準ディスクリプタと呼ぶ。
【００４１】
図７〜図１０を用いて、これら４種類のディスクリプタについて、概略的に説明する。なお、図７〜図１０において、オフセットは、先頭からのバイト数を示す。各フィールドは、図７〜図１０においてフィールド名の右に示されるデータ長を有し、各ディスクリプタにおいて、オフセットとデータ長とから、特定のフィールドにアクセスすることができる。
【００４２】
図７は、デバイスディスクリプタを示す。デバイスディスクリプタは、このディスクリプタを送信したＵＳＢデバイスを識別するための情報が含まれる。図７において、デバイスディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbcdＵＳＢ、フィールド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を含む。
【００４７】
インターフェイスディスクリプタにおいて、フィールドbInterfaceNumberは、インターフェイスを選択するためのインターフェイスの識別番号を示す。フィールドbAlternateSettingは、Alternative  Settingの個数を示す。フィールドbNumEndpointは、包含されるEndpointの個数を示す。フィールドbInterfaceClass、フィールドbInterfaceSubclassおよびフィールドbInterfaceProtocolは、このディスクリプタを送信したＵＳＢデバイスのクラスを示す。デバイスディスクリプタのフィールドbDeviceClassの値が０の場合、フィールドbInterfaceClassが参照される。フィールドiInterfaceは、インターフェイスのストリングディスクリプタ（図示しない）のインデクス番号を示す。
【００４８】
また、図１０は、エンドポイントディスクリプタを示す。エンドポイントディスクリプタは、通信用のポートであるエンドポイントの情報を含む。図１０おいて、エンドポイントディスクリプタは、フィールドbLength、フィールドbDescriptorType、フィールドbEndpointAddress、フィールドbmAttributes、フィールドwMaxPacketSizeおよびフィールドbIntervalを含む。なお、図８および図１０に示したコンフィグレーションディスクリプタおよびエンドポイントディスクリプタは、本発明と深い関連がないため、説明を省略する。
【００４９】
図１１は、このディスクリプタ取得処理の一例のシーケンスを示す。図１１の例では、ＵＳＢホストコントローラ１１は、ＵＳＢデバイス２０から、処理ａでデバイスディスクリプタを取得し、処理ｂでコンフィグレーションディスクリプタ、インターフェイスディスクリプタおよびエンドポイントディスクリプタを取得している。
【００５０】
すなわち、ＵＳＢホストコントローラ１１は、ＵＳＢデバイス２０に対して、標準リクエストであるコマンドGET_DESCRIPTORを、デバイスディスクリプタを指定するパラメータを指定して発行する（ＳＥＱ１００）。ＵＳＢデバイス２０は、このコマンドに応答して、デバイスディスクリプタをＵＳＢホストコントローラ１１に返す（ＳＥＱ１０１）。
【００５１】
以降、同様にして、ＵＳＢホストコントローラ１１は、コンフィグレーションディスクリプタを指定するパラメータをコマンドGET_DESCRIPTORに指定してＵＳＢデバイス２０に対して発行し、コンフィグレーションディスクリプタを取得する（ＳＥＱ１０２、ＳＥＱ１０３）。ＵＳＢホストコントローラ１１は、以降同様にしてＳＥＱ１０２およびＳＥＱ１０３の処理を繰り返し、ＵＳＢデバイス２０からインターフェイスディスクリプタおよびエンドポイントディスクリプタを取得する。
【００５２】
（クラスコード）
図１２は、ＵＳＢ規格に定義されるクラスの例を示す。図１２の例では、デバイスディスクリプタにおいてフィールドbDeviceClassに示されるクラスについては、項目Descriptor  Usageを「Device」とし、インターフェイスディスクリプタにおいてフィールドbInterfaceClassに示されるクラスについては、項目Descriptor  Usageを「Interface」として記載してある。また、項目Descriptor  Usageが「Both」と記載されるクラスは、デバイスディスクリプタおよびインターフェイスディスクリプタの両方で定義されるクラスである。
【００５３】
それぞれのクラスは、フィールドBase  Classに示される１バイトの値で識別される。このフィールドBase  Classに示される１バイトの値が、フィールドbDeviceClassおよびフィールドbInterfaceClassに格納される。なお、フィールドBase  Classにおいて、文字「ｈ」は、直前の２桁の数字が１６進数で表現されていることを示す。例えば、フィールドBase  Classの値が「０１ｈ」でオーディオ(Audio)クラスを示し、フィールドBase  Classの値が「０３ｈ」でＨＩＤ(Human  Interface  Device)クラスを示す。また、フィールドBase  Classの値が「０７ｈ」でプリンタ(Printer)クラスを示し、フィールドBase  Classの値が「０９ｈ」でハブ(Hub)クラスを示す。
【００５４】
（第１の実施形態による処理）
図１３は、第１の実施形態によるクラスドライバ割り当て処理を示す一例のフローチャートである。このフローチャートによる処理は、制御部１０内のＯＳ３２に含まれるＵＳＢスタック４０において実行される。
【００５５】
ステップＳ１０で、検知部４１により、ＵＳＢホストコントローラ１１の所定のＵＳＢデバイス接続ポートにＵＳＢデバイス２０が接続されたことが検知され、ステップＳ１１で、当該ＵＳＢデバイス２０のＵＳＢデバイス接続ポートへの電気的な接続が確立され接続状態とされる。次のステップＳ１２で、上述した図１１のシーケンスに従い、当該ＵＳＢデバイス２０が持つディスクリプタの取得が行われる。取得したディスクリプタは、ＵＳＢホストコントローラ１１からＵＳＢスタック４０に渡される。
【００５６】
次のステップＳ１３で、第１の判定部４６が、接続中のＵＳＢデバイス２０のクラスに相当するクラスドライバがクラスドライバ群４３に含まれるか否かを判定する（第１の判定処理）。
【００５７】
すなわち、第１の判定部４６は、ステップＳ１２で当該ＵＳＢデバイス２０から取得されたディスクリプタのうち、デバイスディスクリプタに含まれるフィールドbDeviceClassの値を抽出する。また、第１の判定部４６は、必要に応じて、インターフェイスディスクリプタに含まれるフィールドbInterfaceClassの値も抽出する。第１の判定部４６は、これら抽出したフィールドbDeviceClassまたはフィールドbInterfaceClassの値に基づき、当該ＵＳＢデバイス２０に対して設定されているクラスを取得する。第１の判定部４６は、取得したクラスに相当するクラスドライバがクラスドライバ群４３に含まれるか否かを判定する。
【００５８】
若し、取得したクラスに相当するクラスドライバがクラスドライバ群４３に含まれていないと判定した場合（ステップＳ１３のＮＯ）、第１の判定部４６は、処理をステップＳ１４に移行させる。ステップＳ１４では、ドライバ割当部４２により、接続されたＵＳＢデバイス２０に対して、ジェネリッククラスドライバが割り当てられる。この場合、アプリケーション３０がジェネリッククラスドライバを介してのＵＳＢデバイス２０の制御に対応していない限り、接続中のＵＳＢデバイス２０をアプリケーション３０から制御することができない。そのため、接続中のＵＳＢデバイス２０が想定外の動作を取ることがない。
【００５９】
ステップＳ１４でＵＳＢデバイス２０に対してジェネリッククラスドライバが割り当てられると、この図１３のフローチャートによる一連の処理が終了される。
【００６０】
一方、ステップＳ１３の判定の結果、接続されたＵＳＢデバイス２０のクラスに相当するクラスドライバがクラスドライバ群４３に含まれていると判定した場合（ステップＳ１３のＹＥＳ）、第１の判定部４６は、処理をステップＳ１５に移行させる。
【００６１】
ステップＳ１５では、第３の判定部４８は、デバイスリスト取得済みフラグ４５を参照して、デバイスリスト４４が取得済みであるか否かを判定する（第３の判定処理）。
【００６２】
若し、デバイスリスト取得済みフラグ４５を参照して、デバイスリスト４４が取得済み（フラグ＝１）と判定した場合（ステップＳ１５のＹＥＳ）、第３の判定部４８は、処理をステップＳ１８に移行させる。
【００６３】
一方、デバイスリスト取得済みフラグ４５を参照して、デバイスリスト４４の取得がされていない（フラグ＝０）と判定した場合（ステップＳ１５のＮＯ）、第３の判定部４８は、処理をステップＳ１６に移行させる。
【００６４】
具体的な例として、接続されたＵＳＢデバイス２０から取得したデバイスディスクリプタのフィールドbDeviceClassの値が「０３ｈ」であるとする。これは、図１２を参照し、当該ＵＳＢデバイス２０がＨＩＤクラスであると判定できる。この時、ＨＩＤクラスのクラスドライバが存在しているか判定する。存在していると判定された場合に、従来は、必ずデバイスリスト４４の読み込みを行っていた。
【００６５】
これに対して、本第１の実施形態では、デバイスリスト取得済みフラグ４５を参照して、デバイスリスト４４が取得済みであるか否かを判定する。そして、デバイスリスト４４が取得されていない場合にのみデバイスリスト４４を読み込み、その後、デバイスリスト取得済みフラグ４５を取得済みにする。若し、デバイスリスト取得済みフラグ４５が取得済みである場合は、デバイスリスト４４を読み込まずに、当該ＵＳＢデバイス２０に対して当該クラスドライバを割り当ててよいか否かを判定する。そのため、デバイスリスト４４の読み込み時間を削減し、不要な待ち時間無しで使用することができる。
【００６６】
ステップＳ１６では、デバイスリスト４４を読み込む。例えば、デバイスリスト取得済みフラグ４５は、カーネル３３のプログラムが展開されるＲＡＭ５２から、デバイスリスト４４のハードコーディングされた部分を読み込むと共に、ＮＶＲＡＭ５５から、デバイスリスト４４の残りの部分を読み込む。
【００６７】
デバイスリスト４４を読み込むと、処理がステップＳ１７に移行される。ステップＳ１７で、デバイスリスト取得済みフラグ４５は、ＵＳＢスタックで読み込んだデバイスリスト４４をカーネル３３に保存してデバイスデバイスリスト取得済みフラグ４５を１にして、デバイスリスト取得済みであることを示す状態にする。そして、デバイスリスト取得済みフラグ４５は、処理をステップＳ１８に移行させる（第２の判定処理）。
【００６８】
ステップＳ１８で、第２の判定部４７は、ステップＳ１２でＵＳＢデバイス２０から取得したデバイスディスクリプタから、フィールドiVenderおよびフィールドiProductの値を抽出し、抽出されたフィールドiVenderおよびフィールドiProductの値の組に該当するデバイスが、デバイスリスト４４に登録されているか否かを判定する（第２の判定処理）。若し、登録されていると判定した場合（ステップＳ１８のＹＥＳ）、第２の判定部４７は、処理をステップＳ２０に移行させる。
【００６９】
ステップＳ２０では、ドライバ割当部４２により、接続されるＵＳＢデバイス２０に対してジェネリッククラスドライバが静的に割り当てられる。この場合、上述のステップＳ１３から直接ステップＳ１４に移行された場合と異なり、当該ＵＳＢデバイス２０は、アプリケーション３０からジェネリッククラスドライバを介して制御可能とされている。そのため、当該ＵＳＢデバイス２０に対して、ディスクリプタに示されるクラスドライバとは異なる動作を実行させることが可能である。
【００７０】
また、ＵＳＢデバイス２０に対してジェネリッククラスドライバを静的に割り当てているため、この情報処理装置１が、ジェネリッククラスドライバを介して当該ＵＳＢデバイス２０を制御可能なアプリケーション３０を有していない場合であっても、当該ＵＳＢデバイス２０は想定外の動作を取ることがない。
【００７１】
一方、第２の判定部４７は、ステップＳ１８でＵＳＢデバイス２０から取得したデバイスディスクリプタのフィールドiVenderおよびフィールドiProductの値の組に該当するデバイスが、デバイスリスト４４に登録されていないと判定した場合（ステップＳ１８のＮＯ）、処理をステップＳ１９に移行させる。
【００７２】
ステップＳ１９では、ドライバ割当部４２により、デバイスディスクリプタまたはインターフェイスディスクリプタに記載されたクラスの情報に基づき、ＵＳＢデバイス２０に対して適したクラスドライバが割り当てられる。この場合、当該ＵＳＢデバイス２０は、ディスクリプタに示されるクラスドライバに従った動作を行うことになる。
【００７３】
ステップＳ１９でＵＳＢデバイス２０にクラスドライバが割り当てられると、この図１３のフローチャートによる一連の処理が終了される。
【００７４】
また、図１４は、デバイスリスト４４更新時のデバイスリスト取得済みフラグ４５の処理である。デバイスリスト４４が更新された場合は、デバイスリスト取得済みフラグ４５を０にして、デバイスリスト４４が未取得であることを示している。また、情報処理装置１の起動時もデバイスリスト取得済みフラグ４５は０であり、デバイスリスト４４が未取得であることを示す。
【００７５】
また、図１５は、デバイスリスト取得済みフラグ４５を用いないで、情報処理装置１の起動時やデバイスリスト４４の更新時などにデバイスリスト４４を読み込む構成にした場合の処理である。この構成にすることにより、既に読み込んでいるのでＵＳＢデバイスを接続するたびに、デバイスリスト４４を読み込まなくてよい。そのため、デバイスリスト４４の読み込み時間を削減し、不要な待ち時間無しで使用することができる。
【００７６】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。本第２の実施形態は、上述の第１の実施形態で説明した情報処理装置１を、画像読取機能、印刷機能、ＦＡＸ機能、複写機能といった複数の機能を統合させた複合機１００に適用させた例である。図１６は、本第２の実施形態による複合機１００の一例の構成を示す。
【００７７】
制御部１１０において、ＡＳＩＣ(Application  Specific  Integrated  Circuit)１２０に対して、ＣＰＵ１２１と、ＲＡＭ１２２と、ＨＤＤ１２３と、ＰＣＩ(Peripheral  Component  Interconnect)バス１１５および１３０とが接続される。また、ＣＰＵ１２１に対して、ＮＶＲＡＭ１２４が例えばＡＳＩＣ１２０を介して接続される。ＮＶＲＡＭ１２４は、例えば、ＣＰＵ１２１がこの複合機１００を制御するために必要な設定情報などが予め記憶される。
【００７８】
ＰＣＩバス１３０に対して、例えばシリアルＩ／Ｆ１４０と、ＮＩＣ(Network  Interface  Card)１４１と、ＵＳＢデバイス１４２と、ＵＳＢホストコントローラ１４３とが接続されると共に、その他のＨ／Ｗ（ハードウェア）１４４が接続される。
【００７９】
ＡＳＩＣ１２０は、ＣＰＵ１２１と、ＲＡＭ１２２、ＨＤＤ１２３およびＰＣＩバス１３０との間の通信の調停を行う。ＨＤＤ１２３は、各種データや、ＣＰＵ１２１が動作するためのプログラムが予め格納される。ＣＰＵ１２１は、ＨＤＤ１２３に格納されるプログラムに従い、ＲＡＭ１２２をワークメモリとして用いて、この複合機１００の全体の動作を制御する。これらＣＰＵ１２１、ＲＡＭ１２２、ＨＤＤ１２３、ＰＣＩバス１３０およびＡＳＩＣ１２０の機能が、図１に示した制御部１０の機能に対応する。
【００８０】
ＨＤＤ１２３は、プログラムの動作に伴い生成される中間データをＨＤＤ１２３に一時的に格納してもよいし、後述する、ＰＣＩバス１１５を介して供給される画像データなどを格納することもできる。また、ユーザ操作に応じた操作部１１４からの制御信号が、ＡＳＩＣ１２０を介してＣＰＵ１２１に供給される。これにより、ユーザ操作に応じた複合機１００の制御が可能となる。操作部１１４は、図１に示した入力Ｉ／Ｆ１２および表示制御部１３、ならびに、これらに接続される入力デバイス２１およびディスプレイ２２に対応する。
【００８１】
図３に示したアプリケーション３０、グラフィクスＩ／Ｆ３１およびＯＳ３２は、ＣＰＵ１２１上で動作するプログラムとして実現される。ＯＳ３２のカーネル３３内に含まれるＵＳＢスタック４０は、ＣＰＵ１２１上で動作するプログラムのモジュールとして実現される。また、ＵＳＢスタック４０のクラスドライバ群４３に含まれる各クラスドライバは、例えばＨＤＤ１２３に保持される。また、デバイスリスト４４は、第１の実施形態と同様に、一部がカーネル３３に予めハードコーディングされると共に、残りの部分がＮＶＲＡＭ１２４に格納される。
【００８２】
シリアルＩ／Ｆ１４０は、例えばＲＳ−２３２Ｃといったシリアル通信のためのインターフェイスである。ＮＩＣ１４１は、インターネットやＬＡＮ(Local  Area  Network)に対する通信を制御する。ＵＳＢデバイス１４２は、この複合機１００に内蔵され、固定的に用いられるＵＳＢ機器である。ＵＳＢホストコントローラ１４３は、ＵＳＢによるバスの管理を行い、外部機器としてのＵＳＢデバイス１０２を接続することができる。ＵＳＢホストコントローラ１４３は、図１に示すＵＳＢホストコントローラ１１に対応する。
【００８３】
ＰＣＩバス１１５に対して、スキャナ装置１１１、プロッタ装置１１２およびＦＡＸ制御ユニット１１３が接続される。スキャナ装置１１１は、原稿画像を読みとって画像データとして出力する。出力された画像データは、ＰＣＩバス１１５およびＡＳＩＣ１２０を介してＣＰＵ１２１に供給され、ＨＤＤ１２３に格納される。プロッタ装置１１２は、例えばＨＤＤ１２３から読み出された画像データがＡＳＩＣ１２０およびＰＣＩバス１１５を介して供給され、この画像データに基づき用紙に対して印字処理を行う。ＦＡＸ制御ユニット１１３は、例えば公衆電話回線と接続され、スキャナ装置１１１で読み取った原稿画像を、指定した送信先に送信する。
【００８４】
なお、本第２の実施形態の複合機１００でプログラムとして実行されるＵＳＢスタック４０は、ＨＤＤ１２３などに予め記憶されて提供される。これに限らず、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０は、インストール可能な形式または実行可能な形式のファイルでＣＤ(Compact  Disk)、フレキシブルディスク（ＦＤ）、ＤＶＤ(Digital  Versatile  Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【００８５】
さらに、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０を、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０をインターネットなどのネットワーク経由で提供または配布するように構成してもよい。
【００８６】
本第２の実施形態の複合機１００で実行されるプログラムであるＵＳＢスタック４０は、上述した各部（検知部４１、ドライバ割当部４２、デバイスリスト取得済みフラグ４５、第１の判定部４６、第２の判定部４７および第３の判定部４８）を含むモジュール構成となっており、実際のハードウェアとしては、ＣＰＵ１２１が例えばＨＤＤ１２３などからＵＳＢスタック４０を読み出して実行することにより、これら各部が主記憶装置（例えばＲＡＭ１２２）上にロードされ、検知部４１、ドライバ割当部４２、デバイスリスト取得済みフラグ４５、第１の判定部４６、第２の判定部４７および第３の判定部４８が主記憶装置上に生成されるようになっている。また、クラスドライバ群４３は、各部の実行に伴い、必要に応じてＨＤＤ１２３から主記憶装置に読み込まれる。
【００８７】
なお、ＮＶＲＡＭ１２４に記憶されるデバイスリスト４４の更新は、第１の実施形態と同様に、ＯＳ３２により行われる。すなわち、ＯＳ３２は、操作部１１４に対するユーザ操作に応じて、ＮＶＲＡＭ１２４に記憶されるデバイスリスト４４の内容を書き換え、デバイスリスト４４を更新することができる。ＮＶＲＡＭ１２４を更新するためのベンダ名「VenderID」および機種名「ProductID」は、ユーザ操作により入力してもよいし、挿抜可能な記憶媒体を介して入力することもできる。勿論、ＮＩＣ１４１によりインターネットなどネットワークと通信を行って更新データを入手して、ＮＶＲＡＭ１２４に記憶されるデバイスリスト４４を更新してもよい。
【００８８】
また、カーネル３３に予めハードコーディングされたデバイスリスト４４は、カーネル３３そのものを書き換える方法を用いて更新することができる。一例として、挿抜可能な記憶媒体にデバイスリスト４４の更新内容を含むカーネル３３を複合機１００にインストールするインストーラを格納して提供する。例えば、ＣＰＵ５０が図示されないドライブ装置やインターフェイスを介して、このインストーラを起動させることで、複合機１００においてカーネル３３が上書きインストールされ、デバイスリスト４４が更新される。
【００８９】
このような構成において、ＣＰＵ１２１は、ＵＳＢホストコントローラ１４３に対してＵＳＢデバイス１０２が接続されると、図１３のフローチャートに従ってＵＳＢデバイス１０２の接続処理を行い（ステップＳ１０、ステップＳ１１）、図１１に示したシーケンスに従ってＵＳＢデバイス１０２の各ディスクリプタを取得する（ステップＳ１２）。そして、取得したディスクリプタに基づき、当該ＵＳＢデバイス１０２のクラスに相当するクラスドライバが存在するか否かを判定し（ステップＳ１３）、存在しない場合は、当該ＵＳＢデバイス１０２に対してジェネリッククラスドライバを割り当てる（ステップＳ１４）。
【００９０】
当該ＵＳＢデバイス１０２のクラスに相当するクラスドライバが存在する場合には、デバイスリスト４４が取得済みであるか判定（ステップＳ１５）する。デバイスリスト４４が取得されていない場合には、ＮＶＲＡＭ１２４と、ＯＳ３２におけるカーネル３３が展開されるＲＡＭ１２２とからデバイスリスト４４を読み込んで（ステップＳ１６）、デバイスリスト取得済みフラグ４５を取得済みにする（ステップＳ１７）。当該ＵＳＢデバイス１０２に対応するデバイスがデバイスリスト４４上に存在するか否かを判定する（ステップＳ１８）。存在する場合は、当該ＵＳＢデバイス１０２に対してジェネリッククラスドライバを静的に割り当てる（ステップＳ２０）。この場合、当該ＵＳＢデバイス１０２は、特定のアプリケーション３０から独自の制御が可能となる。また、当該ＵＳＢデバイス１０２に対してジェネリッククラスドライバが割り当てられるので、例えば当該特定のアプリケーション３０がこの複合機１００に未インストール状態であっても、当該ＵＳＢデバイス１０２が想定外の動作を取ることがない。一方、当該ＵＳＢデバイス１０２に対応するデバイスがデバイスリスト４４上に存在しない場合は、当該ＵＳＢデバイス１０２に対して、ディスクリプタに記載された情報に基づき適したクラスドライバを割り当てる（ステップＳ１９）。
【００９１】
デバイスリスト取得済みフラグ４５を用いないで、情報処理装置１の起動時やデバイスリスト４４の更新時などに読み込む構成にしてもよい。この構成にすることにより、既に読み込んでいるのでＵＳＢデバイスを接続するたびに、デバイスリスト４４を読み込まなくてよい。そのため、デバイスリスト４４の読み込み時間を削減し、不要な待ち時間無しで使用することができる。
【００９２】
特に、複数のハブ・ＮＡＮＤコントローラ・操作部・ＵＳＢ接続のＳＤカードリーダ・ＩＣカードリーダなど多種多用なデバイスが接続された場合には、全てのデバイスの接続処理のたびにデバイスリスト４４の読み込みを実施していると起動時間や省エネ復帰時間に与える影響は無視できないものとなってしまうことが予測される。しかし、ＵＳＢデバイスを接続するたびに、デバイスリスト４４を読み込まなくてよいことから、デバイスリスト４４の読み込み時間を削減し、不要な待ち時間無しで使用することができる。
【００９３】
このように、本第２の実施形態においても、本来属するべきクラスとは異なるクラスが設定されたＵＳＢデバイスの接続時に、不要な待ち時間無しで使用することができる。
【符号の説明】
【００９４】
１  情報処理装置
１０  制御部
１１  ＵＳＢホストコントローラ
２０  ＵＳＢデバイス
３０  アプリケーション
３１  グラフィクスＩ／Ｆ
３２  ＯＳ
３３  カーネル
４０  ＵＳＢスタック
４１  検知部
４２  ドライバ割当部
４３  クラスドライバ群
４４  デバイスリスト
４５  デバイスリスト取得済みフラグ
４６  第１の判定部
４７  第２の判定部
４８  第３の判定部
５０，１２１  ＣＰＵ
５５，１２４  ＮＶＲＡＭ
１００  複合機
【先行技術文献】
【特許文献】
【００９５】
【特許文献１】特開２０１０−０３９６１６号公報
【特許文献２】特開２０１０−１６５１２８号公報
【図１】
2014120057.tif 000003
【図２】
2014120057.tif 000004
【図３】
2014120057.tif 000005
【図４】
2014120057.tif 000006
【図５】
2014120057.tif 000007
【図６】
2014120057.tif 000008
【図７】
2014120057.tif 000009
【図８】
2014120057.tif 000010
【図９】
2014120057.tif 000011
【図１０】
2014120057.tif 000012
【図１１】
2014120057.tif 000013
【図１２】
2014120057.tif 000014
【図１３】
2014120057.tif 000015
【図１４】
2014120057.tif 000016
【図１５】
2014120057.tif 000017
【図１６】
2014120057.tif 000018