(57)【特許請求の範囲】
【請求項１】
外部機器の機能に対応した処理を行うデバイスドライバと外部機器の機能に依存しない処理を行う汎用デバイスドライバとを含む複数のデバイスドライバを保持するドライバ保持手段と、
前記汎用デバイスドライバを用いて制御する外部機器の機種を特定する情報を保持する機種特定情報保持手段と、
外部機器を接続する接続手段と、
前記接続手段に接続された外部機器から、該外部機器の機能を示す機能識別情報と該外部機器を特定する機器識別情報とを取得する取得手段と、
前記取得手段で取得した機能識別情報に示される機能に対応するデバイスドライバを前記ドライバ保持手段が保持しているかを判定する第１の判定手段と、
前記第１の判定手段により前記取得手段で取得した機能識別情報に示される機能に対応するデバイスドライバを前記ドライバ保持手段が保持していると判定されたとき、前記取得手段で取得した機器識別情報に対応する機種を特定する情報が前記機種特定情報保持手段で保持されているかを判定する第２の判定手段と、
前記第２の判定手段により前記取得手段で取得した機器識別情報に対応する機種を特定する情報が前記機種特定情報保持手段で保持されていると判定されたとき、前記ドライバ保持手段が保持する前記汎用デバイスドライバを前記接続手段に接続された外部機器に割り当て、前記第２の判定手段により前記取得手段で取得した機器識別情報に対応する機種を特定する情報が前記機種特定情報保持手段で保持されていると判定されなかったとき、前記ドライバ保持手段が保持する複数のデバイスドライバのうち前記取得手段で取得した機能識別情報に示される機能に対応するデバイスドライバを前記接続手段に接続された外部機器に割り当てる割当手段と
を有する
ことを特徴とする情報処理装置。
【請求項２】
前記割当手段は、
前記第１の判定手段により前記取得手段で取得した機能識別情報に示される機能に対応するデバイスドライバを前記ドライバ保持手段が保持していると判定されなかったとき、前記ドライバ保持手段が保持する前記汎用デバイスドライバを前記接続手段に接続された外部機器に割り当てる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記機種特定情報保持手段は、前記情報処理装置を制御するオペレーティングシステムのカーネル部分と、前記情報処理装置の設定情報が記憶される不揮発性メモリ内とのうち少なくとも一方に含まれる
ことを特徴とする請求項１または請求項２に記載の情報処理装置。
【請求項４】
前記不揮発性メモリ内に含まれる前記機種特定情報保持手段に保持される前記外部機器の機種を特定する情報は、前記オペレーティングシステムにより更新される
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記カーネル部分に含まれる前記機種特定情報保持手段に保持される前記外部機器の機種を特定する情報は、外部の更新プログラムにより更新される
ことを特徴とする請求項３に記載の情報処理装置。
【請求項６】
前記機種特定情報保持手段は、前記外部機器の機種を特定する情報をリストとして保持する
ことを特徴とする請求項１乃至請求項５の何れか１項に記載の情報処理装置。
【請求項７】
外部機器の機能に対応した処理を行うデバイスドライバと外部機器の機能に依存しない処理を行う汎用デバイスドライバとを含む複数のデバイスドライバを保持するドライバ保持手段と、該汎用デバイスドライバを用いて制御する外部機器の機種を特定する情報を保持する機種特定情報保持手段と、外部機器を接続する接続手段とを有する情報処理装置の制御方法であって、
取得手段が、前記接続手段に接続された外部機器から、該外部機器の機能を示す機能識別情報と該外部機器を特定する機器識別情報とを取得する取得ステップと、
第１の判定手段が、前記取得ステップにより取得した機能識別情報に示される機能に対応するデバイスドライバを前記ドライバ保持手段が保持しているかを判定する第１の判定ステップと、
第２の判定手段が、前記取得ステップにより取得した機能識別情報に示される機能に対応するデバイスドライバを前記ドライバ保持手段が保持していると前記第１の判定ステップで判定されたとき、前記取得ステップにより取得した機器識別情報に対応する機種を特定する情報が、前記機種特定情報保持手段で保持されているかを判定する第２の判定ステップと、
割当手段が、前記取得ステップにより取得した機器識別情報に対応する機種を特定する情報が前記機種特定情報保持手段で保持されていると前記第２の判定ステップにより判定されたとき、前記ドライバ保持手段が保持する前記汎用デバイスドライバを前記接続手段に接続された外部機器に割り当てる一方、前記取得ステップにより取得した機器識別情報に対応する機種を特定する情報が前記機種特定情報保持手段で保持されていると前記第２の判定ステップにより判定されなかったとき、前記ドライバ保持手段が保持する複数のデバイスドライバのうち前記取得ステップにより取得した機能識別情報に示される機能に対応するデバイスドライバを前記接続手段に接続された外部機器に割り当てる割当ステップと
を有する
ことを特徴とする情報処理装置の制御方法。
【請求項８】
外部機器の機能に対応した処理を行うデバイスドライバと外部機器の機能に依存しない処理を行う汎用デバイスドライバとを含む複数のデバイスドライバを保持するドライバ保持手段と、該汎用デバイスドライバを用いて制御する外部機器の機種を特定する情報を保持する機種特定情報保持手段と、外部機器を接続する接続手段とを有する情報処理装置に、
前記接続手段に接続された外部機器から、該外部機器の機能を示す機能識別情報と該外部機器を特定する機器識別情報とを取得する取得ステップと、
前記取得ステップにより取得した機能識別情報に示される機能に対応するデバイスドライバを前記ドライバ保持手段が保持しているかを判定する第１の判定ステップと、
前記取得ステップにより取得した機能識別情報に示される機能に対応するデバイスドライバを前記ドライバ保持手段が保持していると前記第１の判定ステップで判定されたとき、前記取得ステップにより取得した機器識別情報に対応する機種を特定する情報が、前記機種特定情報保持手段で保持されているかを判定する第２の判定ステップと、
前記取得ステップにより取得した機器識別情報に対応する機種を特定する情報が前記機種特定情報保持手段で保持されていると前記第２の判定ステップにより判定されたとき、前記ドライバ保持手段が保持する前記汎用デバイスドライバを前記接続手段に接続された外部機器に割り当てる一方、前記取得ステップにより取得した機器識別情報に対応する機種を特定する情報が前記機種特定情報保持手段で保持されていると前記第２の判定ステップにより判定されなかったとき、前記ドライバ保持手段が保持する複数のデバイスドライバのうち前記取得ステップにより取得した機能識別情報に示される機能に対応するデバイスドライバを前記接続手段に接続された外部機器に割り当てる割当ステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部機器を接続するインターフェイスを有する情報処理装置、情報処理装置の制御方法およびプログラムに関する。
【背景技術】
【０００２】
電子機器同士を接続する方法として、ホストマシンと複数の周辺機器（デバイス）との間をシリアル通信で接続する、ＵＳＢ(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、フィールド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を含む。
【００４４】
インターフェイスディスクリプタにおいて、フィールド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の値に基づき、当該ＵＳＢデバイス２０に対して設定されているクラスを取得する。判定部４２は、取得したクラスに相当するクラスドライバがクラスドライバ群４４に含まれるか否かを判定する。
【００５５】
若し、取得したクラスに相当するクラスドライバがクラスドライバ群４４に含まれていないと判定した場合、判定部４２は、処理をステップＳ１４に移行させる。ステップＳ１４では、ドライバ割当部４３により、接続されたＵＳＢデバイス２０に対して、ジェネリックドライバが割り当てられる。この場合、アプリケーション３０がジェネリッククラスドライバを介してのＵＳＢデバイス２０の制御に対応していない限り、接続中のＵＳＢデバイス２０をアプリケーション３０から制御することができない。そのため、接続中のＵＳＢデバイス２０が想定外の動作を取ることがない。
【００５６】
ステップＳ１４でＵＳＢデバイス２０に対してジェネリックドライバが割り当てられると、この図１２のフローチャートによる一連の処理が終了される。
【００５７】
一方、ステップＳ１３の判定の結果、接続されたＵＳＢデバイス２０のクラスに相当するクラスドライバがクラスドライバ群４４に含まれていると判定した場合、判定部４２は、処理をステップＳ１５に移行させる。ステップＳ１５で、判定部４２は、デバイスリスト４５を読み込む。例えば、判定部４２は、カーネル３３のプログラムが展開されるＲＡＭ５２から、デバイスリスト４５のハードコーディングされた部分を読み込むと共に、ＮＶＲＡＭ５５から、デバイスリスト４５の残りの部分を読み込む。
【００５８】
デバイスリスト４５を読み込むと、処理がステップＳ１６に移行される。ステップＳ１６で、判定部４２は、ステップＳ１２でＵＳＢデバイス２０から取得したデバイスディスクリプタから、フィールドiVenderおよびフィールドiProductの値を抽出し、抽出されたフィールドiVenderおよびフィールドiProductの値の組に該当するデバイスが、デバイスリスト４５に登録されているか否かを判定する（第２の判定処理）。
【００５９】
若し、登録されていると判定した場合、判定部４２は、処理をステップＳ１４に移行させる。ステップＳ１４では、ドライバ割当部４３により、接続されるＵＳＢデバイス２０に対してジェネリッククラスドライバが割り当てられる。この場合、上述のステップＳ１３から直接ステップＳ１４に移行された場合と異なり、当該ＵＳＢデバイス２０は、アプリケーション３０からジェネリッククラスドライバを介して制御可能とされている。そのため、当該ＵＳＢデバイス２０に対して、ディスクリプタに示されるクラスドライバとは異なる動作を実行させることが可能である。
【００６０】
また、ＵＳＢデバイス２０に対してジェネリッククラスドライバを割り当てているため、この情報処理装置１が、当該ＵＳＢデバイス２０をジェネリッククラスドライバを介して制御可能なアプリケーション３０を有していない場合であっても、当該ＵＳＢデバイス２０が想定外の動作を取ることがない。
【００６１】
一方、判定部４２は、ステップＳ１６でＵＳＢデバイス２０から取得したデバイスディスクリプタのフィールドiVenderおよびフィールドiProductの値の組に該当するデバイスが、デバイスリスト４５に登録されていないと判定した場合、処理をステップＳ１７に移行させる。
【００６２】
ステップＳ１７では、ドライバ割当部４３により、デバイスディスクリプタまたはインターフェイスディスクリプタに記述されたクラスの情報に基づき、ＵＳＢデバイス２０に対して適したクラスドライバが割り当てられる。この場合、当該ＵＳＢデバイス２０は、ディスクリプタに示されるクラスドライバに従った動作を行うことになる。
【００６３】
ステップＳ１７でＵＳＢデバイス２０にクラスドライバが割り当てられると、この図１２のフローチャートによる一連の処理が終了される。
【００６４】
図１２のフローチャートによるクラスデバイスの割当について、より具体的な例を用いて説明する。ドライバ割当部４３は、ステップＳ１５以下の処理で、判定部４２による第２の判定処理の判定結果に基づき、接続されたＵＳＢデバイス２０に対して、当該ＵＳＢデバイス２０から取得したデバイスディスクリプタまたはインターフェイスディスクリプタに基づいたクラスドライバをそのまま割り当ててよいか否かを判定する。
【００６５】
具体的な例として、接続されたＵＳＢデバイス２０から取得したデバイスディスクリプタのフィールドbDeviceClassの値が「０３ｈ」であるとする。これは、図１１を参照し、当該ＵＳＢデバイス２０がＨＩＤクラスであると判定できる。そのため、従来では、ドライバ割当部４３は、当該ＵＳＢデバイス２０に対して、このＨＩＤクラスのクラスドライバを割り当てようとする。この場合、当該ＵＳＢデバイス２０に対し、ディスクリプタに定義されるＨＩＤクラスと異なるクラスが設定されている場合、当該ＵＳＢデバイス２０は、想定外の動作をとってしまうおそれがある。
【００６６】
これに対して、本第１の実施形態では、ドライバ割当部４３は、ジェネリッククラスドライバを介してアプリケーション３０から制御可能なＵＳＢデバイス２０を特定するためのデバイスリスト４５を予め作成し、保持しておく。そして、接続されたＵＳＢデバイス２０のクラスに相当するクラスドライバが存在する場合に、デバイスリスト４５を参照して、当該ＵＳＢデバイス２０に対して当該クラスドライバを割り当ててよいか否かを判定する。そのため、本来のクラスとは異なる動作を行うＵＳＢデバイス２０であっても、ユーザの手を煩わせることなく、適切に制御することができる。
【００６７】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。本第２の実施形態は、上述の第１の実施形態で説明した情報処理装置１を、画像読取機能、印刷機能、ＦＡＸ機能、複写機能といった複数の機能を統合させた複合機１００に適用させた例である。図１３は、本第２の実施形態による複合機１００の一例の構成を示す。
【００６８】
制御部１１０において、ＡＳＩＣ(Application  Specific  Integrated  Circuit)１２０に対して、ＣＰＵ１２１と、ＲＡＭ１２２と、ＨＤＤ１２３と、ＰＣＩ(Peripheral  Component  Interconnect)バス１１５および１３０とが接続される。また、ＣＰＵ１２１に対して、ＮＶＲＡＭ１２４が例えば直接的に接続される。ＮＶＲＡＭ１２４は、例えば、ＣＰＵ１２１がこの複合機１００を制御するために必要な設定情報などが予め記憶される。
【００６９】
ＰＣＩバス１３０に対して、例えばシリアルＩ／Ｆ１４０と、ＮＩＣ(Network  Interface  Card)１４１と、ＵＳＢデバイス１４２と、ＵＳＢホストコントローラ１４３とが接続されると共に、その他のＨ／Ｗ（ハードウェア）１４４が接続される。
【００７０】
ＡＳＩＣ１２０は、ＣＰＵ１２１と、ＲＡＭ１２２、ＨＤＤ１２３およびＰＣＩバス１３０との間の通信の調停を行う。ＨＤＤ１２３は、各種データや、ＣＰＵ１２１が動作するためのプログラムが予め格納される。ＣＰＵ１２１は、ＨＤＤ１２３に格納されるプログラムに従い、ＲＡＭ１２２をワークメモリとして用いて、この複合機１００の全体の動作を制御する。これらＣＰＵ１２１、ＲＡＭ１２２、ＨＤＤ１２３、ＰＣＩバス１３０およびＡＳＩＣ１２０の機能が、図１に示した制御部１０の機能に対応する。
【００７１】
ＨＤＤ１２３は、プログラムの動作に伴い生成される中間データをＨＤＤ１２３に一時的に格納してもよいし、後述する、ＰＣＩバス１１５を介して供給される画像データなどを格納することもできる。また、ユーザ操作に応じた操作部１１４からの制御信号が、ＡＳＩＣ１２０を介してＣＰＵ１２１に供給される。これにより、ユーザ操作に応じた複合機１００の制御が可能となる。操作部１１４は、図１に示した入力Ｉ／Ｆ１２および表示制御部１３、ならびに、これらに接続される入力デバイス２１およびディスプレイ２２に対応する。
【００７２】
図２に示したアプリケーション３０、グラフィクスＩ／Ｆ３１およびＯＳ３２は、ＣＰＵ１２１上で動作するプログラムとして実現される。ＯＳ３２のカーネル３３内に含まれるＵＳＢスタック４０は、ＣＰＵ１２１上で動作するプログラムのモジュールとして実現される。また、ＵＳＢスタック４０のクラスドライバ群４４に含まれる各クラスドライバは、例えばＨＤＤ１２３に保持される。また、デバイスリスト４５は、第１の実施形態と同様に、一部がカーネル３３に予めハードコーディングされると共に、残りの部分がＮＶＲＡＭ１２４に格納される。
【００７３】
シリアルＩ／Ｆ１４０は、例えばＲＳ−２３２Ｃといったシリアル通信のためのインターフェイスである。ＮＩＣ１４１は、インターネットやＬＡＮ(Local  Area  Network)に対する通信を制御する。ＵＳＢデバイス１４２は、この複合機１００に内蔵され、固定的に用いられるＵＳＢ機器である。ＵＳＢホストコントローラ１４３は、ＵＳＢによるバスの管理を行い、外部機器としてのＵＳＢデバイス１０２を接続することができる。ＵＳＢホストコントローラ１４３は、図１に示すＵＳＢホストコントローラ１１に対応する。
【００７４】
ＰＣＩバス１１５に対して、スキャナ装置１１１、プロッタ装置１１２およびＦＡＸ制御ユニット１１３が接続される。スキャナ装置１１１は、原稿画像を読みとって画像データとして出力する。出力された画像データは、ＰＣＩバス１１５およびＡＳＩＣ１２０を介してＣＰＵ１２１に供給され、ＨＤＤ１２３に格納される。プロッタ装置１１２は、例えばＨＤＤ１２３から読み出された画像データがＡＳＩＣ１２０およびＰＣＩバス１１５を介して供給され、この画像データに基づき用紙に対して印字処理を行う。ＦＡＸ制御ユニット１１３は、例えば公衆電話回線と接続され、スキャナ装置１１１で読み取った原稿画像を、指定した送信先に送信する。
【００７５】
なお、本第２の実施形態の複合機１００でプログラムとして実行されるＵＳＢスタック４０は、ＨＤＤ１２３などに予め記憶されて提供される。これに限らず、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０は、インストール可能な形式または実行可能な形式のファイルでＣＤ(Compact  Disk)、フレキシブルディスク（ＦＤ）、ＤＶＤ(Digital  Versatile  Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【００７６】
さらに、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０を、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本第２の実施形態の複合機１００で実行されるＵＳＢスタック４０をインターネットなどのネットワーク経由で提供または配布するように構成してもよい。
【００７７】
本第２の実施形態の複合機１００で実行されるプログラムであるＵＳＢスタック４０は、上述した各部（検知部４１、判定部４２およびドライバ割当部４３）を含むモジュール構成となっており、実際のハードウェアとしては、ＣＰＵ１２１が例えばＨＤＤ１２３などからＵＳＢスタック４０を読み出して実行することにより、これら各部が主記憶装置（例えばＲＡＭ１２２）上にロードされ、検知部４１、判定部４２およびドライバ割当部４３が主記憶装置上に生成されるようになっている。また、クラスドライバ群４４は、各部の実行に伴い、必要に応じてＨＤＤ１２３から主記憶装置に読み込まれる。
【００７８】
なお、ＮＶＲＡＭ１２４に記憶されるデバイスリスト４５の更新は、第１の実施形態と同様に、ＯＳ３２により行われる。すなわち、ＯＳ３２は、操作部１１４に対するユーザ操作に応じて、ＮＶＲＡＭ１２４に記憶されるデバイスリスト４５の内容を書き換え、デバイスリスト４５を更新することができる。ＮＶＲＡＭ１２４を更新するためのベンダ名「VenderID」および機種名「ProductID」は、ユーザ操作により入力してもよいし、挿抜可能な記憶媒体を介して入力することもできる。勿論、ＮＩＣ１４１によりインターネットなどネットワークと通信を行って更新データを入手して、ＮＶＲＡＭ１２４に記憶されるデバイスリスト４５を更新してもよい。
【００７９】
また、カーネル３３に予めハードコーディングされたデバイスリスト４５は、カーネル３３そのものを書き換える方法を用いて更新することができる。一例として、挿抜可能な記憶媒体にデバイスリスト４５の更新内容を含むカーネル３３を複合機１００にインストールするインストーラを格納して提供する。例えば、ＣＰＵ５０が図示されないドライブ装置やインターフェイスを介して、このインストーラを起動させることで、複合機１００においてカーネル３３が上書きインストールされ、デバイスリスト４５が更新される。
【００８０】
このような構成において、ＣＰＵ１２１は、ＵＳＢホストコントローラ１４３に対してＵＳＢデバイス１０２が接続されると、図１２のフローチャートに従ってＵＳＢデバイス１０２の接続処理を行い（ステップＳ１０、ステップＳ１１）、図１０に示したシーケンスに従ってＵＳＢデバイス１０２の各ディスクリプタを取得する（ステップＳ１２）。そして、取得したディスクリプタに基づき、当該ＵＳＢデバイス１０２のクラスに相当するクラスドライバが存在するか否かを判定し（ステップＳ１３）、存在しない場合は、当該ＵＳＢデバイス１０２に対してジェネリッククラスドライバを割り当てる（ステップＳ１４）。
【００８１】
当該ＵＳＢデバイス１０２のクラスに相当するクラスドライバが存在する場合には、ＮＶＲＡＭ１２４と、ＯＳ３２におけるカーネル３３が展開されるＲＡＭ１２２とからデバイスリスト４５を読み出して（ステップＳ１５）、当該ＵＳＢデバイス１０２に対応するデバイスがデバイスリスト４５上に存在するか否かを判定する（ステップＳ１６）。存在する場合は、当該ＵＳＢデバイス１０２に対してジェネリッククラスドライバを割り当てる（ステップＳ１４）。この場合、当該ＵＳＢデバイス１０２は、特定のアプリケーション３０から独自の制御が可能となる。また、当該ＵＳＢデバイス１０２に対してジェネリッククラスドライバが割り当てられるので、例えば当該特定のアプリケーション３０がこの複合機１００に未インストール状態であっても、当該ＵＳＢデバイス１０２が想定外の動作を取ることがない。一方、当該ＵＳＢデバイス１０２に対応するデバイスがデバイスリスト４５上に存在しない場合は、当該ＵＳＢデバイス１０２に対して、ディスクリプタに記述された情報に基づき適したクラスドライバを割り当てる（ステップＳ１７）。
【００８２】
このように、本第２の実施形態においても、本来のクラスとは異なる動作を行うＵＳＢデバイス１０２が接続された場合であっても、ユーザの手を煩わせることなく、適切に制御することができる。
【符号の説明】
【００８３】
１  情報処理装置
１０  制御部
１１  ＵＳＢホストコントローラ
２０  ＵＳＢデバイス
３０  アプリケーション
３１  グラフィクスＩ／Ｆ
３２  ＯＳ
３３  カーネル
４０  ＵＳＢスタック
４１  検知部
４２  判定部
４３  ドライバ割当部
４４  クラスドライバ群
４５  デバイスリスト
５０，１２１  ＣＰＵ
５５，１２４  ＮＶＲＡＭ
１００  複合機
【先行技術文献】
【特許文献】
【００８４】
【特許文献１】特開２０１０−０３９６１６号公報
【特許文献２】特開２０１０−１６５１２８号公報
【図１】
0006020032.tif 000002
【図２】
0006020032.tif 000003
【図３】
0006020032.tif 000004
【図４】
0006020032.tif 000005
【図５】
0006020032.tif 000006
【図６】
0006020032.tif 000007
【図７】
0006020032.tif 000008
【図８】
0006020032.tif 000009
【図９】
0006020032.tif 000010
【図１０】
0006020032.tif 000011
【図１１】
0006020032.tif 000012
【図１２】
0006020032.tif 000013
【図１３】
0006020032.tif 000014