diff options
author | Uwe Hermann <uwe@hermann-uwe.de> | 2014-02-19 15:09:22 +0100 |
---|---|---|
committer | Uwe Hermann <uwe@hermann-uwe.de> | 2014-02-19 15:21:01 +0100 |
commit | ae036d3403ad9e301d41a68869ded51a54127bfe (patch) | |
tree | 6d245592ee574e73bbcfc1e99dc9f795a020369e /decoders/rgb_led_spi | |
parent | 83d792a4c201c081070f2fdf638e485c5b8a52a0 (diff) | |
download | libsigrokdecode-ae036d3403ad9e301d41a68869ded51a54127bfe.tar.gz libsigrokdecode-ae036d3403ad9e301d41a68869ded51a54127bfe.zip |
rgb_led: Rename PD to rgb_led_spi.
There are a number of other RGB LED protocols (simple or more advanced
ones, and various ones not based on SPI), so use a more distinguishable
name for this PD.
Diffstat (limited to 'decoders/rgb_led_spi')
-rw-r--r-- | decoders/rgb_led_spi/__init__.py | 27 | ||||
-rw-r--r-- | decoders/rgb_led_spi/pd.py | 72 |
2 files changed, 99 insertions, 0 deletions
diff --git a/decoders/rgb_led_spi/__init__.py b/decoders/rgb_led_spi/__init__.py new file mode 100644 index 0000000..3d41ea5 --- /dev/null +++ b/decoders/rgb_led_spi/__init__.py @@ -0,0 +1,27 @@ +## +## This file is part of the libsigrokdecode project. +## +## Copyright (C) 2014 Matt Ranostay <mranostay@gmail.com> +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## + +''' +This decoder stacks on top of the 'spi' PD and decodes generic RGB LED string +values that are clocked over SPI in RGB values. +''' + +from .pd import * + diff --git a/decoders/rgb_led_spi/pd.py b/decoders/rgb_led_spi/pd.py new file mode 100644 index 0000000..44c1837 --- /dev/null +++ b/decoders/rgb_led_spi/pd.py @@ -0,0 +1,72 @@ +## +## This file is part of the libsigrokdecode project. +## +## Copyright (C) 2014 Matt Ranostay <mranostay@gmail.com> +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## + +import sigrokdecode as srd + +class Decoder(srd.Decoder): + api_version = 1 + id = 'rgb_led_spi' + name = 'RGB LED (SPI mode)' + longname = 'RGB LED string decoder (SPI mode)' + desc = 'Generic RGB LED string protocol (RGB values clocked over SPI).' + license = 'gplv2' + inputs = ['spi'] + outputs = ['rgb_led_spi'] + probes = [] + optional_probes = [] + options = {} + annotations = [ + ['rgb', 'RGB values'], + ] + + def __init__(self, **kwargs): + self.cmd_ss, self.cmd_es = 0, 0 + self.mosi_bytes = [] + + def start(self): + self.out_ann = self.register(srd.OUTPUT_ANN) + + def putx(self, data): + self.put(self.cmd_ss, self.cmd_es, self.out_ann, data) + + def decode(self, ss, es, data): + ptype, mosi, miso = data + + # Only care about data packets. + if ptype != 'DATA': + return + self.ss, self.es = ss, es + + if len(self.mosi_bytes) == 0: + self.cmd_ss = ss + self.mosi_bytes.append(mosi) + + # RGB value == 3 bytes + if len(self.mosi_bytes) != 3: + return + + red, green, blue = self.mosi_bytes + rgb_value = int(red) << 16 + rgb_value |= int(green) << 8 + rgb_value |= int(blue) + + self.cmd_es = es + self.putx([0, ["#%.6x" % rgb_value]]) + self.mosi_bytes = [] |