USB PD Revision 3.0のドキュメントがひっそりと修正されていたらしいです。 ※エンドユーザーには関係のない話です。
Nathan K. (@USBCGuy) 氏のツイートによると、USB PD Specification Revision 3.0, Version 1.2 (20181203) の内容は、USB PD Specification Revision 3.0, Version 1.2 (20181005) から一部がサイレント修正されているようです。
Correction notice:
There was a flawed publication of the PD3.0 v1.2 spec (until 2018-10-05). Day after my report (2018-12-03), the spec was silently edited.https://t.co/472dRa6qHo
Many products coded w/ the bad spec. I STRONGLY suggest “quirks” doc acknowledging this hiccup. pic.twitter.com/YLm04Ti33C
— Nathan K. (@USBCGuy) 2019年2月19日
修正前の状態では仕様内で整合性が取れておらず、双方が仕様通りの動作をしても以下のような状況が発生する可能性がありました。 (可能性があったというか実際に発生しているわけですが)
このパケットログでは、SinkがGet_Battery_Statusメッセージに応答しないため、Sourceが無限にGet_Battery_Statusメッセージを送り続けています。20181005ではSinkはGet_Battery_Statusメッセージに対してI (Ignore) と定められているため、SinkがGet_Battery_Statusメッセージに応答していないのは仕様に沿った動作ということになります。
本来であれば、SinkがNot_Supportメッセージなり何なりを応答すればこういったことにはならなかったはずですが、そもそも仕様のドキュメントが間違っていたことが原因なので、Sink側の機器を悪いと責めることはできません。
話が逸れましたが、「スマートフォンやPCなどの開発に携わっている方がもしこの記事をご覧になっていたら、USB PD 3.0のドキュメントがサイレント修正されているのでご注意ください」という話でした。終わり。