技術コラム集

PictBridgeの構造について

2005.12

ユークエスト株式会社
依岡 壯(よりおか つよし)

1 はじめに

近年、パソコンの普及に伴い、パソコンに接続して使用するパソコン周辺機器も普及しています。プリンタやデジタルカメラも、“パソコンに接続して使用する”という意味で、パソコン周辺機器といえるでしょう。たとえば、プリンタは、パソコン上にあるファイルを印刷する際に使用しますし、デジタルカメラで撮影した画像ファイルをパソコンに保存するといった使い方をします。筆者を含め、このような使い方をする方が、多いのではないでしょうか。

つまり、デジタルカメラで撮影した画像を印刷するには、パソコンを経由しないと印刷できないということになります。そこで考えられたのが、パソコンを介さずに、デジタルカメラから直接プリンタに印刷データを転送するという手法です。この手法は、数社から提案され製品化もされていますが、メーカ独自仕様であったため、他メーカとの互換性がないということで普及には至りませんでした。

そこで考えられたのが、CIPA規格DC-001-2003(以下、PictBridge)です。本規格の主なコンセプトとしては、以下の通りです。

パソコンを介さずにプリンタ-デジタルカメラの接続でプリントアウトができること。データ転送を担う物理レイアに非依存。メーカや機種に関係なく接続が可能。

USBを使用した場合の接続形態なお、現在リリースされているPictBridge規格のVersion1.0では、通信インターフェースはUSBが前提とされています。USB上にPictBrigeを構成する場合、図1-1で示すように、デジタルカメラなどの印刷対象データが保存されている機器(以下、DSC:Digital Still Camera)と印刷対象データを印刷するプリンタ(以下、Printer)とが、USBケーブルで接続された構成になります。

2 当社のPictBridgeソリューション

2.1 開発の経緯

当社では以前より、USBホストドライバのソフトウェアを開発・販売しており、プリンタ及びプリンタ関連製品や、デジタルカメラ関連製品などにUSBホストが搭載される事例が数多くありました。デジタルカメラとプリンタのダイレクト接続は、USB On-the-Goとともに、PCレスのUSB接続例として、市場からの要望や問い合わせなどが多いものでした。

組込み用のUSBホストドライバ市場を開拓し、プリンタメーカ各社を顧客にもっていた当社としては、是非対応したい規格として登場したのがPictBridgeでした。このような経緯から、当初はUSBホストドライバを販売するプリンタメーカに対して、プリンタ側のPictBridgeを開発し、その後デジタルカメラ側の販売を開始しました。

2.2 採用事例

開発経緯の通り、当初はプリンタメーカへの販売を中心にしてきましたが、デジタルカメラ側の販売を開始すると、携帯電話やDVDレコーダーなど、デジタルカメラ以外での引き合いが増加しています。PictBridgeに対応すれば、PictBridge対応のプリンタとはメーカを問わず接続でき、静止画像を手軽に印刷できるという特徴が、画像を取り扱う幅広い機器から好評を得ている結果です。

2.3 今後の展開

今後はその傾向はさらに強まり、携帯電話やデジタルTVなどでの更なる採用のほか、計測データや医療機器のデータを画像として印刷するといった用途でのPictBridge採用はすでに広まりつつあります。ゲーム機や防犯カメラなどにも用途はあるかもしれません。

また、画像出力側(プリンタ側)も紙に出力するだけではなく、ディスプレイへの出力に利用することもできます。つまり、JPEGやPNGといった画像フォーマットを入力する機器と出力する機器を接続する標準規格と捉えることが可能です。また、PTP/IPの仕様が同じくCIPAで策定されたことにより、PictBridgeをIP上、つまりEthernetや無線LAN上でサポートする道も開かれています。

3 ソフトウェア構成

PictBridegeのソフトウェア構成としては、図3-1のようになります。大きく分けて以下の4つのモジュールに分類されます。

ソフトウェア構成図

3.1 USB Host/Function

データ転送を行なう物理レイヤ。PrinterはUSBホスト、DSCはUSB Functionになります。

3.2 SIC(USB Still Image Capture device class)

USB-IF(USB Implementers Forum)によって策定されたクラスドライバ。PTPとセットで使用されます。

3.3 PTP(Picture Transfer Protocol)

PIMA(Photographic and Imaging Manufactures Association)によって策定された画像転送における標準プロトコル。

3.4 PictBridge

