aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/tmc2130.py
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/extras/tmc2130.py')
-rw-r--r--klippy/extras/tmc2130.py36
1 files changed, 35 insertions, 1 deletions
diff --git a/klippy/extras/tmc2130.py b/klippy/extras/tmc2130.py
index 28d0f2dc..da089e5a 100644
--- a/klippy/extras/tmc2130.py
+++ b/klippy/extras/tmc2130.py
@@ -24,6 +24,40 @@ ReadRegisters = [
"CHOPCONF", "DRV_STATUS", "PWM_SCALE", "LOST_STEPS",
]
+Fields = {}
+
+
+######################################################################
+# Field helpers
+######################################################################
+
+# Return the position of the first bit set in a mask
+def ffs(mask):
+ return (mask & -mask).bit_length() - 1
+
+# Provide a string description of a register
+def pretty_format(all_fields, reg_name, value):
+ fields = [ " %s=%d" % (field_name, (value & mask) >> ffs(mask))
+ for field_name, mask in sorted(all_fields.get(
+ reg_name, {}).items(), key = lambda f: f[1])
+ if value & mask ]
+ return "%-15s %08x%s" % (reg_name + ":", value, "".join(fields))
+
+# Returns value of the register field
+def get_field(all_fields, reg_name, field_name, reg_value):
+ mask = all_fields.get(reg_name, {})[field_name]
+ return (reg_value & mask) >> ffs(mask)
+
+# Returns register value with field bits filled with supplied field value
+def set_field(all_fields, reg_name, field_name, reg_value, field_value):
+ mask = all_fields.get(reg_name, {})[field_name]
+ return (reg_value & ~mask) | ((field_value << ffs(mask)) & mask)
+
+
+######################################################################
+# TMC2130 printer object
+######################################################################
+
class TMC2130:
def __init__(self, config):
self.printer = config.get_printer()
@@ -126,7 +160,7 @@ class TMC2130:
logging.info("DUMP_TMC %s", self.name)
for reg_name in ReadRegisters:
val = self.get_register(reg_name)
- msg = "%-15s %08x" % (reg_name + ":", val)
+ msg = pretty_format(Fields, reg_name, val)
logging.info(msg)
gcode.respond_info(msg)