aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/mcu.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-01-19 22:22:17 -0500
committerKevin O'Connor <kevin@koconnor.net>2018-01-28 12:19:26 -0500
commit81013ba5c8638dd42932bd893e1b3115b1b98041 (patch)
tree3e0d60c2d084f808f2788a4645579093abdc8739 /klippy/mcu.py
parentf0a754e496ca989bc355555e2c798c362299abc3 (diff)
downloadkutter-81013ba5c8638dd42932bd893e1b3115b1b98041.tar.gz
kutter-81013ba5c8638dd42932bd893e1b3115b1b98041.tar.xz
kutter-81013ba5c8638dd42932bd893e1b3115b1b98041.zip
klippy: Add access methods and avoid peeking into the printer classes
Add get_reactor(), lookup_object(), lookup_module_objects(), and set_rollover_info() to the main Printer class so that callers do not need to peek into the class' members. Similarly, add get_printer() and get_name() methods to the ConfigWrapper class. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/mcu.py')
-rw-r--r--klippy/mcu.py64
1 files changed, 28 insertions, 36 deletions
diff --git a/klippy/mcu.py b/klippy/mcu.py
index a415ba25..15f9fcea 100644
--- a/klippy/mcu.py
+++ b/klippy/mcu.py
@@ -1,6 +1,6 @@
# Interface to Klipper micro-controller code
#
-# Copyright (C) 2016,2017 Kevin O'Connor <kevin@koconnor.net>
+# Copyright (C) 2016-2018 Kevin O'Connor <kevin@koconnor.net>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
import sys, os, zlib, logging, math
@@ -409,7 +409,8 @@ class MCU:
def __init__(self, printer, config, clocksync):
self._printer = printer
self._clocksync = clocksync
- self._name = config.section
+ self._reactor = printer.get_reactor()
+ self._name = config.get_name()
if self._name.startswith('mcu '):
self._name = self._name[4:]
# Serial port
@@ -419,7 +420,7 @@ class MCU:
or self._serialport.startswith("/tmp/klipper_host_")):
baud = config.getint('baud', 250000, minval=2400)
self._serial = serialhdl.SerialReader(
- printer.reactor, self._serialport, baud)
+ self._reactor, self._serialport, baud)
# Restarts
self._restart_method = 'command'
if baud:
@@ -430,8 +431,7 @@ class MCU:
self._emergency_stop_cmd = None
self._is_shutdown = self._is_timeout = False
self._shutdown_msg = ""
- if printer.bglogger is not None:
- printer.bglogger.set_rollover_info(self._name, None)
+ printer.set_rollover_info(self._name, None)
# Config building
pins.get_printer_pins(printer).register_chip(self._name, self)
self._oid_count = 0
@@ -482,7 +482,7 @@ class MCU:
logging.info("Attempting automated MCU '%s' restart: %s",
self._name, reason)
self._printer.request_exit('firmware_restart')
- self._printer.reactor.pause(self._printer.reactor.monotonic() + 2.000)
+ self._reactor.pause(self._reactor.monotonic() + 2.000)
raise error("Attempt MCU '%s' restart failed" % (self._name,))
def _connect_file(self, pace=False):
# In a debugging mode. Open debug output file and read data dictionary
@@ -566,16 +566,15 @@ class MCU:
raise error("MCU '%s' CRC does not match config" % (self._name,))
move_count = config_params['move_count']
logging.info("Configured MCU '%s' (%d moves)", self._name, move_count)
- if self._printer.bglogger is not None:
- msgparser = self._serial.msgparser
- info = [
- "Configured MCU '%s' (%d moves)" % (self._name, move_count),
- "Loaded MCU '%s' %d commands (%s / %s)" % (
- self._name, len(msgparser.messages_by_id),
- msgparser.version, msgparser.build_versions),
- "MCU '%s' config: %s" % (self._name, " ".join(
- ["%s=%s" % (k, v) for k, v in msgparser.config.items()]))]
- self._printer.bglogger.set_rollover_info(self._name, "\n".join(info))
+ msgparser = self._serial.msgparser
+ info = [
+ "Configured MCU '%s' (%d moves)" % (self._name, move_count),
+ "Loaded MCU '%s' %d commands (%s / %s)" % (
+ self._name, len(msgparser.messages_by_id),
+ msgparser.version, msgparser.build_versions),
+ "MCU '%s' config: %s" % (self._name, " ".join(
+ ["%s=%s" % (k, v) for k, v in msgparser.config.items()]))]
+ self._printer.set_rollover_info(self._name, "\n".join(info))
self._steppersync = self._ffi_lib.steppersync_alloc(
self._serial.serialqueue, self._stepqueues, len(self._stepqueues),
move_count)
@@ -663,18 +662,17 @@ class MCU:
def clock32_to_clock64(self, clock32):
return self._clocksync.clock32_to_clock64(clock32)
def pause(self, waketime):
- return self._printer.reactor.pause(waketime)
+ return self._reactor.pause(waketime)
def monotonic(self):
- return self._printer.reactor.monotonic()
+ return self._reactor.monotonic()
# Restarts
def _restart_arduino(self):
logging.info("Attempting MCU '%s' reset", self._name)
self.disconnect()
- serialhdl.arduino_reset(self._serialport, self._printer.reactor)
+ serialhdl.arduino_reset(self._serialport, self._reactor)
def _restart_via_command(self):
- reactor = self._printer.reactor
if ((self._reset_cmd is None and self._config_reset_cmd is None)
- or not self._clocksync.is_active(reactor.monotonic())):
+ or not self._clocksync.is_active(self._reactor.monotonic())):
logging.info("Unable to issue reset command on MCU '%s'", self._name)
return
if self._reset_cmd is None:
@@ -682,19 +680,19 @@ class MCU:
logging.info("Attempting MCU '%s' config_reset command", self._name)
self._is_shutdown = True
self.do_shutdown(force=True)
- reactor.pause(reactor.monotonic() + 0.015)
+ self._reactor.pause(self._reactor.monotonic() + 0.015)
self.send(self._config_reset_cmd.encode())
else:
# Attempt reset via reset command
logging.info("Attempting MCU '%s' reset command", self._name)
self.send(self._reset_cmd.encode())
- reactor.pause(reactor.monotonic() + 0.015)
+ self._reactor.pause(self._reactor.monotonic() + 0.015)
self.disconnect()
def _restart_rpi_usb(self):
logging.info("Attempting MCU '%s' reset via rpi usb power", self._name)
self.disconnect()
chelper.run_hub_ctrl(0)
- self._printer.reactor.pause(self._printer.reactor.monotonic() + 2.)
+ self._reactor.pause(self._reactor.monotonic() + 2.)
chelper.run_hub_ctrl(1)
def microcontroller_restart(self):
if self._restart_method == 'rpi_usb':
@@ -773,20 +771,14 @@ def error_help(msg):
return ""
def add_printer_objects(printer, config):
- mainsync = clocksync.ClockSync(printer.reactor)
+ reactor = printer.get_reactor()
+ mainsync = clocksync.ClockSync(reactor)
printer.add_object('mcu', MCU(printer, config.getsection('mcu'), mainsync))
for s in config.get_prefix_sections('mcu '):
printer.add_object(s.section, MCU(
- printer, s, clocksync.SecondarySync(printer.reactor, mainsync)))
-
-def get_printer_mcus(printer):
- return [printer.objects[n] for n in sorted(printer.objects)
- if n.startswith('mcu')]
+ printer, s, clocksync.SecondarySync(reactor, mainsync)))
def get_printer_mcu(printer, name):
- mcu_name = name
- if name != 'mcu':
- mcu_name = 'mcu ' + name
- if mcu_name not in printer.objects:
- raise printer.config_error("Unknown MCU %s" % (name,))
- return printer.objects[mcu_name]
+ if name == 'mcu':
+ return printer.lookup_object(name)
+ return printer.lookup_object('mcu ' + name)