CIPA(Camera & Imaging Products Association)によって策定された画像入力デバイスと出力デバイスとをダイレクトに接続して容易にデジタルプリントを実現するための規格。CIPA DC-001-2003というのが正式名称であり、"PictBridge"は愛称です。また、規格発表前は、"DPS"という仮称が使用されていたため、本章では"DPS"という名称も使用しています。

4 モジュール概要

ここからは、PictBridgeにおける動作の詳細を述べていきます。3章のソフトウェア構成で示した、1.USB Host/Function、2.SIC、3.PTP、4.PictBridgeの各モジュールにおいて、PictBridgeの動作に必要な機能を見ていきましょう。

4.1 USB Host/Function

システムを構成する上で必須となる機構としては、以下の5点です。

4.1.1 機器の挿入/抜去の検知

USB機器の挿入及び抜去をアプリケーションに通知する機構。アプリケーションは、挿入をトリガにして、データ送受信準備を行い、抜去をトリガにして、確保したリソースの開放などの処理を行います。

4.1.2 標準ディスクリプタの実装

すべてのUSBデバイスが、共通で認識しなければならない標準ディスクリプタが存在します。

4.1.3 Control / Bulk / Interrupt 転送の実装

USBホストとUSBデバイス間のデータ転送方式としては、次の4方式が定義されています。

Control転送

USB ホストが、USBデバイスに対してデバイスリクエストと呼ばれるコマンドを発行する際に使用される転送方式。

Bulk転送

大量のデータ転送を行う際に使用する転送方式。Interrupt転送やIsochronous転送が一定時間内でのデータ転送を保障するのに対して、バルク転送では転送タイミングが保障されません。その代わり、USBバスがあいているときに目一杯の帯域幅を使用してデータを転送することができます。

Interrupt転送

一定周期でデータ転送を行う際に使用する転送方式。ここでのInterruptは、“とぎれとぎれ”といった意味になります。

Isochronous転送

音声やビデオ画像のように、データの正当性よりもデータが届く周期が保障されることが重要な用途に使用する転送方式。特徴としては、他の3つの転送と異なり、エラー発生時のリトライ等の処理は行いません。ただし、PictBridgeがベースとするSICでは、Isochronous転送は使用しないため、Isochronous転送が実装されていなくともPictBridgeを実現することは可能です。

4.2 SIC

SICでは、次の4つの機構が必要になります。

パイプの初期化とデータ転送

SICでは、エニュメレーション用のControl転送×1 (以下、Control)とデータのInputとOutput用のBulk転送×2 (以下、Bulk-INとBulk-Out)とUSBデバイスからのEvent通知用のInterrupt転送×1 (以下、Intr-In)との計4つのパイプ(データ転送路)を確保する必要があります。

データ転送

クラス依存のデバイスリクエストの実装

SICでは、次のクラス依存のデバイスリクエストが定義されています。

表4-1 SICクラス依存のデバイスリクエスト
リクエスト概要
Cancel Requestデータ転送の中断
Get Extended Evnet Data拡張イベントデータの取得
Device Reset Requestデバイスのリセット
Get Device Status Requestデバイスのステータスの取得

「Get Extended Evnet Data」については、具体的な使用方法が明記されていないため、未実装でも動作上問題はありません。

プロトコルの実装

トランザクションシーケンスSICは、上位にPTPが実装されることを前提に規格化されています。このため、SICとPTPとのインターフェースは明確に分離されておらず、プロトコルの実装については、SICに分類されるか、PTPに分類されるかはシステム設計に依存します。ここでは、SICの機構として説明します。

一つのトランザクションは、「Operation Requestフェーズ」(または、「Commandフェーズ」)、「Dataフェーズ」、「Responseフェーズ」から構成されます。ただし、Dataフェーズがないものもあります。このため、各フェーズ間の状態遷移としては、右の図のようになります。

各フェーズのデータをUSBバス上に転送する際には、コンテナと呼ばれるフォーマットで転送対象のデータをカプセル化する必要があります。データ構成としては、12バイト長データを先頭に付加して転送する形式になります。ここでは、この12バイトデータのことをコンテナヘッダと呼ぶこととします。つまり、USBバス上には以下のような形式のデータがUSBホストとデバイス間でやり取りされます。

オペレーションフォーマット

Event構成

SICでは、トランザクションとは別に、Eventが定義されています。Eventは、主にDSCからPrinterに非同期に通知されます。例えば、メディアが抜かれたことを通知するStoreRemovedやファイルが追加されたことを通知するObjectAdded等があります。Eventのデータ形式は、以下の図のような形式になります。

