aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/replicape.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-02-27 14:16:16 -0500
committerKevin O'Connor <kevin@koconnor.net>2018-02-27 21:06:16 -0500
commitb139a8561f54b7a764faa54b117a8544b8451d41 (patch)
tree1d23fd730928f3db60d8d5838b0cded936fbb655 /klippy/extras/replicape.py
parent8518da9824ffa4c8b0f41be140eecf3973126d10 (diff)
downloadkutter-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.py36
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: