]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/ps2/pd.py
ps2: end data byte at rising clock edge of the stop bit
[libsigrokdecode.git] / decoders / ps2 / pd.py
index c5c9406d9f9c27ed1d85afcd2020146444f47965..a9d0a986daf0356b265c61f7e1fd6a24a09cfdd2 100644 (file)
@@ -33,8 +33,8 @@ class Decoder(srd.Decoder):
     desc = 'PS/2 keyboard/mouse interface.'
     license = 'gplv2+'
     inputs = ['logic']
-    outputs = ['ps2']
-    tags = ['Logic', 'Bus']
+    outputs = []
+    tags = ['PC']
     channels = (
         {'id': 'clk', 'name': 'Clock', 'desc': 'Clock line'},
         {'id': 'data', 'name': 'Data', 'desc': 'Data line'},
@@ -58,7 +58,6 @@ class Decoder(srd.Decoder):
 
     def reset(self):
         self.bits = []
-        self.samplenum = 0
         self.bitcount = 0
 
     def start(self):
@@ -117,6 +116,11 @@ class Decoder(srd.Decoder):
 
     def decode(self):
         while True:
-            # Sample data bits on falling clock edge.
-            clock_pin, data_pin = self.wait({0: 'f'})
+            # Sample data bits on the falling clock edge (assume the device
+            # is the transmitter). Expect the data byte transmission to end
+            # at the rising clock edge. Cope with the absence of host activity.
+            _, data_pin = self.wait({0: 'f'})
             self.handle_bits(data_pin)
+            if self.bitcount == 1 + 8 + 1 + 1:
+                _, data_pin = self.wait({0: 'r'})
+                self.handle_bits(data_pin)