]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/usb/usb.py
srd: Cosmetics.
[libsigrokdecode.git] / decoders / usb / usb.py
index 576855f09bd0bd89a013d8937d626bd44ca54b30..15b42a9ee5360e4b11763d2e27e3522a409f830d 100644 (file)
@@ -24,6 +24,7 @@ import sigrokdecode as srd
 
 # Symbols (used as states of our state machine, too)
 syms = {
+        # (<dp>, <dm>): <state>
         (0, 0): 'SE0',
         (1, 0): 'J',
         (0, 1): 'K',
@@ -65,7 +66,6 @@ def packet_decode(packet):
             dev = bitstr_to_num(data[:7])
             ep = bitstr_to_num(data[7:])
             data = 'DEV %d EP %d' % (dev, ep)
-
     elif pid in ('DATA0', 'DATA1'):
         data = packet[16:-16]
         tmp = ''
@@ -86,8 +86,7 @@ class Decoder(srd.Decoder):
     id = 'usb'
     name = 'USB'
     longname = 'Universal Serial Bus'
-    desc = 'Universal Serial Bus'
-    longdesc = '...longdesc...'
+    desc = 'USB 1.x (full-speed) serial protocol.'
     license = 'gplv2+'
     inputs = ['logic']
     outputs = ['usb']
@@ -98,44 +97,45 @@ class Decoder(srd.Decoder):
     optional_probes = []
     options = {}
     annotations = [
-        ['TODO', 'TODO']
+        ['Text', 'Human-readable text']
     ]
 
     def __init__(self):
-        pass
+        self.sym = 'J'
+        self.samplenum = 0
+        self.scount = 0
+        self.packet = ''
 
     def start(self, metadata):
         self.samplerate = metadata['samplerate']
 
-        # self.out_proto = self.add(srd.OUTPUT_PROTO, 'usb')
-        self.out_ann = self.add(srd.OUTPUT_ANN, 'usb')
-
         if self.samplerate < 48000000:
             raise Exception('Samplerate (%d) not sufficient for USB '
                             'decoding, need at least 48MHz' % self.samplerate)
 
-        # Initialise decoder state.
-        self.sym = 'J'
-        self.scount = 0
-        self.packet = ''
+        # self.out_proto = self.add(srd.OUTPUT_PROTO, 'usb')
+        self.out_ann = self.add(srd.OUTPUT_ANN, 'usb')
 
     def report(self):
         pass
 
     def decode(self, ss, es, data):
-        for (samplenum, (dm, dp)) in data:
+        for (self.samplenum, (dp, dm)) in data:
 
+            # Note: self.samplenum is the absolute sample number, whereas
+            # self.scount only counts the number of samples since the
+            # last change in the D+/D- lines.
             self.scount += 1
 
             sym = syms[dp, dm]
 
-            # ...
+            # Wait for a symbol change (i.e., change in D+/D- lines).
             if sym == self.sym:
                 continue
 
             if self.scount == 1:
-                # We ignore single sample width pulses.
-                # I sometimes get these with the OLS.
+                # We ignore single sample width "pulses", i.e., symbol changes
+                # (D+/D- line changes). I sometimes get these with the OLS.
                 self.sym = sym
                 self.scount = 0
                 continue