aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/tmc2130.py
diff options
context:
space:
mode:
authorDmitry Frolov <dmitry.frolov@gmail.com>2019-02-03 14:49:03 +0700
committerKevin O'Connor <kevin@koconnor.net>2019-02-03 11:19:36 -0500
commit51f14b9c8c16bc4ba30b20877067590f8fcdb25c (patch)
tree3a720b8ef82cb2bbec8c4e4303495606811d626b /klippy/extras/tmc2130.py
parent955fdcaa0c4ea1995e7bf9cc9503cc2a596e3958 (diff)
downloadkutter-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.py23
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))
######################################################################