summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerhard Sittig <gerhard.sittig@gmx.net>2017-06-18 12:24:32 +0200
committerUwe Hermann <uwe@hermann-uwe.de>2017-06-21 17:45:15 +0200
commita912e8cbb6ab4a56bee71a9c0fd0045d5fdee55c (patch)
tree6eeed19be07104b15a2a7d9d7565b520be08bd03
parent6120ff64d4096bcb32c8a42f06ff77d75a5326c2 (diff)
downloadlibsigrokdecode-a912e8cbb6ab4a56bee71a9c0fd0045d5fdee55c.tar.gz
libsigrokdecode-a912e8cbb6ab4a56bee71a9c0fd0045d5fdee55c.zip
lpc: Improve robustness when decoding unexpected input data
The 'fields' table of state and descriptions is not fully populated, some slots are missing. Cope with lookup misses when unexpected input data is not found in the table. Use different error text in annotations for described but invalid states (the previous implementation used "reserved / invalid"), and for states that are not described in the table (introduce the "reserved / unknown" text for conditions that are not covered by the decoder implementation). The previous implementation missed the emission of some warnings. When a "reserved / invalid" description was found, the subsequent exact match for "reserved" failed and the warning was not emitted. Weaken the test to emit warnings for either description that has "reserved" in it, regardless of whether the text was found in the table or is not part of the table at all.
-rw-r--r--decoders/lpc/pd.py8
1 files changed, 4 insertions, 4 deletions
diff --git a/decoders/lpc/pd.py b/decoders/lpc/pd.py
index 08d0437..c737544 100644
--- a/decoders/lpc/pd.py
+++ b/decoders/lpc/pd.py
@@ -182,10 +182,10 @@ class Decoder(srd.Decoder):
def handle_get_ct_dr(self, lad, lad_bits):
# LAD[3:0]: Cycle type / direction field (1 clock cycle).
- self.cycle_type = fields['CT_DR'][lad]
+ self.cycle_type = fields['CT_DR'].get(lad, 'Reserved / unknown')
# TODO: Warning/error on invalid cycle types.
- if self.cycle_type == 'Reserved':
+ if 'Reserved' in self.cycle_type:
self.putb([0, ['Invalid cycle type (%s)' % lad_bits]])
self.es_block = self.samplenum
@@ -251,10 +251,10 @@ class Decoder(srd.Decoder):
# LAD[3:0]: SYNC field (1-n clock cycles).
self.sync_val = lad_bits
- self.cycle_type = fields['SYNC'][lad]
+ self.cycle_type = fields['SYNC'].get(lad, 'Reserved / unknown')
# TODO: Warnings if reserved value are seen?
- if self.cycle_type == 'Reserved':
+ if 'Reserved' in self.cycle_type:
self.putb([0, ['SYNC, cycle %d: %s (reserved value)' % \
(self.synccount, self.sync_val)]])