(57)【要約】【課題】  複数ある外部接続デバイスの選択を自動化する事によって、一つのデバイスが正常動作しない場合は、代替外部接続デバイスに切り替えられる機能を提供し、また、最適な外部接続デバイスが最初に使用される事で、ユーザが判断に迷うデバイス選択を無くす事を可能とする事を目的とする。【解決手段】  前記の目的を達成するために本発明は、外部機器とそれに対応する複数の外部接続デバイスを管理する手段と、そのデータを元に最適な外部接続デバイスを選択する手段と、選択された外部接続デバイスにしたがって入出力処理を行う手段と、を具備した物である。【選択図】  図１
2006155161.tif 000002
【特許請求の範囲】
【請求項１】
標準的なPC又はいくつかの外部接続デバイス（無線、USB、IEEE1394、セントロニクス、LAN等）を装備している情報処理装置であって、これら外部接続デバイスを活用して、プリンタ等の外部機器を制御し使用する事を特徴とする情報処理装置において、
外部機器とそれに接続された複数の外部接続デバイスを管理する手段と、
上記管理されたデータを元に複数の外部接続デバイスの中から最適なものを選び出す手段と、
上記選び出された外部接続デバイスにしたがって入出力処理を行う手段と、
を具備したことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、接続された複数の外部接続デバイスの中から、外部機器との入出力を行うのに最適なデバイスを自動的に選び出すことを可能とした、情報処理装置(以降からPCと表記する)に関するものである。
【背景技術】
【０００２】
従来は外部機器の使用にあたって、複数ある外部接続デバイスの中から使用するデバイスを選択するようになっていた。
【０００３】
その結果、外部接続デバイスが複数同時に外部機器に接続されている場合、そのデバイスの性能にかかわらずユーザが選んだ外部接続デバイスがデータ入出力に使用されていた。
【０００４】
従来例としては、例えば特許文献１をあげることが出来る。
【特許文献１】特開平09-190400号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
外部機器としてプリンタを使用する場合を仮定する。
【０００６】
外部接続デバイスとして、無線通信とUSBが使用可能な場合、ユーザが無線通信デバイスを選択するとそれを使って印刷することしか行われなかった。もし、ノイズなどが原因で無線通信が途中で失敗した場合は、ユーザはUSBを使用した印刷を再実行しなければならなかった。
【０００７】
また、無線通信よりもUSBによるデータ出力の方が高速であったとしても、ユーザによる指定が優先されてしまうため、期待される性能が発揮できないと言う問題があった。
【０００８】
よって本発明の目的は、複数ある外部接続デバイスの選択を自動化する事によって、一つのデバイスが正常動作しない場合は、代替外部接続デバイスに切り替えられる機能を提供し、また、最適な外部接続デバイスが最初に使用される事で、ユーザが判断に迷うデバイス選択を無くす事を可能とする事を目的とする。
【課題を解決するための手段】
【０００９】
前記の目的を達成するために本発明は、外部機器とそれに対応する複数の外部接続デバイスを管理する手段と、そのデータを元に最適な外部接続デバイスを選択する手段と、選択された外部接続デバイスにしたがって入出力処理を行う手段と、を具備した物である。
【００１０】
（作用）
本発明では、まず外部接続デバイスを監視するシステムプログラム（外部デバイスマネージャ）が起動される。 外部デバイスマネージャは電源ONから電源OFFまで活動しアプリケーションプログラムからの要求に備える。
【００１１】
外部デバイスマネージャは、アプリケーションプログラムから外部機器の問い合わせを受けると、自身が管理する外部機器情報データベースから使用できる外部接続デバイスを検索し、その結果を性能順にソートした上でアプリケーションプログラムに回答する。
【００１２】
アプリケーションプログラムは、外部デバイスマネージャから返却された順番にしたがって、外部機器をオープンし入出力処理を行う。もし、入出力処理の途中で問題が発生した場合は、次の外部接続デバイスを使用して再実行を試みる。
【００１３】
つまり、ユーザはどの外部接続デバイスを使用するか考えなくても、外部機器を指定して入出力を実行すれば、自動的に最適な外部接続デバイスが選択されることになる。
【００１４】
また、エラーが発生した場合でも、他の代替外部接続デバイスに自動的に切り替えて処理を再開するため、ユーザの手を煩わせることも少なくなる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施例を詳細に説明する。
【００１６】
実施例１
図１は、本発明の実施例における情報処理装置の構成を示すブロック図である。
【００１７】
本図において11はＣＰＵでありこの情報処理装置のほぼ全てを管理している。12はメインメモリでありＣＰＵ11から必要に応じて読み書きされる。13は外部記憶装置であり多くの場合はハードディスクドライブでありＣＰＵ11から読み書きされる。14は外部接続デバイス群であり、セントロニクス、USB、無線と言った、各種物理デバイスへのアクセスポートである。15は外部機器である。多くの場合1〜4ほどの外部接続手段を持っており、これらを使って情報処理装置と入出力を行う。
【００１８】
図２は、外部デバイスマネージャによって管理される、外部機器情報データベースを表した図である。
【００１９】
外部機器情報21は、外部デバイスマネージャが最初にアクセスするデータ構造である 。ここには、この情報処理装置に登録された外部機器15の総数を示す、全外部機器数21-1と、各外部機器毎の詳細情報を示す、詳細機器情報22へのポインタである、extlist_ptr 21-2が存在する。
【００２０】
詳細機器情報22は、登録された外部機器毎の詳細情報を保持する。これらはポインタであるnext22-1によってリンクされ、その数は全外部機器数21-1と等しい。最後にリンクされた詳細機器情報のnext22-1はNULLであるようにする。
【００２１】
種別22-2は外部機器のタイプを表す。これは整数値であり、外部機器の種別判断に利用される。
【００２２】
外部機器名22-3は外部機器の固有名称の文字列である。多くの場合製品のモデル名で、これも外部機器の種別判断に利用される。
【００２３】
デバイス数22-4はこの外部機器が搭載する、外部接続デバイスの数を表す。この外部機器が、セントロニクス、USB、無線の3つをサポートする場合、ここの値は３となる。
【００２４】
devlist_ptr22-5はこの外部機器が搭載する、外部接続デバイス毎の詳細情報である外部デバイス情報23へのポインタである。
【００２５】
外部デバイス情報23は外部デバイス毎の詳細情報を保持する。これらはポインタであるnext23-1によってリンクされ、その数はデバイス数22-4と等しい。最後にリンクされた外部デバイス情報のnext23-1はNULLを示すものとする。
【００２６】
デバイス名23-2は、この外部デバイスにアクセスするためのオープンデバイス文字列である。この文字列はシステム依存であり、搭載されるOSによって様々である。しかし、その文字列は標準関数open()によって使用できるもので無ければならない。UNIX（登録商標）システムでの例をあげると、ここの文字列は”/dev/usb/lp0”の様な物となる。
【００２７】
性能23-3はこのデバイスが持っている、データ転送能力を整数値として保持する。この値はbps(bit/sec)である。
【００２８】
図3は、外部デバイスマネージャがアプリケーションプログラムに返却する、デバイスオープン情報を表した図である。
【００２９】
デバイスオープン情報31は、要求された外部機器をオープンするためのデバイス名が、性能23-3を元にソートされて保存される。その要素は最大で10であるとする。（10以上の接続手段を持つ外部機器は一般的に考えられないため）
デバイス名31-1は外部デバイスにアクセスするための、デバイスファイル名である。アプリケーションプログラムはこの文字列を使用して、標準関数open()でアクセスできる。
【００３０】
デバイスオープン情報31は、使用可能な外部デバイスに対応するデバイスファイル名だけを保持する。使用しない空き領域には０で埋められる。
【００３１】
図4は、外部機器情報データベースを初期化する手順をあらわした、フローチャートである。
【００３２】
この処理は、電源ON後出来るだけ早い段階で実行される。多くの場合、OS又はシステムの初期化時である。また、外部機器情報データベースは、電源がOFFされる前に、その時点での内容をHD13に保存する。これは、再ブートされた時に参照される。
【００３３】
以上のことを踏まえて、各処理S41〜S44について説明する。
【００３４】
S41はシステムの電源ON後、最初に実行される。ここでは、HD13内に前回の外部機器情報データベースの内容がセーブされているか調べる。セーブされていればS44に進む。セーブされていない場合は、外部機器がまったく登録されていない状態と考えられるため、S42に進む。
【００３５】
S42とS43では、外部機器情報21の各要素を初期化する。この段階では、外部機器は登録されていないので、各要素は0となる。
【００３６】
S44では、以前の外部機器情報データベースが見つかったので、それをHD13からロードする。
【００３７】
これによって外部機器情報21と詳細機器情報22と外部デバイス情報23を再構築する。
【００３８】
図5は、詳細機器情報登録処理を表したフローチャートである。
【００３９】
この処理は、外部機器をシステムに登録するときに実行される。これは多くの場合、デバイスドライバのインストール時に同時に実行される。
【００４０】
この登録処理を呼び出すプログラムは、外部機器情報データベースを構築するのに必要な情報である、
種別22-2
外部機器名22-3
デバイス数22-4
デバイス名23-2
性能23-3
の5つの情報を、この登録処理を行う時に提供する。
【００４１】
以上のことを踏まえて、各処理S51〜S57に付いて説明する。
【００４２】
S51では、新しく登録される外部機器に対応する、詳細機器情報22のためのメモリを確保する。以下、各処理ではこの領域に対してデータをセットしていく。
【００４３】
S52では、S51で確保された領域に、種別22-2、外部機器名22-3、デバイス数22-4、の各要素をセットする。
【００４４】
S53では、この外部機器で使用できる、外部デバイス情報を構築する処理である、外部デバイス情報初期化処理を実行する。この処理の詳細については後述する。この処理の結果、外部デバイス情報23のリストが作られ、先頭の情報へのポインタが返却される。
【００４５】
S54では、S53で返却された外部デバイス情報23へのポインタを、devlist_ptr22-5にセットする。また、S55では、次の詳細機器情報へのポインタをあらわす、next22-1に0をセットする。
【００４６】
S56では、S55までで出来あがった詳細機器情報22を、詳細機器情報リストの最後につなぐ。
【００４７】
S57では、外部機器情報21の全外部機器数21-1の値を1つ増やして更新する。
【００４８】
また、もし最初に登録される外部機器であれば、extlist_ptr21-2にS51で確保したメモリアドレスをセットする。
【００４９】
以上の処理で、新しい外部機器が、外部機器情報データベースに登録された。
【００５０】
図6は、外部デバイス情報初期化処理を表したフローチャートである。
【００５１】
以下に、各処理S61〜S66について述べる。
【００５２】
S61では、この処理ループの終了判別処理を行う。外部デバイス情報23は、デバイス数22-4の数だけ作られるので、ここでデバイス数の残りを判別する。0であれば全ての外部デバイス情報23を作り終えたので終了する。
【００５３】
S62では、外部デバイス情報23の領域をメモリ12から獲得し、ワーク変数ptrにそのアドレスを保存する。
【００５４】
S63では、外部デバイス情報リストを形成するnext23-1を０で初期化する。
【００５５】
S64では、デバイス名23-2と、性能23-3の各要素を初期化する。
【００５６】
S63とS64の処理で、対応する外部デバイス情報23の要素が初期化された。
【００５７】
S65では、S62で確保しS63とS64で初期化された、新しい外部デバイス情報を外部デバイス情報リストにつなぐ処理を行う。
【００５８】
ただし、最初のデバイス情報の作成であった場合は、何もしないで処理S66に進む。
【００５９】
最初のデバイス情報で無ければ、1つ前の外部デバイス情報のnext23-1に、ワーク変数ptrに保存しておいたアドレスをセットする。これで新しい外部デバイス情報が、リストにつながれた。
【００６０】
S66では、この処理ループを抜けるためのカウンタを減じている。この後、処理はS61にジャンプする。
【００６１】
図7は、外部デバイス候補返答処理を表したフローチャートである。
【００６２】
この処理は、アプリケーションプログラムが、外部機器をオープンする前に呼び出し、オープンするためのデバイス名を取得するために使われる。
【００６３】
アプリケーションプログラムから呼び出し時に渡される情報は、種別22-2と外部機器名22-3である。
【００６４】
以下に各処理、S71〜S74について述べる。
【００６５】
S71では、アプリケーションプログラムから渡される、種別と外部機器名を使って詳細機器情報リストの中から、対応する詳細機器情報22を探し出す。
【００６６】
もし見つからなければ、処理を終了しアプリケーションプログラムにはエラーを返却する。
【００６７】
S72では、S71で見つかった詳細機器情報22のメンバーである、devlist_ptr22-5を元に対応する外部デバイス情報リストを取り出す。
【００６８】
S73では、S72で取り出した外部デバイス情報リストを使って、デバイスオープン情報31を作成する。これは、文字列のテーブルである。各文字列は512バイトのサイズで固定されている。
【００６９】
このデバイスオープン情報の要素は、デバイス名23-2と同じであり、アプリケーションプログラムは、この文字列を使ってopen()関数にて外部機器にアクセスすることが出来る。
【００７０】
また、この文字列テーブルは性能23-3順にソートするものとする。
【００７１】
S74では、S73までで作られたデバイスオープン情報を、アプリケーションプログラムに返却する。
【００７２】
図8は、代替デバイス切り替え処理を表したフローチャートである。
【００７３】
この処理は、アプリケーションプログラムで実行される。
【００７４】
以下に、各処理S81〜S86に付いて説明する。
【００７５】
S81では、アプリケーションプログラムは、前述した外部デバイス候補返答処理(図7)を呼び出し、外部デバイスマネージャに外部機器のオープン手段を問い合わせる。
【００７６】
これに成功した場合、デバイスオープン情報31が返却されるので、以降はこれを使って外部機器への入出力を試みる。
【００７７】
S82では、S81で返却されたデバイスオープン情報31の先頭のデバイス名を選択する。
【００７８】
S83は、入出力処理のエラー終了を判別する。
【００７９】
S81で返却された、デバイスオープン情報31を使って外部機器をアクセスするのであるが、全てのデバイスを使っても入出力が正常に終了しない場合は、この判定処理によって、エラー終了と判別される。
【００８０】
S84では、選択したデバイス名31-1を使用して、外部機器をオープンしデータの入出力を行う。
【００８１】
S85では、S84のデータ入出力の結果を判別する。
【００８２】
もし正常に入出力が終了していれば、外部機器は正しく操作されたと判断できるので処理を終了する。
【００８３】
エラーが発生していれば、デバイスオープン情報31に記述されている次のデバイスを使用するため、S86に進む。
【００８４】
S86では、デバイスオープン情報31に記述されている次のデバイスを選択し、S83にジャンプする。
【００８５】
この様に、1つのデバイスでエラーが発生しても、代替デバイスを自動的に使用することが出来るため、ユーザの手を煩わせることが少なくなる。
【００８６】
また、デバイスはデータ転送性能に優れたものから自動的に選択されるため、ユーザがデバイスの性能について詳しくなくても、より性能の良い転送方法を優先的に使用することが出来るようになる。
【００８７】
その他の実施例
実施例１で述べたのは、情報処理装置と外部機器が直結されている状況での例であるが、ネットワーク環境下でクライアント側から、外部機器が接続されたサーバーに対して入出力要求が来る場合でも対応できる。
【００８８】
その場合は次の様にする。
【００８９】
（１）クライアント側から、入出力要求を受け付けたデバイスサーバプログラムが、実施例1の図8にある代替デバイス切り替え処理を実行する。デバイスサーバプログラムは入出力の結果をクライアント側に送り返す。
【００９０】
以上説明してきたように本発明によれば、エラーが発生した場合でも、他の代替外部接続デバイスに自動的に切り替えて処理を再開するため、ユーザの手を煩わせることも少なくなる。
【００９１】
また、ユーザはどの外部接続デバイスを使用するか考えなくても、外部機器を指定して入出力を実行すれば、自動的に最適な外部接続デバイスが選択されることになる。
【図面の簡単な説明】
【００９２】
【図１】本発明を適用した情報処理装置を示すブロック図である。
【図２】外部機器情報データベースの構成を表した図である。
【図３】デバイスオープン情報の構成を表した図である。
【図４】外部機器情報データベース初期化処理を表したフローチャートである。
【図５】詳細機器情報登録処理を表したフローチャートである。
【図６】外部デバイス情報初期化処理を表したフローチャートである。
【図７】外部デバイス候補返答処理を表したフローチャートである。
【図８】代替デバイス切り替え処理を表したフローチャートである。
【図１】
2006155161.tif 000003
【図２】
2006155161.tif 000004
【図３】
2006155161.tif 000005
【図４】
2006155161.tif 000006
【図５】
2006155161.tif 000007
【図６】
2006155161.tif 000008
【図７】
2006155161.tif 000009
【図８】
2006155161.tif 000010