diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-02-27 14:16:16 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-02-27 21:06:16 -0500 |
commit | b139a8561f54b7a764faa54b117a8544b8451d41 (patch) | |
tree | 1d23fd730928f3db60d8d5838b0cded936fbb655 /klippy/extras/replicape.py | |
parent | 8518da9824ffa4c8b0f41be140eecf3973126d10 (diff) | |
download | kutter-b139a8561f54b7a764faa54b117a8544b8451d41.tar.gz kutter-b139a8561f54b7a764faa54b117a8544b8451d41.tar.xz kutter-b139a8561f54b7a764faa54b117a8544b8451d41.zip |
serialhdl: Add a wrapper around the results of lookup_command()
Add a lookup_command() method to the SerialReader class that provides
a wrapper that stores the serial and commandqueue references. This
makes it easier to run the send() method.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras/replicape.py')
-rw-r--r-- | klippy/extras/replicape.py | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/klippy/extras/replicape.py b/klippy/extras/replicape.py index aa1d14fd..320a5701 100644 --- a/klippy/extras/replicape.py +++ b/klippy/extras/replicape.py @@ -32,7 +32,6 @@ class pca9685_pwm: self._is_static = False self._last_clock = 0 self._pwm_max = 0. - self._cmd_queue = self._mcu.alloc_command_queue() self._set_cmd = None def get_mcu(self): return self._mcu @@ -73,17 +72,17 @@ class pca9685_pwm: self._start_value * self._pwm_max, self._shutdown_value * self._pwm_max, self._mcu.seconds_to_clock(self._max_duration))) + cmd_queue = self._mcu.alloc_command_queue() self._set_cmd = self._mcu.lookup_command( - "schedule_pca9685_out oid=%c clock=%u value=%hu") + "schedule_pca9685_out oid=%c clock=%u value=%hu", cq=cmd_queue) def set_pwm(self, print_time, value): clock = self._mcu.print_time_to_clock(print_time) if self._invert: value = 1. - value value = int(max(0., min(1., value)) * self._pwm_max + 0.5) self._replicape.note_pwm_enable(print_time, self._channel, value) - msg = self._set_cmd.encode(self._oid, clock, value) - self._mcu.send(msg, minclock=self._last_clock, reqclock=clock - , cq=self._cmd_queue) + self._set_cmd.send([self._oid, clock, value], + minclock=self._last_clock, reqclock=clock) self._last_clock = clock def set_digital(self, print_time, value): if value: @@ -137,6 +136,8 @@ class Replicape: "power_fan0": (pca9685_pwm, 7), "power_fan1": (pca9685_pwm, 8), "power_fan2": (pca9685_pwm, 9), "power_fan3": (pca9685_pwm, 10) } # Setup stepper config + self.send_spi_cmd = None + self.last_stepper_time = 0. self.stepper_dacs = {} shift_registers = [1, 0, 0, 1, 1] for port, name in enumerate('xyzeh'): @@ -159,9 +160,7 @@ class Replicape: self.stepper_dacs[channel] = cur / REPLICAPE_MAX_CURRENT self.pins[prefix + 'enable'] = (ReplicapeDACEnable, channel) self.enabled_channels = {ch: False for cl, ch in self.pins.values()} - self.disable_stepper_cmd = "send_spi bus=%d dev=%d msg=%s" % ( - REPLICAPE_SHIFT_REGISTER_BUS, REPLICAPE_SHIFT_REGISTER_DEVICE, - "".join(["%02x" % (x,) for x in reversed(shift_registers)])) + self.sr_disabled = tuple(reversed(shift_registers)) if [i for i in [0, 1, 2] if 11+i in self.stepper_dacs]: # Enable xyz steppers shift_registers[0] &= ~1 @@ -171,11 +170,15 @@ class Replicape: if (config.getboolean('standstill_power_down', False) and self.stepper_dacs): shift_registers[4] &= ~1 - self.enable_stepper_cmd = "send_spi bus=%d dev=%d msg=%s" % ( + self.sr_enabled = tuple(reversed(shift_registers)) + self.host_mcu.add_config_object(self) + self.host_mcu.add_config_cmd("send_spi bus=%d dev=%d msg=%s" % ( REPLICAPE_SHIFT_REGISTER_BUS, REPLICAPE_SHIFT_REGISTER_DEVICE, - "".join(["%02x" % (x,) for x in reversed(shift_registers)])) - self.host_mcu.add_config_cmd(self.disable_stepper_cmd) - self.last_stepper_time = 0. + "".join(["%02x" % (x,) for x in self.sr_disabled]))) + def build_config(self): + cmd_queue = self.host_mcu.alloc_command_queue() + self.send_spi_cmd = self.host_mcu.lookup_command( + "send_spi bus=%u dev=%u msg=%*s", cq=cmd_queue) def note_pwm_start_value(self, channel, start_value, shutdown_value): self.mcu_pwm_start_value |= not not start_value self.mcu_pwm_shutdown_value |= not not shutdown_value @@ -200,16 +203,17 @@ class Replicape: on_dacs = [1 for c in self.stepper_dacs.keys() if self.enabled_channels[c]] if not on_dacs: - cmd = self.disable_stepper_cmd + sr = self.sr_disabled elif is_enable and len(on_dacs) == 1: - cmd = self.enable_stepper_cmd + sr = self.sr_enabled else: return print_time = max(print_time, self.last_stepper_time + PIN_MIN_TIME) clock = self.host_mcu.print_time_to_clock(print_time) # XXX - the send_spi message should be scheduled - self.host_mcu.send(self.host_mcu.create_command(cmd), - minclock=clock, reqclock=clock) + self.send_spi_cmd.send([REPLICAPE_SHIFT_REGISTER_BUS, + REPLICAPE_SHIFT_REGISTER_DEVICE, sr], + minclock=clock, reqclock=clock) def setup_pin(self, pin_params): pin = pin_params['pin'] if pin not in self.pins: |