aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorDmitry Butyugin <dmbutyugin@google.com>2023-04-16 00:31:45 +0200
committerKevinOConnor <kevin@koconnor.net>2023-06-06 20:17:49 -0400
commite15bad484403b1ef8a9b0ffc2abe6b092fd3c3f6 (patch)
tree5e98e88c832312d483bf29c723c008a98e33041f /klippy
parent345934bd681caf11a52810291d9255d6987c6e7a (diff)
downloadkutter-e15bad484403b1ef8a9b0ffc2abe6b092fd3c3f6.tar.gz
kutter-e15bad484403b1ef8a9b0ffc2abe6b092fd3c3f6.tar.xz
kutter-e15bad484403b1ef8a9b0ffc2abe6b092fd3c3f6.zip
input_shaper: Fixed tracking of step_generation_scan_time
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/chelper/__init__.py4
-rw-r--r--klippy/chelper/kin_shaper.c13
-rw-r--r--klippy/extras/input_shaper.py15
3 files changed, 12 insertions, 20 deletions
diff --git a/klippy/chelper/__init__.py b/klippy/chelper/__init__.py
index 6166363e..8183fd62 100644
--- a/klippy/chelper/__init__.py
+++ b/klippy/chelper/__init__.py
@@ -144,8 +144,8 @@ defs_kin_extruder = """
"""
defs_kin_shaper = """
- double input_shaper_get_step_generation_window(int n, double a[]
- , double t[]);
+ double input_shaper_get_step_generation_window(
+ struct stepper_kinematics *sk);
int input_shaper_set_shaper_params(struct stepper_kinematics *sk, char axis
, int n, double a[], double t[]);
int input_shaper_set_sk(struct stepper_kinematics *sk
diff --git a/klippy/chelper/kin_shaper.c b/klippy/chelper/kin_shaper.c
index 133f46a9..dd9cf619 100644
--- a/klippy/chelper/kin_shaper.c
+++ b/klippy/chelper/kin_shaper.c
@@ -210,16 +210,11 @@ input_shaper_set_shaper_params(struct stepper_kinematics *sk, char axis
}
double __visible
-input_shaper_get_step_generation_window(int n, double a[], double t[])
+input_shaper_get_step_generation_window(struct stepper_kinematics *sk)
{
- struct shaper_pulses sp;
- init_shaper(n, a, t, &sp);
- if (!sp.num_pulses)
- return 0.;
- double window = -sp.pulses[0].t;
- if (sp.pulses[sp.num_pulses-1].t > window)
- window = sp.pulses[sp.num_pulses-1].t;
- return window;
+ struct input_shaper *is = container_of(sk, struct input_shaper, sk);
+ return is->sk.gen_steps_pre_active > is->sk.gen_steps_post_active
+ ? is->sk.gen_steps_pre_active : is->sk.gen_steps_post_active;
}
struct stepper_kinematics * __visible
diff --git a/klippy/extras/input_shaper.py b/klippy/extras/input_shaper.py
index fdfdf546..7f37d302 100644
--- a/klippy/extras/input_shaper.py
+++ b/klippy/extras/input_shaper.py
@@ -70,10 +70,6 @@ class AxisInputShaper:
ffi_lib.input_shaper_set_shaper_params(
sk, self.axis.encode(), self.n, self.A, self.T)
return success
- def get_step_generation_window(self):
- ffi_main, ffi_lib = chelper.get_ffi()
- return ffi_lib.input_shaper_get_step_generation_window(self.n,
- self.A, self.T)
def disable_shaping(self):
if self.saved is None and self.n:
self.saved = (self.n, self.A, self.T)
@@ -109,7 +105,6 @@ class InputShaper:
def connect(self):
self.toolhead = self.printer.lookup_object("toolhead")
# Configure initial values
- self.old_delay = 0.
self._update_input_shaping(error=self.printer.config_error)
def _get_input_shaper_stepper_kinematics(self, stepper):
# Lookup stepper kinematics
@@ -131,10 +126,7 @@ class InputShaper:
return is_sk
def _update_input_shaping(self, error=None):
self.toolhead.flush_step_generation()
- new_delay = max([s.get_step_generation_window() for s in self.shapers])
- self.toolhead.note_step_generation_scan_time(new_delay,
- old_delay=self.old_delay)
- self.old_delay = new_delay
+ ffi_main, ffi_lib = chelper.get_ffi()
kin = self.toolhead.get_kinematics()
failed_shapers = []
for s in kin.get_steppers():
@@ -143,11 +135,16 @@ class InputShaper:
is_sk = self._get_input_shaper_stepper_kinematics(s)
if is_sk is None:
continue
+ old_delay = ffi_lib.input_shaper_get_step_generation_window(is_sk)
for shaper in self.shapers:
if shaper in failed_shapers:
continue
if not shaper.set_shaper_kinematics(is_sk):
failed_shapers.append(shaper)
+ new_delay = ffi_lib.input_shaper_get_step_generation_window(is_sk)
+ if old_delay != new_delay:
+ self.toolhead.note_step_generation_scan_time(new_delay,
+ old_delay)
if failed_shapers:
error = error or self.printer.command_error
raise error("Failed to configure shaper(s) %s with given parameters"