lpc: improve performance, use proper .wait() condition Use a proper .wait() condition to have edges detected in common code, and avoid the many transitions between C and Python. This dramatically increases performance of the LPC protocol decoder. [ gsi: rephrased and reflowed the commit message ]
all decoders: introduce a reset() method Move initialization code of protocol decoders from the constructor to a new reset() helper method. The libsigrokdecode backend could run this method several times to clear the decoder's internal state, before new data from another acquisition gets fed to decode() calls.
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.
decoders: Rephrase condition-less .wait() calls (self documentation) Telling .wait() to "skip one sample" slightly obfuscates the intent of getting the next samples while no condition applies. Explicitly pass no condition arguments instead, to better reflect the purpose. Coincidently these .wait() calls will execute in slightly less expensive code paths in the common code.