diff options
Diffstat (limited to 'klippy/mcu.py')
-rw-r--r-- | klippy/mcu.py | 64 |
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) |