X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=decoders%2Frgb_led_ws281x%2Fpd.py;h=bf181b6614143b308729ee0c043ffbf1f5b6a699;hb=487b3d847da9a3a4d60366413447332d74f8ab6d;hp=0cb6603fb81dd7eaa9b20969387784b95c2f5aef;hpb=ee60935a5f599414f5378b825ade17d697c216be;p=libsigrokdecode.git diff --git a/decoders/rgb_led_ws281x/pd.py b/decoders/rgb_led_ws281x/pd.py index 0cb6603..bf181b6 100644 --- a/decoders/rgb_led_ws281x/pd.py +++ b/decoders/rgb_led_ws281x/pd.py @@ -24,14 +24,15 @@ class SamplerateError(Exception): pass class Decoder(srd.Decoder): - api_version = 2 + api_version = 3 id = 'rgb_led_ws281x' name = 'RGB LED (WS281x)' longname = 'RGB LED string decoder (WS281x)' desc = 'RGB LED string protocol (WS281x).' license = 'gplv3+' inputs = ['logic'] - outputs = ['rgb_led_ws281x'] + outputs = [] + tags = ['Display', 'IC'] channels = ( {'id': 'din', 'name': 'DIN', 'desc': 'DIN data line'}, ) @@ -41,11 +42,14 @@ class Decoder(srd.Decoder): ('rgb', 'RGB'), ) annotation_rows = ( - ('bit', 'Bits', (0, 1)), - ('rgb', 'RGB', (2,)), + ('bits', 'Bits', (0, 1)), + ('rgb-vals', 'RGB values', (2,)), ) def __init__(self): + self.reset() + + def reset(self): self.samplerate = None self.oldpin = None self.ss_packet = None @@ -70,11 +74,14 @@ class Decoder(srd.Decoder): self.bits = [] self.ss_packet = None - def decode(self, ss, es, data): + def decode(self): if not self.samplerate: raise SamplerateError('Cannot decode without samplerate.') - for (self.samplenum, (pin, )) in data: + while True: + # TODO: Come up with more appropriate self.wait() conditions. + (pin,) = self.wait() + if self.oldpin is None: self.oldpin = pin continue @@ -82,6 +89,7 @@ class Decoder(srd.Decoder): # Check RESET condition (manufacturer recommends 50 usec minimal, # but real minimum is ~10 usec). if not self.inreset and not pin and self.es is not None and \ + self.ss is not None and \ (self.samplenum - self.es) / self.samplerate > 50e-6: # Decode last bit value.