From 7f4bdfa3567d7d1639c98e67b3da7fdbae79520d Mon Sep 17 00:00:00 2001 From: Grzegorz Daniluk <grzegorz.daniluk@cern.ch> Date: Thu, 15 Aug 2013 14:59:05 +0200 Subject: [PATCH] fix displaying 64bit values for long distance WR links --- monitor/monitor.c | 48 +++++++++++++++++++++++++++--------------- monitor/monitor_ppsi.c | 47 ++++++++++++++++++++++++++--------------- 2 files changed, 61 insertions(+), 34 deletions(-) diff --git a/monitor/monitor.c b/monitor/monitor.c index 97053b7..fb6b4e0 100644 --- a/monitor/monitor.c +++ b/monitor/monitor.c @@ -25,6 +25,22 @@ #define UI_REFRESH_PERIOD TICS_PER_SECOND /* 1 sec */ +#define PRINT64_FACTOR 1000000000 +char* print64(unsigned long long x) +{ + uint32_t h_half, l_half; + static char buf[2*10+1]; //2x 32-bit value + \0 + if (x < PRINT64_FACTOR) + sprintf(buf, "%u", (uint32_t)x); + else{ + h_half = (uint32_t)(x/PRINT64_FACTOR); + l_half = (uint32_t)(x-h_half*PRINT64_FACTOR); + sprintf(buf, "%u%u", h_half, l_half); + } + return buf; +} + + extern ptpdexp_sync_state_t cur_servo_state; extern int wrc_man_phase; @@ -132,10 +148,9 @@ void wrc_mon_gui(void) cprintf(C_BLUE, "\nTiming parameters:\n\n"); cprintf(C_GREY, "Round-trip time (mu): "); - cprintf(C_WHITE, "%9d ps\n", (int32_t) (cur_servo_state.mu)); + cprintf(C_WHITE, "%s ps\n", print64(cur_servo_state.mu)); cprintf(C_GREY, "Master-slave delay: "); - cprintf(C_WHITE, "%9d ps\n", - (int32_t) (cur_servo_state.delay_ms)); + cprintf(C_WHITE, "%s ps\n", print64(cur_servo_state.delay_ms)); cprintf(C_GREY, "Master PHY delays: "); cprintf(C_WHITE, "TX: %d ps, RX: %d ps\n", (int32_t) cur_servo_state.delta_tx_m, @@ -148,12 +163,12 @@ void wrc_mon_gui(void) cprintf(C_WHITE, "%9d ps\n", (int32_t) (cur_servo_state.total_asymmetry)); cprintf(C_GREY, "Cable rtt delay: "); - cprintf(C_WHITE, "%9d ps\n", - (int32_t) (cur_servo_state.mu) - - (int32_t) cur_servo_state.delta_tx_m - - (int32_t) cur_servo_state.delta_rx_m - - (int32_t) cur_servo_state.delta_tx_s - - (int32_t) cur_servo_state.delta_rx_s); + cprintf(C_WHITE, "%9s ps\n", print64(cur_servo_state.mu - + cur_servo_state.delta_tx_m - + cur_servo_state.delta_rx_m - + cur_servo_state.delta_tx_s - + cur_servo_state.delta_rx_s)); + cprintf(C_GREY, "Clock offset: "); cprintf(C_WHITE, "%9d ps\n", (int32_t) (cur_servo_state.cur_offset)); @@ -201,19 +216,18 @@ int wrc_log_stats(uint8_t onetime) aux_stat = spll_get_aux_status(0); mprintf("aux:%x ", aux_stat); mprintf("sec:%d nsec:%d ", (uint32_t) sec, nsec); /* fixme: clock is not always 125 MHz */ - mprintf("mu:%d ", (int32_t) cur_servo_state.mu); - mprintf("dms:%d ", (int32_t) cur_servo_state.delay_ms); + mprintf("mu:%s ", print64(cur_servo_state.mu)); + mprintf("dms:%s ", print64(cur_servo_state.delay_ms)); mprintf("dtxm:%d drxm:%d ", (int32_t) cur_servo_state.delta_tx_m, (int32_t) cur_servo_state.delta_rx_m); mprintf("dtxs:%d drxs:%d ", (int32_t) cur_servo_state.delta_tx_s, (int32_t) cur_servo_state.delta_rx_s); mprintf("asym:%d ", (int32_t) (cur_servo_state.total_asymmetry)); - mprintf("crtt:%d ", - (int32_t) (cur_servo_state.mu) - - (int32_t) cur_servo_state.delta_tx_m - - (int32_t) cur_servo_state.delta_rx_m - - (int32_t) cur_servo_state.delta_tx_s - - (int32_t) cur_servo_state.delta_rx_s); + mprintf("crtt:%s ", print64(cur_servo_state.mu - + cur_servo_state.delta_tx_m - + cur_servo_state.delta_rx_m - + cur_servo_state.delta_tx_s - + cur_servo_state.delta_rx_s)); mprintf("cko:%d ", (int32_t) (cur_servo_state.cur_offset)); mprintf("setp:%d ", (int32_t) (cur_servo_state.cur_setpoint)); mprintf("hd:%d md:%d ad:%d ", spll_get_dac(-1), spll_get_dac(0), diff --git a/monitor/monitor_ppsi.c b/monitor/monitor_ppsi.c index f2f19ac..5c7f7f9 100644 --- a/monitor/monitor_ppsi.c +++ b/monitor/monitor_ppsi.c @@ -35,6 +35,22 @@ struct pp_instance *ppi = &ppi_static; static void wrc_mon_std_servo(void); +#define PRINT64_FACTOR 1000000000LL +char* print64(unsigned long long x) +{ + uint32_t h_half, l_half; + static char buf[2*10+1]; //2x 32-bit value + \0 + if (x < PRINT64_FACTOR) + sprintf(buf, "%u", (uint32_t)x); + else{ + l_half = __div64_32(&x, PRINT64_FACTOR); + h_half = (uint32_t) x; + sprintf(buf, "%u%u", h_half, l_half); + } + return buf; + +} + int wrc_mon_status() { struct pp_state_table_item *ip = NULL; @@ -160,10 +176,9 @@ void wrc_mon_gui(void) cprintf(C_BLUE, "\nTiming parameters:\n\n"); cprintf(C_GREY, "Round-trip time (mu): "); - cprintf(C_WHITE, "%9d ps\n", (int32_t) (cur_servo_state.mu)); + cprintf(C_WHITE, "%s ps\n", print64(cur_servo_state.mu)); cprintf(C_GREY, "Master-slave delay: "); - cprintf(C_WHITE, "%9d ps\n", - (int32_t) (cur_servo_state.delay_ms)); + cprintf(C_WHITE, "%s ps\n", print64(cur_servo_state.delay_ms)); cprintf(C_GREY, "Master PHY delays: "); cprintf(C_WHITE, "TX: %d ps, RX: %d ps\n", (int32_t) cur_servo_state.delta_tx_m, @@ -176,12 +191,11 @@ void wrc_mon_gui(void) cprintf(C_WHITE, "%9d ps\n", (int32_t) (cur_servo_state.total_asymmetry)); cprintf(C_GREY, "Cable rtt delay: "); - cprintf(C_WHITE, "%9d ps\n", - (int32_t) (cur_servo_state.mu) - - (int32_t) cur_servo_state.delta_tx_m - - (int32_t) cur_servo_state.delta_rx_m - - (int32_t) cur_servo_state.delta_tx_s - - (int32_t) cur_servo_state.delta_rx_s); + cprintf(C_WHITE, "%9d ps\n", print64(cur_servo_state.mu - + cur_servo_state.delta_tx_m - + cur_servo_state.delta_rx_m - + cur_servo_state.delta_tx_s - + cur_servo_state.delta_rx_s)); cprintf(C_GREY, "Clock offset: "); cprintf(C_WHITE, "%9d ps\n", (int32_t) (cur_servo_state.cur_offset)); @@ -266,19 +280,18 @@ int wrc_log_stats(uint8_t onetime) aux_stat = spll_get_aux_status(0); pp_printf("aux:%x ", aux_stat); pp_printf("sec:%d nsec:%d ", (uint32_t) sec, nsec); /* fixme: clock is not always 125 MHz */ - pp_printf("mu:%d ", (int32_t) cur_servo_state.mu); - pp_printf("dms:%d ", (int32_t) cur_servo_state.delay_ms); + pp_printf("mu:%d ", print64(cur_servo_state.mu)); + pp_printf("dms:%d ", print64(cur_servo_state.delay_ms)); pp_printf("dtxm:%d drxm:%d ", (int32_t) cur_servo_state.delta_tx_m, (int32_t) cur_servo_state.delta_rx_m); pp_printf("dtxs:%d drxs:%d ", (int32_t) cur_servo_state.delta_tx_s, (int32_t) cur_servo_state.delta_rx_s); pp_printf("asym:%d ", (int32_t) (cur_servo_state.total_asymmetry)); - pp_printf("crtt:%d ", - (int32_t) (cur_servo_state.mu) - - (int32_t) cur_servo_state.delta_tx_m - - (int32_t) cur_servo_state.delta_rx_m - - (int32_t) cur_servo_state.delta_tx_s - - (int32_t) cur_servo_state.delta_rx_s); + pp_printf("crtt:%d ", print64(cur_servo_state.mu - + cur_servo_state.delta_tx_m - + cur_servo_state.delta_rx_m - + cur_servo_state.delta_tx_s - + cur_servo_state.delta_rx_s)); pp_printf("cko:%d ", (int32_t) (cur_servo_state.cur_offset)); pp_printf("setp:%d ", (int32_t) (cur_servo_state.cur_setpoint)); pp_printf("hd:%d md:%d ad:%d ", spll_get_dac(-1), spll_get_dac(0), -- GitLab