(57)【要約】【課題】複数ある外部接続デバイスの選択を自動化し、エラーリトライ時に自動で切り換えることで、エラーリトライの成功率を向上させ、さらに、転送済みのデータを破棄せず、未転送の部分だけを処理することによって、データ転送効率を向上させることを目的とする。【解決手段】前記の目的を達成するために本発明は、外部機器とそれに接続された複数の外部接続デバイスを管理する手段と、そのデータを元に外部接続デバイスを選択する手段と、選択された外部接続デバイスにしたがって入出力処理を行う手段と、入出力エラー発生時に、転送済のデータと未転送のデータを適切に一体化する手段と、を具備した物である。【選択図】        図１
2004341712.tif 000002
【特許請求の範囲】
【請求項１】
標準的なＰＣ又はいくつかの外部接続デバイス（無線、ＵＳＢ、ＩＥＥＥ１３９４、セントロニクス、ＬＡＮ等）を装備している情報処理装置であって、これら外部接続デバイスを活用して、デジタルカメラ等の外部機器を制御し使用する事を特徴とする情報処理装置において、
外部機器とそれに接続された複数の外部接続デバイスを管理する手段と、
上記管理されたデータを元に外部接続デバイスを選び出す手段と、
上記選び出された外部接続デバイスにしたがって入出力処理を行う手段と、
入出力エラー発生時に、転送済のデータと未転送のデータを適切に一体化する手段と、
を具備したことを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、入出力エラー発生時に、複数の外部接続デバイスの中から代替デバイスを自動的に選び出し、転送済みのデータと未転送のデータを適切に一体化することで、データ転送効率を向上させることを可能とした、情報処理装置に関するものである。
【０００２】
【従来の技術】
従来はケーブル抜け等で入出力エラーが発生すると、１０ＭＢ中の９ＭＢの転送が終了していても、１０ＭＢのデータの先頭から再転送を行っていた。
【０００３】
また、最新の外部機器は複数の接続手段を持つようになってきているが、データ転送時にこれらを自動で切り換えてデータ転送を行うような処理はなされていなかった。
【０００４】
【特許文献１】
特開２０００−０８２０３８号公報
【０００５】
【発明が解決しようとする課題】
上記のように、転送中にエラーが発生すると１０ＭＢ中の９ＭＢのデータ転送が終了しているにもかかわらず破棄され、再びデータの先頭から１０ＭＢの転送が行われると言う無駄があった。
【０００６】
また、複数の接続手段があるにもかかわらず、それらを自動で切り換えてデータの再転送を行わないためエラーリカバリーの成功率が低かった。
【０００７】
よってエラーが発生すると、ユーザーによるデータ再転送の操作が必要となり使い勝手が低下していた。
【０００８】
よって本発明の目的は、複数ある外部接続デバイスの選択を自動化し、エラーリトライ時に自動で切り換えることで、エラーリトライの成功率を向上させ、さらに、転送済みのデータを破棄せず、未転送の部分だけを処理することによって、データ転送効率を向上させることを目的とする。
【０００９】
【課題を解決するための手段】
前記の目的を達成するために本発明は、外部機器とそれに対応する複数の外部接続デバイスを管理する手段と、そのデータを元に外部接続デバイスを選択する手段と、選択された外部接続デバイスにしたがって入出力処理を行う手段と、入出力エラー発生時に、転送済のデータと未転送のデータを適切に一体化する手段と、を具備した物である。
【００１０】
（作用）
本発明では、まず外部接続デバイスを監視するシステムプログラム（外部デバイスマネージャ）が起動される。外部デバイスマネージャは電源ＯＮから電源ＯＦＦまで活動しアプリケーションプログラムからの要求に備える。
【００１１】
外部デバイスマネージャは、アプリケーションプログラムから外部機器の問い合わせを受けると、自身が管理する外部機器情報データベースから使用できる外部接続デバイスを検索し、その結果をアプリケーションプログラムに回答する。
【００１２】
アプリケーションプログラムは、外部デバイスマネージャから返却された外部接続デバイスを使って入出力処理を行う。
【００１３】
もし、入出力処理の途中で問題が発生した場合は、転送済みのデータを保持しておく。そして、次の外部接続デバイスを使用して残りのデータの転送を行う。
【００１４】
つまり、データ転送途中でエラーが発生しても、自動的に代替デバイスに切り換えて入出力処理が継続される。さらに、転送済みのデータは破棄されずに残りのデータから続けて処理されるために、データ転送の効率が向上する。
【００１５】
【発明の実施の形態】
以下、本発明の実施例を詳細に説明する。
【００１６】
実施例１
図１は、本発明の実施例における情報処理装置の構成を示すブロック図である。
【００１７】
本図において１１はＣＰＵでありこの情報処理装置のほぼ全てを管理している。１２はメインメモリでありＣＰＵ１１から必要に応じて読み書きされる。１３は外部記憶装置であり多くの場合はハードディスクドライブでありＣＰＵ１１から読み書きされる。１４は外部接続デバイス群であり、セントロニクス、ＵＳＢ、無線と言った、各種物理デバイスへのアクセスポートである。１５は外部機器である。多くの場合１〜４ほどの外部接続手段を持っており、これらを使って情報処理装置と入出力を行う。
【００１８】
図２は、外部デバイスマネージャによって管理される、外部機器情報データベースを表した図である。
【００１９】
外部機器情報２１は、外部デバイスマネージャが最初にアクセスするデータ構造である。ここには、この情報処理装置に登録された、外部機器１５の総数を示す全外部機器数２１−１と、各外部機器毎の詳細情報を示す詳細機器情報２２へのポインタである、ｅｘｔｌｉｓｔ＿ｐｔｒ  ２１−２が存在する。
【００２０】
詳細機器情報２２は、登録された外部機器毎の詳細情報を保持する。これらはポインタであるｎｅｘｔ２２−１によってリンクされ、その数は全外部機器数２１−１と等しい。最後にリンクされた詳細機器情報のｎｅｘｔ２２−１はＮＵＬＬであるようにする。
【００２１】
種別２２−２は外部機器のタイプを表す。これは整数値であり、外部機器の種別判断に利用される。
【００２２】
外部機器名２２−３は外部機器の固有名称の文字列である。多くの場合製品のモデル名で、これも外部機器の種別判断に利用される。
【００２３】
デバイス数２２−４はこの外部機器が搭載する、外部接続デバイスの数を表す。この外部機器が、セントロニクス、ＵＳＢ、無線の３つをサポートする場合、ここの値は３となる。
【００２４】
ｄｅｖｌｉｓｔ＿ｐｔｒ２２−５はこの外部機器が搭載する、外部接続デバイス毎の詳細情報である外部デバイス情報２３へのポインタである。
【００２５】
外部デバイス情報２３は外部デバイス毎の詳細情報を保持する。これらはポインタであるｎｅｘｔ２３−１によってリンクされ、その数はデバイス数２２−４と等しい。最後にリンクされた外部デバイス情報のｎｅｘｔ２３−１はＮＵＬＬを示すものとする。
【００２６】
デバイス名２３−２は、この外部デバイスにアクセスするためのオープンデバイス文字列である。この文字列はシステム依存であり、搭載されるＯＳによって様々である。しかし、その文字列は標準関数ｏｐｅｎ（）によって使用できるもので無ければならない。ＵＮＩＸ（Ｒ）システムでの例をあげると、ここの文字列は”／ｄｅｖ／ｕｓｂ／ｌｐ０”の様な物となる。
【００２７】
図３は、外部デバイスマネージャがアプリケーションプログラムに返却する、デバイスオープン情報を表した図である。
【００２８】
デバイスオープン情報３１は、要求された外部機器をオープンするためのデバイス名のテーブルである。その要素は最大で１０であるとする（１０以上の接続手段を持つ外部機器は一般的に考えられないため）。
【００２９】
デバイス名３１−１は外部デバイスにアクセスするための、デバイスファイル名である。アプリケーションプログラムはこの文字列を使用して、標準関数ｏｐｅｎ（）でアクセスできる。
【００３０】
デバイスオープン情報３１は、使用可能な外部デバイスに対応するデバイスファイル名だけを保持する。使用しない空き領域には０で埋められる。
【００３１】
図４は、外部機器情報データベースを初期化する手順をあらわした、フローチャートである。
【００３２】
この処理は、電源ＯＮ後出来るだけ早い段階で、外部デバイスマネージャによって実行される。多くの場合、ＯＳ又はシステムの初期化時である。また、外部機器情報データベースは、電源がＯＦＦされる前に、その時点での内容をＨＤ１３に保存する。これは、再ブートされた時に参照される。
【００３３】
以上のことを踏まえて、各処理Ｓ４１〜Ｓ４４について説明する。
【００３４】
Ｓ４１はシステムの電源ＯＮ後、最初に実行される。ここでは、ＨＤ１３内に前回の外部機器情報データベースの内容がセーブされているか調べる。セーブされていればＳ４４に進む。セーブされていない場合は、外部機器がまったく登録されていない状態と考えられるため、Ｓ４２に進む。
【００３５】
Ｓ４２とＳ４３では、外部機器情報２１の各要素を初期化する。この段階では、外部機器は登録されていないので、各要素は０となる。
【００３６】
Ｓ４４では、以前の外部機器情報データベースが見つかったので、それをＨＤ１３からロードする。
これによって外部機器情報２１と詳細機器情報２２と外部デバイス情報２３を再構築する。
【００３７】
図５は、詳細機器情報登録処理を表したフローチャートである。
【００３８】
この処理は、外部機器をシステムに登録するときに実行される。これは多くの場合、デバイスドライバのインストール時に外部デバイスマネージャによって実行される。
【００３９】
この登録処理を呼び出すプログラムは、外部機器情報データベースを構築するのに必要な情報である、
種別２２−２
外部機器名２２−３
デバイス数２２−４
デバイス名２３−２
の４つの情報を、この登録処理を行う時に提供する。
【００４０】
以上のことを踏まえて、各処理Ｓ５１〜Ｓ５７に付いて説明する。
【００４１】
Ｓ５１では、新しく登録される外部機器に対応する、詳細機器情報２２のためのメモリを確保する。以下、各処理ではこの領域に対してデータをセットしていく。
【００４２】
Ｓ５２では、Ｓ５１で確保された領域に、種別２２−２、外部機器名２２−３、デバイス数２２−４、の各要素をセットする。
【００４３】
Ｓ５３では、この外部機器で使用できる、外部デバイス情報を構築する処理である、外部デバイス情報初期化処理を実行する。この処理の詳細については後述する。この処理の結果、外部デバイス情報２３のリストが作られ、先頭の情報へのポインタが返却される。
【００４４】
Ｓ５４では、Ｓ５３で返却された外部デバイス情報２３へのポインタを、ｄｅｖｌｉｓｔ＿ｐｔｒ２２−５にセットする。また、Ｓ５５では、次の詳細機器情報へのポインタをあらわす、ｎｅｘｔ２２−１に０をセットする。
【００４５】
Ｓ５６では、Ｓ５５までで出来あがった詳細機器情報２２を、詳細機器情報リストの最後につなぐ。
【００４６】
Ｓ５７では、外部機器情報２１の全外部機器数２１−１の値を１つ増やして更新する。
【００４７】
また、もし最初に登録される外部機器であれば、ｅｘｔｌｉｓｔ＿ｐｔｒ２１−２にＳ５１で確保したメモリアドレスをセットする。
【００４８】
以上の処理で、新しい外部機器が、外部機器情報データベースに登録された。
【００４９】
図６は、外部デバイス情報初期化処理を表したフローチャートである。
以下に、各処理Ｓ６１〜Ｓ６６について述べる。
【００５０】
Ｓ６１では、この処理ループの終了判別処理を行う。外部デバイス情報２３は、デバイス数２２−４の数だけ作られるので、ここでデバイス数の残りを判別する。０であれば全ての外部デバイス情報２３を作り終えたので終了する。
【００５１】
Ｓ６２では、外部デバイス情報２３の領域をメモリ１２から獲得し、ワーク変数ｐｔｒにそのアドレスを保存する。
【００５２】
Ｓ６３では、外部デバイス情報リストを形成するｎｅｘｔ２３−１を０で初期化する。
【００５３】
Ｓ６４では、デバイス名２３−２を初期化する。
【００５４】
Ｓ６３とＳ６４の処理で、対応する外部デバイス情報２３の要素が初期化された。
【００５５】
Ｓ６５では、Ｓ６２で確保しＳ６３とＳ６４で初期化された、新しい外部デバイス情報を外部デバイス情報リストにつなぐ処理を行う。
【００５６】
ただし、最初のデバイス情報の作成であった場合は、何もしないで処理Ｓ６６に進む。
【００５７】
最初のデバイス情報で無ければ、１つ前の外部デバイス情報のｎｅｘｔ２３−１に、ワーク変数ｐｔｒに保存しておいたアドレスをセットする。これで新しい外部デバイス情報が、リストにつながれた。
【００５８】
Ｓ６６では、この処理ループを抜けるためのカウンタを減じている。この後、処理はＳ６１にジャンプする。
【００５９】
図７は、外部デバイスマネージャが実行する、外部デバイス候補返答処理を表したフローチャートである。
【００６０】
この処理は、アプリケーションプログラムが、外部機器をオープンする前に呼び出し、オープンするためのデバイス名を取得するために使われる。
【００６１】
アプリケーションプログラムから呼び出し時に渡される情報は、種別２２−２と外部機器名２２−３である。
【００６２】
以下に各処理、Ｓ７１〜Ｓ７４について述べる。
【００６３】
Ｓ７１では、アプリケーションプログラムから渡される、種別と外部機器名を使って詳細機器情報リストの中から、対応する詳細機器情報２２を探し出す。
【００６４】
もし見つからなければ、処理を終了しアプリケーションプログラムにはエラーを返却する。
【００６５】
Ｓ７２では、Ｓ７１で見つかった詳細機器情報２２のメンバーである、ｄｅｖｌｉｓｔ＿ｐｔｒ２２−５を元に対応する外部デバイス情報リストを取り出す。
【００６６】
Ｓ７３では、Ｓ７２で取り出した外部デバイス情報リストを使って、デバイスオープン情報３１を作成する。これは、文字列のテーブルである。各文字列は５１２バイトのサイズで固定されている。
【００６７】
このデバイスオープン情報の要素は、デバイス名２３−２と同じであり、アプリケーションプログラムは、この文字列を使ってｏｐｅｎ（）関数にて外部機器にアクセスすることが出来る。
【００６８】
Ｓ７４では、Ｓ７３までで作られたデバイスオープン情報を、アプリケーションプログラムに返却する。
【００６９】
図８は、エラー発生時の代替デバイス切り替え処理を表したフローチャートである。
【００７０】
この処理は、アプリケーションプログラムで実行される。
【００７１】
以下に、各処理Ｓ８１〜Ｓ８６に付いて説明する。
【００７２】
Ｓ８１では、アプリケーションプログラムは、前述した外部デバイス候補返答処理（図７）を呼び出し、外部デバイスマネージャに外部機器のオープン手段を問い合わせる。
【００７３】
これに成功した場合、デバイスオープン情報３１が返却されるので、以降はこれを使って外部機器への入出力を試みる。
【００７４】
Ｓ８２では、Ｓ８１で返却されたデバイスオープン情報３１の先頭のデバイス名を選択する。
【００７５】
Ｓ８３は、入出力処理のエラー終了を判別する。
【００７６】
Ｓ８１で返却された、デバイスオープン情報３１を使って外部機器をアクセスするのであるが、全てのデバイスを使っても入出力が正常に終了しない場合は、この判定処理によって、エラー終了と判別される。
【００７７】
Ｓ８４では、選択したデバイス名３１−１を外部デバイス入出力処理に渡して、実際のデータ転送を行う処理である。この処理については後述する。
【００７８】
Ｓ８５では、Ｓ８４のデータ入出力の結果を判別する。
【００７９】
もし正常に入出力が終了していれば、外部機器と正しく入出力が終了したと判断できるので処理を終了する。
【００８０】
エラーが発生していれば、デバイスオープン情報３１に記述されている次のデバイスを使用するため、Ｓ８６に進む。
【００８１】
Ｓ８６では、デバイスオープン情報３１に記述されている次のデバイスを選択し、Ｓ８３にジャンプする。
【００８２】
図９は、外部デバイス入出力処理を表したフローチャートと、データバッファの様子を図式化したものである。
【００８３】
以下に、データバッファの扱い方と各処理Ｓ９１〜Ｓ９９について述べる。
【００８４】
データバッファ９１は、転送するデータ本体又はデータを受け取るバッファである。
【００８５】
ｐｏｓ＿ｐｔｒ９２は、転送データの現在のバイト位置を表すポジションポインタである。これは、ｒｅａｄ（）／ｗｒｉｔｅ（）といった入出力関数が成功するたびに更新され、次に転送されるデータ位置を表す。
【００８６】
Ｓ９１では、外部デバイス入出力処理がエラーリトライでＣＡＬＬされているのかどうか判別する。これは、転送位置ポインタｐｏｓ＿ｐｔｒ９２が０であるかどうかで判別できる。０でなければエラーリトライであるので、Ｓ９４に進む。
【００８７】
０であれば、Ｓ９２でデータリードのためのメモリかライトするデータである、データバッファ９１を確保する。そして、Ｓ９３でｐｏｓ＿ｐｔｒ９２を０で初期化する。
【００８８】
Ｓ９４では、ｐｏｓ＿ｐｔｒ９２を使って入出力時のポインタを設定し、必要であれば外部デバイスにデータの転送開始位置を通知する。これによって、リトライでも転送済みデータの続きを転送することが出来る。
【００８９】
Ｓ９５では、デバイスをオープンする。
【００９０】
Ｓ９６では、ｒｅａｄ（）／ｗｒｉｔｅ（）関数を使って外部デバイスと入出力処理を行い、転送バイト数を得る。
【００９１】
Ｓ９７では、Ｓ９６のＲ／Ｗでエラーが起きたかどうかチェックする。エラーが発生していれば、デバイスをクローズしてエラー終了する。
【００９２】
エラーでなければ、Ｓ９８でデータ転送の終了を判別する。全てのデータを処理したなら、デバイスをクローズして正常終了する。
【００９３】
データの残りがあれば、Ｓ９６での転送バイト数でｐｏｓ＿ｐｔｒ９２を更新して、Ｓ９６にジャンプする。
【００９４】
この様に、データ転送中にエラーが発生しても、代替デバイスに切り換えて残りのデータを転送するようにすれば、エラーリトライが自動化され、且つデータの最初から再び転送しなおす無駄を無くす事が出来る。
【００９５】
その他の実施例
実施例１で述べたのは、情報処理装置と外部機器が直結されている状況での例であるが、ネットワーク環境下でクライアント側から、外部機器が接続されたサーバーに対して入出力要求が来る場合でも対応できる。
【００９６】
その場合は次の様にする。
【００９７】
（１）クライアント側から、入出力要求を受け付けたデバイスサーバプログラムが、実施例１の図８にある代替デバイス切り替え処理を実行する。デバイスサーバプログラムは入出力の結果をクライアント側に送り返す。
【００９８】
以上説明してきたように本発明によれば、エラーが発生した場合でも、他の代替外部接続デバイスに自動的に切り替えて処理を再開するため、エラーリトライの成功率を向上することが出来る。
【００９９】
また、データ転送の無駄が無くなるため、転送効率を向上させることが出来る。
【図面の簡単な説明】
【図１】本発明を適用した情報処理装置を示すブロック図である。
【図２】外部機器情報データベースの構成を表した図である。
【図３】デバイスオープン情報の構成を表した図である。
【図４】外部機器情報データベース初期化処理を表したフローチャートである。
【図５】詳細機器情報登録処理を表したフローチャートである。
【図６】外部デバイス情報初期化処理を表したフローチャートである。
【図７】外部デバイス候補返答処理を表したフローチャートである。
【図８】代替デバイス切り替え処理を表したフローチャートである。
【図９】データバッファの仕組みを表した図と、外部デバイス出力処理を表した図である。
【図１】
2004341712.tif 000003
【図２】
2004341712.tif 000004
【図３】
2004341712.tif 000005
【図４】
2004341712.tif 000006
【図５】
2004341712.tif 000007
【図６】
2004341712.tif 000008
【図７】
2004341712.tif 000009
【図８】
2004341712.tif 000010
【図９】
2004341712.tif 000011