diff options
author | Dmitry Frolov <dmitry.frolov@gmail.com> | 2019-02-03 14:49:03 +0700 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2019-02-03 11:19:36 -0500 |
commit | 51f14b9c8c16bc4ba30b20877067590f8fcdb25c (patch) | |
tree | 3a720b8ef82cb2bbec8c4e4303495606811d626b /klippy/extras/tmc2130.py | |
parent | 955fdcaa0c4ea1995e7bf9cc9503cc2a596e3958 (diff) | |
download | kutter-51f14b9c8c16bc4ba30b20877067590f8fcdb25c.tar.gz kutter-51f14b9c8c16bc4ba30b20877067590f8fcdb25c.tar.xz kutter-51f14b9c8c16bc4ba30b20877067590f8fcdb25c.zip |
tmc2208: Add register field formatters
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Signed-off-by: Dmitry Frolov <dmitry.frolov@gmail.com>
Diffstat (limited to 'klippy/extras/tmc2130.py')
-rw-r--r-- | klippy/extras/tmc2130.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/klippy/extras/tmc2130.py b/klippy/extras/tmc2130.py index d9ae5957..a49d55df 100644 --- a/klippy/extras/tmc2130.py +++ b/klippy/extras/tmc2130.py @@ -35,9 +35,16 @@ Fields = {} def ffs(mask): return (mask & -mask).bit_length() - 1 +# Decode two's complement signed integer +def decode_signed_int(val, bits): + if ((val >> (bits - 1)) & 1): + return val - (1 << bits) + return val + class FieldHelper: - def __init__(self, all_fields): + def __init__(self, all_fields, field_formatters={}): self.all_fields = all_fields + self.field_formatters = field_formatters def get_field(self, reg_name, field_name, reg_value): # Returns value of the register field mask = self.all_fields.get(reg_name, {})[field_name] @@ -48,11 +55,15 @@ class FieldHelper: return (reg_value & ~mask) | ((field_value << ffs(mask)) & mask) def pretty_format(self, reg_name, value): # Provide a string description of a register - fields = [ " %s=%d" % (field_name, (value & mask) >> ffs(mask)) - for field_name, mask in sorted(self.all_fields.get( - reg_name, {}).items(), key = lambda f: f[1]) - if value & mask ] - return "%-15s %08x%s" % (reg_name + ":", value, "".join(fields)) + reg_fields = self.all_fields.get(reg_name, {}) + reg_fields = sorted([(mask, name) for name, mask in reg_fields.items()]) + fields = [] + for mask, field_name in reg_fields: + fval = (value & mask) >> ffs(mask) + sval = self.field_formatters.get(field_name, str)(fval) + if sval and sval != "0": + fields.append(" %s=%s" % (field_name, sval)) + return "%-11s %08x%s" % (reg_name + ":", value, "".join(fields)) ###################################################################### |