デバイスによって実行される機能(コマンド)をPTP仕様では「オペレーション」と呼んでいます。PTPでは以下のようなオペレーションが定義されています。また、これら以外にベンダー依存としてオペレーションを追加することができます。
CODE | オペレーション名 | 説明 |
---|---|---|
0x1001 | GetDeviceInfo | デバイス情報(DeviceInfoデータセット)の取得 |
0x1002 | OpenSession | セッションをオープン |
0x1003 | CloseSession | セッションをクローズ |
0x1004 | GetStorageIDs | デバイス内にあるストレージのStorageIDのリストを取得 |
0x1005 | GetStorageInfo | StorageIDで示されるストレージの情報(StorgeInfo)を取得 |
0x1006 | GetNumObjects | 指定された条件に合致するオブジェクトの数を取得 |
0x1007 | GetObjectHandles | 指定された条件に合致するオブジェクトのObjectHandleのリストを取得 |
0x1008 | GetObjectInfo | オブジェクトの情報(ObjectInfo)を取得 |
0x1009 | GetObject | オブジェクトを取得 |
0x100A | GetThumb | オブジェクトのサムネイルを取得 |
0x100B | DeleteObject | オブジェクトを削除 |
0x100C | SendObjectInfo | ObjectInfoデータセットをイニシエータからレスポンダに転送 |
0x100D | SendObject | オブジェクトをイニシエータからレスポンダに転送 |
0x100E | InitiateCapture | 撮影シーケンスを開始 |
0x100F | FormatStore | ストアをフォーマット |
0x1010 | ResetDevice | デバイスの状態をデフォルト状態にリセット |
0x1011 | SelfTest | セルフテスト |
0x1012 | SetObjectProtection | オブジェクトの書き込み保護状態を設定 |
0x1013 | PowerDown | パワーダウン |
0x1014 | GetDevicePropDesc | DevicePropDescを取得 |
0x1015 | GetDevicePropValue | デバイスプロパティ値を取得 |
0x1016 | SetDevicePropValue | デバイスプロパティ値を設定 |
0x1017 | ResetDevicePropValue | デバイスプロパティ値をリセット |
0x1018 | TerminateOpenCapture | InitiateOpenCaptureで開始した撮影シーケンスを終了 |
0x1019 | MoveObject | オブジェクトの移動 |
0x101A | CopyObject | オブジェクトのコピー |
0x101B | GetPartialObject | レスポンダーからイニシエーターへのオブジェクトの分割転送 |
0x101C | InitiateOpenCapture | 撮影シーケンスの開始 |
イニシエーターはGetDeviceInfoオペレーションを使って、デバイスからDeviceInfoデータセットを取得することができます。PTPデバイスはOpenSessionオペレーションによってセッションを開くまで、基本的にイニシエータからのオペレーションを受け付けませんが、このオペレーションは例外でセッションを閉じた状態でも実行することができます。これはイニシエーターがデバイスに接続(セッションを開く)する前に、そのデバイスがどのようなデバイスであるか特定できるようにするためだと思われます。セッションが閉じた状態でこのオペレーションを実行する場合は、オペレーションリクエストフェーズでSessionIDとTransactionIDを0x00000000にセットしなければなりません。
イニシエーターはこのオペレーションを使ってセッションを開きます。開かれるセッションにはイニシエーターがリクエストフェーズのParam1で指定したSessionIDが割り当てられます。
現在のセッションを閉じます。仕様では明確に述べられない部分ですが、厳密にはデバイスはリクエストフェーズのSessionIDフィールドで指定されたSessionIDを持つセッションを閉じようとすべきかも知れません。いくつかの製品を解析すると、リクエストフェーズのSessionIDフィールドを無視して無条件に現在開かれているセッションを閉じるものもあるようです。
このオペレーションはデータフェーズを使って現在利用可能なストレージのリストをStorageIDの配列で取得します。
オペレーションリクエストフェーズのParameter1でStorageIDを使って指定したストレージのStorageInfoデータセットを取得します。
Operation Parameter1でStorageIDを使って指定されたストレージ内のオブジェクトの数をResponse Parameter1に返します。すべてのストレージを対象とする場合、Operation Parameter1に0xFFFFFFFFを指定します。
Operation Parameter1でStorageIDを使って指定されたストレージ内のオブジェクトのObjectHandleのリストをObjectHandleの配列でデータフェーズで返します。すべてのストレージを対象とする場合、Operation Parameter1に0xFFFFFFFFを指定します。
Operation Parameter1でObjectHandleを使って示されるオブジェクトのObjectInfoデータセットをデータフェーズでレスポンダーからイニシエーターに転送します。
Resuest Parameter1でObjectHandleを使って指定されたオブジェクトをデータフェーズでレスポンダーからイニシエーターに転送します。
Resuest Parameter1でObjectHandleを使って指定されたオブジェクトのサムネイル画像をデータフェーズでレスポンダーからイニシエーターに転送します。
Operation Parameter1でObjectHandleを使って指定したオブジェクトを削除します。ObjectHandle値として0xFFFFFFFFが与えられた場合、デバイス内のすべてのオブジェクトが削除されます。Opertion Parameter2はObjectHandle値として0xFFFFFFFFが与えられた場合に削除の対象とするオブジェクトのフォーマット(ObjectFormatCode)を指定するために用いられます。このパラメータが0xFFFFFFFFのとき、すべてのフォーマットのオブジェクトが削除の対象となります。このパラメータのサポートは必須ではありません。
イニシエーターからレスポンダーへオブジェクトを転送する場合、イニシエータは最初にSendObjectInfoを使ってObjectInfoデータセットを送ることで、これから転送しようとしているオブジェクトの情報をレスポンダーに教えます。ObjectInfoデータセットはこのオペレーションのデータフェーズで転送されます。Paramter1とParameter2はオプショナルで、Parameter1はオブジェクトが転送される予定のストレージをStorageIDを使って指定することができます。Parameter2はオブジェクトを置く予定の親オブジェクトをObjectHandleを使って指定することができます。
イニシエーターはレスポンダーにオブジェクトを転送する場合に、SendObjectInfoでObjectInfoデータセットをレスポンダーに転送した後、このオペレーションを使ってオブジェクト本体をレスポンダーに転送します。レスポンダーは直前のSendObjectInfoのParameterやSendObjectInfoで送られたObjectInfoデータセットを参照して、このオペレーションで転送されるオブジェクトの置き場を決定します。
イニシエーターはこのオペレーションを使ってレスポンダーに撮影を実行させることができます。このオペレーションで走らせた撮影シーケンスは撮影の完了とともに終端されます。撮影が実行されて新しいオブジェクトが追加されると、ObjectAddedイベントがイニシエーターに送られます。撮影シーケンスが完了すると、CaptureCompleteイベントが送られます。撮影の開始と終端を別々のオペレーションで行うには、このオペレーションの代わりにInitiateOpenCaptureとTerminateOpenCaptureを使います。Operation Parameter1は撮影した画像の保存先をStorageIDで指定します。この値が0xFFFFFFFFの場合、保存先はレスポンダーによって決定されます。Operation Parameter2は撮影した画像のオブジェクトフォーマットをObjectFormatCodeで指定します。この値が0x00000000の場合、デフォルトのフォーマットが選択されます。
Operation Parameter1でStorageIDを使って指定したストレージをフォーマットします。Operation Parameter2のサポートは任意ですが、FilesysytemTypeを指定することでフォーマットの方法を指定することができます。
デバイスの状態をデフォルトの状態に戻します。ただし、このオペレーションによってデバイスプロパティの状態は変化しません。デバイスプロパティをデフォルトに戻すには、ResetDevicePropValueを使います。このオペレーションを実行するとすべてのセッションは閉じられます。
イニシエータはこのオペレーションによってPTPデバイスのセルフテストを実行することができます。テストの内容はデバイスに依存します。Operation Parameter1をテスト項目の指定に使うこともできます。0x0000が指定されると、デフォルトの項目のセルフテストが実行されます。0x8000~0x8FFFの意味はデバイス依存で定義することができます。
Operation Parameter1でObjectHandleを使って指定されたオブジェクトの書込み保護状態を、Operation Parameter2でProtectionStatus値を使って示された状態に設定します。
このオペレーションによってPTPデバイスは電源を落とします。現在開かれているすべてのセッションは閉じられます。
Operation Parameter1でDevicePropCodeを使って指定されたデバイスプロパティのDevicePropDescをデータフェーズでイニシエータに転送します。
Operation Parameter1でDevicePropCodeを使って指定されたデバイスプロパティの現在の値をデータフェーズでイニシエーターに転送します。
Operation Parameter1でDevicePropCodeを使って指定されたデバイスプロパティの現在の値をデータフェーズでイニシエーターからレスポンダーに転送し、新しい値として適用します。
Operation Parameter1でDevicePropCodeを使って指定されたデバイスプロパティ値を工場出荷設定に戻します。Operation Parameter1の値が0xFFFFFFFFのとき、すべてのデバイスプロパティを工場出荷設定に戻します。
IniiateOpenCaptureで開始した撮影シーケンスを終了します。Operation Parameter1にはInitiateOpenCaptureを要求したときのTransactionIDを設定します。
PTPデバイス内のオブジェクトを移動します。Operation Parameter1にはObjectHandleを使って移動したいオブジェクトを指定します。Operation Parameter2には移動先のストレージを示すStorageIDを指定します。Operation Parameter3には移動先の親オブジェクトを示すObjectHndleを指定します。Operation Parameter3が0x00000000のときオブジェクトは指定されたストレージのルートに置かれます。
PTPデバイス内のオブジェクトを別の場所にコピーします。Operation Parameter1にはObjectHandleを使って移動したいオブジェクトを指定します。Operation Parameter2にはコピー先のストレージを示すStorageIDを指定します。Operation Parameter3にはコピー先の親オブジェクトを示すObjectHndleを指定します。Operation Parameter3が0x00000000のときオブジェクトは指定されたストレージのルートにコピーされます。
Operation Parameter1でObjectHandleを使って指定されたオブジェクトをOperation Parameter2で指定されたバイト数だけデータフェーズを使ってレスポンダーからイニシエーターに転送します。最初の実行ではオブジェクトの先頭から取得され、次の実行はまだイニシエーターに転送されていない部分の先頭から転送されます。
このオペレーションはInitiateCaptureと異なり、キャプチャの終了をイニシエーターが(TerminateOpenCaptureによって)制御します。これは、長時間露光撮影や静止画の連続撮影、音声の録音などの仕様を意図したものです。Operation Parameter 1にはキャプチャされたオブジェクトを置くためのストレージのStorageIDを指定します。これが0x00000000の場合、オブジェクトが置かれるストレージはデバイスが決定します。Operation Parameter2にはキャプチャするオブジェクトのフォーマットをObjectFormatCodeで指定します。これが0x00000000の場合、デバイスはデバイスのデフォルトのオブジェクトフォーマットでキャプチャを行います。