mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-08-09 14:55:09 -06:00
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>
This commit is contained in:
parent
8518da9824
commit
b139a8561f
6 changed files with 110 additions and 106 deletions
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue