(57)【特許請求の範囲】
【請求項１】
ホスト機器に着脱可能な記録媒体であって、
前記ホスト機器と異なる外部機器と、無線通信を行うための無線通信手段と、
前記無線通信手段を通じて、前記外部機器とＰＴＰ(Picture Transfer Protocol)に準拠した通信を行い、前記記録媒体を前記ＰＴＰにおけるResponderとして機能させるPTP Responderモジュールと、
前記無線通信手段を通じた前記外部機器とのＰＴＰ通信を、前記記録媒体が有する前記PTP Responderモジュールを用いて行うか、前記記録媒体が装着されたホスト機器が有する、前記ホスト機器を前記Responderとして機能させるPTP Responderモジュールを用いて行うかを、前記ホスト機器から設定されたモードに応じて切り替えるコントローラとを有し、
前記無線通信手段は、前記無線通信を行う外部機器を決定するための処理を、前記ホスト機器から設定されたモードに応じて異ならせることを特徴とする記録媒体。
【請求項２】
撮像装置であって、
請求項１記載の記録媒体を着脱可能に装着するための装着手段と、
前記撮像装置を前記Responderとして機能させるPTP Responderモジュールとを有し、
前記ホスト機器として動作することを特徴とする撮像装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は記録媒体及びそれを用いる撮像装置に関する。
【背景技術】
【０００２】
デジタルカメラなどの撮像装置では、撮影で得られた画像データを保存するための記録媒体として、半導体メモリカードが広く用いられている。記録された画像データをパーソナルコンピュータ（以下ＰＣ）、プリンタ、テレビジョン受像器などの外部装置に転送する場合、デジタルカメラと外部装置の両方が有するデジタルインタフェースをケーブルで接続するのが一般的である（特許文献１参照）。
【０００３】
このように、デジタルカメラと外部装置との間でデータ転送を行う場合、従来はケーブルのような物理的な伝送路上で、予め決められた通信プロトコルに従ってデータ交換を行っていた。
【０００４】
たとえば、ＰＣとデジタルカメラのデータ交換プロトコルとしては、ＵＳＢのStill Imaging Device Classで規定されているＰＴＰ（Picture Transfer Protocol）や、マスストレージデバイスクラスで定義されているプロトコルを利用することが多い。
【０００５】
特に、ＯＳレベルでＰＴＰをサポートしているＷｉｎｄｏｗｓ（登録商標）やＭａｃ ＯＳ（登録商標）が稼働するＰＣでは、デジタルカメラを接続すると、それがデジタルカメラであることを認識する。そして、例えばデータ転送アプリケーションを自動で起動し、データ転送を開始する等の動作が可能であり、ユーザの負荷軽減と、利便性の向上を実現している。
【０００６】
また、デジタルカメラとプリンタを直接接続して印刷するダイレクトプリントの手順等を定めた、PictBridgeという規格も提案されている。PictBridge規格においても装置間の通信にはＰＴＰを利用しているため、デジタルカメラがＰＴＰによる通信をサポートしていれば、ユーザはデジタルカメラを接続する外部装置がＰＣでもプリンタでも同様に操作すればよい。
【０００７】
近年では、デジタルカメラから外部機器へ画像データをより簡単に転送できるよう、無線通信機能を有するメモリカードが販売されている。このメモリカードをデジタルカメラに装着して用いると、無線通信可能な外部機器に自動的に画像データを転送することが可能であり、ユーザはケーブルの接続や明示的な転送指示を行う必要がない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−２２３７１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来の無線通信機能付きメモリカードは、ＩＥＥＥ８０２．１１ｘ規格に準拠した無線通信機能を有し、無線ＬＡＮに接続することによって画像データの転送を行うことに特化している。そのため、ＰＴＰのような、デジタルカメラと外部機器との通信プロトコルを用いたアプリケーション、例えばダイレクトプリントには対応できない。また、無線通信機能付きメモリカードが外部機器と行う通信は、デジタルカメラの動作とは基本的に独立しており、例えばデジタルカメラが無線通信機能付きメモリカードを通信アダプタとして用いて、外部機器と通信することはできなかった。
【００１０】
このように、従来の無線通信機能付きメモリカードはその用途が限られており、無線通信機能が有効に活用されていない面があった。本発明はこのような従来技術の課題に鑑みてなされたものであり、様々な用途に利用可能な無線通信機能付き記録媒体を提供することを１目的とする。
【課題を解決するための手段】
【００１１】
上述の目的は、ホスト機器に着脱可能な記録媒体であって、ホスト機器と異なる外部機器と、無線通信を行うための無線通信手段と、無線通信手段を通じて、外部機器とＰＴＰ(Picture Transfer Protocol)に準拠した通信を行い、記録媒体をＰＴＰにおけるResponderとして機能させるPTP Responderモジュールと、無線通信手段を通じた外部機器とのＰＴＰ通信を、記録媒体が有するPTP Responderモジュールを用いて行うか、記録媒体が装着されたホスト機器が有する、ホスト機器をResponderとして機能させるPTP Responderモジュールを用いて行うかを、ホスト機器から設定されたモードに応じて切り替えるコントローラとを有し、無線通信手段は、無線通信を行う外部機器を決定するための処理を、ホスト機器から設定されたモードに応じて異ならせることを特徴とする記録媒体によって達成される。
【発明の効果】
【００１２】
このような構成により、本発明によれば、様々な用途に利用可能な無線通信機能付き記録媒体と、このような記録媒体を用いる撮像装置を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に係る撮像装置の一例としてのデジタルスチルカメラの機能構成例を示すブロック図。
【図２】本発明の実施形態に係る外部装置の一例としての汎用コンピュータ装置の機能構成例を示すブロック図。
【図３】本発明の実施形態に係る外部装置の別の一例としてのプリンタの制御系の機能構成例を示すブロック図。
【図４】図１におけるメモリカード１２０の機能構成例を示すブロック図。
【図５】図１におけるメモリカード１２０の状態遷移図。
【図６】本発明の実施形態におけるＤＳＣ１００とメモリカード１２０に実装されるソフトウェアモジュールとその階層関係を説明する図。
【図７】本発明の実施形態に係るＤＳＣ１００において、メモリカード１２０のApplicationモードを設定するためのＧＵＩ画面の例を示す図。
【図８】本発明の実施形態に係る、PullモードにおけるＤＳＣ１００、メモリカード１２０、ＰＣ２００の動作を示すシーケンス図。
【図９】本発明の実施形態に係る、Path ThroughモードによるＰＴＰセッションの開始後までのＤＳＣ１００、メモリカード１２０、ＰＣ２００の動作を示すシーケンス図。
【図１０】本発明の実施形態に係る、Path ThroughモードによるＰＴＰセッションの開始後、外部機器からオブジェクトの送受信要求があった場合ならびにイベント発生時のＤＳＣ１００、メモリカード１２０、ＰＣ２００の動作を示すシーケンス図。
【図１１】図１０の変形例を示すシーケンス図。
【図１２Ａ】本発明の実施形態に係る、ＤＳＣ１００、メモリカード１２０、プリンタ３００のＤＰＳモードにおける動作（DPS Discovery）を示すシーケンス図。
【図１２Ｂ】本発明の実施形態に係る、ＤＳＣ１００、メモリカード１２０、プリンタ３００のＤＰＳモードにおける動作（DPS Discovery）を示すシーケンス図。
【図１３】本発明の実施形態に係る、ＤＳＣ１００、メモリカード１２０、プリンタ３００のＤＰＳモードにおける動作（DPS ConfigurePrintService）を示すシーケンス図。
【図１４】DPS ConfigurePrintService、GetCapability、StartJobで送信されるスクリプトの例を示す図。
【図１５】本発明の実施形態に係る、ＤＳＣ１００、メモリカード１２０、プリンタ３００のＤＰＳモードにおける動作（DPS_GetFileInfo及びDPS_GetFile）を示すシーケンス図。
【図１６】本発明の実施形態に係る、ＤＳＣ１００、メモリカード１２０、プリンタ３００のＤＰＳモードにおける動作（DPS_NotifyDeviceStatus）を示すシーケンス図。
【図１７】DPS_NotifyDeviceStatus、DPS_NotifyJobStatusで送信されるスクリプトの例を示す図。
【図１８】本発明の第３の実施形態における、Path ThroughモードによるＰＴＰセッションの開始後までのＤＳＣ１００、メモリカード１２０、ＰＣ２００の動作を示すシーケンス図。
【発明を実施するための形態】
【００１４】
＜第１の実施形態＞
次に、添付図面を参照して、第１の実施形態について詳細に説明する。なお、以下では、無線通信機能付きメモリカードを用いる撮像装置の一例としてデジタルスチルカメラ（ＤＳＣ）を説明するが、デジタルビデオカメラやカメラ付き携帯電子機器など、カメラまたはカメラを備える任意の機器に適用可能である。また、ＤＳＣと無線通信してサービスを提供したりＤＳＣが有する画像データ利用したりする外部機器の例として、以下では汎用コンピュータ装置（ＰＣ）およびプリンタを説明する。しかし、外部機器は、いわゆるスマートフォンやタブレット端末、または他のデジタルカメラなど、ＰＴＰ(Picture Transfer Protocol)をサポートする任意の機器であってよい。
【００１５】
図１は、ＤＳＣ１００の機能構成例を示すブロック図である。
制御部１０１は、例えばＣＰＵ，ＭＰＵなどプログラマブルなプロセッサであり、ＤＳＣ１００全体の制御を司る。不揮発性メモリ１０２は制御部１０１の処理手順（プログラム）や、ＤＳＣ１００の各種設定やメニュー画面などのＧＵＩ（Graphical User Interface）データなどを記憶する。ＲＡＭ１０３は制御部１０１のワークエリアとして使用される。操作部１０４はボタン並びにスイッチ群であり、ユーザがＤＳＣ１００に各種指示を与えるために用いられる。表示部１０５は例えばＬＣＤ(Liquid Crystal Display)であり、撮影した画像や、各種設定を行う際のメニュー画面を表示するために使用される。光学ユニット１０６は主としてレンズ（ズームレンズ、フォーカスレンズなど）及びその駆動を行うアクチュエータ等で構成される。撮像素子１０７はＣＣＤイメージセンサやＣＭＯＳイメージセンサである。ドライバ１０８は制御部１０１の制御下において光学ユニット１０６を制御する。コネクタ１０９は着脱可能な記録媒体であるメモリカード１２０を接続するためのコネクタである。後述するように、本実施形態におけるメモリカード１２０は無線通信機能を有する。インタフェース（Ｉ／Ｆ）１１０は例えばＵＳＢ，ＩＥＥＥ１９３４，ＨＤＭＩなどのデジタルインタフェースであり、有線接続により外部機器と接続するために用いられる。
【００１６】
図２は本実施形態における外部装置の一例としての汎用コンピュータ装置（ＰＣ）２００の構成例を示すブロック図である。
図において、表示装置２０１は、ＬＣＤ等から構成され、各種のＧＵＩやデータなどを表示する。キーボード２０３及びポインティングデバイス２０４は、文字などを入力したり、ＧＵＩにおけるアイコンやボタンなどを指し示したりするためなどに用いられる。ＣＰＵ２０５はＰＣ２００全体の制御を司る。
【００１７】
ＲＯＭ２０６（Read Only Memory）はＣＰＵ２０５が実行するプログラム（主にブートプログラム）やパラメータ等を記憶している。ＲＡＭ（Random Access Memory）２０７は各種プログラムをＣＰＵ２０５が実行する時のワークエリア、エラー処理時の一時退避エリア等として用いられる。
【００１８】
ハードディスクドライプ（ＨＤＤ）２０８はＯＳやアプリケーションプログラムなど、ＣＰＵ２０５が実行するプログラムを記憶したり、ユーザデータを記憶したりする。また、仮想記憶領域としても用いられる。本実施形態において説明するＰＣ２００の各種機能を実現するプログラムは、ＨＤＤ２０８に記憶されているものとする。
【００１９】
リムーバブルメディアドライプ（ＲＭＤ）２０９は、着脱可能な記録媒体の読み書き又は読み出しを行う装置である。ＲＭＤ２０９の具体例としては、フレキシブルディスクドライブ、光ディスクドライブ、光磁気ディスクドライブ、メモリカードリーダ、着脱式ＨＤＤなどがある。
【００２０】
ＵＳＢ／ＩＥＥＥ１３９４ Ｉ／Ｆ２１０は、プリンタを始めとした各種周辺機器を有線接続するためのインタフェースの一例である。
無線通信Ｉ／Ｆ２１１はＰＣ２００を無線通信ネットワークに接続するためのインタフェースである。バス２１２はアドレスバス、データバスおよび制御バスからなり、上述した各ユニット間を接続する。
【００２１】
図３は、本実施形態における外部装置の一例であるプリンタ３００の制御系の構成例を示すブロック図である。
図において、制御部３０１は例えばＣＰＵ，ＭＰＵなどプログラマブルなプロセッサであり、ＤＳＣ１００全体の制御を司る。不揮発性メモリ１０２は制御部１０１の処理手順（プログラム）やフォント、プリンタ３００の各種設定やメニュー画面などのＧＵＩデータなどを記憶する。ＲＡＭ３０３は制御部３０１のワークエリアとして使用される。操作パネル３０４はボタン並びにスイッチ群であり、ユーザがプリンタ３００に各種指示を与えるために用いられる。表示部３０８は例えばＬＣＤであり、プリントする画像データや、各種設定を行う際のメニュー画面を表示するために使用される。ＵＳＢ／ＩＥＥＥ１３９４ Ｉ／Ｆ３０５はホスト機器（ＰＣ２００など）と有線接続を行うためのインタフェースである。無線通信インタフェース３０７は、無線通信ネットワークに接続するためのインタフェースである。３０６はプリンタエンジン部であり、実施形態では、熱エネルギーを利用してインク液を吐出するプリントエンジンであるが、記録方式はこれにより限定されるものではない。
【００２２】
図４は、図１におけるメモリカード１２０の機能構成例を示すブロック図である。メモリカード１２０は、カードコントローラ１２０１、無線通信部１２０２、メモリ部１２０３を有している。
カードコントローラ１２０１は、例えばＣＰＵ，ＲＯＭ，ＲＡＭなどを有し、後述するメモリカード１２０の動作を実現する。無線通信部１２０２の制御、無線通信ネットワーク上の外部機器とのＰＴＰ通信、ホスト機器としてのＤＳＣ１００とのＰＴＰ通信、ＤＳＣ１００における記録媒体としての動作、などはカードコントローラ１２０１の制御により実現される。
【００２３】
無線通信部１２０２は、IEEE 802.11xやBluetooth（登録商標）等の無線通信規格に準拠した無線通信機能を有し、無線通信ネットワーク上の外部機器との通信を実現する。本実施形態では無線通信部１２０２がIEEE 802.11a/b/g/n規格に準拠した無線通信機能を有するものとする。
【００２４】
メモリ部１２０３は例えばＮＡＮＤ型の不揮発性メモリを含み、カードコントローラ１２０１を通じて書き込まれた静止画、動画、音声などのデータを記憶する。なお、メモリカード１２０はＤＳＣ１００の記録媒体として機能するための所定のファイルシステム、例えばＤＣＦ(Design rule for Camera File system)に準拠してファイルの記録を行うものとする。
【００２５】
図５は、本実施形態のメモリカード１２０の状態遷移図である。後述するように、メモリカード１２０は、ホスト機器であるＤＳＣ１００からのコマンドにより、Applicationモードを切り替え可能である。ここでは、Applicationモードとして、DLNA(Digital Living Network Alliance)モード、プル(Pull)モード、パススルー(Path Through)モード、ＤＰＳ(Digital Photo Solutions for Imaging Devices)モードのいずれかが設定可能であるものとする。
【００２６】
DLNAモードは、DLNAガイドラインに準拠した家電などのネットワークに無線接続し、ネットワーク上の家電製品、例えばテレビなどと通信を行う動作モードである。
Pullモードは、メモリカード１２０がホスト機器であるＤＳＣ１００とは基本的に独立して、無線通信ネットワーク上の外部機器とＰＴＰ通信するモードである。
Path Throughモードは、メモリカード１２０があたかもＤＳＣ１００の無線通信アダプタとして機能し、ＤＳＣ１００と無線通信ネットワーク上の外部機器とのＰＴＰ通信を可能とする動作モードである。
ＤＰＳモードは、無線ネットワーク上に存在するプリンタを用いたダイレクトプリントを実現する動作モードである。
【００２７】
なお、図５に示すように、これらのApplicationモード間での直接遷移はできず、必ずNo Applicationモードを経由してApplicationモードが変更されるように構成されている。No Applicationモードの場合、メモリカード１２０は、ネットワーク接続の維持に必要な動作や接続可能なネットワークの探索などを行う。
【００２８】
図６は、本実施形態におけるＤＳＣ１００とメモリカード１２０に実装される代表的なソフトウェアモジュールとその階層関係を説明する図である。例えば図６に示す各ソフトウェアモジュールは、ＤＳＣ１００については不揮発性メモリ１０２、メモリカード１２０についてはカードコントローラ１２０１内の不揮発性メモリの中のプログラム記憶領域に格納されている。なお、図６に示すソフトウェアモジュールのうち、１つ以上がハードウェアロジックによって実現されても良い。
【００２９】
図６に示すように、本実施形態では、ＰＴＰにおいてInitiatorからの要求に応答するPTP Responderとして機器（ＤＳＣ１００、メモリカード１２０）を動作させるためのPTP Responderモジュールを、ＤＳＣ１００及びメモリカード１２０の両方が有する。なお、PTP Responderモジュール１１０，１２０は、ＰＴＰの上位互換プロコトルであるＭＴＰ(Media Transfer Protocol)に対応しているMTP Responderであってもよい。
【００３０】
ＤＳＣ１００とメモリカード１２０との通信はCard I/Oモジュール１３０，１３１を用いて行われる。本実施形態のCard I/Oモジュール１３０，１３１はＳＤＩＯ(Secure Digital Input/Output)に準拠した通信を行うものとするが、他の通信方式を用いても構わない。Card I/Oモジュール１３０，１３１はPTP Responder１１０，１２５または後述するPTP-IPモジュール１２３からのＰＴＰオペレーションを、Card I/Oモジュール１３０，１３１に対応するコマンドとして通信することにより、ＤＳＣ１００とメモリカード１２０とのＰＴＰオペレーションの受け渡しを実現する。
【００３１】
もちろん本実施形態におけるメモリカード１２０は、撮像で得られた画像データの記録などに用いられる通常の記録媒体として用いることもできる。この場合、Card I/Oモジュール１３０，１３１は、メモリ部１２０３にアクセスするインタフェース（メモリインタフェース）用の通信モジュールとして用いられる。なお、ＰＴＰオペレーションを取り扱う通信方式と、メモリ部１２０３にアクセスするための通信方式とを異なるものとしてもよい。例えば、メモリカード１２０を通常の記録媒体として用いる場合は、ＳＤメモリモードの通信方式を用い、ＰＴＰオペレーションの受け渡しにはＳＤＩＯモードの通信方式を用いることができる。
【００３２】
そして、メモリカード１２０に設定されたApplicationモードに応じて、PTP Responderモジュール１１０，１２５の一方が、メモリカード１２０が有するPTP-IPモジュール１２３、TCP/IPモジュール１２２およびWireless LANモジュール１２１を用いて外部装置と無線通信する。また、各Applicationモードにおける動作を実現するための、Card I/Oモジュールにおける通信コマンドを新たに定義する。この通信コマンドは、
・ＤＳＣ１００からメモリカード１２０にApplicationモードを設定するコマンド、
・ＤＳＣ１００からメモリカード１２０に対し、メモリカード１２０が外部装置から受信したＰＴＰオペレーションやデータの転送を要求するコマンド、
・ＤＳＣ１００内のモジュールからのＰＴＰオペレーションやデータの、外部装置への転送を要求するコマンド、
・メモリカード１２０が外部装置から受信したデータをメモリ部１２０３に書き込むように要求するコマンド、
・メモリカード１２０のメモリ部１２０３に保存されたデータを外部装置に対して送信するように要求するコマンド、
などである。
【００３３】
なお、ＰＴＰでは、メモリ部１２０３に記録されているオブジェクト（データファイル、ディレクトリ）の各々を指定するためにObjectHandleを用いる。従って、メモリ部１２０３のファイル構成に応じてオブジェクトごとにObjectHandleを割り当てる必要がある。PTP Responderモジュール１１０，１２５は、各オブジェクトにObjectHandleを割り当て、ObjectHandleの集合体であるObjectHandleArrayの作成、管理を行う。また、PTP Responderモジュール１１０，１２５は、メモリカードが複数存在する場合などには、StorageID等の発行、管理も行う。
【００３４】
また、前述したとおり制御部１０１は、通常のメモリカードと同様、ファイルのフルパスを指定してメモリカード１２０にデータを読み書きすることもできる。例えば、ＰＴＰオペレーションによりObjectHandleで指定されたオブジェクトの読み書きを要求された場合、制御部１０１はObjectArrayを参照することで、メモリカード１２０に対してディレクトリパスを用いたアクセスが可能である。ここで、ディレクトリパスはルートディレクトリからのパス（フルパス又は絶対パス）である。
【００３５】
DPSモジュール１１１とその上位のPictBridge Application １１２は、ＤＳＣ１００からプリンタに直接（ＰＣを介在せずに）プリントを実行させるダイレクトプリントの規格であるPictBridgeに準拠した動作を実現するためのソフトウェアモジュールである。
Applicationモジュール１１３は、上述した各Applicationモードに応じた動作を実現する。
DLNA Applicationモジュール１１４及びDLNAモジュール１２９は、DLNAに準拠した動作を提供する。DLNAはＰＴＰを用いないため、本実施形態では説明を省略する。
【００３６】
メモリカード１２０において、Wireless LANモジュール１２１はIEEE 802.11xに準拠した物理層を提供する。また、TCP/IPモジュール１２２は、トランスポート層を提供する。PTP-IPモジュール１２３は、ＰＴＰをＴＣＰ上で通信するためのモジュールである。
【００３７】
Discovery for DPSモジュール１２７は、ＤＰＳモードにおけるディスカバリを行うためのモジュールであり、本実施形態ではＵＰｎＰ(Universal Plug and Play)を用いてディスカバリする。
【００３８】
Discovery for PTP-IPモジュール１２３は、Pullモード及びPath Throughモードにおけるディスカバリ処理におけるアドバタイズなどを行うためのモジュールであり、本実施形態ではUPnP(Universal Plug and Play)並びにBonjourの両方のプロトコルでディスカバリする。
以下の説明では、モジュール自体が処理の主体・客体となるような記載が含まれるが、実際には対応するモジュールを用いて制御部１０１、カードコントローラ１２０１が処理を実行する。
【００３９】
以下、各ApplicationモードにおけるＤＳＣ１００及びメモリカード１２０の動作について説明する。
具体的な動作を説明する前に、メモリカード１２０に設定するApplicationモードの設定方法について説明する。図７は、ＤＳＣ１００においてメモリカード１２０のApplicationモードを設定するためのＧＵＩ画面の例を示す図である。制御部１０１は、操作部１０４からの指示に応じて図７の設定画面を表示部１０５に表示させる。ユーザは４つの選択肢から接続を希望する機器の種類を操作部１０４に含まれる例えば方向キーを用いて選択状態とし、決定ボタンを押下することで接続先機器の種類を設定することができる。制御部１０１は操作部１０４の操作内容とＧＵＩ画面の内容から指示の内容を検出し、指示された動作を実行する。
【００４０】
例えば図７に示す例では、接続先機器としてＰＣが選択状態にあり、この状態で決定ボタンが押下されると制御部１０１はメモリカード１２０をPullモードに設定する。決定ボタンの押下時に他の選択肢が選択状態にあれば、それぞれに対応したApplicationモードを制御部１０１はメモリカード１２０に設定する。後述するように、ApplicationモードはCard I/Oモジュール１３０，１３１を通じて通信されるコマンドにより、制御部１０１からカードコントローラ１２０１に通知され、カードコントローラ１２０１が通知されたモードに応じて動作する。
【００４１】
なお、Applicationモードの設定方法は図７に示す例に限定されない。例えば、まずＤＬＮＡを用いるかＰＴＰを用いるかをユーザに選択させるメニューを用意し、ＰＴＰを用いることが選択された場合にPullモード、DPSモード、Path Throughモードを選択させるメニューを表示してもよい。
【００４２】
このように、本実施形態によれば、ユーザが接続を希望する機器の種類に応じて、ＤＳＣ１００の制御部１０１がメモリカード１２０のカードコントローラ１２０１にApplicationモードの設定を行う。そして、ＤＳＣ１００及びメモリカード１２０は設定したApplicationモードに従った動作を行う。
【００４３】
（Pullモードの動作）
図８は、PullモードにおけるＤＳＣ１００、メモリカード１２０、外部機器の一例としてのＰＣ２００の動作を示すシーケンス図である。なお、特に断らない限り、図８に示すＤＳＣ1００とメモリカード１２０との間の通信はCard I/Oモジュール１３０，１３１の間でやり取りされるコマンドを示す。このPullモードでは、メモリカード１２０側のPTP Responderモジュール１２５がPTP-IPモジュール１２３と通信することにより、外部機器内のPTP Initiatorとの通信を実現する。すなわち、図６の矢印１４０に示すモジュール間通信が行われる。なお、以下の説明ではＰＣ２００がＰＴＰにおけるInitiatorとして動作するものとする。ＰＣ２００との通信はPTP-IPモジュール１２３が行う。
【００４４】
ここでは、メモリカード１２０が装着されたＤＳＣ１００の電源がＯＮであり、メモリカード１２０は無線通信部１２０２によって通信可能なネットワークを探索し、通信可能なネットワークがあれば自動接続するものとする。そして、図８のＳ８０１において、メモリカード１２０はＰＣ２００と同じネットワークに接続したものとして説明する。
【００４５】
メモリカード１２０のカードコントローラ１２０１は、無線通信部１２０２がネットワーク接続に成功すると、それをホスト機器であるＤＳＣ１００の制御部１０１に通知する。
【００４６】
Ｓ８０２：ネットワークに接続されたことが通知されると、ＤＳＣ１００の制御部１０１は、PTP_SetDeviceInformationコマンドを用いて、ＰＴＰのDevice Discoveryにおいてネットワークにアドバタイズすべき情報や、ＰＴＰオペレーションでInitiatorに通知する情報をメモリカード１２０に送信する。PTP_SetDeviceInformationコマンドでは、装置の名前や型番、製造者、UUID (Universally Unique Identifier)、シリアル番号などを通知することができる。通知する情報が複数ある場合、制御部１０１は情報ごとにPTP_SetDeviceInformationコマンドを繰り返し送信する。
なお、カードコントローラ１２０１はＤＳＣ１００からPTP_SetDeviceInformationコマンドによる情報を受け取らない場合においても、カードコントローラ１２０１内部に保持される初期値を用いて、ＰＴＰのDevice Discovery等を行うことも可能である。
【００４７】
カードコントローラ１２０１は、メモリカード１２０のApplicationモードが設定される前に受信したPTP_SetDeviceInformationコマンドで通知された情報を、カードコントローラ１２０１内のメモリに保存されたDeviceInfo DataSetに反映する。
【００４８】
Ｓ８０３：ＤＳＣ１００の制御部１０１は、Device Discoveryに必要な情報をメモリカード１２０に通知し終わると、PTP_SwitchModeコマンドを発行して、メモリカード１２０のApplicationモードを設定する。ここでは、PTP_SwitchMode(pull)を発行し、メモリカード１２０にPullモードを設定している。
【００４９】
なお、Pullモードはメモリカード１２０と外部機器（ＰＣ２００）との通信にＤＳＣ１００が原則として関与しないモードである。例えばPullモードにおいてカードコントローラ１２０１は、予めデータ転送先として登録されているＰＣ２００やインターネット上のサーバと接続可能になると、メモリ部１２０３内のデータを自動転送するように設定されていて良い。従って、Pullモードのメモリカード１２０については、ＤＳＣ１００からメモリカード１２０のメモリ部１２０３の内容を変更する操作を禁止する。具体的には、メモリ部１２０３にＤＳＣ１００からアクセスするためのメモリインタフェースの使用を禁止する。
【００５０】
Ｓ８０４：カードコントローラ１２０１は、Discovery for PTP-IPモジュール１２３及び、無線通信部１２０２を用い、接続しているネットワーク上でDevice Discovery (Advertise)を行う。ここでは、カードコントローラ１２０１は、Ｓ８０２でＤＳＣ１００から受信したデバイス情報をネットワーク上にアドバタイズする。
【００５１】
Ｓ８０５：カードコントローラ１２０１は、ＰＴＰにおけるInitiatorとして動作するＰＣ２００から接続要求を受けると、PTP Responderモジュール１２５とＰＣ２００側のPTP InitiatorモジュールとのPTP-IPコネクションを確立する。
【００５２】
Ｓ８０６：カードコントローラ１２０１は、外部機器（ＰＣ２００）とのPTP-IPコネクションが確立したことを、割り込み信号ISR(PTPIP Connected)を用いてＤＳＣ１００の制御部１０１に通知する。制御部１０１は、この時点でメモリインタフェースの使用が禁止されていなければ、禁止する。従って、撮影操作や画像データの削除動作等は禁止される。あるいは内蔵メモリに記録可能な範囲での撮影操作は許可してもよい。
【００５３】
Ｓ８０７：その後、メモリカード１２０と外部機器（ＰＣ２００）とは、Responderであるメモリカード１２０からデータを転送するためのＰＴＰセッションを開始する。例えば、メモリカードの情報を要求するGetDeviceInfoオペレーションに引き続くセッション開始のためのOpenSessionオペレーションでセッションが開始される。その後、メモリカード１２０で有効なStorageIDを要求するGetStorageIDsオペレーション、StorageIDで特定したメディアに含まれるオブジェクトの数を要求するGetNumObjectsオペレーションなどが発行される。ＰＴＰを用いたメモリカード１２０からのデータ転送手順は公知であるため、詳細についての説明は省略する。
【００５４】
Ｓ８０８：セッションが終了すると、カードコントローラ１２０１は、PTP Responderモジュール１２５と、ＰＣ２００のPTP InitiatorモジュールとのPTP-IPコネクションを切断する。
【００５５】
Ｓ８０９：カードコントローラ１２０１は、PTP-IPコネクションの切断を、割り込み信号ISR(PTPIP Disconnected)によって制御部１０１に通知する。制御部１０１はこの通知を受けると、メモリインタフェースの使用禁止を解除する。
【００５６】
Ｓ８１０：制御部１０１は、メモリカード１２０の動作モードをNo Applicationモードに戻すため、PTP_SwitchMode(exit)コマンドを発行する。カードコントローラ１２０１は、このコマンドに従い、メモリカード１２０をNo Applicationモードとし、No Applicationモードにおける動作を開始する。なお、メモリインタフェースの使用禁止の解除はＳ８０９の後でなく、Ｓ８１０の後でも良い。
【００５７】
Ｓ８１１：カードコントローラ１２０１は、例えばＤＳＣ１００の電源がＯＦＦされたり、無線通信機能を無効化する指示がなされたりした場合など、必要に応じてネットワーク接続を終了することができる。
【００５８】
（Path Throughモードの動作）
次に、Path ThroughモードにおけるＤＳＣ１００、メモリカード１２０、外部機器の一例としてのＰＣ２００の動作を説明する。Path Throughモードは、ＤＳＣ１００と外部機器との間のＰＴＰセッションを実現するモードである。このPath Throughモードでは、ＤＳＣ１００側のPTP Responderモジュール１１０がPTP-IPモジュール１２３とCard I/Oモジュール１３０，１３１を介して通信することにより、InitiatorであるＰＣ２００との通信を実現する。すなわち、図６の矢印１４１に示すモジュール間通信が行われる。ＰＣ２００との通信はPTP-IPモジュール１２３が行う。
【００５９】
図９は、Path ThroughモードによるＰＴＰセッションの開始後までのＤＳＣ１００、メモリカード１２０、外部機器の一例としてのＰＣ２００の動作を示すシーケンス図である。なお、特に断らない限り図９に示すＤＳＣ１００とメモリカード１２０との間の通信はCard I/Oモジュール１３０，１３１の間でやり取りされるコマンドを示す。なお、ＤＳＣ１００がメモリカード１２０からＰＴＰオペレーションに関するコマンドを受信した場合、Card I/Oモジュール１３０はコマンドをＰＴＰオペレーションとしてPTP Responderモジュール１１０に渡すこととする。図８と同じ動作については参照数字を共通とし、説明を省略する。
【００６０】
PTP-IPコネクションの確立が割り込み信号ISR(PTP IP Connected)でＤＳＣ１００の制御部１０１に通知されるまでの手順は、Ｓ９０１においてPTP_SwitchModeコマンドでPath Troughモードが設定される点を除きPullモードと同様である。なお、Ｓ８０２におけるPTP_SetDeviceInformationコマンドによるディスカバリ情報の設定は、既に行われている場合には繰り返し行う必要はない。
【００６１】
先に述べたように、Path Throughモードでは、メモリカード１２０が外部機器（ＰＣ２００）とＤＳＣ１００とのＰＴＰ通信における中継機器のように機能する。そのため、ＰＣ２００（のPTP Initiatorモジュール）から見た場合、Pullモードの場合と変わりがない。しかし、Path ThroughモードにおいてＰＴＰ通信を行うPTP Responderモジュールはメモリカード１２０内のPTP Responderモジュール１２５ではなく、ＤＳＣ１００内のPTP Responderモジュール１１０である。そのため、カードコントローラ１２０１はPTP-IPモジュール１２３が、PTP Responderモジュール１２５ではなく、ＤＳＣ１００内のPTP Responderモジュール１１０とＰＴＰ通信するように切り替える。
【００６２】
また、Path Throughモードが設定された場合、PTP_SwitchMode(Exit)を受信するまで、カードコントローラ１２０１はＤＳＣ１００からのコマンドや指示があった場合を除き、メモリ部１２０３へのアクセスを禁止する。
【００６３】
まず、Path Throughモードでの動作を、GetDeviceInfoオペレーションについて説明する。
Ｓ９０２：カードコントローラ１２０１は、ＰＣ２００のPTP Initiatorモジュールからオペレーションを受信したことを、割り込み信号ISR(Operation)により制御部１０１に通知する。ここでは、受信したオペレーションの種類や内容は伝えられず、オペレーションを受信したことだけが通知される。
【００６４】
Ｓ９０３：制御部１０１は、通知に応答して、オペレーションの内容を取得するためにPTP_GetInfomationコマンドを発行する。
Ｓ９０４：カードコントローラ１２０１は、受信したオペレーション（GetDeviceInfo)を制御部１０１に送信する。これにより、ＤＳＣ１００のPTP Responderモジュール１１０がＰＣ２００のPTP InitiatorモジュールからのＰＴＰオペレーションを受信する。
【００６５】
Ｓ９０５：制御部１０１は、GetDeviceInfoオペレーションに対して応答すべきDeviceInfoをPTP_SendDataコマンドを用いてカードコントローラ１２０１に送信する。これにより、メモリカード１２０内のPTP-IPモジュール１２３を介してＰＣ２００へDeviceInfoが送信される。
【００６６】
Ｓ９０６：DeviceInfoの送信完了をカードコントローラ１２０１から制御部１０１に通知する。
Ｓ９０７：制御部１０１は、ResponseをPTP Initiatorモジュールに送信するため、PTP_SendDataコマンドを用いてカードコントローラ１２０１にResponseの情報を送信する。
Ｓ９０８：PTP-IPモジュール１２３からPTP InitiatorモジュールにResponseが送信され、送信完了をカードコントローラ１２０１から制御部１０１に通知する。
【００６７】
なお、Ｓ９０６〜Ｓ９０８において送信されるResponseは、ＰＴＰオペレーションを受信した場合に返送することが決められている情報であり、エラーコードやOKといった処理結果がInitiator側に通知される。
【００６８】
Ｓ９１０及びＳ９１１：ＰＣ２００からのOpenSessionオペレーション、GetStorageIDオペレーションについても、GetDeviceInfoオペレーションを受信した場合と同様にして、制御部１０１から応答がなされる。
【００６９】
以下、データの転送要求が行われるまで必要なＰＴＰオペレーションの処理が行われる。図１０は、Path ThroughモードによるＰＴＰセッションの開始後、外部機器からオブジェクトの送受信要求があった場合ならびにイベント発生時のＤＳＣ１００、メモリカード１２０、外部機器の一例としてのＰＣ２００の動作を示すシーケンス図である。
【００７０】
まず、オブジェクト送信要求に対する処理を説明する。
Ｓ１００１：カードコントローラ１２０１が、PTP-IPモジュール１２３を通じてＰＣ２００からGetObjectオペレーションを受信する。
Ｓ１００２：Ｓ９０２〜Ｓ９０４と同様にして、制御部１０１がカードコントローラ１２０１からGetObjectオペレーションを受信する。
【００７１】
Ｓ１００３：制御部１０１は、メモリインタフェースを通じ、ＰＴＰを用いずに、GetObjectオペレーションのObjectHandleで指定されたオブジェクトを、ディレクトリパスを指定してメモリ部１２０３から読み出す。なお、この読み出しにはPTP Responderモジュール１１０は用いず、いわゆる通常のメモリカードからの処理が行われる。上述の通り、ObjectHandleArrayを参照することで、ObjectHandleに対応するディレクトリパスを知ることができる。
【００７２】
Ｓ１００４：制御部１０１は、読み出したオブジェクトを、PTP_SendDataコマンドを用いてカードコントローラ１２０１に送信する。
Ｓ１００５：カードコントローラ１２０１は、PTP-IPモジュール１２３を用いて、GetObjectオペレーションにより要求されたオブジェクトをＰＣ２００のPTP Initiatorモジュールへ送信する。
Ｓ１００６，Ｓ１００７：GetObjectオペレーションに対するResponseCodeが、カードコントローラ１２０１及びPTP-IPモジュール１２３を介して、制御部１０１からＰＣ２００のPTP Initiatorモジュールへ送信される。
【００７３】
次に、オブジェクト受信要求について説明する。
Ｓ１０１１：メモリカード１２０のPTP-IPモジュール１２３が、ＰＣ２００からSendObjectオペレーションを受信する。
Ｓ１０１２：Ｓ９０２〜Ｓ９０４と同様にして、制御部１０１がカードコントローラ１２０１からSendObjectオペレーションを受信する。
【００７４】
Ｓ１０１３：カードコントローラ１２０１は、PTP-IPモジュール１２３を通じて、ＰＣ２００からオブジェクトを受信する。受信したオブジェクトはメモリカード１２０内（例えばカードコントローラ１２０１内のＲＡＭ）にバッファリングする。
【００７５】
Ｓ１０１４：カードコントローラ１２０１は割り込み信号ISR(Data)により、オブジェクトを受信したことを制御部１０１に通知する。制御部１０１は、PTP_ReceiveDataコマンドを発行し、カードコントローラ１２０１からオブジェクトを受信する。
【００７６】
Ｓ１０１５：制御部１０１は、Card I/Oモジュール１３０，１３１を通じ、受信したオブジェクトをディレクトリパス（フルパス又は絶対パス）を指定してメモリ部１２０３に書き込む。なお、この書き込みにはPTP Responder１１０は用いず、いわゆる通常のメモリカードへの書き込み処理が行われる。なお、オブジェクトを書き込むディレクトリはSendObjectオペレーションに先立つSendObjectInfoオペレーションでＰＣ２００側から指定されているか、もしくはPTP Responderモジュール１１０がSendObjectInfoオペレーションを受信した際に決定する。書き込みするパス名（ファイル名含む）は例えば、ＤＣＦに従って決定することができる。
【００７７】
Ｓ１０１６，Ｓ１０１７：SendObjectオペレーションに対するResponseCodeが、カードコントローラ１２０１及びPTP-IPモジュール１２３を介して、制御部１０１からＰＣ２００のPTP Initiatorモジュールへ送信される。
【００７８】
次に、イベントパケットの送信時の動作について説明する。イベントパケットは、ResponderからInitiatorにデータ（ＰＴＰパケット）を送信したい場合（例えばエラーを知らせたい場合など）に、Initiatorにデータ取得要求(GetObject)の発行を依頼するパケットである。
【００７９】
Ｓ１０２１：制御部１０１は、PTP_SendDataコマンドを用いて、パケット種別をイベントパケットとして、ObjectHandleを送信する。
Ｓ１０２２：カードコントローラ１２０１は受信したデータがイベントパケットであることを認識し、受信したObjectHandleを含んだRequestObjectTransferイベントをPTP-IPモジュール１２３を通じてＰＣ２００のPTP Initiatorモジュールに送信する。
その後、Initiator側から、RequestObjectTransferイベントに含まれたObjectHandleを指定したGetObjectオペレーションが発行される。
【００８０】
図１０の手順では、メモリカード１２０内のデータをＰＣ２００に送信する場合、メモリカード１２０からＰＴＰを用いずにＤＳＣ１００にデータを読み出し、ＤＳＣ１００からメモリカード１２０にＰＴＰオペレーションでデータを送信する必要があった。また、ＰＣ２００から受信したデータをメモリカード１２０に書き込む場合も、メモリカード１２０にバッファリングされているデータをＰＴＰオペレーションでＤＳＣ１００が取得し、ＰＴＰを用いずにメモリカード１２０に書き込む必要があった。この、メモリカードとＤＳＣ間でのデータの往復を省略する変形例について、図１１に示すシーケンス図を用いて説明する。図１１において、図１０と同じ手順については参照数字を共通とし、説明を省略する。
【００８１】
まず、GetObjectオペレーションに対する動作について説明する。
Ｓ１１０１：制御部１０１はＳ１００２のやりとりでGetObjectオペレーションを受信する。制御部１０１は、GetObjectオペレーションで指定されたObjectHandleに対応するディレクトリパス（フルパス又は絶対パス）をPTP_SendFileコマンドで送信する。
【００８２】
Ｓ１００５：カードコントローラ１２０１は、PTP_SendFileコマンドで指定されたディレクトリパスに対応するオブジェクトをメモリ部１２０３から読み出す。そして、カードコントローラ１２０１は、PTP-IPモジュール１２３を通じて、読み出したオブジェクトをＰＣ２００のPTP_Initiatorモジュールに送信する。
【００８３】
Ｓ１１０２：制御部１０１は、ResponseCodeを作成するため、Read PTP Progerssコマンドを送信し、GetObjectオペレーションで要求されたオブジェクトの送信結果を取得する。カードコントローラ１２０１は、PTP-IPモジュール１２３を通じて送信結果を返送する。
【００８４】
Ｓ１００６：制御部１０１は、GetObjectオペレーションで要求されたオブジェクトの送信結果に基づいてResponseCodeを作成し、PTP_SendDataコマンドでカードコントローラ１２０１に送信する。
【００８５】
Ｓ１００７：カードコントローラ１２０１は、PTP_SendDataコマンドで送信されたデータ（ResponseCode）を、PTP-IPモジュール１２３を通じてＰＣ２００のPTP_Initiatorモジュールに送信する。
【００８６】
次に、SendObjectオペレーションに対する動作について説明する。
Ｓ１１０１：制御部１０１はＳ１０１２のやりとりでSendObjectオペレーションを受信する。
Ｓ１０１３：カードコントローラ１２０１が、PTP-IPモジュール１２３を通じてＰＣ２００からオブジェクトを受信する。受信したオブジェクトはメモリカード１２０内（例えばカードコントローラ１２０１内のＲＡＭ）にバッファリングする。
【００８７】
Ｓ１１１１：カードコントローラ１２０１は割り込み信号ISR(Data)により、オブジェクトを受信したことを制御部１０１に通知する。
Ｓ１１１２：制御部１０１は、受信したオブジェクトの書き込み場所及びファイル名を示したディレクトリパス（フルパス又は絶対パス）をPTP_ReceiveFileコマンドでカードコントローラ１２０１に送信する。カードコントローラ１２０１は、バッファリングされたオブジェクトを、メモリ部１２０３内の、PTP_ReceiveFileコマンドで指定されたディレクトリパスに書き込む。
【００８８】
Ｓ１１１４：制御部１０１は、ResponseCodeを作成するため、Read PTP Progerssコマンドを送信し、SendObjectオペレーションで要求されたオブジェクトの受信（書き込み）結果を取得する。カードコントローラ１２０１は、受信（書き込み）結果を返送する。この返送もPTPを用いずに行われる。
【００８９】
Ｓ１０１６：制御部１０１は、SendObjectオペレーションで要求されたオブジェクトの受信（書き込み）結果に基づいてResponseCodeを作成し、PTP_SendDataコマンドでカードコントローラ１２０１に送信する。
Ｓ１０１７：カードコントローラ１２０１は、PTP_SendDataコマンドで送信されたデータ（ResponseCode）を、PTP-IPモジュール１２３を通じてＰＣ２００のPTP_Initiatorモジュールに送信する。
【００９０】
（ＤＰＳモードの動作）
次に、ＤＰＳモードにおけるＤＳＣ１００、メモリカード１２０、外部機器の一例としてのプリンタ３００の動作を説明する。ＤＰＳモードは、ＤＳＣ１００とプリンタとの間でＰＴＰセッションによるダイレクトプリントを実現するモードである。従って、ＰＴＰ通信はＤＳＣ１００のPTP Responderモジュール１１０とプリンタ３００のPTP Initiatorモジュールとの間で行われ、メモリカード１２０は基本的にはPath Throughモードと同様、中継機器のように機能する。このＤＰＳモードでは、ＤＳＣ１００側のPTP Responderモジュール１１０がPTP-IPモジュール１２３とCard I/Oモジュール１３０，１３１を介して通信することにより、Initiatorとの通信を実現する。すなわち、図６の矢印１４１で示すモジュール間通信が行われる。
なお、以下の説明ではプリンタ３００がPTPにおけるInitiatorとして動作するものとする。プリンタ３００との通信はPTP-IPモジュール１２３が行う。
【００９１】
アプリケーション層であるPictBridge Applicationモジュール１１２が、ダイレクトプリントプロトコル層であるDPSモジュール１１１とその下位層の各モジュールを用いてダイレクトプリント機能を実現する。DPSモジュール１１１の下位層とは、PTP-Responder、PTP-IP、TCP/IP、WirelessLANの各モジュールである。
【００９２】
以下では、CIPA DC-001-2003に記載された標準的なシーケンスに従い、PictBridge対応機器同士が接続を行って、最初のプリントを行うまでの標準的なケースについて具体的な動作を説明する。
【００９３】
以下に説明する処理は、メモリカード１２０とプリンタ３００との間でみれば、従来ＤＳＣ１００とプリンタ３００とをＵＳＢ接続してPictBridgeに準拠したダイレクトプリントを実行する際に行われていたやりとりと同一である。本実施形態では、Path Throughモードと同様、ＤＰＳモードに設定されたメモリカード１２０を通じて、従前と同様のやりとりをＤＳＣ１００とプリンタ３００との間で実現することを特徴とする。
【００９４】
まず、図１２Ａ及び図１２Ｂに示すシーケンスチャートを用いて、DPS Dicovery動作を説明する。なお、特に断らない限り、図１２Ａに示すＤＳＣ１００とメモリカード１２０との間の通信はCard I/Oモジュール１３０，１３１の間でやり取りされるコマンドを示す。なお、ＤＳＣ１００がメモリカード１２０からＰＴＰオペレーションに関するコマンドを受信した場合、Card I/Oモジュール１３０は受信したコマンドをＰＴＰオペレーションとしてPTP Responderモジュール１１０に渡すこととする。ここでも、Ｓ８０１において、メモリカード１２０が接続可能なネットワークを探索し、自動的に接続を行っているものとする。また、接続できた時点でＤＳＣ１００には割り込み信号が送信される。
【００９５】
Ｓ１２０１：図７に示したようなＧＵＩからプリンタへの接続が指示されると、制御部１０１はPTP Applicaitonモジュール１１３によってPTP_SwitchMode(DPS)コマンドを発行し、メモリカード１２０をＤＰＳモードに設定する。カードコントローラ１２０１は、ＤＰＳモードへの設定を認識すると、Path Throughモードと同様、ＤＳＣ１００からの指示があった場合を除き、メモリ部１２０３へのアクセスを禁止する。
【００９６】
Ｓ１２０２：ＤＳＣ１００からの指示に応じて、カードコントローラ１２０１は、Discovery for DPSモジュール１２７を用いてPictBridge Printer Discoveryを行う。ＤＰＳモードにおけるディスカバリは、PullモードやPath Throughモードでのディスカバリがアドバタイズ（存在の開示）であるのに対し、プリンタの探索である。従って、ＤＰＳモードへの設定前のPTP_SetDeviceInformationコマンドは必ずしも必要ない。本実施形態で、カードコントローラ１２０１はDiscovery for DPSモジュール１２７を用いて、UPnPプロトコルでディスカバリを行う。ディスカバリにより、ネットワーク上に存在する、ＤＰＳに対応したプリンタの識別情報(UUID)及び名称等が取得され、プリンタリストが生成される。
なお、ディスカバリは例えば定期的に実行し、探索結果に変化があった場合には、カードコントローラ１２０１から割り込み信号ISRによってＤＳＣ１００に通知することができる。
【００９７】
Ｓ１２０３：PictBridge Printer Discoveryにより、ＤＰＳに対応したプリンタが探索できたら、カードコントローラ１２０１は、割り込み信号ISRによって制御部１０１に通知する。
Ｓ１２０４：制御部１０１は、DPS_GetPrintListコマンドを発行し、プリンタリストを要求する。
Ｓ１２０５：カードコントローラ１２０１は、生成したプリンタリストを制御部１０１に送信する。
【００９８】
Ｓ１２０６：制御部１０１は、受信したプリンタリストから、ユーザがプリンタを選択するためのＧＵＩ画面を作成し、表示部１０５に表示する。ＧＵＩの様式に制限は無いが、ユーザがプリンタを特定できる情報を提示する。
ユーザが操作部１０４を通じてリスト中のプリンタ一つを選択し、決定ボタンを押下すると、制御部１０１はどのプリンタが選択されたか認識する。そして、制御部１０１は、選択されたプリンタの識別情報(UUID)を指定したDPS_ConnectPrinterコマンドを送信する。
【００９９】
Ｓ１２０７：PTP-IPモジュール１２３は、DPS_ConnectPrinterコマンドで指定されたUUIDに対応するプリンタとPTP-IPコネクションを確立する。コネクションの確立は割り込み信号ISR(PTPIP Connected)によりカードコントローラ１２０１から制御部１０１に通知される。
【０１００】
Ｓ１２０８：PTP-IPのコネクションが確立すると、GetDeviceInfo、OpenSession、GetNumObjects、GetObjectHandlesの各オペレーションが順次Initiator（プリンタ３００）から発行される。
【０１０１】
Ｓ１２０９：Path Throughモードの説明で述べたように、Initiatorからのオペレーション受信は割り込み信号ISR(Operation)によりResponderであるＤＳＣ１００に通知される。そして、ＤＳＣ１００はPTP_GetInformationコマンドを発行してメモリカード１２０が受信したＰＴＰオペレーションを取得し、取得したオペレーションに応答するデータを作成する。ＤＳＣ１００は作成したデータをPTP_SendDataコマンドによりメモリカード１２０に送信し、PTP-IPモジュール１２３がプリンタ３００に送信する。このような手順を、上述した各オペレーションについて順次実行する。
【０１０２】
なお、Path Throughモードと同様、ＤＰＳモードにおいても、ResponderであるＤＳＣ１００がメモリカード１２０内に記録されているオブジェクトの管理を行う。そのため、ＰＴＰにおいてオブジェクトの特定に必要なObjectHandleの割り当てや、オブジェクトの数などの情報を取得、管理する必要がある。図１２Ａでは、Initiatorであるプリンタ３００からのGetNumObjectsオペレーションに応答する際に、メモリカード１２０内のオブジェクトを計数し、応答すべきNumObjectsを生成している（Ｓ１２１０）。同様に、GetObjectHandlesオペレーションに応答する際に、メモリカード１２０内の各オブジェクトについてObjectHandleを割り当て、その集合体であるObjectHandleArrayを作成している（図１２Ｂ：Ｓ１２１１）。
もちろん、これらの情報は例えば電源投入時に生成し、その後は変更が検出された時点で更新するようにしてもよい。
【０１０３】
Ｓ１２１３，Ｓ１２１２：PictBridge規格では、DPS Discoveryにおいて、ResponderからはDDISCVRY.DPS、InitiatorからはHDISCVRY.DPSという所定のファイルの存在を通知しあうことで互いがPictBridge対応機器であることを確認する。これらスクリプトファイルの交換により、プリンタ３００がPictBridge 対応機器であることを認識すると、PictBridge Applicationモジュールが以後の制御を行う。
【０１０４】
次に、図１３に示すシーケンス図を用いて、DPS_ConfigurePrintServiceの動作について説明する。このDPS_ConfigurePrintServiceでは、プリンタ３００が有するPrintServiceの開始をＤＳＣ１００が要求する。また、機器情報の交換が行われる。
【０１０５】
図１３の処理は、本質的に
ＤＳＣ１００からプリンタ３００に対してスクリプト”DREQUEST.DPS”を送信（Ｓ１３０１）、
ＤＳＣ１００からプリンタ３００に対してDPSスクリプト”ConfigurePrintService”を送信（Ｓ１３０２）、
プリンタ３００からＤＳＣ１００に対してスクリプト”HRESPONSE.DPS”を送信（Ｓ１３０３）、
プリンタ３００からＤＳＣ１００に対してDPSスクリプト”ConfigurePrintService result”を送信（Ｓ１３０４）、
するものである。
【０１０６】
“DREQUEST.DPS”はＤＳＣ１００からプリンタ３００に対して、Ｓ１３０２でのDPSスクリプトの送信を開始することを通知するためのものである。また”HRESPONSE.DPS”はプリンタ３００からＤＳＣ１００に対して、Ｓ１３０４でのDPSスクリプトの送信を開始することを通知するためのものである。
DPSスクリプト”ConfigurePrintService”は、図１４（ａ）に示すように、ＤＳＣ１００の装置情報（メーカ名、製品名、シリアル番号等）などを示すXML形式のスクリプトである。同様に、DPSスクリプト”ConfigurePrintService result”はプリンタ３００に関する情報（メーカ名、製品名、シリアル番号等）を示すXML形式のスクリプトである。
【０１０７】
DPS_ConfigurePrintServiceシーケンスに引き続き、DPS_GetCapability, DPS_StartJobシーケンスが行われる。このシーケンスは、Ｓ１３０２で送信されるＤＰＳスクリプトがそれぞれ”GetCapability”、”StartJob”に、Ｓ１３０４で送信されるＤＰＳスクリプトがそれぞれ”GetCapability result”、”StartJob result”になる以外、図１３と同一であるため説明を省略する。
【０１０８】
DPS_GetCapabilityは、ＤＳＣ１００からプリンタ３００へ、プリンタ３００に設定可能な能力を問い合わせるシーケンスである。PictBriege Applicationモジュール１１２は、プリンタ３００からの応答内容に応じた設定用のGUIを生成し、ユーザに設定させることができる。図１４（ｂ）に、DPS_GetCapabilityシーケンスでやりとりされるDPSスクリプト”GetCapability”及び”GetCapability result”の例を示す。
【０１０９】
StartJobは、例えばＤＳＣ１００のユーザからプリント開始指示が操作部１０４を通じてなされたことにより、ＤＳＣ１００からプリンタ３００に、各種印刷設定情報とともに印刷開始を要求するシーケンスである。図１４（ｃ）に、StartJobシーケンスでやりとりされるDPSスクリプト”StartJob”及び”StartJob result”の例を示す。
【０１１０】
次のシーケンスはDPS_GetFileInfo及びDPS_GetFileである。図１５において、Ｓ１５０１がDPS_GetFileInfoシーケンスであり、プリンタ３００がこれから取得する（ＤＳＣ１００がプリントしようとする）データの情報を取得している。取得される情報は、画像の大きさ（画素数）やファイル名などである。そして、Ｓ１５０２で示すDPS_GetFileシーケンスにより、DPS_GetFileInfoシーケンスで情報を取得したファイルをＤＳＣ１００からプリンタ３００が取得する。
【０１１１】
なお、要求されたデータをＤＳＣ１００が送信する際、図１５では図１３のＳ１００３と同様に、メモリカード１２０から一旦ＤＳＣ１００に読み込み、メモリカード１２０を介して送信するものとしている。しかし、図１１に示したように、メモリカード１２０からＤＳＣ１００に読み込みせずに、ＤＳＣ１００からディレクトリパスを指定してメモリカード１２０から送信させるようにしてもよい。
【０１１２】
プリントするデータの転送が終了すると、プリンタ３００は設定に基づいてプリント処理を実行する。また、プリンタ３００は、装置の状態をDPS_NotifyDeviceStatusシーケンスでＤＳＣ１００に通知することができる。
【０１１３】
図１６に示すシーケンス図を用いて、DPS_NotifyDeviceStatusの動作について説明する。このDPS_NotifyDeviceStatusでは、プリンタ３００の状態をプリンタ３００がＤＳＣ１００に送信する。
【０１１４】
図１６の処理は、
プリンタ３００からＤＳＣ１００に対してスクリプト”HREQUEST.DPS”を送信（Ｓ１６０１）、
プリンタ３００からＤＳＣ１００に対してDPSスクリプト”NotifyDeviceStatus (Printing)”を送信（Ｓ１６０２）、
ＤＳＣ１００からプリンタ３００に対してスクリプト”DRESPONSE.DPS”を送信（Ｓ１６０３）、
ＤＳＣ１００からプリンタ３００に対してDPSスクリプト”NotifyDeviceStatus result”を送信（Ｓ１６０４）、
するものである。
【０１１５】
“HREQUEST.DPS”はプリンタ３００からＤＳＣ１００に対して、Ｓ１６０２でのDPSスクリプトの送信を開始することを通知するためのものである。また”DRESPONSE.DPS”はＤＳＣ１００からプリンタ３００に対して、Ｓ１６０４でのDPSスクリプトの送信を開始することを通知するためのものである。
【０１１６】
DPSスクリプト”NotifyDeviceStatus”は、図１７（ａ）に示すように、プリンタ３００の状況を示すXML形式のスクリプトである。プリンタ３００の状況としては、プリント中かどうか、新しいジョブを受け付け可能かどうか、エラーが発生しているかどうか、エラーの原因は何か、等がある。DPSスクリプト”NotifyDeviceStatus result”はＤＳＣ１００から単に応答として返されるXML形式のスクリプトである。
【０１１７】
また、プリンタ３００がプリント中のジョブの状態をＤＳＣ１００に通知する場合には、図１６と同様のシーケンスであるNotifyJobStatusを用いることができる。NotifyJobStatusは、Ｓ１６０２で送信されるＤＰＳスクリプトが”NotifyJobStatus()”（括弧内にはジョブの状態を示す記述が入る）に、Ｓ１６０４で送信されるＤＰＳスクリプトが"NotifyJobStatus result”になる以外、図１６と同一であるため説明を省略する。
【０１１８】
図１７（ｂ）に、NotifyJobStatusシーケンスでやりとりされるスクリプト”NotifyJobStatus”及び”NotifyJobStatus result”の例を示す。この例では、”NotifyJobStatus”において、現在４／６ページが印刷中であることなどが通知される。”NotifyJobStatus result”は応答を目的としたスクリプトである。
【０１１９】
以上説明したように、本実施形態によれば、無線通信機能付きメモリカードにPTP Responderを持たせ、ホスト機器（ＤＳＣ）が有するPTP ResponderとどちらがPTP-IPモジュールを用いて外部機器とＰＴＰ通信するかを切り替え可能にした。そのため、メモリカードがホスト機器と独立して外部機器とＰＴＰによるデータ転送を行うことも、ホスト機器がメモリカードを無線アダプタのように用いて外部機器とＰＴＰ通信することも可能となる。その結果、無線通信機能付きメモリカードを、ＰＴＰに対応した既存の機器を用いた幅広い用途に利用することが可能となる。
【０１２０】
なお、Pullモード、DPSモード、Path Throughモードの中では、Pullモードの汎用性が高いと考えられる。そこで、ＤＳＣ１００はメモリカード１２０がネットワークに接続された場合には、まずPTP_SwitchMode(pull)コマンドを自動的に発行するようにしてもよい。ＤＬＮＡを用いるかＰＴＰを用いるかをユーザに選択させる場合であれば、ＰＴＰを用いることが選択されたことに応じてPTP_SwitchMode(pull)コマンドを自動的に発行するようにしてもよい。
【０１２１】
＜第２の実施形態＞
第１の実施形態におけるPullモード（図８）やPath Throughモード（図９）では、カードコントローラ１２０１がAdvertiseコマンドを用いてネットワーク上でアドバタイズすることにより、ネットワーク上のＰＣ２００に自機を検出させていた。例えば第１の実施形態におけるPullモードのシーケンスを示す図８では、カードコントローラ１２０１がＳ８０３でPTP_SwitchMode(Pull)を受信すると、Ｓ８０４で接続しているネットワーク上でDevice Discovery（Advertise）を行う。そして、ネットワーク上に存在し、PTPにおけるInitiatorとして動作する機器がこのDeviceDiscoveryを検知すると、接続要求を送信する。
【０１２２】
複数の機器が接続要求を送信した場合、メモリカード１２０のPTP-IPモジュール１２３は最初に受信した接続要求の送信元機器とPTP-IPコネクションを確立するのが通常である。しかしながら、この方法では、Target DeviceであるＰＣ２００以外の機器からの接続要求が最初に受信される可能性があり、ユーザが所望する機器と必ず接続できるとは限らない。そこで本実施形態では、ユーザが接続を所望するInitiatorからの接続要求のみを受け入れることにより、確実にPTP-IPコネクションが確立できるようにしたことを特徴とする。
【０１２３】
本実施形態においては、例えばＰＣ２００のＨＤＤ２０８に、予めメモリカード１２０に接続情報を記録するためのプログラムが保存されているものとする。このプログラムは、ＰＣ２００がＲＭＤ２０９として有する（又は接続されている）カード読取装置にメモリカード１２０が装着されると、ＣＰＵ２０５によって実行される。このプログラムは例えば、メモリカード１２０のメモリ部１２０３にＰＣ２００とPTP-IPコネクションを確立するための接続情報として、ＰＣ２００の識別情報（ＵＵＩＤ）及び名称等を記録する。
【０１２４】
接続情報が記録されたメモリカード１２０がＤＳＣ１００に装着された状態で、例えば図８のPullモードを実行した場合を考える。PTP-IPモジュール１２３は、Ｓ８０５においてPTP-IPコネクションを確立する際、メモリ部１２０３に識別情報が記録されている場合には、その識別情報に対応する機器から受信した接続要求に応答してPTP-IPコネクションを確立する。PTP-IPモジュール１２３は、メモリカードに記録された識別情報に対応しない機器から受信した接続要求については、無視または拒否する。
【０１２５】
PTP-IPモジュール１２３は、Ｓ８０４においてデバイス情報をアドバタイズした後（前でもよい）、メモリ部１２０３に識別情報が記録されているか確認し、識別情報が記録されていれば、受信した接続要求に含まれる送信元の識別情報と比較する。この際、接続要求を受信する毎にメモリ部１２０３にアクセスしてもよいが、予め識別情報を読み出しておくと、メモリ部１２０３へのアクセス回数を低減できる。なお、メモリ部１２０３に識別情報を含んだ接続情報が記録されていない場合、PTP-IPモジュール１２３は第１の実施形態と同様、最初に受信した接続要求の送信元機器とPTP-IPコネクションを確立する。
【０１２６】
このように、本実施形態によれば、メモリカード１２０は所望の機器と確実にPTP-IPコネクションを確立することが可能となる。なお、メモリカード１２０に接続情報を予め記録する方法としては、所望の機器で直接記録する方法に限定されない。例えば、所望の機器に対応する接続情報を通信により取得してＤＳＣ１００によって記録したり、所望の機器以外の機器が有するカードリーダを用いて記録したりすることができる。これらの方法であれば、PTP通信機能やPTP通信のためのＧＵＩなどを有さないＤＳＣ等であっても接続情報が記録されたメモリカードを作成でき、Pullモードにて所望のInitiatorと接続することが可能となる。
【０１２７】
なお、ユーザによって接続情報を設定することを可能としてもよい。例えば表示部１０５に接続情報を入力するためのＧＵＩを表示し、ユーザが操作部１０４を操作して識別情報を入力する。入力された接続情報は、カードコントローラ１２０１がメモリカード１２０のメモリ部１２０３に記録するか、制御部１０１が不揮発性メモリ１０２に保存することができる。なお、不揮発性メモリ１０２に保存する場合、制御部１０１は、図８のＳ８０４にてDevice Discovery (Advertise)が実行されるきっかけとなるPTP_SwitchModeコマンドの引数に、不揮発性メモリ１０２から読み出した識別情報（ＵＵＩＤ）を含める。
【０１２８】
また、予めPTP_SetDeviceinformationの引数に不揮発性メモリ１０２から読み出した識別情報（ＵＵＩＤ）を含めることもできる。
さらに、制御部１０１は、不揮発性メモリ１０２から読み出した識別情報（ＵＵＩＤ）を記載した所定のファイルを、メモリカード１２０に書き込むようにしてもよい。この場合、メモリカード１２０は、PTP_SetDeviceinformationまたはPTP_SwitchModeコマンドの受信に応じて所定のファイルを参照し、識別情報（ＵＵＩＤ）を特定する。この場合は、各コマンドに識別情報（ＵＵＩＤ）を引数として与える必要はない。
【０１２９】
なお、本実施形態ではPullモードを例に説明したが、Path Throughモード（図９のＳ８０４）でも同様の処理を実行することが可能である。
【０１３０】
＜第３の実施形態＞
第２の実施形態は、所望の機器と確実に接続するため、接続したい機器の情報を予め設定しておくものであった。しかしながら、ネットワークに参加している機器は時間と共に変化する場合も多く、予め機器の情報を設定することが必ずしも容易でないこともある。そのため、本実施形態では、現在ネットワークに参加している機器から、所望の接続機器を選択可能とするものである。
【０１３１】
以下、PathThroughモードを例に説明する。図１８は、PathThroughモードにおけるＤＳＣ１００、メモリカード１２０、外部機器の一例としてのＰＣ２００の動作を示すシーケンス図である。
なお、図１８では図９と同様の処理を行うステップについては参照数字を共通とし、図９と差異があるステップのみを説明する。
【０１３２】
Ｓ１８０１：Ｓ９０１にてPathThrouthモードへの設定が完了すると、制御部１０１はPTP_StartSearch()コマンドを発行し、メモリカード１２０に対し、接続中のネットワーク上に存在するInitiatorの検索実行を要求する。
【０１３３】
なお、PTP_StartSearch()コマンドの引数には、検索対象とするディスカバリプロトコル、及び検索対象の種類を指定することが可能である。ディスカバリプロトコルとは、例えばUPnPやMulticastDNSを指す。検索対象の種類とは、例えば、UPnPであればTargetDeviceを指し、MulticastDNSであればServiceTypeを指す。PTP_StartSearch()コマンドに引数が与えられている場合、カードコントローラ１２０１は、指定された条件での機器検索の実行が要求されたものと解釈する。引数がない場合は、カードコントローラ１２０１は、検索可能なディスカバリプロトコル、および対象機種の種類すべての機器検索の実行が要求されたものと解釈する。
【０１３４】
また、制御部１０１は、予めメモリカード１２０のメモリ部１２０３やＤＳＣ１００の不揮発性メモリ１０２に保存されている情報をＤＳＣ１００のＲＡＭ１０３にロードして、PTP_StartSearch()コマンドの引数として与えてもよい。さらに、Ｓ８０２のPTP_SetDeviceInformationコマンドにて、メモリカード１２０が検索可能なディスカバリプロトコルの情報や検索対象の種類を取得し、PTP_StartSearch()コマンドの引数として使用してもよい。
【０１３５】
Ｓ１８０２：カードコントローラ１２０１は、PTP_StartSearch()コマンドで指定された条件に従って、接続しているネットワーク上に存在する機器の検索（Device Discovery(Search)）を実行する。ディスカバリにより、ネットワーク上に存在する、検索条件に合致したInitiatorの識別情報（ＵＵＩＤ）及び名称等が取得され、カードコントローラ１２０１は取得した情報からInitiatorリストを生成する。なお、機器検索は例えば定期的に実行し、探索結果に変化があった場合には、カードコントローラ１２０１から割り込み信号ISRによってＤＳＣ１００に通知することができる。
【０１３６】
Ｓ１８０３：Device Discovery(Search)により、検索条件に対応したInitiatorが探索できたら、カードコントローラ１２０１は、割り込み信号ISRによって制御部１０１に通知する。
【０１３７】
Ｓ１８０４：制御部１０１は、PTP_GetDeviceListコマンドを発行し、Initiatorリストを要求する。
【０１３８】
Ｓ１８０５：カードコントローラ１２０１は、生成したInitiatorリストを制御部１０１に送信する。
【０１３９】
Ｓ１８０６：制御部１０１は、受信したInitiatorリストから、ユーザがInitiatorを選択するためのＧＵＩ画面を作成し、表示部１０５に表示する。ＧＵＩの様式に制限は無いが、指定可能なInitiatorの各々を特定できる情報をユーザが選択可能に提示する。ここでは、指定可能なInitiatorを特定できる情報を選択可能にリスト表示するＧＵＩを用いるものとする。
【０１４０】
ユーザが操作部１０４を通じてリスト中のInitiatorの１つを選択し、決定ボタンを押下すると、制御部１０１はどのInitiatorが選択されたか認識する。そして、制御部１０１は、選択されたInitiatorの識別情報(ＵＵＩＤ)を指定したPTP_StartAdvertise(UUID)コマンドをメモリカード１２０に送信する。
【０１４１】
Ｓ８０４：カードコントローラ１２０１がＳ８０３でPTP_StartAdvertise(UUID)コマンドを受信すると、Ｓ８０４でPTP-IPモジュール１２３は、接続しているネットワーク上でDevice Discovery（Advertise）を行う。そして、ネットワーク上に存在し、PTPにおけるInitiatorとして動作する機器がこのDeviceDiscoveryを検知すると、接続要求を送信する。
【０１４２】
PTP-IPモジュール１２３は、PTP_StartAdvertise(UUID)で指定されたＵＵＩＤに対応する機器から受信した接続要求に応答してPTP-IPコネクションを確立する。PTP-IPモジュール１２３は、PTP_StartAdvertise(UUID)で指定されたＵＵＩＤに対応しない機器から受信した接続要求については、無視または拒否する。
【０１４３】
Ｓ１８０７：PTP-IPモジュール１２３は、PTP_ StartAdvertiseコマンドで指定されたＵＵＩＤに対応するInitiatorとPTP-IPコネクションを確立する。コネクションの確立は割り込み信号ISR(PTPIP Connected)によりカードコントローラ１２０１から制御部１０１に通知される。
【０１４４】
このように、本実施形態では、PTP-IPコネクションを確立したい時点でネットワーク上に存在するInitiatorのうち、ユーザが接続を所望するInitiatorとPTP-IPコネクションを確立することができる。なお、本実施形態では、PathThroughモードで説明したが、Pullモードで実行されてもよい。ただし、Pullモードは、PTP通信機能やPTP通信のためのＧＵＩなどを有さないＤＳＣ等にPTP通信機能を与えることを想定したモードであり、主にはＰＣなどInitiator側を操作して画像を取得することを目的としたモードである。これに対して、PathThroughモードは、ＤＳＣ１００がすでに保有しているPTP通信機能やPTP通信のためのＧＵＩリソースを有効的に活用するためのモードである。したがって、Initiatorへの画像送信をＤＳＣ１００を操作して行うことが想定される。
【０１４５】
このようなPullモードとPathThroughモードの特徴の違いを鑑みると、例えばPullモードでは第１の実施形態のようにＰＣ２００側からの接続を行う構成が考えられる。一方、PathThroughモードでは本実施形態のようにＤＳＣ１００が主体的に接続相手を特定する構成が考えられる。
【０１４６】
また、他の構成として、例えばPullモードでは第２の実施形態の接続方法を採用してＤＳＣ１００側の操作を最小限にし、PathThroughモードでは本実施形態のような接続方法をとる構成も考えられる。
【０１４７】
＜他の実施形態＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005875363.tif 000002
【図２】
0005875363.tif 000003
【図３】
0005875363.tif 000004
【図４】
0005875363.tif 000005
【図５】
0005875363.tif 000006
【図６】
0005875363.tif 000007
【図７】
0005875363.tif 000008
【図８】
0005875363.tif 000009
【図９】
0005875363.tif 000010
【図１０】
0005875363.tif 000011
【図１１】
0005875363.tif 000012
【図１２Ａ】
0005875363.tif 000013
【図１２Ｂ】
0005875363.tif 000014
【図１３】
0005875363.tif 000015
【図１４】
0005875363.tif 000016
【図１５】
0005875363.tif 000017
【図１６】
0005875363.tif 000018
【図１７】
0005875363.tif 000019
【図１８】
0005875363.tif 000020