]> sigrok.org Git - libsigrokdecode.git/commitdiff
sle44xx: optionally use samplerate to show processing durations
authorGerhard Sittig <redacted>
Tue, 28 Jul 2020 15:37:11 +0000 (17:37 +0200)
committerGerhard Sittig <redacted>
Sun, 30 Aug 2020 05:23:58 +0000 (07:23 +0200)
The protocol is clocked, so strictly does not depend on the samplerate.
When the samplerate is available, the duration of internal processing
(memory erase and write) can get annotated. It's an optional feature.

The datasheet suggests that write and erase time are in the range of a
few milliseconds. Normalize to ms units and provide 10us resolution.

decoders/sle44xx/pd.py

index 559bbc8ab0614c01efd9d9edf8f428731c4f53fc..56d2d04599557e7febaea81d488daabe294ff812 100644 (file)
@@ -78,6 +78,7 @@ class Decoder(srd.Decoder):
         self.reset()
 
     def reset(self):
         self.reset()
 
     def reset(self):
+        self.samplerate = None
         self.bits = []
         self.atr_bytes = []
         self.cmd_bytes = []
         self.bits = []
         self.atr_bytes = []
         self.cmd_bytes = []
@@ -101,6 +102,13 @@ class Decoder(srd.Decoder):
     def putb(self, ss, es, cls , data):
         self.put(ss, es, self.out_binary, [cls, data,])
 
     def putb(self, ss, es, cls , data):
         self.put(ss, es, self.out_binary, [cls, data,])
 
+    def snums_to_usecs(self, snum_count):
+        if not self.samplerate:
+            return None
+        snums_per_usec = self.samplerate / 1e6
+        usecs = snum_count / snums_per_usec
+        return usecs
+
     def lookup_proto_ann_txt(self, key, variables):
         ann = {
             'RESET_SYM': [Ann.RESET_SYM, 'Reset', 'R',],
     def lookup_proto_ann_txt(self, key, variables):
         ann = {
             'RESET_SYM': [Ann.RESET_SYM, 'Reset', 'R',],
@@ -200,6 +208,10 @@ class Decoder(srd.Decoder):
             clk = self.proc_state['clk']
             high = self.proc_state['io1']
             text = '{clk} clocks, I/O {high}'.format(clk = clk, high = int(high))
             clk = self.proc_state['clk']
             high = self.proc_state['io1']
             text = '{clk} clocks, I/O {high}'.format(clk = clk, high = int(high))
+            usecs = self.snums_to_usecs(es - ss)
+            if usecs:
+                msecs = usecs / 1000
+                text = '{msecs:.2f} ms, {text}'.format(msecs = msecs, text = text)
             cls, texts = self.lookup_proto_ann_txt(key, {'data': text})
             self.putx(ss, es, cls, texts)
 
             cls, texts = self.lookup_proto_ann_txt(key, {'data': text})
             self.putx(ss, es, cls, texts)