Eventフォーマット

4.3 PTP

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などの通信媒体には依存しない仕様となっています。このため、システム設計時には、通信媒体に非依存になるような構成にする必要があります。

Operation Requestの実装

PTPで定義されているものの中から、PictBridgeで使用するOperation Requestを表記します。

表4-2 Operation Request
リクエスト概要
GetDeviceInfoUSBデバイスのストレージ情報取得
OpenSessionUSBホストとデバイス間のセッション確立
CloseSessionUSBホストとデバイス間のセッション閉鎖
GetStorageIDs有効なStorageIDのリスト取得
GetStorageInfo特定のストレージ領域のデータセット取得
GetNumObjects存在するオブジェクトの総数取得
GetObjectHandles存在するObjectHandleの配列の取得
GetObjectInfoデバイスからのオブジェクト情報の取得
GetObjectデバイスからのオブジェクトの取得
GetThumbデバイスからのサムネイルの取得
SendObjectInfoInitiatorからResponderにオブジェクトを送信する際に最初に使用する操作
SendObjectデバイスにオブジェクトを送信
GetPartialObjectデバイスからオブジェクトの一部を取得
Eventの実装

PictBridgeで使用するEventを表記します。このうち、RequestObjectTransferのみが必須となります。

表4-3 Event
リクエスト概要
ObjectAddedデバイスに新しいオブジェクトの追加
ObjectRemovedデバイスからオブジェクトを削除
StoreAddedメディアの挿入
StoreRemoveメディアの抜去
ObjectInfoChangedオブジェクト情報の変更
RequestObjectTransferオブジェクトの転送要求
オブジェクトフォーマット

PTPの仕様書では、扱えるデータとして、画像や動画や音声、テキストなど多くのオブジェクトフォーマットが定義されています。イメージもしくはデータオブジェクトのフォーマット形式をObjectFormatCodesという16ビット長データに格納し、管理します。

4.4 PictBridge

本章では、PictBridgeを、Connection、Discovery、PTA、SOA、アプリケーションの5つの機構に分類するものとします。どのような構成にするかはシステム設計に依存します。ConnectionとDiscoveryは、DSCとPrinterとの通信を確立するまでに必要な機構で、PTA とSOAとアプリケーションは、DSCとPrinter間のデータのやり取りを行なう機構になります。

Connection

USBデバイスの挿抜を上位のアプリケーションであるPictBridgeに通知する機構です。この機構をトリガにして、PTPセッションを確立した後にDiscovery機構が起動します。

Discovery

Discoveryは、接続された機器がPictBridge機能を有する機器かどうかのネゴシエーションを行なう機構です。

PTA(Pass Through Action)

XMLを使ったRequest/Responseの対でやりとりするアクションです。PTA は、複数のPTPコマンドから構成されます。また、DSCとPrinter間の転送方向及びRequest/ResponseによってPTPのコマンドシーケンスが異なります。

表4-4 DPS Request(Printer→DSC)
PTPコマンド 転送方向
SendObjectInfo command Printer→DSC
SendObjectInfo data Printer→DSC
SendObjectInfo response Printer←DSC
SendObject command Printer→DSC
SendObject data 【XML request】 Printer→DSC
SendObject response Printer←DSC
ObjectRemoved event (注) Printer←DSC
表4-5 DPS Response(Printer→DSC)
PTPコマンド 転送方向
ObjectAdded event (注) Printer←DSC
RequestObjectTransfer event Printer←DSC
GetObjectInfo command Printer→DSC
GetObjectInfo data Printer←DSC
GetObjectInfo response Printer←DSC
GetObject command Printer→DSC
GetObject data 【XML response】 Printer←DSC
GetObject response Printer←DSC
Object Removed event (注) Printer←DSC
表4-6 DPS Request(DSC→Printer)
PTPコマンド 転送方向
ObjectAdded event (注) DSC→Printer
RequestObjectTransfer event DSC→Printer
GetObjectInfo command DSC←Printer
GetObjectInfo data DSC→Printer
GetObjectInfo response DSC→Printer
GetObject command DSC←Printer
GetObject data 【XML request】 DSC→Printer
GetObject response DSC→Printer
ObjectRemoved event (注) DSC→Printer
表4-7 DPS Response(DSC→Printer)
PTPコマンド 転送方向
SendObjectInfo command DSC←Printer
SendObjectInfo data DSC←Printer
SendObjectInfo response DSC→Printer
SendObject command DSC←Printer
SendObject data 【XML response】 DSC←Printer
SendObject response DSC→Printer
ObjectRemoved event (注) DSC→Printer

