]> git.ozlabs.org Git - bitfield/blobdiff - bitfield
Minor changes to register class
[bitfield] / bitfield
index ae9ab29eed906e4f7015bdd396e14b963aad4cc8..3651677f86c29ab8a90d9a67df14fa086ffa4503 100644 (file)
--- a/bitfield
+++ b/bitfield
@@ -71,18 +71,21 @@ class bitfield:
                return a
 
 class register:
-       def __init__(self, name, width):
+       def __init__(self, id, name, width):
+               self.id = id
                self.name = name
                self.width = width
                self.fields = []
 
-       def add_field(self, field,):
+       def add_field(self, field):
                self.fields.append(field)
 
        def decode(self, value, ignore_zero):
                field_width = (self.width + 3) / 4
                name_width = max(map(lambda f: len(f.name), self.fields))
+
                str = "0x%0*lx [%d]\n" % (field_width, value, value)
+
                for field in self.fields:
                        v = field.mask(self.width, value);
                        if ignore_zero and v == 0:
@@ -158,7 +161,7 @@ def parse_config(bnf, regs, file):
                        raise ConfigurationError(file,
                                "Register %s has no fields" % id)
 
-               r = register(name, width)
+               r = register(id, name, width)
                for f in fields:
                        r.add_field(f)
 
@@ -210,6 +213,21 @@ def parse_all_configs(configs):
 def usage(prog):
        print "Usage: %s <-l> | <-s pattern> | [-n] register [value...]" % prog
 
+def decode_value(reg, value, options):
+       try:
+               i = long(value, 0)
+       except ValueError, e:
+               print "error: invalid value '%s'" % value
+               return
+
+       if i > ((1 << reg.width) - 1):
+               print ("error: value '%s' is too large " + \
+                       "for %d-bit register '%s'") % (value, reg.width, reg.id)
+               return
+
+       print reg.decode(i, options.has_key('non_zero'))
+
+
 def main():
        try:
                (opts, args) = getopt(sys.argv[1:], "hlns:", \
@@ -269,8 +287,7 @@ def main():
                        return
 
        for value in values:
-               i = long(value.strip(), 0)
-               print r.decode(i, options['non-zero'])
+               decode_value(r, value.strip(), options)
 
        return 0