stepcompress: Pass clock to stepcompress_set_last_position()

Using sc->last_step_clock for the last position marker does not work
properly, because the stepper.py code calls stepcompress_reset() prior
to calling stepcompress_set_last_position().  Fix by passing an
explicit clock to stepcompress_set_last_position().

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2021-08-06 09:56:06 -04:00
parent 3176150050
commit b17ec3d2e9
4 changed files with 9 additions and 5 deletions

View File

@ -43,7 +43,7 @@ defs_stepcompress = """
void stepcompress_free(struct stepcompress *sc); void stepcompress_free(struct stepcompress *sc);
int stepcompress_reset(struct stepcompress *sc, uint64_t last_step_clock); int stepcompress_reset(struct stepcompress *sc, uint64_t last_step_clock);
int stepcompress_set_last_position(struct stepcompress *sc int stepcompress_set_last_position(struct stepcompress *sc
, int64_t last_position); , uint64_t clock, int64_t last_position);
int64_t stepcompress_find_past_position(struct stepcompress *sc int64_t stepcompress_find_past_position(struct stepcompress *sc
, uint64_t clock); , uint64_t clock);
int stepcompress_queue_msg(struct stepcompress *sc int stepcompress_queue_msg(struct stepcompress *sc

View File

@ -553,7 +553,8 @@ stepcompress_reset(struct stepcompress *sc, uint64_t last_step_clock)
// Set last_position in the stepcompress object // Set last_position in the stepcompress object
int __visible int __visible
stepcompress_set_last_position(struct stepcompress *sc, int64_t last_position) stepcompress_set_last_position(struct stepcompress *sc, uint64_t clock
, int64_t last_position)
{ {
int ret = stepcompress_flush(sc, UINT64_MAX); int ret = stepcompress_flush(sc, UINT64_MAX);
if (ret) if (ret)
@ -563,7 +564,7 @@ stepcompress_set_last_position(struct stepcompress *sc, int64_t last_position)
// Add a marker to the history list // Add a marker to the history list
struct history_steps *hs = malloc(sizeof(*hs)); struct history_steps *hs = malloc(sizeof(*hs));
memset(hs, 0, sizeof(*hs)); memset(hs, 0, sizeof(*hs));
hs->first_clock = hs->last_clock = sc->last_step_clock; hs->first_clock = hs->last_clock = clock;
hs->start_position = last_position; hs->start_position = last_position;
list_add_head(&hs->node, &sc->history_list); list_add_head(&hs->node, &sc->history_list);
return 0; return 0;

View File

@ -22,7 +22,7 @@ int stepcompress_append(struct stepcompress *sc, int sdir
, double print_time, double step_time); , double print_time, double step_time);
int stepcompress_commit(struct stepcompress *sc); int stepcompress_commit(struct stepcompress *sc);
int stepcompress_reset(struct stepcompress *sc, uint64_t last_step_clock); int stepcompress_reset(struct stepcompress *sc, uint64_t last_step_clock);
int stepcompress_set_last_position(struct stepcompress *sc int stepcompress_set_last_position(struct stepcompress *sc, uint64_t clock
, int64_t last_position); , int64_t last_position);
int64_t stepcompress_find_past_position(struct stepcompress *sc int64_t stepcompress_find_past_position(struct stepcompress *sc
, uint64_t clock); , uint64_t clock);

View File

@ -151,7 +151,10 @@ class MCU_stepper:
last_pos = params['pos'] last_pos = params['pos']
if self._invert_dir: if self._invert_dir:
last_pos = -last_pos last_pos = -last_pos
ret = ffi_lib.stepcompress_set_last_position(self._stepqueue, last_pos) print_time = self._mcu.estimated_print_time(params['#receive_time'])
clock = self._mcu.print_time_to_clock(print_time)
ret = ffi_lib.stepcompress_set_last_position(self._stepqueue, clock,
last_pos)
if ret: if ret:
raise error("Internal error in stepcompress") raise error("Internal error in stepcompress")
self._set_mcu_position(last_pos) self._set_mcu_position(last_pos)