]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/rtc8564/pd.py
rtc8564: Define annotation rows.
[libsigrokdecode.git] / decoders / rtc8564 / pd.py
index a2d8a1a2e601b29baf2c7c0581295f4a3117f5a5..3c8404af78e5513049ef7034e603a5338a9c224b 100644 (file)
@@ -1,5 +1,5 @@
 ##
-## This file is part of the sigrok project.
+## This file is part of the libsigrokdecode project.
 ##
 ## Copyright (C) 2012 Uwe Hermann <uwe@hermann-uwe.de>
 ##
@@ -18,8 +18,6 @@
 ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 ##
 
-# Epson RTC-8564 JE/NB protocol decoder
-
 import sigrokdecode as srd
 
 # Return the specified BCD number (max. 8 bits) as integer.
@@ -37,14 +35,30 @@ class Decoder(srd.Decoder):
     outputs = ['rtc8564']
     probes = []
     optional_probes = [
-        {'id': 'clkout', 'name': 'CLKOUT', 'desc': 'TODO.'},
-        {'id': 'clkoe', 'name': 'CLKOE', 'desc': 'TODO.'},
-        {'id': 'int', 'name': 'INT#', 'desc': 'TODO.'},
+        {'id': 'clkout', 'name': 'CLKOUT', 'desc': 'Clock output'},
+        {'id': 'clkoe', 'name': 'CLKOE', 'desc': 'Clock output enable'},
+        {'id': 'int', 'name': 'INT#', 'desc': 'Interrupt'},
     ]
     options = {}
     annotations = [
-        ['Text', 'Human-readable text'],
+        ['reg-0x00', 'Register 0x00'],
+        ['reg-0x01', 'Register 0x01'],
+        ['reg-0x02', 'Register 0x02'],
+        ['reg-0x03', 'Register 0x03'],
+        ['reg-0x04', 'Register 0x04'],
+        ['reg-0x05', 'Register 0x05'],
+        ['reg-0x06', 'Register 0x06'],
+        ['reg-0x07', 'Register 0x07'],
+        ['reg-0x08', 'Register 0x08'],
+        ['read', 'Read date/time'],
+        ['write', 'Write date/time'],
+        ['bits', 'Bits'],
     ]
+    annotation_rows = (
+        ('bits', 'Bits', (11,)),
+        ('regs', 'Registers', tuple(range(0, 8 + 1))),
+        ('date-time', 'Date/time', (9, 10)),
+    )
 
     def __init__(self, **kwargs):
         self.state = 'IDLE'
@@ -55,12 +69,9 @@ class Decoder(srd.Decoder):
         self.months = -1
         self.years = -1
 
-    def start(self, metadata):
-        # self.out_proto = self.add(srd.OUTPUT_PROTO, 'rtc8564')
-        self.out_ann = self.add(srd.OUTPUT_ANN, 'rtc8564')
-
-    def report(self):
-        pass
+    def start(self):
+        # self.out_python = self.register(srd.OUTPUT_PYTHON)
+        self.out_ann = self.register(srd.OUTPUT_ANN)
 
     def putx(self, data):
         self.put(self.ss, self.es, self.out_ann, data)
@@ -91,25 +102,25 @@ class Decoder(srd.Decoder):
         ann += 'TIE = %d: INT# pin output %s when a fixed-cycle interrupt '\
                'event occurs\n' % (tie, s)
 
-        self.putx([0, [ann]])
+        self.putx([1, [ann]])
 
     def handle_reg_0x02(self, b): # Seconds / Voltage-low flag
         self.seconds = bcd2int(b & 0x7f)
-        self.putx([0, ['Seconds: %d' % self.seconds]])
+        self.putx([2, ['Seconds: %d' % self.seconds]])
         vl = 1 if (b & (1 << 7)) else 0
-        self.putx([0, ['Voltage low (VL) bit: %d' % vl]])
+        self.putx([11, ['Voltage low (VL) bit: %d' % vl]])
 
     def handle_reg_0x03(self, b): # Minutes
         self.minutes = bcd2int(b & 0x7f)
-        self.putx([0, ['Minutes: %d' % self.minutes]])
+        self.putx([3, ['Minutes: %d' % self.minutes]])
 
     def handle_reg_0x04(self, b): # Hours
         self.hours = bcd2int(b & 0x3f)
-        self.putx([0, ['Hours: %d' % self.hours]])
+        self.putx([4, ['Hours: %d' % self.hours]])
 
     def handle_reg_0x05(self, b): # Days
         self.days = bcd2int(b & 0x3f)
-        self.putx([0, ['Days: %d' % self.days]])
+        self.putx([5, ['Days: %d' % self.days]])
 
     def handle_reg_0x06(self, b): # Day counter
         pass
@@ -117,11 +128,11 @@ class Decoder(srd.Decoder):
     def handle_reg_0x07(self, b): # Months / century
         # TODO: Handle century bit.
         self.months = bcd2int(b & 0x1f)
-        self.putx([0, ['Months: %d' % self.months]])
+        self.putx([7, ['Months: %d' % self.months]])
 
     def handle_reg_0x08(self, b): # Years
         self.years = bcd2int(b & 0xff)
-        self.putx([0, ['Years: %d' % self.years]])
+        self.putx([8, ['Years: %d' % self.years]])
 
     def handle_reg_0x09(self, b): # Alarm, minute
         pass
@@ -147,12 +158,12 @@ class Decoder(srd.Decoder):
     def decode(self, ss, es, data):
         cmd, databyte = data
 
-        # Store the start/end samples of this I2C packet.
+        # Store the start/end samples of this I²C packet.
         self.ss, self.es = ss, es
 
         # State machine.
         if self.state == 'IDLE':
-            # Wait for an I2C START condition.
+            # Wait for an I²C START condition.
             if cmd != 'START':
                 return
             self.state = 'GET SLAVE ADDR'
@@ -185,7 +196,7 @@ class Decoder(srd.Decoder):
                 d = '%02d.%02d.%02d %02d:%02d:%02d' % (self.days, self.months,
                     self.years, self.hours, self.minutes, self.seconds)
                 self.put(self.block_start_sample, es, self.out_ann,
-                         [0, ['Written date/time: %s' % d]])
+                         [9, ['Write date/time: %s' % d]])
                 self.state = 'IDLE'
             else:
                 pass # TODO
@@ -207,7 +218,7 @@ class Decoder(srd.Decoder):
                 d = '%02d.%02d.%02d %02d:%02d:%02d' % (self.days, self.months,
                     self.years, self.hours, self.minutes, self.seconds)
                 self.put(self.block_start_sample, es, self.out_ann,
-                         [0, ['Read date/time: %s' % d]])
+                         [10, ['Read date/time: %s' % d]])
                 self.state = 'IDLE'
             else:
                 pass # TODO?