PTPでは、通信媒体で接続された2つのデバイスをInitiatorとResponderと呼んでいます。Initiatorは、コマンドを要求するもの、Responderは、それに応答するものと定義されています。PictBridgeでは、InitiatorがPrinter(USB Host)で、ResponderがDSC(USB Function)にあたります。
PTPでは、次の5つの機構が必要になります。
InitiatorとResponder間は、セッションを確立した後に通信が行われます。OpenSession オペレーション後にセッションが確立されます。この際、セッションは、SessionIDという32-bitの番号によって管理されます。このSessionIDは、Initiator(USB Host)によって割り振られるので、USB Host側で、SessionIDがユニークに割り当てられるように管理する必要があります。
PTPは、USB、IEEE1394、IrDA、RS232Cなどの通信媒体には依存しない仕様となっています。このため、システム設計時には、通信媒体に非依存になるような構成にする必要があります。
PTPで定義されているものの中から、PictBridgeで使用するOperation Requestを表記します。
| リクエスト | 概要 |
|---|---|
| GetDeviceInfo | USBデバイスのストレージ情報取得 |
| OpenSession | USBホストとデバイス間のセッション確立 |
| CloseSession | USBホストとデバイス間のセッション閉鎖 |
| GetStorageIDs | 有効なStorageIDのリスト取得 |
| GetStorageInfo | 特定のストレージ領域のデータセット取得 |
| GetNumObjects | 存在するオブジェクトの総数取得 |
| GetObjectHandles | 存在するObjectHandleの配列の取得 |
| GetObjectInfo | デバイスからのオブジェクト情報の取得 |
| GetObject | デバイスからのオブジェクトの取得 |
| GetThumb | デバイスからのサムネイルの取得 |
| SendObjectInfo | InitiatorからResponderにオブジェクトを送信する際に最初に使用する操作 |
| SendObject | デバイスにオブジェクトを送信 |
| GetPartialObject | デバイスからオブジェクトの一部を取得 |
PictBridgeで使用するEventを表記します。このうち、RequestObjectTransferのみが必須となります。
| リクエスト | 概要 |
|---|---|
| ObjectAdded | デバイスに新しいオブジェクトの追加 |
| ObjectRemoved | デバイスからオブジェクトを削除 |
| StoreAdded | メディアの挿入 |
| StoreRemove | メディアの抜去 |
| ObjectInfoChanged | オブジェクト情報の変更 |
| RequestObjectTransfer | オブジェクトの転送要求 |
PTPの仕様書では、扱えるデータとして、画像や動画や音声、テキストなど多くのオブジェクトフォーマットが定義されています。イメージもしくはデータオブジェクトのフォーマット形式をObjectFormatCodesという16ビット長データに格納し、管理します。
本章では、PictBridgeを、Connection、Discovery、PTA、SOA、アプリケーションの5つの機構に分類するものとします。どのような構成にするかはシステム設計に依存します。ConnectionとDiscoveryは、DSCとPrinterとの通信を確立するまでに必要な機構で、PTA とSOAとアプリケーションは、DSCとPrinter間のデータのやり取りを行なう機構になります。
USBデバイスの挿抜を上位のアプリケーションであるPictBridgeに通知する機構です。この機構をトリガにして、PTPセッションを確立した後にDiscovery機構が起動します。
Discoveryは、接続された機器がPictBridge機能を有する機器かどうかのネゴシエーションを行なう機構です。
XMLを使ったRequest/Responseの対でやりとりするアクションです。PTA は、複数のPTPコマンドから構成されます。また、DSCとPrinter間の転送方向及びRequest/ResponseによってPTPのコマンドシーケンスが異なります。
| PTPコマンド | 転送方向 |
|---|---|
| SendObjectInfo command | Printer |
| SendObjectInfo data | Printer |
| SendObjectInfo response | Printer |
| SendObject command | Printer |
| SendObject data 【XML request】 | Printer |
| SendObject response | Printer |
| ObjectRemoved event (注) | Printer |
| PTPコマンド | 転送方向 |
|---|---|
| ObjectAdded event (注) | Printer |
| RequestObjectTransfer event | Printer |
| GetObjectInfo command | Printer |
| GetObjectInfo data | Printer |
| GetObjectInfo response | Printer |
| GetObject command | Printer |
| GetObject data 【XML response】 | Printer |
| GetObject response | Printer |
| Object Removed event (注) | Printer |
| PTPコマンド | 転送方向 |
|---|---|
| ObjectAdded event (注) | DSC |
| RequestObjectTransfer event | DSC |
| GetObjectInfo command | DSC |
| GetObjectInfo data | DSC |
| GetObjectInfo response | DSC |
| GetObject command | DSC |
| GetObject data 【XML request】 | DSC |
| GetObject response | DSC |
| ObjectRemoved event (注) | DSC |
| PTPコマンド | 転送方向 |
|---|---|
| SendObjectInfo command | DSC |
| SendObjectInfo data | DSC |
| SendObjectInfo response | DSC |
| SendObject command | DSC |
| SendObject data 【XML response】 | DSC |
| SendObject response | DSC |
| ObjectRemoved event (注) | DSC |
(注)ObjectAdded eventとObjectRemoved eventは推奨のため省略してもかまいません。
XMLを使わないアクションです。DPSのアクションとPTPのコマンドは、1対1に対応しています。
DPSのアクションは、次のように定義されています。
| DPSアクション | 種類 | 概要 |
|---|---|---|
| DPS_ConfigurePrintService | PTA | バージョンとその他のコンフィギュレーション情報の交換 |
| DPS_GetCapability | PTA | プリンタの能力情報の取得 |
| DPS_GetJobStatus | PTA | プリンタのジョブステータスの取得 |
| DPS_GetDeviceStatus | PTA | プリンタのデバイスステータスの取得 |
| DPS_StartJob | PTA | コンフィギュレーションの確立とプリントジョブの開始 |
| DPS_AbortJob | PTA | プリントジョブの中断 |
| DPS_ContinueJob | PTA | プリントジョブの再開 |
| DPS_NotifiJobStatus | PTA | プリントジョブステータスの変化をDSCに通知 |
| DPS_NotifyDeviceStatus | PTA | プリンタデバイスのステータスの変化をDSCに通知 |
| DPS_GetFileID | PTA | ファイルIDの取得 |
| DPS_GetFileList | PTA | ストレージ上のファイルリストの取得 |
| DPS_GetFileInfo | SOA | PTPコマンドのGetObjectInfo |
| DPS_GetFile | SOA | PTPコマンドのGetObject |
| DPS_GetPartialFile | SOA | PTPコマンドのGetPartialObject |
| DPS_GetThumb | SOA | PTPコマンドのGetThumb |
アプリケーションは、表4-8のDPSアクションを用いて、ダイレクトプリントを実現します。処理例として、図4-5を示します。
