def _send_config(self, prev_crc): # Build config commands for cb in self._config_callbacks: cb() self._add_custom() self._config_cmds.insert( 0, "allocate_oids count=%d" % (self._oid_count, )) # Resolve pin names mcu_type = self._serial.msgparser.get_constant('MCU') ppins = self._printer.lookup_object('pins') reserved_pins = ppins.get_reserved_pins(self._name) pin_resolver = pins.PinResolver(mcu_type, reserved_pins) if self._pin_map is not None: pin_resolver.update_aliases(self._pin_map) for i, cmd in enumerate(self._config_cmds): self._config_cmds[i] = pin_resolver.update_command(cmd) for i, cmd in enumerate(self._init_cmds): self._init_cmds[i] = pin_resolver.update_command(cmd) # Calculate config CRC config_crc = zlib.crc32('\n'.join(self._config_cmds)) & 0xffffffff self.add_config_cmd("finalize_config crc=%d" % (config_crc, )) # Transmit config messages (if needed) if prev_crc is None: logging.info("Sending MCU '%s' printer configuration...", self._name) for c in self._config_cmds: self._serial.send(c) elif config_crc != prev_crc: self._check_restart("CRC mismatch") raise error("MCU '%s' CRC does not match config" % (self._name, )) # Transmit init messages for c in self._init_cmds: self._serial.send(c)
def __init__(self, reactor, serialport, baud, canbus_iface, canbus_nodeid): self.serialport = serialport self.baud = baud self.canbus_iface = canbus_iface self.canbus_nodeid = canbus_nodeid self.ser = serialhdl.SerialReader(reactor) self.reactor = reactor self.start_time = reactor.monotonic() self.clocksync = clocksync.ClockSync(self.reactor) self.fd = sys.stdin.fileno() util.set_nonblock(self.fd) self.mcu_freq = 0 self.pins = pins.PinResolver(validate_aliases=False) self.data = "" reactor.register_fd(self.fd, self.process_kbd) reactor.register_callback(self.connect) self.local_commands = { "PINS": self.command_PINS, "SET": self.command_SET, "DELAY": self.command_DELAY, "FLOOD": self.command_FLOOD, "SUPPRESS": self.command_SUPPRESS, "STATS": self.command_STATS, "LIST": self.command_LIST, "HELP": self.command_HELP, } self.eval_globals = {}
def connect(self, eventtime): self.output(help_txt) self.output("=" * 20 + " attempting to connect " + "=" * 20) self.ser.connect() self.clocksync.connect(self.ser) self.ser.handle_default = self.handle_default self.mcu_freq = self.ser.msgparser.get_constant_float('CLOCK_FREQ') mcu_type = self.ser.msgparser.get_constant('MCU') self.pins = pins.PinResolver(mcu_type, validate_aliases=False) self.reactor.unregister_timer(self.connect_timer) self.output("=" * 20 + " connected " + "=" * 20) return self.reactor.NEVER
def connect(self, eventtime): self.output(help_txt) self.output("="*20 + " attempting to connect " + "="*20) self.ser.connect() msgparser = self.ser.msgparser self.output("Loaded %d commands (%s / %s)" % ( len(msgparser.messages_by_id), msgparser.version, msgparser.build_versions)) self.output("MCU config: %s" % (" ".join( ["%s=%s" % (k, v) for k, v in msgparser.config.items()]))) self.clocksync.connect(self.ser) self.ser.handle_default = self.handle_default self.ser.register_callback(self.handle_output, '#output') self.mcu_freq = msgparser.get_constant_float('CLOCK_FREQ') mcu_type = msgparser.get_constant('MCU') self.pins = pins.PinResolver(mcu_type, validate_aliases=False) self.output("="*20 + " connected " + "="*20) return self.reactor.NEVER
def _build_config(self): # Build config commands for co in self._config_objects: co.build_config() self._add_custom() self._config_cmds.insert(0, "allocate_oids count=%d" % ( self._oid_count,)) # Resolve pin names mcu_type = self._serial.msgparser.get_constant('MCU') pin_resolver = pins.PinResolver(mcu_type) if self._pin_map is not None: pin_resolver.update_aliases(self._pin_map) for i, cmd in enumerate(self._config_cmds): self._config_cmds[i] = pin_resolver.update_command(cmd) for i, cmd in enumerate(self._init_cmds): self._init_cmds[i] = pin_resolver.update_command(cmd) # Calculate config CRC self._config_crc = zlib.crc32('\n'.join(self._config_cmds)) & 0xffffffff self.add_config_cmd("finalize_config crc=%d" % (self._config_crc,))