X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=decoders%2Fsrd_usb.py;h=2db0158640406aeb5073f7c86d041d3602e7e6ee;hp=128b337e50b83ee8c724ce5e3c9daa4ae0b0eeb5;hb=bc5f5a434e148db1843be7b02b95a35d21237702;hpb=9611dc5f8b88f0dc43fbb00a91d1222ee720d2b6 diff --git a/decoders/srd_usb.py b/decoders/srd_usb.py index 128b337..2db0158 100644 --- a/decoders/srd_usb.py +++ b/decoders/srd_usb.py @@ -46,7 +46,7 @@ class Sample(): def __init__(self, data): self.data = data def probe(self, probe): - s = ord(self.data[probe / 8]) & (1 << (probe % 8)) + s = self.data[int(probe / 8)] & (1 << (probe % 8)) return True if s else False def sampleiter(data, unitsize): @@ -110,7 +110,8 @@ def packet_decode(packet): return pid + ' ' + data -class Decoder(): +class Decoder(sigrok.Decoder): + id = 'usb' name = 'USB' desc = 'Universal Serial Bus' longname = '...longname...' @@ -126,10 +127,14 @@ class Decoder(): def __init__(self): self.probes = Decoder.probes.copy() + self.output_protocol = None + self.output_annotation = None def start(self, metadata): self.unitsize = metadata['unitsize'] self.rate = metadata['samplerate'] + # self.output_protocol = self.output_new(2) + self.output_annotation = self.output_new(1) if self.rate < 48000000: raise Exception("Sample rate not sufficient for USB decoding") # Initialise decoder state. @@ -137,8 +142,10 @@ class Decoder(): self.scount = 0 self.packet = '' - def decode(self, data): - for sample in sampleiter(data['data'], self.unitsize): + def decode(self, timeoffset, duration, data): + out = [] + + for sample in sampleiter(data, self.unitsize): self.scount += 1 @@ -156,18 +163,18 @@ class Decoder(): # How many bits since the last transition? if self.packet or self.sym != J: - bitcount = (self.scount - 1) * 12000000 / self.rate + bitcount = int((self.scount - 1) * 12000000 / self.rate) else: bitcount = 0 if self.sym == SE0: if bitcount == 1: # End-Of-Packet (EOP) - sigrok.put({"type":"usb", "data":self.packet, - "display":packet_decode(self.packet)}) + out += [{"type":"usb", "data":self.packet, + "display":packet_decode(self.packet)}] else: # Longer than EOP, assume reset. - sigrok.put({"type":"usb", "display":"RESET"}) + out += [{"type":"usb", "display":"RESET"}] self.scount = 0 self.sym = sym self.packet = '' @@ -179,8 +186,12 @@ class Decoder(): if bitcount < 6 and sym != SE0: self.packet += '0' elif bitcount > 6: - sigrok.put({"type":"usb", "display":"BIT STUFF ERROR"}) + out += [{"type":"usb", "display":"BIT STUFF ERROR"}] self.scount = 0 self.sym = sym + if out != []: + # self.put(self.output_protocol, 0, 0, out_proto) + self.put(self.output_annotation, 0, 0, out) +