]> sigrok.org Git - libsigrokdecode.git/commitdiff
sle44xx: support memory read "to end of capacity"
authorGerhard Sittig <redacted>
Sun, 30 Aug 2020 05:20:33 +0000 (07:20 +0200)
committerGerhard Sittig <redacted>
Sun, 30 Aug 2020 05:23:58 +0000 (07:23 +0200)
Assume a maximum memory capacity, currently open coded, could become a
user servicable option when needed. Automatically flush the accumulated
outgoing data when a memory read reaches address 256.

Drop the unconditional START condition check now that it became obsolete.

decoders/sle44xx/pd.py

index 56d2d04599557e7febaea81d488daabe294ff812..9f33207789636b5bbb668df8df5ad1d61ad99321 100644 (file)
@@ -79,6 +79,7 @@ class Decoder(srd.Decoder):
 
     def reset(self):
         self.samplerate = None
+        self.max_addr = 256
         self.bits = []
         self.atr_bytes = []
         self.cmd_bytes = []
@@ -252,6 +253,7 @@ class Decoder(srd.Decoder):
                     'read main memory, addr {addr:02x}',
                     'RD-M @{addr:02x}',
                 ],
+                'len': lambda ctrl, addr, data: self.max_addr - addr,
             },
             0x31: {
                 'fmt': [
@@ -306,6 +308,8 @@ class Decoder(srd.Decoder):
             fmt = [fmt,]
         texts = [f.format(ctrl = ctrl, addr = addr, data = data) for f in fmt]
         length = code.get('len', None)
+        if callable(length):
+            length = length(ctrl, addr, data)
         is_proc = code.get('proc', False)
         return texts, length, is_proc
 
@@ -528,13 +532,6 @@ class Decoder(srd.Decoder):
             # The START/STOP conditions are only applicable outside of
             # "outgoing data" or "internal processing" periods. This is
             # what the data sheet specifies.
-            # TODO There is the decoder's inability to reliably detect
-            # where memory reads are done because they reached the end
-            # of the chip's capacity. Which makes the decoder miss the
-            # next START symbol, and lose synchronization to the BIT
-            # stream (bit counts are off, which breaks the accumulation
-            # of bytes). That's why this decoder unconditionally keeps
-            # detecting the START condition although it should not.
             if not is_outgoing and not is_processing:
                 if self.matched[COND_CMD_START]:
                     self.handle_command(self.samplenum, True)
@@ -542,7 +539,3 @@ class Decoder(srd.Decoder):
                 if self.matched[COND_CMD_STOP]:
                     self.handle_command(self.samplenum, False)
                     continue
-            if True: # HACK See the comment above.
-                if self.matched[COND_CMD_START]:
-                    self.handle_command(self.samplenum, True)
-                    continue