From f5a431dba2594c5f28b1be4c08b0a23e1ccdbb3d Mon Sep 17 00:00:00 2001
From: Aurelio Colosimo <aurelio@aureliocolosimo.it>
Date: Mon, 13 May 2013 12:43:44 +0200
Subject: [PATCH] monitor/monitor_ppsi.c: show synchronization status when WR
 mode is Off

Signed-off-by: Aurelio Colosimo <aurelio@aureliocolosimo.it>
---
 monitor/monitor_ppsi.c | 48 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/monitor/monitor_ppsi.c b/monitor/monitor_ppsi.c
index 1777b34df..793834999 100644
--- a/monitor/monitor_ppsi.c
+++ b/monitor/monitor_ppsi.c
@@ -29,6 +29,12 @@ struct ptpdexp_sync_state_t;
 extern ptpdexp_sync_state_t cur_servo_state;
 extern int wrc_man_phase;
 
+extern struct pp_servo servo;
+extern struct pp_instance ppi_static;
+struct pp_instance *ppi = &ppi_static;
+
+static void wrc_mon_std_servo(void);
+
 void wrc_mon_gui(void)
 {
 	static uint32_t last = 0;
@@ -70,6 +76,11 @@ void wrc_mon_gui(void)
 		minic_get_stats(&tx, &rx);
 		cprintf(C_GREY, "(RX: %d, TX: %d), mode: ", rx, tx);
 
+		if (!WR_DSPOR(ppi)->wrModeOn) {
+			wrc_mon_std_servo();
+			return;
+		}
+
 		switch (ptp_mode) {
 		case WRC_MODE_GM:
 		case WRC_MODE_MASTER:
@@ -177,6 +188,43 @@ void wrc_mon_gui(void)
 	return;
 }
 
+static inline cprintf_ti(int color, struct TimeInternal *ti)
+{
+	if ((ti->seconds > 0) ||
+		((ti->seconds == 0) && (ti->nanoseconds >= 0)))
+		cprintf(color, "%2i.%09i s", ti->seconds, ti->nanoseconds);
+	else {
+		if (ti->seconds == 0)
+			cprintf(color, "-%i.%09i s", ti->seconds, -ti->nanoseconds);
+		else
+			cprintf(color, "%2i.%09i s", ti->seconds, -ti->nanoseconds);
+	}
+
+}
+
+static void wrc_mon_std_servo(void)
+{
+	cprintf(C_RED, "WR Off");
+
+	/* show standard servo */
+	cprintf(C_BLUE, "\n\nSynchronization status:\n\n");
+
+	cprintf(C_GREY, "Clock offset:                 ");
+
+	if (DSCUR(ppi)->offsetFromMaster.seconds)
+		cprintf_ti(C_WHITE, &DSCUR(ppi)->offsetFromMaster);
+	else {
+		cprintf(C_WHITE, "%9i ns", DSCUR(ppi)->offsetFromMaster.nanoseconds);
+
+		cprintf(C_GREY, "\nOne-way delay averaged:       ");
+		cprintf(C_WHITE, "%9i ns", DSCUR(ppi)->meanPathDelay.nanoseconds);
+
+		cprintf(C_GREY, "\nObserved drift:               ");
+		cprintf(C_WHITE, "%9i ns", SRV(ppi)->obs_drift);
+	}
+}
+
+
 int wrc_log_stats(uint8_t onetime)
 {
 	static uint32_t last = 0;
-- 
GitLab