]> sigrok.org Git - libsigrokdecode.git/commit
rgb_led_ws281x: rework the .decode() main loop, improve robustness
authorGerhard Sittig <redacted>
Sat, 29 Jul 2023 14:53:07 +0000 (16:53 +0200)
committerGerhard Sittig <redacted>
Sat, 29 Jul 2023 19:29:10 +0000 (21:29 +0200)
commit5e8090d7d30fb0915fc1b54f3ec098c69a417745
tree78c907ef7ae9236aacca9f905153977aa215db4e
parent6d1cde1daeea93b36c1c2c09e160e5b8042ef22b
rgb_led_ws281x: rework the .decode() main loop, improve robustness

Concentrate timestamp gathering in the .decode() method, eliminate
instance members by using variables that are local to the method.
Finally use appropriate PD API v3 invocations. Use edge conditions plus
a counted 'skip' to detect the RESET pulse. Use a positive "check the
reset condition" logic, simplify the conditions which support the reset
pulse tracking, and which flush previously accumulated data when "the
bit time doesn't end" (the next edge is missing).

Improve robustness in those cases where captures use low oversampling
and similar length high and low pulses. The fixed (rather arbitrary?)
625us threshold resulted in several false last-bit values after the
API v3 conversion.

Heavily comment on this edge/pulse detection and timestamps logic,
since it's non-trivial and non-obvious. Keep all behaviour backwards
compatible before extending the feature set in future commits.
decoders/rgb_led_ws281x/pd.py