]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/edid/pd.py
avr_isp: Add more parts
[libsigrokdecode.git] / decoders / edid / pd.py
index 91db4b871d5b23dfbe744793f339c99c63204697..73405352fd3a9c8ccdfd34bef42f5286a21e89ca 100644 (file)
 #    - Extensions
 
 import sigrokdecode as srd
+from common.srdhelper import SrdIntEnum
 import os
 
+St = SrdIntEnum.from_str('St', 'OFFSET EXTENSIONS HEADER EDID')
+
 EDID_HEADER = [0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00]
 OFF_VENDOR = 8
 OFF_VERSION = 18
@@ -80,14 +83,15 @@ class Decoder(srd.Decoder):
     desc = 'Data structure describing display device capabilities.'
     license = 'gplv3+'
     inputs = ['i2c']
-    outputs = ['edid']
+    outputs = []
+    tags = ['Display', 'Memory', 'PC']
     annotations = (
-        ('fields', 'EDID structure fields'),
-        ('sections', 'EDID structure sections'),
+        ('field', 'Field'),
+        ('section', 'Section'),
     )
     annotation_rows = (
-        ('sections', 'Sections', (1,)),
         ('fields', 'Fields', (0,)),
+        ('sections', 'Sections', (1,)),
     )
 
     def __init__(self):
@@ -115,22 +119,22 @@ class Decoder(srd.Decoder):
         cmd, data = data
 
         if cmd == 'ADDRESS WRITE' and data == 0x50:
-            self.state = 'offset'
+            self.state = St.OFFSET
             self.ss = ss
             return
 
         if cmd == 'ADDRESS READ' and data == 0x50:
             if self.extension > 0:
-                self.state = 'extensions'
+                self.state = St.EXTENSIONS
                 s = str(self.extension)
                 t = ["Extension: " + s, "X: " + s, s]
             else:
-                self.state = 'header'
+                self.state = St.HEADER
                 t = ["EDID"]
             self.put(ss, es, self.out_ann, [ANN_SECTIONS, t])
             return
 
-        if cmd == 'DATA WRITE' and self.state == 'offset':
+        if cmd == 'DATA WRITE' and self.state == St.OFFSET:
             self.offset = data
             self.extension = self.offset // 128
             self.cnt = self.offset % 128
@@ -162,7 +166,7 @@ class Decoder(srd.Decoder):
             self.sn.append([ss, es])
             self.cache.append(data)
 
-        if self.state is None or self.state == 'header':
+        if self.state is None or self.state == St.HEADER:
             # Wait for the EDID header
             if self.cnt >= OFF_VENDOR:
                 if self.cache[-8:] == EDID_HEADER:
@@ -170,12 +174,12 @@ class Decoder(srd.Decoder):
                     self.sn = self.sn[-8:]
                     self.cache = self.cache[-8:]
                     self.cnt = 8
-                    self.state = 'edid'
+                    self.state = St.EDID
                     self.put(self.sn[0][0], es, self.out_ann,
                             [ANN_SECTIONS, ['Header']])
                     self.put(self.sn[0][0], es, self.out_ann,
                             [ANN_FIELDS, ['Header pattern']])
-        elif self.state == 'edid':
+        elif self.state == St.EDID:
             if self.cnt == OFF_VERSION:
                 self.decode_vid(-10)
                 self.decode_pid(-8)
@@ -223,9 +227,9 @@ class Decoder(srd.Decoder):
                     csstr = 'WRONG!'
                 self.put(ss, es, self.out_ann, [0, ['Checksum: %d (%s)' % (
                          self.cache[self.cnt-1], csstr)]])
-                self.state = 'extensions'
+                self.state = St.EXTENSIONS
 
-        elif self.state == 'extensions':
+        elif self.state == St.EXTENSIONS:
             cache = self.ext_cache[self.extension - 1]
             sn = self.ext_sn[self.extension - 1]
             v = cache[self.cnt - 1]
@@ -267,10 +271,7 @@ class Decoder(srd.Decoder):
 
     def ann_field(self, start, end, annotation):
         annotation = annotation if isinstance(annotation, list) else [annotation]
-        if self.extension:
-            sn = self.ext_sn[self.extension - 1]
-        else:
-            sn = self.sn
+        sn = self.ext_sn[self.extension - 1] if self.extension else self.sn
         self.put(sn[start][0], sn[end][1],
                  self.out_ann, [ANN_FIELDS, annotation])
 
@@ -525,10 +526,7 @@ class Decoder(srd.Decoder):
         self.ann_field(offset+3, offset+3, "Tag: {0:X}".format(tag))
         self.ann_field(offset+4, offset+4, "Flag")
 
-        if self.extension:
-            sn = self.ext_sn[extension - 1]
-        else:
-            sn = self.sn
+        sn = self.ext_sn[self.extension - 1] if self.extension else self.sn
 
         if tag == 0xff:
             # Monitor serial number