X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=decoders%2Fusb_request%2Fpd.py;h=25ee4c5878629f748b5ee9137ff2698ff769e694;hp=1bd287851f5a90a9b230adbf21ef24d3c2a37da8;hb=7c4029417cbdd12fdbfbd2a94107e215c1eaa605;hpb=b677e536891fc19d949217023df622e30531220c diff --git a/decoders/usb_request/pd.py b/decoders/usb_request/pd.py index 1bd2878..25ee4c5 100644 --- a/decoders/usb_request/pd.py +++ b/decoders/usb_request/pd.py @@ -116,10 +116,11 @@ class Decoder(srd.Decoder): id = 'usb_request' name = 'USB request' longname = 'Universal Serial Bus (LS/FS) transaction/request' - desc = 'USB (low-speed and full-speed) transaction/request protocol.' + desc = 'USB (low-speed/full-speed) transaction/request protocol.' license = 'gplv2+' inputs = ['usb_packet'] outputs = ['usb_request'] + tags = ['PC'] annotations = ( ('request-setup-read', 'Setup: Device-to-host'), ('request-setup-write', 'Setup: Host-to-device'), @@ -136,6 +137,9 @@ class Decoder(srd.Decoder): ) def __init__(self): + self.reset() + + def reset(self): self.samplerate = None self.request = {} self.request_id = 0 @@ -168,7 +172,8 @@ class Decoder(srd.Decoder): def metadata(self, key, value): if key == srd.SRD_CONF_SAMPLERATE: self.samplerate = value - self.secs_per_sample = float(1) / float(self.samplerate) + if self.samplerate: + self.secs_per_sample = float(1) / float(self.samplerate) def start(self): self.out_binary = self.register(srd.OUTPUT_BINARY) @@ -206,7 +211,8 @@ class Decoder(srd.Decoder): self.handle_request(request_started, request_end) elif request['type'] in (None, 'BULK OUT') and self.transaction_type == 'OUT': request['type'] = 'BULK OUT' - request['data'] += self.transaction_data + if self.handshake == 'ACK': + request['data'] += self.transaction_data self.handle_request(request_started, request_end) # CONTROL, SETUP stage @@ -226,7 +232,8 @@ class Decoder(srd.Decoder): request['data'] += self.transaction_data elif request['type'] == 'SETUP OUT' and self.transaction_type == 'OUT': - request['data'] += self.transaction_data + if self.handshake == 'ACK': + request['data'] += self.transaction_data if request['wLength'] == len(request['data']): self.handle_request(1, 0) @@ -334,6 +341,8 @@ class Decoder(srd.Decoder): self.es_transaction = es self.transaction_state = 'TOKEN RECEIVED' self.transaction_ep = ep + if ep > 0 and pname == 'IN': + self.transaction_ep = ep + 0x80 self.transaction_addr = addr self.transaction_type = pname # IN OUT SETUP