(注)ObjectAdded eventとObjectRemoved eventは推奨のため省略してもかまいません。

SOA(Special Optimized Action)

XMLを使わないアクションです。DPSのアクションとPTPのコマンドは、1対1に対応しています。DPSのアクションは、次のように定義されています。

表4-8 DPSアクション
DPSアクション種類概要
DPS_ConfigurePrintServicePTAバージョンとその他のコンフィギュレーション情報の交換
DPS_GetCapabilityPTAプリンタの能力情報の取得
DPS_GetJobStatusPTAプリンタのジョブステータスの取得
DPS_GetDeviceStatusPTAプリンタのデバイスステータスの取得
DPS_StartJobPTAコンフィギュレーションの確立とプリントジョブの開始
DPS_AbortJobPTAプリントジョブの中断
DPS_ContinueJobPTAプリントジョブの再開
DPS_NotifiJobStatusPTAプリントジョブステータスの変化をDSCに通知
DPS_NotifyDeviceStatusPTAプリンタデバイスのステータスの変化をDSCに通知
DPS_GetFileIDPTAファイルIDの取得
DPS_GetFileListPTAストレージ上のファイルリストの取得
DPS_GetFileInfoSOAPTPコマンドのGetObjectInfo
DPS_GetFileSOAPTPコマンドのGetObject
DPS_GetPartialFileSOAPTPコマンドのGetPartialObject
DPS_GetThumbSOAPTPコマンドのGetThumb
アプリケーション

アプリケーションは、表4-8のDPSアクションを用いて、ダイレクトプリントを実現します。処理例として、図4-5を示します。

PictBridge ジョブフロー

5 解析

実際にPictBridgeを動作させたときの挙動をUSBアナライザのデータを元に解析します。ここでは、DPS_NotifyDeviceStatusに着目します。

DPS_NotifyDeviceStatusのXMLデータフォーマットは、次のようになります。

図5-1 DPS_NotifyDeviceStatus RequestのXMLデータ例

図5-2 DPS_NotifyDeviceStatus ResponseのXMLデータ例

図5-3 DPS_NotifyDeviceStatusのログ

DPS_NotifyDeviceStatusは、PrinterからDSCに対して、プリンタステータスを通知するため、DPS Requestは表4-4になり、DPS Responseは表4-5になります。これを図5-3に当てはめると、以下のようになります。

表5-1 DPS_NotifyDeviceStatus Request
Transfer No.PTPコマンドSICフェーズ
14SendObjectInfoCommand
15Data
16Response
17SendObjectCommand
18Data
19Response
表5-2 DPS_NotifyDeviceStatus Response
Transfer No.PTPコマンドSICフェーズ
20RequestObjectTransferEvent
21GetObjectInfoCommand
22Data
23Response
24GetObjectCommand
25Data
26Response

これより、Transfer18には、DPS_NotifyDeviceStatus Request、Transfer25には、DPS_NotifyDeviceStatus ResponseのXMLデータが格納されていることが分かります。それぞれのデータをASCIIコードで表示したものは、以下のようになります。

図5-4 Transfer18のデータ

図5-5 Transfer25のデータ

図5-4、5-5は、SICデータで先頭の12バイト(グレー部分)は、コンテナヘッダになります。このため、12バイト目以降のデータがXMLデータになります。XML部分のみを切り出すと、以下のようになります。

図5-6 Transfer18のXMLデータ

図5-7 Transfer25のXMLデータ

図5-1、5-2と図5-6、5-7を比較することで、USBバス上で、DPS_NotifyDeviceStatusのRequest/Responseデータのやり取りが行なわれていることが確認できます。

PictBridgeでは、このようにPTPコマンドから構成されるDPSのアクションをシーケンシャルに実行することで、ダイレクトプリントを実現しています。

参考文献

  • Universal Serial Bus Specification, Revision 2.0, 27 April 2000
  • Picture Transfer Protocol for Digital Still Photography Devices, PIMA 15740:2000,5 July 2000
  • PIMA 15740:2000 Approved 2000-07-05 FIRST EDITION
  • CIPA DC-001-2003 Digital Photo Solutions for Imaging Devices, 3 February 2003
  • White Paper of CIPA DC-001-2003 Digital Photo Solutions for Imaging Devices (Japanese),2 February 2003

ページのトップへ