diff options
author | Stefan <36883743+s-muenzel@users.noreply.github.com> | 2020-06-04 11:11:32 +0200 |
---|---|---|
committer | Soeren Apel <soeren@apelpie.net> | 2020-07-18 22:59:15 +0200 |
commit | 47ff9910f7e1c6f170a48aedad152ca19ccd4579 (patch) | |
tree | 0f6a736137e6246f2a0dd552ae326b66f94c9cfd /decoders | |
parent | ea0c4cb644431594c11b0ecf9449791f5e65b165 (diff) | |
download | libsigrokdecode-47ff9910f7e1c6f170a48aedad152ca19ccd4579.tar.gz libsigrokdecode-47ff9910f7e1c6f170a48aedad152ca19ccd4579.zip |
rgb_led_ws281x: Support RGBW
Support of the now common RGBW type LED strips (uses 4 bytes instead of 3).
Added an option to select RGB or RGBW
Diffstat (limited to 'decoders')
-rw-r--r-- | decoders/rgb_led_ws281x/pd.py | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/decoders/rgb_led_ws281x/pd.py b/decoders/rgb_led_ws281x/pd.py index bf181b6..43fbce4 100644 --- a/decoders/rgb_led_ws281x/pd.py +++ b/decoders/rgb_led_ws281x/pd.py @@ -45,6 +45,10 @@ class Decoder(srd.Decoder): ('bits', 'Bits', (0, 1)), ('rgb-vals', 'RGB values', (2,)), ) + options = ( + {'id': 'type', 'desc': 'RGB or RGBW', 'default': 'RGB', + 'values': ('RGB', 'RGBW')}, + ) def __init__(self): self.reset() @@ -66,13 +70,22 @@ class Decoder(srd.Decoder): self.samplerate = value def handle_bits(self, samplenum): - if len(self.bits) == 24: - grb = reduce(lambda a, b: (a << 1) | b, self.bits) - rgb = (grb & 0xff0000) >> 8 | (grb & 0x00ff00) << 8 | (grb & 0x0000ff) - self.put(self.ss_packet, samplenum, self.out_ann, - [2, ['#%06x' % rgb]]) - self.bits = [] - self.ss_packet = None + if self.options['type'] == 'RGB': + if len(self.bits) == 24: + grb = reduce(lambda a, b: (a << 1) | b, self.bits) + rgb = (grb & 0xff0000) >> 8 | (grb & 0x00ff00) << 8 | (grb & 0x0000ff) + self.put(self.ss_packet, samplenum, self.out_ann, + [2, ['#%06x' % rgb]]) + self.bits = [] + self.ss_packet = None + else: + if len(self.bits) == 32: + grb = reduce(lambda a, b: (a << 1) | b, self.bits) + rgb = (grb & 0xff0000) >> 8 | (grb & 0x00ff00) << 8 | (grb & 0xff0000ff) + self.put(self.ss_packet, samplenum, self.out_ann, + [2, ['#%08x' % rgb]]) + self.bits = [] + self.ss_packet = None def decode(self): if not self.samplerate: |