]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/seven_segment/pd.py
seven_segment: document segment layout for awareness during maintenance
[libsigrokdecode.git] / decoders / seven_segment / pd.py
index 87714bbcd81483df06817f9aa374c0b31d2bd293..5708fd500e46314e6505f6aa5cf0758e463220e2 100644 (file)
@@ -22,8 +22,27 @@ import sigrokdecode as srd
 class ChannelError(Exception):
     pass
 
+# This table is sorted by ASCII code numbers, with the exception
+# of letters having their upper/lower case ignored.
+#
+# Traditional LED segment names and layout:
+#
+#      A
+#    F   B
+#      G
+#    E   C
+#      D
+#
+#    A  B  C  D  E  F  G
 digits = {
     (0, 0, 0, 0, 0, 0, 0): ' ',
+    (0, 1, 0, 0, 0, 1, 0): '"',
+    (1, 1, 0, 1, 1, 1, 1): "&",
+    (0, 0, 0, 0, 0, 1, 0): "'",
+    (0, 1, 0, 0, 0, 0, 0): "'",
+    (0, 0, 1, 1, 0, 0, 0): ',',
+    (0, 0, 0, 0, 0, 0, 1): '-',
+    (0, 0, 0, 0, 1, 0, 0): '.',
     (1, 1, 1, 1, 1, 1, 0): '0',
     (0, 1, 1, 0, 0, 0, 0): '1',
     (1, 1, 0, 1, 1, 0, 1): '2',
@@ -31,15 +50,53 @@ digits = {
     (0, 1, 1, 0, 0, 1, 1): '4',
     (1, 0, 1, 1, 0, 1, 1): '5',
     (1, 0, 1, 1, 1, 1, 1): '6',
+    (1, 1, 1, 0, 0, 1, 0): '7',
     (1, 1, 1, 0, 0, 0, 0): '7',
     (1, 1, 1, 1, 1, 1, 1): '8',
     (1, 1, 1, 1, 0, 1, 1): '9',
+    (1, 0, 0, 0, 0, 0, 1): '=',
+    (0, 0, 0, 1, 0, 0, 1): '=',
+    (1, 1, 0, 0, 1, 0, 1): '?',
     (1, 1, 1, 0, 1, 1, 1): 'A',
-    (0, 0, 1, 1, 1, 1, 1): 'B',
+    (1, 1, 1, 1, 1, 0, 1): 'a',
+    (0, 0, 1, 1, 1, 1, 1): 'b',
     (1, 0, 0, 1, 1, 1, 0): 'C',
-    (0, 1, 1, 1, 1, 0, 1): 'D',
+    (0, 0, 0, 1, 1, 0, 1): 'c',
+    (0, 1, 1, 1, 1, 0, 1): 'd',
     (1, 0, 0, 1, 1, 1, 1): 'E',
     (1, 0, 0, 0, 1, 1, 1): 'F',
+    (1, 0, 1, 1, 1, 1, 0): 'G',
+    (0, 1, 1, 0, 1, 1, 1): 'H',
+    (0, 0, 1, 0, 1, 1, 1): 'h',
+    (0, 0, 0, 0, 1, 1, 0): 'I',
+    (1, 0, 0, 0, 1, 0, 0): 'i',
+    (0, 0, 1, 0, 0, 0, 0): 'i',
+    (0, 1, 1, 1, 1, 0, 0): 'J',
+    (0, 1, 1, 1, 0, 0, 0): 'J',
+    (1, 0, 1, 1, 0, 0, 0): 'j',
+    (1, 0, 1, 0, 1, 1, 1): 'K',
+    (0, 0 ,0, 1, 1, 1, 0): 'L',
+    (1, 0, 1, 0, 1, 0, 0): 'M',
+    (1, 0, 1, 0, 1, 0, 1): 'M',
+    (1, 1, 1, 0, 1, 1, 0): 'N',
+    (0, 0, 1, 0, 1, 0, 1): 'n',
+    (0, 0, 1, 1, 1, 0, 1): 'o',
+    (1, 1, 0, 0, 1, 1, 1): 'p',
+    (1, 1, 1, 0, 0, 1, 1): 'q',
+    (1, 1, 0, 0, 1, 1, 0): 'R',
+    (0, 0, 0, 0, 1, 0, 1): 'r',
+    (0, 0, 0, 1, 1, 1, 1): 't',
+    (0, 0, 1, 1, 1, 0, 0): 'u',
+    (0, 1, 0, 1, 0, 1, 0): 'V',
+    (0, 1, 0, 0, 1, 1, 1): 'V',
+    (0, 1, 1, 1, 1, 1, 0): 'V',
+    (0, 1, 0, 0, 0, 1, 1): 'v',
+    (0, 1, 0, 1, 0, 1, 1): 'W',
+    (0, 0, 1, 0, 1, 0, 0): 'x',
+    (0, 1, 1, 1, 0, 1, 1): 'y',
+    (1, 1, 0, 1, 1, 0, 0): 'Z',
+    (1, 1, 0, 0, 0, 1, 0): '^',
+    (0, 0, 0, 1, 0, 0, 0): '_',
 }
 
 class Decoder(srd.Decoder):
@@ -67,6 +124,8 @@ class Decoder(srd.Decoder):
     options = (
         {'id': 'polarity', 'desc': 'Expected polarity',
             'default': 'common-cathode', 'values': ('common-cathode', 'common-anode')},
+        {'id': 'show_unknown', 'desc': 'Display Unknown characters as #',
+            'default': 'no', 'values': ('yes', 'no')},
     )
     annotations = (
         ('decoded-digit', 'Decoded digit'),
@@ -120,6 +179,9 @@ class Decoder(srd.Decoder):
             # Convert to character string.
             digit = self.pins_to_hex(oldpins[:7])
 
+            if digit is None and self.options['show_unknown'] == 'yes':
+                digit = '#'
+
             if digit is not None:
                 dp = oldpins[7]