イベントはPTPデバイスからイニシエータにデバイスの状態の変化などのイベントの通知等に用いられます。イベントはイニシエーターから送られることも、レスポンダーから送られることもあります。PTP仕様ではイベントの機能を必須で要求しています。
PTPイベントはイベントコードによって識別されます。
CODE | イベント名 | 説明 |
---|---|---|
0x4001 | CancelTransaction | 実行中のトランザクションをキャンセル |
0x4002 | ObjectAdded | 新しいオブジェクトの追加 |
0x4003 | ObjectRemoved | 予期しないオブジェクトの削除 |
0x4004 | StoreAdded | 新しいストアの追加 |
0x4005 | StoreRemoved | ストアの削除 |
0x4006 | DevicePropChanged | 予期しないデバイスプロパティの変更 |
0x4007 | ObjectInfoChanged | ObjectInfoの変更 |
0x4008 | DeviceInfoChanged | DeviceInfoの変更 |
0x4009 | RequestObjectTransfer | オブジェクトの転送要求 |
0x400A | StoreFull | ストアのフル状態 |
0x400B | DeviceReset | リセット予告 |
0x400C | StorageInfoChanged | StorageInfoの変更 |
0x400D | CaptureComplete | IniticateCaptureによるキャプチャシーケンスの完了 |
0x400E | UnreportedStatus | 内部状態の変化 |
このイベントは明確なキャンセル方法を持たない転送のためのトランザクションをキャンセルするために用いられます。イニシエーターやレスポンダーはこのイベントを受信したとき、EventデータセットのTransactionIDで示されるトランザクションをキャンセルしなければなりません。
新しいオブジェクトが追加されるとObjectAddedイベントが送られます。複数のオブジェクトが追加されたとき、それぞれのオブジェクトごとにObjectAddedイベントが発生します。新しいストアが追加されたときに、そのストアにあるオブジェクトのためにObjectAddedイベントは発生しません。この場合は代わりにStoreAddedイベントが発生します。
現在のセッションの外部で予期せずオブジェクトが削除されたことを通知するイベントです(DeleteObjectの結果として発生するイベントではありません)。削除されたオブジェクトはEvent Parameter1でObjectHandleを使って示されます。
デバイスに新しいストアが追加されたことを通知するイベントです。追加された物理ストアが論理ストアを1つだけ持つ場合、Event Parameter1にそのストアのStorageIDが示されます。追加されたストアが複数の論理ストアを持つ場合、Event Parameter1の値は0x00000000になります。この場合、GetStorageIDsを使わなければ追加されたストアを特定することはできません。
Event Parameter 1でStorageIDを使って示すストアが削除されたことを通知するイベントです。削除されたのが論理ストアのみであればEvent Parameter1には完全なStorageIDが示されます。物理ストア上の全ての論理ストアが削除された場合(リムーバブルメディアのイジェクト等の原因によって)、上位16ビットで物理StorageIDが示され、下位16ビットは0xFFFFにマスクされます。
このセッションの外部からデバイスプロパティが変更されたことを示すイベントです。変更のあったデバイスプロパティはEvent Parameter1にDevicePropCodeを使って示されます。
ObjectInfoが変更されたことを通知するイベントです。ObjectInfoの変更のあったオブジェクトはEvent Parameter1でObjectHandleを使って示されます。イニシエーターは以前のObjectInfoを破棄して、GetObjectInfoを使ってて新しいObjectInfoを取得する必要があります。
デバイスのケイパビリティが変化してイニシエータはDeviceInfoを再度取得する必要があることを通知します。
このイベントはレスポンダーがイニシエーターにEvent Parameter1でObjectHandleを使って示すオブジェクトの転送を要求するために用いられます。
ストアがフルになったことを通知するイベントです。Event Parameter1でStorageIDを使ってフルになったストアが示されます。
このイベントはデバイスが多重セッションやリセットの機能を持つ場合に限り必要とされ、リセットによってセッションが閉じられることをセッションに通知します。
Event Parameter1でStorageIDを使って示されるストアのStorageInfoが変更されたことを通知します。
このイベントは直前に実行したInitiateCaptureによって作られます。このイベントが発生すると、それ以降、そのInitiateCaptureによってObjectAddedイベントは発生しません。
このイベントは特定の転送でレスポンダーが内部状態の変化をイニシエーターに通知できないような状況が起こるときに使うことができます。イニシエーターはこのイベントを受信したらレスポンダに関する情報をアップデートする必要があります。
イベントのために専用の論理コネクションを用意できない場合、In-Band転送のためにデータストリーム中にイベントをインターリーブする仕組みを実装する必要があります。
イベントの転送のために専用の論理コネクションを用意できる場合、転送中の転送処理の取り消しを想定して巨大なオブジェクトの転送を細切れに行う必要はなくなります。USBへの実装では、割り込みエンドポイントを利用します。