From d9cf035687c89c0cd4b710fab233aa880d7ae554 Mon Sep 17 00:00:00 2001 From: Phil Hord Date: Tue, 31 May 2016 15:09:15 -0400 Subject: [PATCH] simulator: suppress position display unless something changed Also coalesce multiple pin-steps occurring at the same clock-time into a single step. This allows us to treat X+Y movements at the same moment into a single step on corexy. --- simulator/simulator.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/simulator/simulator.c b/simulator/simulator.c index 59a4bde..8f7fde5 100644 --- a/simulator/simulator.c +++ b/simulator/simulator.c @@ -316,9 +316,18 @@ static int pos[AXIS_MAX]; ///< Current position in 2 * steps static bool direction[PIN_NB]; static bool state[PIN_NB]; +static int prev_pos[AXIS_MAX]; ///< last reported position static void print_pos(void) { char * axis = "xyze"; int i; + + // Only print axes if different from last report + for ( i = X_AXIS ; i < AXIS_MAX ; i++ ) + if (pos[i]/2 != prev_pos[i]/2) break; + if (i == AXIS_MAX) return; + for ( i = X_AXIS ; i < AXIS_MAX ; i++ ) + prev_pos[i] = pos[i]; + if (trace_pos) { for ( i = X_AXIS ; i < AXIS_MAX ; i++ ) { sim_info_cont("%c:%5d ", axis[i], pos[i] / 2); @@ -425,7 +434,10 @@ void _WRITE(pin_t pin, bool s) { for (int a = X_AXIS; a <= E_AXIS; a++) record_pin(TRACE_POS + axis, pos[axis] / 2, nseconds); - print_pos(); + static uint64_t prev_ns = -1; + if (prev_ns != nseconds) + print_pos(); + prev_ns = nseconds; for (int a = X_AXIS; a < E_AXIS; a++) sim_endstop(a);