このACK TPに対するレスポンスはPhoto01の様にまとめられる。基本的には珍しいものはなく、ごく普通の対応である。ただし見ての通り、エラー発生時にはそれぞれ対応する処理を行う必要がある関係で、次から説明するPacketがそれぞれ用意されることになる。
NRDY(Not Ready) TP(Photo02)
これはDevice→Hostでのみ使われるTPである。DeviceがOUT Endpointの場合、Data Packetを受け取るためのバッファが満杯の場合に、IN Endpointは逆に、ACK TPの返答としてData Packetを送り出す準備が整っていない場合にこれを送信する。フィールドのSubTypeにはNRDYが、Direction/Endpoint Number/Stream IDなどは直前に届いたACK TPと同じものが入る。
ERDY(Endpoint Ready) TP(Photo03)
これはDevice→Hostに対して、Device側が送信または受信の準備が整った事を通知するTPである。一見ACK TPと同じ機能であるが、フィールドを比較するとRetry/Host Error/Seq Numberなどのフィールドが無い(ACK TPはHost→DeviceのPacketだから、Device→HostのERDY TPがこれを持たないのはある意味当然ではある)ほか、Number of Packetsの意味合いがやや異なる。DeviceがOUT Endpointの場合、その意味合いはACK TPと同じである。問題はIN Endpointの場合で、この場合はHostがTransactionを再開した場合にどれだけのデータパケットを受け取れるか、を示す形になる。要するにTransactionの再開にあたって、Device側が準備出来ている事を示すために使われるものだ。
Status TP(Photo04)
これはHost→Deviceのみで使われるTPである。これはControl Endpointに対して、これからControl TransferのStatus stageを開始することを通知するTPである。ここまでちょっと説明してこなかったが、全てのEndpointはControl Endpointと呼ばれる機能を持っている(もっと正確に書けば、Control Endpoint単独で成立するものもあれば、Bulk Endpointとペアになっているものもあると言うべきであろう)。で、このStatus TPはControl Endpointに対するTPという形になる。フィールドの内容は概ねACK TPと同じであるが、ERDY同様Retry/Host Error/Seq Numberなどのフィールドは無い。
Stall TP(Photo05)
これはDevice→Hostのみで使われるTPとなる。これは、
・EndpointがHalt状態にある
・Control Transferが不正状態になった
事をHostに通知するために利用される。フィールドの内容はStatus TP同様である。
Device Notification(Photo06)
これはDevice→Hostでのみ使われるもので、DeviceあるいはInterfaceの状態がHostからのリクエストとは非同期に変化した場合に、それを通知するものとなる。例えばDeviceが独自の待機状態に入ったとか、逆に待機状態から抜けたといったケースである。といっても、基本的にはこのTPでは電源状態の変化の通知を行うのが主であり、Device Specificな情報を送ることは考慮していない。
フィールドを見ると、SubTypeにはDEV_NOTICICATIONが入り、続くNotification Typeは、
・FUNCTION_WAKE
・LATENCY_TORELANCE_MESSAGE
・BUS_INTERVAL_ADJUSTMENT_MESSAGE
の3種類のみが用意される。続くNotification Type Specificのフィールドであるが、これはNotification Typeによって当然異なる。FUNCTION_WAKEの場合、Photo07の様にごくシンプルである。要するにWakeupしたわけだから、それを通知すれば済む。
(続く)