aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/Command_Templates.md10
-rw-r--r--klippy/mcu.py22
2 files changed, 26 insertions, 6 deletions
diff --git a/docs/Command_Templates.md b/docs/Command_Templates.md
index 57a5fa91..f2c5699b 100644
--- a/docs/Command_Templates.md
+++ b/docs/Command_Templates.md
@@ -288,6 +288,16 @@ The following are common printer attributes:
- `printer.hall_filament_width_sensor.Diameter`,
`printer.hall_filament_width_sensor.Raw`: The last read values from
the sensor.
+- `printer.mcu.mcu_version`: The Klipper code version reported by the
+ micro-controller.
+- `printer.mcu.mcu_build_versions`: Information on the build tools
+ used to generate the micro-controller code (as reported by the
+ micro-controller).
+- `printer.mcu.mcu_constants.<constant_name>`: Compile time constants
+ reported by the micro-controller. The available constants may differ
+ between micro-controller architectures and with each code revision.
+- `printer.mcu.last_stats.<statistics_name>`: Statistics information
+ on the micro-controller connection.
The above list is subject to change - if using an attribute be sure to
review the [Config Changes document](Config_Changes.md) when upgrading
diff --git a/klippy/mcu.py b/klippy/mcu.py
index e9a7a74a..7032df5d 100644
--- a/klippy/mcu.py
+++ b/klippy/mcu.py
@@ -447,6 +447,7 @@ class MCU:
self._stepqueues = []
self._steppersync = None
# Stats
+ self._get_status_info = {}
self._stats_sumsq_base = 0.
self._mcu_tick_avg = 0.
self._mcu_tick_stddev = 0.
@@ -630,9 +631,13 @@ class MCU:
self._reset_cmd = self.try_lookup_command("reset")
self._config_reset_cmd = self.try_lookup_command("config_reset")
ext_only = self._reset_cmd is None and self._config_reset_cmd is None
- mbaud = self._serial.get_msgparser().get_constant('SERIAL_BAUD', None)
+ msgparser = self._serial.get_msgparser()
+ mbaud = msgparser.get_constant('SERIAL_BAUD', None)
if self._restart_method is None and mbaud is None and not ext_only:
self._restart_method = 'command'
+ self._get_status_info['mcu_version'] = msgparser.version
+ self._get_status_info['mcu_build_versions'] = msgparser.build_versions
+ self._get_status_info['mcu_constants'] = msgparser.get_constants()
self.register_response(self._handle_shutdown, 'shutdown')
self.register_response(self._handle_shutdown, 'is_shutdown')
self.register_response(self._handle_mcu_stats, 'stats')
@@ -782,12 +787,17 @@ class MCU:
self._name, eventtime)
self._printer.invoke_shutdown("Lost communication with MCU '%s'" % (
self._name,))
+ def get_status(self, eventtime):
+ return dict(self._get_status_info)
def stats(self, eventtime):
- msg = "%s: mcu_awake=%.03f mcu_task_avg=%.06f mcu_task_stddev=%.06f" % (
- self._name, self._mcu_tick_awake, self._mcu_tick_avg,
- self._mcu_tick_stddev)
- return False, ' '.join([msg, self._serial.stats(eventtime),
- self._clocksync.stats(eventtime)])
+ load = "mcu_awake=%.03f mcu_task_avg=%.06f mcu_task_stddev=%.06f" % (
+ self._mcu_tick_awake, self._mcu_tick_avg, self._mcu_tick_stddev)
+ stats = ' '.join([load, self._serial.stats(eventtime),
+ self._clocksync.stats(eventtime)])
+ parts = [s.split('=', 1) for s in stats.split()]
+ last_stats = {k:(float(v) if '.' in v else int(v)) for k, v in parts}
+ self._get_status_info['last_stats'] = last_stats
+ return False, '%s: %s' % (self._name, stats)
Common_MCU_errors = {
("Timer too close", "No next step", "Missed scheduling of next "): """