(57)【特許請求の範囲】
【請求項１】
撮像デバイス上で実行されるファームウェアをホストシステムが更新する方法であって、
前記撮像デバイスが前記ホストシステムとの通信に用いるインタフェースを識別するインタフェース識別子を前記撮像デバイスからフェッチする段階と、
前記撮像デバイスからフェッチしたインタフェース識別子が、前記撮像デバイス用のファームウェアイメージおよび当該ファームウェアイメージのファームウェア・バージョン番号に関連づけて複数のインタフェース識別子を格納している構成表に格納されているか否かを判断する段階と、
前記撮像デバイスからフェッチしたインタフェース識別子が前記構成表に格納されている場合に、前記撮像デバイス上で実行されるファームウェアイメージのファームウェア・バージョン番号を前記撮像デバイスから取得する段階と、
前記撮像デバイスから取得したファームウェア・バージョン番号が、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号と同じであるか否かを判断する段階と、
前記撮像デバイスから取得したファームウェア・バージョン番号が、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号と同じでない場合に、前記撮像デバイス上で実行されるファームウェアイメージを、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号のファームウェアイメージに更新させる段階と
を備える方法。
【請求項２】
前記撮像デバイスのハードウェアのバージョン番号であるハードウェア・バージョン番号を前記撮像デバイスからフェッチする段階
を更に備え、
前記構成表は更に、前記複数のインタフェース識別子をハードウェア・バージョン番号に関連づけて格納しており、
前記ファームウェア・バージョン番号を前記撮像デバイスから取得する段階は、前記撮像デバイスからフェッチしたハードウェア・バージョン番号が前記構成表に格納されていることを条件として、前記ファームウェア・バージョン番号を前記撮像デバイスから取得する
請求項１に記載の方法。
【請求項３】
前記撮像デバイスのファームウェアイメージの更新が前記撮像デバイスの製造者によって可能にされているか否かを判断する段階
を更に備え、
前記更新させる段階は、前記ファームウェアイメージの更新が前記撮像デバイスの製造者によって可能にされていることを条件として、前記撮像デバイス上で実行されるファームウェアイメージを、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号のファームウェアイメージに更新させる
請求項１または２に記載の方法。
【請求項４】
命令を記憶した記憶媒体およびプロセッサを含む構成システムと、
前記構成システムに通信可能に接続された撮像デバイスと
を備え、
前記プロセッサで前記命令が実行されるときに、前記プロセッサに、
前記撮像デバイスが前記構成システムとの通信に用いるインタフェースを識別するインタフェース識別子を前記撮像デバイスからフェッチさせ、
前記撮像デバイスからフェッチしたインタフェース識別子が、前記撮像デバイス用のファームウェアイメージおよび当該ファームウェアイメージのファームウェア・バージョン番号に関連づけて複数のインタフェース識別子を格納している構成表に格納されているか否かを判断させ、
前記撮像デバイスからフェッチしたインタフェース識別子が前記構成表に格納されている場合に、前記撮像デバイス上で実行されるファームウェアイメージのファームウェア・バージョン番号を前記撮像デバイスから取得させ、
前記撮像デバイスから取得したファームウェア・バージョン番号が、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号と同じであるか否かを判断させ、
前記撮像デバイスから取得したファームウェア・バージョン番号が、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号と同じでない場合に、前記撮像デバイス上で実行されるファームウェアイメージを、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号のファームウェアイメージに更新させる
ことを行わせる、システム。
【請求項５】
前記プロセッサで前記命令が実行されるときに、前記プロセッサに、
前記撮像デバイスのハードウェアのバージョン番号であるハードウェア・バージョン番号を前記撮像デバイスからフェッチさせる
ことを更に行わせ、
前記構成表は更に、前記複数のインタフェース識別子をハードウェア・バージョン番号に関連づけて格納しており、
前記プロセッサは、前記ファームウェア・バージョン番号を前記撮像デバイスから取得する場合に、前記撮像デバイスからフェッチしたハードウェア・バージョン番号が前記構成表に格納されていることを条件として、前記ファームウェア・バージョン番号を前記撮像デバイスから取得する
請求項４に記載のシステム。
【請求項６】
前記プロセッサで前記命令が実行されるときに、前記プロセッサに、
前記撮像デバイスのファームウェアイメージの更新が前記撮像デバイスの製造者によって可能にされているか否かを判断する
ことを更に行わせ、
前記プロセッサは、前記撮像デバイス上で実行されるファームウェアイメージを更新させる場合に、前記ファームウェアイメージの更新が前記撮像デバイスの製造者によって可能にされていることを条件として、前記撮像デバイス上で実行されるファームウェアイメージを、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号のファームウェアイメージに更新させる
請求項４または５に記載のシステム。
【請求項７】
ホストシステムと、
通信可能に前記ホストシステムに接続される撮像デバイスと
を備え、
前記ホストシステムは、
前記撮像デバイスが前記ホストシステムとの通信に用いるインタフェースを識別するインタフェース識別子を前記撮像デバイスからフェッチする手段と、
前記撮像デバイスからフェッチしたインタフェース識別子が、前記撮像デバイス用のファームウェアイメージおよび当該ファームウェアイメージのファームウェア・バージョン番号に関連づけて複数のインタフェース識別子を格納している構成表に格納されているか否かを判断する手段と、
前記撮像デバイスからフェッチしたインタフェース識別子が前記構成表に格納されている場合に、前記撮像デバイス上で実行されるファームウェアイメージのファームウェア・バージョン番号を前記撮像デバイスから取得する手段と、
前記撮像デバイスから取得したファームウェア・バージョン番号が、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号と同じであるか否かを判断する手段と、
前記撮像デバイスから取得したファームウェア・バージョン番号が、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号と同じでない場合に、前記撮像デバイス上で実行されるファームウェアイメージを、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号のファームウェアイメージに更新させる手段と
を有するシステム。
【請求項８】
前記ホストシステムは、
前記撮像デバイスのハードウェアのバージョン番号であるハードウェア・バージョン番号を前記撮像デバイスからフェッチする手段
を更に有し、
前記構成表は更に、前記複数のインタフェース識別子をハードウェア・バージョン番号に関連づけて格納しており、
前記ファームウェア・バージョン番号を前記撮像デバイスから取得する手段は、前記撮像デバイスからフェッチしたハードウェア・バージョン番号が前記構成表に格納されていることを条件として、前記ファームウェア・バージョン番号を前記撮像デバイスから取得する
請求項７に記載のシステム。
【請求項９】
前記ホストシステムは、
前記撮像デバイスのファームウェアイメージの更新が前記撮像デバイスの製造者によって可能にされているか否かを判断する手段
を更に有し、
前記更新させる手段は、前記ファームウェアイメージの更新が前記撮像デバイスの製造者によって可能にされていることを条件として、前記撮像デバイス上で実行されるファームウェアイメージを、前記撮像デバイスからフェッチしたインタフェース識別子に関連づけて前記構成表に格納されているファームウェア・バージョン番号のファームウェアイメージに更新させる
請求項７または８に記載のシステム。
【発明の詳細な説明】
【０００１】
（発明の分野）
本発明は撮像の分野に関する。より詳細には、本発明は撮像デバイスとホスト・システムの間でファームウェアを更新することに関する。
【０００２】
（発明の背景）
カメラなどの撮像デバイスは、典型的には静止画像情報または動画（ビデオ）情報をフィルム、ビデオ・テープ、または他のメディアに格納する。ディジタル・カメラはディジタルなフォーマットで画像情報をキャプチャし（捕らえ）、画像情報をフラッシュ・メモリなどのメモリ内、または別のディジタル記憶媒体上に格納する。ディジタル画像情報は、パーソナル・コンピュータなどのホスト・システムにダウンロードできる。画像情報は次いで、ホスト・システムに常駐するソフトウェア・アプリケーションで、画像を回転する、画像を切り取る、または画像を変更するなどによって操作される。
【０００３】
撮像デバイスは、ホスト・システムのソフトウェアと通信するできるファームウェアを含む。ファームウェアは、種々の機能を実行するための命令を含む。たとえば、ファームウェアを使用して画像の露出を決定したり、特定の方法で色を検知したり、画像データを圧縮したり、電力を節約したり、自己テストを実行したり、および／またはカメラ上の記憶媒体にアクセスし、記憶媒体をフォーマットするプロトコルを指定したりする場合がある。
【０００４】
ホスト・ソフトウェアおよび／またはカメラ・ファームウェアを、ソフトウェアまたはファームウェアの新しいリリースでアップグレードすることが望ましい場合が多い。ソフトウェアをアップグレードするための一般の方法は、パッチ、またはサービス・パック・アップグレードの使用を通じてである。この方法は、一組のプログラムをフロッピ・ディスク、ＣＤ−ＲＯＭ、またはワールド・ワイド・ウェブを介してホスト・マシンに配布することを含む。サービス・パックは実行されると、更新を必要とするホスト・ソフトウェアの構成要素を修正する。
【０００５】
ファームウェアの更新はさらに問題がある。この手順は、典型的にはユーザによって手動で実行される。これは実行可能なプログラムを実行し、次いで撮像デバイスをリセットすることを含む場合がある。ファームウェアの手動の更新は不便であり、ファームウェアおよびホスト・システム・ソフトウェアの非互換のバージョンによって引き起こされるエラーにつながる可能性がある。
【０００６】
（本発明の概要）
ホスト・システムに結合された撮像デバイス上でファームウェアを更新する方法が開示される。ホスト・システムは撮像デバイス上のファームウェアがホスト・システムの構成と非互換であることを検出する。非互換性の検出に応答して、更新されたファームウェア画像がホスト・システムから撮像デバイスへ転送される。１つの実施態様では、更新されたファームウェア画像は置き換えられたファームウェアのバージョンより古いバージョンである。
【０００７】
本発明の他の機能および利点は、付随する図面および以下の詳細な説明から明らかであろう。
【０００８】
（詳細な説明）
撮像デバイスとホスト・システムの間のファームウェアを更新する方法が開示される。ファームウェアは撮像デバイスなどの埋め込まれたシステムを制御するために使用される命令を含む。一実施形態では、ファームウェア更新は、撮像デバイスをホスト・システムに接続した時に自動的に実行される。これは、ユーザにとっての操作を簡単にすると同時に、撮像デバイスとホスト・ソフトウェアの間で互換性を確認する。ファームウェアの更新は「バグ」の修正、アルゴリズムへの強化、更新された色の検知、更新された圧縮、記憶媒体へのアクセスおよびフォーマット化に関する新しいプロトコルなどを提供する可能性がある。後に明らかになるように、自動的なファームウェアの更新は特に、異なるバージョンのソフトウェアを有するホスト・システムで異なるバージョンのファームウェアを伴う複数の撮像デバイスが使用されている時に便利である。
【０００９】
次の説明は、画像デバイスをホスト・システムに結合した時に自動的に画像デバイスとホスト・システムの間で画像情報を転送するシステムの中で、ファームウェアの更新を説明している。しかし、ファームウェアの更新はこのようなシステムには限定されない。
【００１０】
撮像デバイスは、カメラなどの画像キャプチャ・デバイスでもる。あるいは、開示された技法は画像情報を格納する機能のある任意のデバイスで使用できる。ホスト・システムは画像情報を操作する機能のある任意のシステムでよい。たとえば、ホスト・システムはＩｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）、Ｐｅｎｔｉｕｍ（登録商標）ＩＩプロセッサ上で実行するＩＢＭ互換パーソナル・コンピュータなどのパーソナル・コンピュータでよい。しかし別法としては、ホスト・システムはプリンタ、作図装置、ファックス機、ディスプレイ・デバイス、または格納デバイスでもよい。
【００１１】
明確にするために、次の説明は撮像キャプチャ・デバイスがカメラであり、ホスト・システムがコンピュータであるものとして書かれている。他の撮像デバイスおよびホスト・システムを使用する場合もあることを理解されたい。
【００１２】
図１は、ホスト・システム２０に取付け可能な撮像デバイス１０の表示を示す。一実施形態では、撮像デバイス１０はケーブル２２を介してホスト・システム２０のポート２６に接続されている。撮像デバイス１０は好ましくは、高いデータ転送レートをサポートするデータ転送プロトコルを使用してホスト・システム２０に結合されている。一実施形態では、撮像デバイス１０はユニバーサル・シリアル・バス（ＵＳＢ）接続を介してホスト・システム２０に結合されている。ＵＳＢ接続は、１２Ｍｂ／ｓまでのデータ転送レートを有する。別法としては、他の接続および１３９４プロトコルなどのデータ転送プロトコルも使用される場合がある。（ＵＳＢに関するさらなる情報は、ＵＲＬがｈｔｔｐ：／／ｗｗｗ．ｕｓｂ．ｏｒｇ／のワールド・ワイド・ウェブから得られる。１３９４標準は電気電子学会によって維持され配布されている。１３９４の一実施形態であるファイアワイヤはＩＥＥＥ標準１３９４〜１９９５によって定義されている。）
【００１３】
図２および図３は、ホスト・システム２０の構成要素と撮像デバイス（カメラ）１０の間の関係およびメッセージ交換を示す一実施形態である。図２は、撮像デバイス１０が第１にホスト・システム２０に接続されている時の、ホスト・システムの構成要素間における情報の流れの一実施形態を示す。ホスト・システム２０は、オペレーティング・システム（Ｏ／Ｓ）４０およびホスト・アプリケーション・ソフトウェア６０を含む。ホスト・システム２０は、カメラ１０などの撮像デバイスがホスト・システム２０に取り付けられた時、それを検出する。一実施形態では、オペレーティング・システム４０は、カメラ１０がシステムに取り付けられたかどうかを、ポート２６をポーリングすることによって検出する。ポート・ドライバ４２は、オペレーティング・システム４０とポート２６の間のインタフェースとして使用される。一実施形態では、ポート２６はＵＳＢポートであり、ポート・ドライバはＵＳＢドライバである。
【００１４】
オペレーティング・システムは種々の異なるオペレーティング・システムのうちの１つである可能性がある。一実施形態では、オペレーティング・システムはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって作成されたウィンドウズ９５、ウィンドウズ９８などのウィンドウズ・オペレーティング・システムである。ウィンドウズ９８は、ポートのポーリングを可能にするフックを含む。他のオペレーティング・システムは、このようなポーリングを行えるように修正できる。ポーリングは好ましくはバックグラウンドで実行され、ユーザはポーリングが実行されているということに気づく必要はない。別法としては、ホスト・アプリケーション・ソフトウェア６０がポート２６のポーリングを実行できる。しかし、オペレーティング・システムはキーボードのプッシュ、マウスの動きなどの種々のアクティビティをポーリングするためにすでにセットアップされているため、オペレーティング・システム４０による（ホスト・アプリケーション・ソフトウェア６０によらず）ポーリングは、性能利点を有する。例示のために、次の説明ではオペレーティング・システムがポーリングを行うものと仮定する。当業者であれば、アプリケーションがポーリングを行えるように、修正できるであろう。
【００１５】
カメラ１０がホスト・システム２０のポート２６に接続されている時、ポート・ドライバ４２は、カメラがホスト・システム２０に取り付けられたことをオペレーティング・システム４０に知らせる。これは図２に示された、（１）と印を付けられた矢印によって示される。オペレーティング・システム４０はそのデバイスをカメラとして識別し、矢印（２）によって示されたように、対応するソフトウェア・ドライバ４４をメモリ内にロードする。一実施形態では、オペレーティング・システム４０は、カメラ１０に問い合わせて、識別子を得る。オペレーティング・システム４０は、識別子に対応するソフトウェア・ドライバ４４をロードする。この例では、カメラ・ドライバ４４はオペレーティング・システム４０によってロードされる。
【００１６】
オペレーティング・システム４０は次いで、カメラに対応する１つまたは複数のソフトウェア・アプリケーションをロードする。一実施形態では、オペレーティング・システムは、ソフトウェア・アプリケーションを登録できる。所定の条件を満たした時（特定の識別子を伴うカメラが検出されるなど）、登録されたホスト・アプリケーション・ソフトウェアがロードされる。この場合、ホスト・アプリケーション・ソフトウェア６０（カメラ用の）は、矢印（３）によって示されたようにロードされる。一実施形態では、カメラ・ドライバ４４はオペレーティング・システム４０にホスト・アプリケーション・ソフトウェア６０を開始するように知らせる。ホスト・アプリケーション・ソフトウェア６０は、画像デバイス（カメラ）１０とホスト・システム２０の間で画像情報の転送を開始する。ホスト・アプリケーション・ソフトウェア６０は、画像を処理する場合もある。たとえば、ホスト・アプリケーション・ソフトウェア６０は、画像について解凍および／または色修正を実行できる。さらに、ホスト・アプリケーション・ソフトウェア６０は回転、切り取りおよびその他の画像操作機能を実行することもできる。
【００１７】
ウィンドウズ９８などのいくつかのオペレーティング・システムでは、特定のイベントがソフトウェア・アプリケーションを起動させることができる。たとえば、カメラ・ドライバ４４は「カメラと共に検出された接続」または「カメラ上のシャッタ・ボタンが押された」などの登録されたイベントでセットアップできる。したがってオペレーティング・システムは、カメラ１０が取り付けられた時に、ホスト・アプリケーション・ソフトウェア６０などのアプリケーションを自動的に起動するようにセットアップできる。
【００１８】
一実施形態では、カメラ１０がホスト・システム２０に取り付けられた時、カメラ・ドライバ４４またはホスト・アプリケーション・ソフトウェア６０がホスト・システム２０上にインストールされていない場合、ユーザは、ポート２６に取り付けられているデバイス用のカメラ・ドライバ４４および／またはホスト・アプリケーション・ソフトウェア６０を準備するように要求される。インストールが完了すると、手順は前に説明されたように継続する。
【００１９】
図３は、ホスト・アプリケーション・ソフトウェア６０が開始された後の、ホスト・システムの構成要素間における情報の流れの一実施形態を示す。この実施形態では、ホスト・アプリケーション・ソフトウェア６０がロードされた後、矢印（４）に示されたように、ホスト・アプリケーション・ソフトウェア６０はカメラ・アプリケーション・プログラミング・インタフェース（ＡＰＩ）６２を作成し、開始する。カメラＡＰＩ６２はバックグラウンドのスレッドでタスクを実行する可能性がある。この方法で、ホスト・アプリケーション・ソフトウェア６０は、他のタスクを実行する前にカメラＡＰＩ６２が完了することを待つ必要はない。一実施形態では、カメラＡＰＩ６２は、矢印（５）によって示すように、ダイナミック・リンク・ライブラリ（ＤＬＬ）６４をロードするＣＯＭオブジェクトである。ＤＬＬはＯ／Ｗに依存している場合がある。カメラＡＰＩ６２は、ＤＬＬ６４を介してオペレーティング・システム４０に通信する。（別の実施形態では、カメラＡＰＩ６２はＤＬＬ６４を組み込んでいる。）オペレーティング・システム４０は次いで、矢印（６）によって示されたように、カメラ・ドライバ４４およびポート・ドライバ４２を介してカメラ１０と通信する。
【００２０】
図４は、ポーリング開始手順の一実施形態を示す。ポーリング開始手順は、オペレーティング・システムがホスト・アプリケーション・ソフトウェアを開いた時に開始する。ホスト・アプリケーション・ソフトウェア６０は次いで、カメラＡＰＩ６２を作成し、初期化する。一実施形態では、ホスト・アプリケーション・ソフトウェア６０はそれ自体をカメラＡＰＩのコールバック・リストに追加し、カメラＡＰＩがうまくポーリング・プロセスを行った時にホスト・アプリケーション・ソフトウェア６０に知らせる。
【００２１】
一実施形態では、初期化の時にカメラＡＰＩはその内部変数をリセットし、ＤＬＬをロードし、バックグラウンド・スレッドを作成し、開始する。カメラＡＰＩは次いで、カメラ・ドライバを開けようとしているバックグランド・スレッド化した待ち行列にメッセージを挿入する。（ドライバはカメラＡＰＩとドライバの間で接続を確立することによって「開かれる」。）一実施形態では、カメラが取り付けられる時だけカメラ・ドライバが開かれる。カメラ・ドライバが開けない場合、カメラはホスト・システムに取り付けられない。カメラ・ドライバが開ける場合、カメラは取り付けられる。一実施形態では、カメラＡＰＩ４４は半秒ごとにカメラ・ドライバを開くように試みる。
【００２２】
図５は、カメラＡＰＩ６２とホスト・アプリケーション・ソフトウェア６０の間のポーリング手順の一実施形態を示す。この実施形態では、カメラＡＰＩ６２は、カメラ・ドライバ（ＣＭ＿ＳＩＧＮＡＬ＿ＳＴＡＴＵＳ）を開こうと試みている。カメラＡＰＩがカメラ・ドライバを開くことに成功した時、カメラＡＰＩはカメラ・ドライバを閉じ、コールバック待ち行列内にあるアプリケーションを知らせる。ホスト・アプリケーション・ソフトウェア６０がカメラＡＰＩのコールバック待ち行列内にあるので、カメラが検出されたことが知らされる。
【００２３】
この実施形態では、ホスト・アプリケーション・ソフトウェア６０は、カメラ・ドライバ４４を開いて互換性のあるカメラ（ＣＭ＿ＯＰＥＮ＿ＤＲＩＶＥＲ）をチェックするようにカメラＡＰＩ６２に知らせることによってカメラ・ドライバ４４を再び開く。ホスト・アプリケーション・ソフトウェア６０は次いで、カメラＡＰＩ６２（ならびにオペレーティング・システム４０とドライバ４４および４２）を介して種々のコマンドをカメラ１０に送信できる。たとえば、ホスト・アプリケーション・ソフトウェア６０は、カメラ内に格納された画像の数を要求できる（ＣＭ＿ＧＥＴ＿ＮＯ＿ＯＦ＿ＩＭＡＧＥＳ）。ホスト・アプリケーション・ソフトウェア６０は画像の名前および画像の大きさの一覧を要求できるか（ＣＭ＿ＧＥＴ＿ＩＭＡＧＥ＿ＬＩＳＴ）、または特定の画像を要求できる（ＣＭ＿ＧＥＴ＿ＩＭＡＧＥ＿ＢＹ＿ＮＡＭＥ）。
【００２４】
一実施形態では、カメラＡＰＩ６２は互換性のある撮像デバイスがホスト・システムに接続されているかどうかをチェックし、必要であれば、撮像デバイス上のファームウェアを自動的に更新する。ファームウェア自動更新は、製造者による工場設定として使用不可能もしくは使用可能とされてもよく、またユーザによって変更可能としてもよい。
【００２５】
図６は、互換性のある撮像デバイスがホスト・システムに接続されているかどうかをチェックする手順の一実施形態のフローチャートを示す。一実施形態では、この手順はカメラＡＰＩ６２によって実行される。前に述べたように、カメラＡＰＩ６２はブロック１００で示されたように、ホスト・アプリケーション・ソフトウェア６０によって作成され、初期化される。カメラＡＰＩ６２はブロック１０２において、オペレーティング・システムに依存したＤＬＬをロードし、ホスト・アプリケーション・ソフトウェア６０はブロック１０４においてカメラＡＰＩ６２に開くコマンドを発行する。カメラＡＰＩは応答して、ブロック１０６に示したようにＤＬＬ６４を介してカメラ・ドライバ６２を開く。
【００２６】
ブロック１０８において、カメラＡＰＩ６２は、カメラ・インタフェース番号をフェッチするコマンドをカメラに発行する。一実施形態では、カメラがサポートする一組のコマンドに一意的なカメラ・インタフェース番号が割り当てられている。
【００２７】
動作は決定ブロック１１０に続く。カメラからのインタフェース番号はカメラＡＰＩ６２の中のインタフェース表と比較される。インタフェース番号がカメラＡＰＩ６２インタフェース表に格納されていない場合、ブロック１１２および１１４に示されたように、カメラＡＰＩ６２はカメラ・ドライバを閉じ、ホスト・アプリケーション・ソフトウェアに、カメラが非互換であることを知らせる。カメラがサポートするコマンドが不明なので、カメラＡＰＩはカメラと通信することはできない。
【００２８】
ブロック１１０において、カメラからのインタフェース番号がカメラＡＰＩ６２のインタフェース表の中に格納されている場合、ブロック１２０に示されたようにカメラＡＰＩ６２はハードウェア・バージョン番号をフェッチするコマンドをカメラに発行する。
【００２９】
ブロック１３０において、カメラからのハードウェア・バージョン番号がカメラＡＰＩ６２に格納されたハードウェア表と比較される。カメラからのハードウェア・バージョン番号がカメラＡＰＩ６２のハードウェア表の中に格納されていない場合、カメラＡＰＩ６２はチェックして更新することができない。ブロック１３２に示されたように、カメラＡＰＩ６２は、カメラがアクセスのために開かれていることをホスト・アプリケーション・ソフトウェアに知らせる。カメラＡＰＩ６２はインタフェースが互換性があるのでカメラと通信することができるが、ハードウェア構成を認識しないので、ファームウェアを更新しない。
【００３０】
ブロック１３０では、カメラからのハードウェア・バージョン番号がカメラＡＰＩ６２のハードウェア表に格納されている場合、動作はブロック１４０に続く。ブロック１４０では、カメラＡＰＩはファームウェア・バージョン番号を戻すコマンドをカメラに発行する。
【００３１】
動作はブロック１５０に進む。ファームウェア・バージョン番号がカメラＡＰＩ６２内に格納されたものと異ならない場合、カメラはすでに更新されたファームウェアを有する。カメラＡＰＩ６２は、カメラがアクセスのために開かれていることをホスト・アプリケーション・ソフトウェアに知らせる。
【００３２】
ファ０ームウェア・バージョン番号がカメラＡＰＩ６２に格納されている番号と異なる場合、動作はブロック１６０に続く。製造者がファームウェア更新を使用不可能にしている場合、カメラＡＰＩ６２はファームウェア更新を実行せず、カメラがアクセスのために開かれていることをホスト・アプリケーション・ソフトウェアに知らせる。たとえば、製造者がファームウェア更新を使用不可能にするビットをカメラのレジスタ内に設定する場合がある。インストールされたファームウェアが最新のバージョンでない場合であっても、インストールされたファームウェアはインタフェースおよびハードウェアが互換である限り、そのホスト・ソフトウェアで実行することが可能である。
【００３３】
ブロック１７０では、更新が前に試され失敗したかどうかというチェックが行われる。一実施形態では、所定の数の更新の試みが実行される。ブロック１７２において示されたように、更新が前に実行され失敗している場合は、カメラＡＰＩ６２は更新が失敗したこと、およびカメラがアクセスのために開かれていることをホスト・アプリケーション・ソフトウェアに知らせる。
【００３４】
ブロック１７０においては、更新が前に試されていない場合、フローチャートは図７に示されたようにファームウェア更新手順に続く。
【００３５】
図７は、ファームウェア更新の一実施形態のフローチャートを示す。ブロック２００において、カメラＡＰＩは更新されたファームウェア画像をカメラに転送する。一実施形態では、カメラＡＰＩはファームウェアが新しいファームウェア画像を受信する準備をするように、ファームウェア・ダウンロード・コマンドをカメラに送信する。更新されたファームウェア画像は次いで、ホスト・システムからカメラへ転送される。一実施形態では、更新されたファームウェア画像は揮発性メモリのような一時バッファ内でカメラに格納される。
【００３６】
ブロック２０２では、カメラＡＰＩ６２はカメラ・ドライバを閉じる。これは、ファームウェア更新が割り込まれないようにカメラとホスト・システムの間の通信をシャット・ダウンする。カメラＡＰＩは次いでブロック２０４に示されたように、ホスト・アプリケーション・ソフトウェアに、ファームウェアを更新する手順中であることを知らせる。カメラＡＰＩはそのファームウェアに対してポーリングを開始し、ファームウェアとの接続を再確立する。
【００３７】
ファームウェアは、起動ブロックおよび符号ブロックから成り立っている。起動ブロックはブートストラップローダとも呼ばれ、ファームウェアが置き換えられた時に置き換えられない。符号ブロックだけが置き換えられる。ブートストラップローダは、ファームウェアを更新するためのルーチンを維持する。ブロック２０６において、ブートストラップローダは更新済みファームウェア画像にエラーがないことを確認する。これはたとえば、チェックサムを生成することによって実行できる。ブートストラップローダは次いで、ブロック２０８に示されたように、古い（インストール済みの）ファームウェアを更新されたファームウェア画像に交換する。一実施形態では、ファームウェア画像を揮発性メモリから非揮発性メモリへ転送することによってそれが実行される。ブートストラップローダは次いでブロック２１０に示されたように、リセットするか、またはブートストラップローダの開始にジャンプして、新しく更新されたファームウェアを開始する。ブロック２１２で示されたように、これによってブートストラップローダが再開し、このポイントで更新されたファームウェア内のエラーをチェックする。チェックサムが正しい場合、ブロック２１４および２１８に示されたように、符号ブロック内のファームウェアが実行される。
【００３８】
チェックサムが正しくない場合、ブロック２１６に示されたようにブートストラップローダはホスト・システムとの接続を再確立し、待ち状態に移行する。この待ち状態では、カメラＡＰＩはブートストラップローダから状況を得て、新しいファームウェア画像が正しく符号ブロックにロードされたかどうか、または問題があるかどうかを決定し、ブートストラップローダは待ち状態になる。カメラＡＰＩは、ファームウェアの別の更新を試みる。
【００３９】
ブロック２１８から進んできてファームウェアがその符号ブロック上で正しいチェックサムで再開できると、ファームウェアはホスト・システムとの接続を確立できる。カメラＡＰＩはこのポーリングから、カメラがブロック２２０において接続されたことを検出する。カメラＡＰＩは次いでカメラ・ドライバを再開し、カメラへのアクセスを実行する。
【００４０】
図８は、ファームウェア起動手順の状態推移図の一実施形態を示す。状態推移図は図８の左側にある起動ブロック状態および、図８の右側にある符号ブロック状態の２つに分かれる。状態３００では、リセットはカメラ・ハードウェアを初期化する。これは、レジスタをリセットすることおよび／またはカメラの一定のユニットをターンオフすることで、カメラを知られた状態することを含む場合がある。状態３００から状態３０２への推移があり、状態３０２では符号ブロックがチェックされる。一実施形態では、チェックサムは符号ブロック上で実行される。チェックサムが通過すると、状態３０４に示されたように符号ブロック内の命令が実行される。符号ブロック内のファームウェアはホスト・システムとの接続を確立することができ、ホスト・システムから受信された種々のコマンドを処理する。符号ブロック内のファームウェアが、ホスト・システムがダウンロード・コマンドを発行したことを検出した場合、状態は状態３０６に推移し、状態３０６ではカメラ・ハードウェアは知られた状態に初期化される。たとえば、センサとストロボがターンオフされ、ＤＲＡＭがターンオンされる場合がある。一実施形態では、カメラ・ハードウェアが使用されていない時には電力を節約するためにターンオフされる。状態はブロック３０８に推移し、ブロック３０８では更新されたファームウェア符号はホスト・システムから受信される。更新されたファームウェア符号は一実施形態では一時的にＤＲＡＭに格納される。
【００４１】
状態３０８において通信問題があった場合、待ち状態３１０への推移がある。待ち状態３１０では、起動ブロックはホスト・システムからのコマンドを待つ。
【００４２】
状態３０２から、チェックサムが失敗すると、ここでも待ち状態３１０への推移がある。待ち状態３１０では、起動ブロックはホスト・システムからのコマンドを待つ。ホスト・システムは、たとえば、起動ブロックから状況情報を要求する場合がある。ホスト・システムが起動ブロックが待ち状態３１０にあることに気づいた時、ホスト・システムは別のダウンロード・コマンドを発行することができ、この結果、推移は状態３０８に戻る。
【００４３】
状態３０８から、ファームウェア画像がエラーなしにダウンロードされると、状態３２０への推移があり、状態３２０ではダウンロードされた符号はエラーに関してチェックされる。一実施形態では、チェックサムが実行される。チェックサムが失敗すると、起動ブロックは待ち状態３１０に戻る。チェックサムが通過すると、状態はブロック３２２に推移し、ブロック３２２では符号ブロックが消される。その後、符号ブロックは状態３２４で再プログラミング化される。状態３２４から推移は状態３００に戻り、状態３００ではカメラ・ハードウェアは再初期化され、状態推移図は前に説明したように再開する。
【００４４】
図９は、非揮発性メモリ４００の例を示す図である。一実施形態では、非揮発性メモリはフラッシュ・メモリである。一実施形態では起動ブロック４０２および符号ブロック４０４はフラッシュ・メモリ内に格納され、起動ブロックは書き換えられないようにロックされる。符号ブロックは再プログラミングが可能である。
【００４５】
一実施形態では、非揮発性メモリは、１つまたは複数の撮像表４０６を格納する。撮像表はカメラの構成に関連する情報を含む場合がある。
【００４６】
一実施形態では、以下の撮像表がフラッシュ・メモリ内に格納される。
１）デッド・ピクセル表
２）符号器表
３）露出表
４）圧伸器表
５）色修正表
【００４７】
撮像表はカメラ内で画像の処理に備える。たとえば、デッド・ピクセル表は、カメラの正しく機能しない特定のピクセルに関する情報を含む場合がある。デッド・ピクセル表は、たとえば、製造テストの間に決定される場合がある。別法としては、カメラはデッド・ピクセルをダイナミックに決定できる場合がある。デッド・ピクセル表は、隣接するピクセルを使用して欠点のあるピクセルを補償する補間を準備する場合がある。
【００４８】
同様に、他の撮像表は撮像データの操作を可能にする。たとえば、符号器表は画像の符号化あるいは圧縮に使用される特定の値を指定する。露出表は露出時間、利得、ストロボの使用および強度についての情報を含むであろう。圧伸表は、第１の数のビットを使用したビット表現から、より少ない数のビットを使用したビット表現へデータをマッピングするために使用される情報を含む。色修正表は色を修正するために使用される。
【００４９】
一実施形態では、撮像表は特定の光源に関連する値を含む。たとえば、撮像表は日光、蛍光灯照明、またはタングステン電球照明のどれかで画像をキャプチャすることに対応する、異なる値を含んでいてもよい。
【００５０】
撮像表は、製造の間に非揮発性メモリ４００内に格納される場合もあるが、ファームウェアによって後から更新される場合もある。一実施形態では、ファームウェアは非揮発性メモリ内の撮像表を削除し、新しい撮像表をホスト・システムからカメラの非揮発性メモリへ転送することができる。ファームウェアは、表がカメラへ転送されるべきかどうか、または撮像表が削除されるべきかどうかを示すコマンドをホスト・システムから受信する。
【００５１】
一実施形態では、いくつかの非揮発性メモリ（たとえばいくつかのフラッシュ・メモリ）が、非揮発性メモリから読み出すことと非揮発性メモリに書き込むことを同時にはできないので、ＤＲＡＭを使用して非揮発性メモリからの符号を一時的に格納する。ファームウェアはその符号の一部をＤＲＡＭへコピーし、次いで実行をＤＲＡＭへ転送する。ＤＲＡＭからの命令を実行するマイクロコントローラは次いで、新しい撮像表を非揮発性メモリに書き込むことができる。実行はその後、非揮発性メモリの符号セクションに転送されて戻る。
【００５２】
表１および表２を使用して、異なるカメラおよびパーソナル・コンピュータ（ＰＣ）上のインタフェース、ファームウェア、カメラＡＰＩの種々のバージョンが相互関連する方法の例を示す。表１は、第１のカメラＡＰＩ（ＣＡＭＡＰＩ＃４００）内に格納されている構成表を示す。表２は、第２のカメラＡＰＩ（ＣＡＭＡＰＩ＃４２０）内に格納されている構成表を示す。これらの表に格納された構成情報を使用する種々の実施形態のいくつかの例が説明の役に立つであろう。
【表１】
0004942870.tif 000002
【表２】
0004942870.tif 000003
【００５３】
例１：２人のユーザ、ＡおよびＢが同じバージョンのホスト・アプリケーション・ソフトウェアおよびファームウェア・バージョンを有すると仮定する。ソフトウェア・バージョンが１．０であり、表１に示された識別子の表を有するＣＡＭＡＰＩ＃４００を作成するものとする。インタフェース識別子は０×０１０１であり、ファームウェア・バージョンは１．００である。次に、ユーザＡはアップグレードを受信し、彼のホスト・アプリケーション・ソフトウェアを同じインタフェース（０×０１０１）を有するバージョン１．０２に更新する。
【００５４】
ホスト・アプリケーション・ソフトウェアがアップグレードされた後、一番最初にユーザＡがカメラにアクセスしようと試みる時、カメラＡＰＩ６２はファームウェアの非互換のバージョンを検出する。これは前に説明したように、ファームウェアが自動的に更新されることをトリガする。
【００５５】
その後、ユーザＢ（依然として彼のカメラ上にファームウェア・バージョン１．００を有する）が、彼のカメラをＡのＰＣに持って行ってそれをプラグ・インすると仮定する。ＡのＰＣのカメラＡＰＩは再び、ファームウェアおよびソフトウェア・バージョンを検出する。カメラＡＰＩはＢのカメラのファームウェアを１．０２に更新する。Ｂのカメラは、ＢのＰＣのホスト・ソフトウェアとは異なるファームウェア（１．０２）を有するようになる。Ｂが彼のカメラをＢのＰＣに戻す時、カメラＡＰＩ６２はファームウェア・バージョン１．０２の知識を有しない。そのカメラＡＰＩ６２は、ファームウェア画像バージョン１．００をＢのカメラに転送する。したがって、ＢのカメラはＢのＰＣのソフトウェアと通信できるように、元のファームウェアに回復される。
【００５６】
ファームウェア更新はＢに透過的である。ＢはＡの更新されたシステムまたは、より古いホスト・アプリケーション・ソフトウェアを伴うＢのシステムのどちらでも、彼のカメラを使用できる。
【００５７】
例２：Ａがファームウェア・バージョン１．００、インタフェース０×０１０１を有し、Ｂがファームウェア・バージョン１．０８、インタフェース０×０２０２を有すると仮定する。Ａが彼女のソフトウェアを更新し、新しいインタフェース０×０２０２を認識しない限り、ＢはＡのＰＣを使用することはできない。ＢのＰＣが、表１に示されたすべての改訂を含むカメラＡＰＩを使用している場合、ＢのＰＣはＡのカメラまたはＢのカメラのどちらでも使用できる。
【００５８】
例３：ユーザＡがファームウェア・バージョン１．０を有し、表１に示されたようなＣＡＭＡＰＩ＃４００を使用し、ユーザＢがファームウェア・バージョン３．０を有し、表２に示されたようなＣＡＭＡＰＩ＃４２０を使用している場合、ＰＣは、両方のカメラにアクセスするために、別のインタフェースでカメラにインタフェースする両方のバージョンのソフトウェアを有さなければならない。
【００５９】
一実施形態では、インタフェースは一意的なインタフェース識別子を有する。インタフェースの一例はＴＷＡＩＮインタフェースであり、これはスキャナまたは他のディジタル撮像デバイスから画像を取得する方法を撮像アプリケーションに説明する。ＴＷＡＩＮの現在のバージョンは１．７である。ＴＷＡＩＮはいくつかの業界参加者から成る標準グループによって維持されている。ＴＷＡＩＮについてのさらなる情報は、ｈｔｔｐ：／／ｗｗｗ．ｔｗａｉｎ．ｏｒｇ．を介して入手可能である。独占的なインタフェースも使用される場合がある。たとえば、アプリケーション・プログラムが撮像デバイスから画像を転送したり削除する機能を有するように、特定のアプリケーション・プログラムをサポートするＤＬＬがサポートされる場合もある。
【００６０】
ハードウェア識別子はハードウェア変更を指定し、たとえば、ステッピング・モータが撮像デバイスに追加される場合がある。ファームウェア・リリースは、小さな変更および大きな変更を追跡調査するように設定される場合がある。たとえば、小さな変更はバグの修正または強化である可能性がある。大きな変更は新しいハードウェアの追加である可能性がある。
【００６１】
図１０は、ホスト・アプリケーション・ソフトウェアを初期化し、撮像デバイスとの通信を確立する手順の一実施形態のフローチャートを示す。この開示された実施形態では撮像デバイスはカメラであり、ホスト・システムはパーソナル・コンピュータである。フローチャートはブロック５００において開始する。手順はブロック５０２に続き、ここではホスト・アプリケーション・ソフトウェアはカメラＡＰＩを作成する。カメラＡＰＩはブロック５０４において、システム独立で動作できるＤＬＬをロードする。ブロック５０６において、カメラＡＰＩはカメラが使用可能かどうかを決定する。
【００６２】
ブロック５０８では、カメラが使用可能でない場合、フローチャートはブロック５０６に戻る。しかし、カメラが使用可能な場合、手順はブロック５１０に続く。ブロック５１０では、カメラＡＰＩはカメラが使用可能であることを示すメッセージをホスト・アプリケーション・ソフトウェアに送信する。ホスト・アプリケーション・ソフトウェアはブロック５１２で、カメラ・ドライバが開くことを要求する。カメラＡＰＩはブロック５１４で示されたように、カメラ・ドライバを開くことによって応答する。ドライバを開く手順は、カメラＡＰＩとカメラ・ドライバの間の接続が確立したことを意味する。以前に説明したように、ファームウェア更新手順はここで発生する。
【００６３】
ブロック５１６では、ホスト・アプリケーション・ソフトウェアは、カメラからホスト・システムに画像を転送することを要求する。カメラＡＰＩはブロック５１８において、画像情報をカメラからホスト・アプリケーション・ソフトウェアに転送することによって応答する。画像情報は、画像ピクセル・データ、色パレット情報、圧縮情報、画像の配向などの他の情報を含む。フローチャートはブロック５２０で終了する。
【００６４】
図１１は、カメラなどの撮像デバイスがホスト・システムに取り付けられていることを検出する手順の一実施形態のフローチャートを示す。フローチャートはブロック６００で開始する。これはブロック６０２に続き、ブロック６０２の中でオペレーティング・システムはカメラが使用可能かどうかを決定する。これはＵＳＢドライバなどのポート・ドライバの助けで実行される。カメラが使用可能でない場合、手順はブロック６０２に戻る。カメラがブロック６０４において使用可能な時、手順はブロック６０６に続き、ここでオペレーティング・システムはカメラ・ドライバをロードする。
【００６５】
一実施形態では、ウィンドウズ９８などのオペレーティング・システムがホスト・システムによって使用される。ブロック６０８によって示されたように、ウィンドウズ９８を使うとドライバは、カメラのオペレーティング・システムがホスト・システムに接続されていることを知らせることが可能になる（接続イベント）。オペレーティング・システムは次いで、接続イベントに登録されたアプリケーションを開く。この場合、ブロック６１０で示されたように、そのカメラに関するホスト・アプリケーション・ソフトウェアが開始される。フローチャートは次いで、図１０のフローチャートに続く。
【００６６】
オペレーティング・システムが接続イベントに基づいてアプリケーションを開く方法を提供しない場合、代替の実施形態は、ブロック６０８および６１０によって示されたステップの代わりに「サービス」を使用する可能性がある。サービスはユーザによってインストールされ、ホスト・システムが起動した時に自動的にホスト・システムで開始される。サービスはカメラが検出された時、ホスト・アプリケーション・ソフトウェアを開く。一実施形態では、サービスはカメラＡＰＩを使用して、カメラが使用可能かどうかを決定する。したがって、サービスは図１０に示されたのと同じ方法でミニ・ホスト・アプリケーションとして機能する。しかし、カメラ・ドライバへの接続が確立された時、サービスはホスト・アプリケーション・ソフトウェアを開始する。ホスト・アプリケーションは次いで、カメラ・ドライバへの独自の接続を確立して、画像をカメラから転送する。
【００６７】
一実施形態では、ホスト・アプリケーション・ソフトウェア６０およびカメラ・ドライバ４４はカメラ１０と共に出荷される。ホスト・アプリケーション・ソフトウェア６０およびカメラ・ドライバ４４はフロッピ・ディスクまたはＣＤ−ＲＯＭを介して出荷される。別法としては、ホスト・アプリケーション・ソフトウェア６０およびカメラ・ドライバ４４はワールド・ワイド・ウェブを介してダウンロードできる。ホスト・アプリケーション・ソフトウェア６０およびカメラ・ドライバ４４は、ハードディスク、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）またはフラッシュ・メモリなどのホスト・システムの記憶媒体にインストールされる。
【００６８】
前述の明細書の中で、本発明はその特定の例示的な実施形態に関連して説明された。しかし、この開示の利点を有する人にとっては、首記の請求項に記載された本発明のより広い精神および範囲から離れることなく、本発明に種々の修正および変更が行われることが明らかであろう。したがって明細書および図面は限定的な意味ではなく説明的なものと見なされるべきである。
【図面の簡単な説明】
【図１】  ホスト・システムに取付け可能な撮像デバイスの表示である。
【図２】  撮像デバイス１０が第１にホスト・システム２０に接続されている時の、ホスト・システムの構成要素間における情報の流れの一実施形態を示す図である。
【図３】  ホスト・アプリケーション・ソフトウェア６０が開始された後の、ホスト・システムの構成要素間における情報の流れの一実施形態を示す図である。
【図４】  ポーリング初期化手順の一実施形態を示す図である。
【図５】  カメラＡＰＩ６２とホスト・アプリケーション・ソフトウェア６０の間のポーリング手順の一実施形態を示す図である。
【図６】  互換性のある撮像デバイスがホスト・システムに接続されているかどうかをチェックする手順の一実施形態のフローチャートである。
【図７】  ファームウェア更新の一実施形態のフローチャートである。
【図８】  ファームウェア起動手順の状態推移図の一実施形態を示す図である。
【図９】  ファームウェアを格納する例としての非揮発性メモリ４００を示す図である。
【図１０】  ホスト・アプリケーション・ソフトウェアを初期化し、カメラとの通信を確立する手順の一実施形態のフローチャートである。
【図１１】  カメラなどの撮像デバイスがホスト・システムに取り付けられていることを検出する手順の一実施形態のフローチャートである。
【図１】
0004942870.tif 000004
【図２】
0004942870.tif 000005
【図３】
0004942870.tif 000006
【図４】
0004942870.tif 000007
【図５】
0004942870.tif 000008
【図６】
0004942870.tif 000009
【図７】
0004942870.tif 000010
【図８】
0004942870.tif 000011
【図９】
0004942870.tif 000012
【図１０】
0004942870.tif 000013
【図１１】
0004942870.tif 000014