]> sigrok.org Git - libsigrokdecode.git/commitdiff
usb_power_delivery: Handle extended message type in PD 3.0
authorFlorian Larysch <redacted>
Sun, 22 Mar 2020 21:11:15 +0000 (22:11 +0100)
committerSoeren Apel <redacted>
Tue, 1 Oct 2024 15:04:37 +0000 (17:04 +0200)
The Message Type field of USB PD 3.0 messages has been extended from 4
to 5 bits[1]. While the protocol decoder already knows about the newly
defined message types (such as Get_Source_Cap_Extended), it does not
handle them correctly, because only the lower 4 bits of the header are
masked off (resulting, for example, in GoodCRC being detected, instead
of Get_Source_Cap_Extended).

Fix this by increasing the size of the Message Type field depending on
the value of the Specification Revision field.

[1] See Tables 6-1 of the USB Power Delivery Specification Revision 2.0
and Revision 3.0, respectively.

decoders/usb_power_delivery/pd.py

index 87ed55464e9c90ac781ce904b3ba58360e4f900b..3788924a546d05013e10e8d89b3f364e95904630 100644 (file)
@@ -418,7 +418,10 @@ class Decoder(srd.Decoder):
         return ((self.head >> 6) & 3) + 1
 
     def head_type(self):
-        return self.head & 0xF
+        if self.head_rev() == 3:
+            return self.head & 0x1F
+        else:
+            return self.head & 0xF
 
     def head_count(self):
         return (self.head >> 12) & 7