]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/i2s/i2s.py
srd/i2s: Added sample-rate and bit-depth to report
[libsigrokdecode.git] / decoders / i2s / i2s.py
index 30497b3190d0e02f26ba906a713729019e4cd439..d627ebb6867e85b3e5820383e02b206b0b2614de 100644 (file)
@@ -50,15 +50,29 @@ class Decoder(srd.Decoder):
         self.bitcount = 0
         self.data = 0
         self.samplesreceived = 0
+        self.first_sample = None
         self.start_sample = None
         self.samplenum = -1
+        self.wordlength = -1
 
     def start(self, metadata):
+        self.samplerate = metadata['samplerate']
         self.out_proto = self.add(srd.OUTPUT_PROTO, 'i2s')
         self.out_ann = self.add(srd.OUTPUT_ANN, 'i2s')
 
     def report(self):
-        return 'I2S: %d samples received' % self.samplesreceived
+
+        # Calculate the sample rate
+        samplerate = '?'
+        if self.start_sample != None and \
+            self.first_sample != None and \
+            self.start_sample > self.first_sample:
+            samplerate = "%d" % (self.samplesreceived *
+                self.samplerate / (self.start_sample -
+                self.first_sample))
+
+        return 'I2S: %d %d-bit samples received at %sHz' % \
+            (self.samplesreceived, self.wordlength, samplerate)
 
     def decode(self, ss, es, data):
         for samplenum, (sck, ws, sd) in data:
@@ -84,13 +98,26 @@ class Decoder(srd.Decoder):
                 self.put(self.start_sample, self.samplenum, self.out_proto,
                     ['data', self.data])
                 self.put(self.start_sample, self.samplenum, self.out_ann,
-                    [ANN_HEX, ['%s %d-bits: 0x%08x' % ('L' if self.oldws else 'R',
-                    self.bitcount, self.data)]])
+                    [ANN_HEX, ['%s: 0x%08x' % ('L' if self.oldws else 'R',
+                   self.data)]])
+
+                # Check that the data word was the correct length
+                if self.wordlength != -1 and self.wordlength != self.bitcount:
+                    self.put(self.start_sample, self.samplenum, self.out_ann,
+                        [ANN_HEX, ['WARNING: Received a %d-bit word, when a '
+                        '%d-bit word was expected' % (self.bitcount,
+                        self.wordlength)]])
+
+                self.wordlength = self.bitcount
 
             # Reset decoder state.
             self.data = 0
             self.bitcount = 0
             self.start_sample = self.samplenum
-                
+
+            # Save the first sample position
+            if self.first_sample == None:
+                self.first_sample = self.samplenum
+
             self.oldws = ws
             
\ No newline at end of file