From 7742566e827384af99383b8d199749c3ef0c8024 Mon Sep 17 00:00:00 2001
From: Adam Wujek <adam.wujek@cern.ch>
Date: Fri, 19 Aug 2016 15:12:18 +0200
Subject: [PATCH] [Feature: 1109] userspace/tools: Cleanup wr_mon

Changes:
--add edges of table
--change colors parameters
--print proto and extenstion (collumn "Pro")

Everything except many configured vlans should fit into 80char terminal

Signed-off-by: Adam Wujek <adam.wujek@cern.ch>
---
 userspace/tools/term.h   |   1 +
 userspace/tools/wr_mon.c | 285 ++++++++++++++++++++++++---------------
 2 files changed, 174 insertions(+), 112 deletions(-)

diff --git a/userspace/tools/term.h b/userspace/tools/term.h
index 9fd190c6a..4e6014180 100644
--- a/userspace/tools/term.h
+++ b/userspace/tools/term.h
@@ -9,6 +9,7 @@
 #define C_RED 1
 #define C_GREEN 2
 #define C_BLUE 4
+#define C_CYAN 6
 
 void term_restore(void);
 void term_init(int usecolor);
diff --git a/userspace/tools/wr_mon.c b/userspace/tools/wr_mon.c
index cb4c97a11..729e7b465 100644
--- a/userspace/tools/wr_mon.c
+++ b/userspace/tools/wr_mon.c
@@ -64,36 +64,36 @@ static int ignore_alive;
 static char *pp_instance_state_to_name[PP_INSTANCE_STATE_MAX] = {
 	/* from ppsi/include/ppsi/ieee1588_types.h, enum pp_std_states */
 	/* PPS_END_OF_TABLE = 0 */
-	[PPS_END_OF_TABLE] = "end of table",
-	[PPS_INITIALIZING] = "initializing",
-	[PPS_FAULTY] = "faulty",
-	[PPS_DISABLED] = "disabled",
-	[PPS_LISTENING] = "listening",
-	[PPS_PRE_MASTER] = "pre master",
-	[PPS_MASTER] = "master",
-	[PPS_PASSIVE] = "passive",
-	[PPS_UNCALIBRATED] = "uncalibrated",
-	[PPS_SLAVE] = "slave",
+	[PPS_END_OF_TABLE] =      "EOT       ",
+	[PPS_INITIALIZING] =      "initing   ",
+	[PPS_FAULTY] =            "faulty    ",
+	[PPS_DISABLED] =          "disabled  ",
+	[PPS_LISTENING] =         "listening ",
+	[PPS_PRE_MASTER] =        "pre master",
+	[PPS_MASTER] =            "master    ",
+	[PPS_PASSIVE] =           "passive   ",
+	[PPS_UNCALIBRATED] =      "uncalib   ",
+	[PPS_SLAVE] =             "slave     ",
 	/* from ppsi/proto-ext-whiterabbit/wr-constants.h */
 	/* WRS_PRESENT = 100 */
-	[WRS_PRESENT] = "WRS_PRESENT",
-	[WRS_S_LOCK] = "WRS_S_LOCK",
-	[WRS_M_LOCK] = "WRS_M_LOCK",
-	[WRS_LOCKED] = "WRS_LOCKED",
-	[WRS_CALIBRATION] = "WRS_CALIBRATION",
-	[WRS_CALIBRATED] = "WRS_CALIBRATED",
-	[WRS_RESP_CALIB_REQ] = "WRS_RESP_CALIB_REQ",
-	[WRS_WR_LINK_ON] = "WRS_WR_LINK_ON",
+	[WRS_PRESENT] =           "WR_PRESENT",
+	[WRS_S_LOCK] =            "WR_S_LOCK ",
+	[WRS_M_LOCK] =            "WR_M_LOCK ",
+	[WRS_LOCKED] =            "WR_LOCKED ",
+	[WRS_CALIBRATION] =       "WR_CAL-ION",
+	[WRS_CALIBRATED] =        "WR_CAL-ED ",
+	[WRS_RESP_CALIB_REQ] =    "WR_RSP_CAL",
+	[WRS_WR_LINK_ON] =        "WR_LINK_ON",
 	/* substates: used within WRS_CALIBRATED as wrPortState field */
-	[WR_PORT_CALIBRATION_0] = "WR_PORT_CALIBRATION_0",
-	[WR_PORT_CALIBRATION_1] = "WR_PORT_CALIBRATION_1",
-	[WR_PORT_CALIBRATION_2] = "WR_PORT_CALIBRATION_2",
-	[WR_PORT_CALIBRATION_3] = "WR_PORT_CALIBRATION_3",
-	[WR_PORT_CALIBRATION_4] = "WR_PORT_CALIBRATION_4",
-	[WR_PORT_CALIBRATION_5] = "WR_PORT_CALIBRATION_5",
-	[WR_PORT_CALIBRATION_6] = "WR_PORT_CALIBRATION_6",
-	[WR_PORT_CALIBRATION_7] = "WR_PORT_CALIBRATION_7",
-	[WR_PORT_CALIBRATION_8] = "WR_PORT_CALIBRATION_8",
+	[WR_PORT_CALIBRATION_0] = "WR_P_CAL0 ",
+	[WR_PORT_CALIBRATION_1] = "WR_P_CAL1 ",
+	[WR_PORT_CALIBRATION_2] = "WR_P_CAL2 ",
+	[WR_PORT_CALIBRATION_3] = "WR_P_CAL3 ",
+	[WR_PORT_CALIBRATION_4] = "WR_P_CAL4 ",
+	[WR_PORT_CALIBRATION_5] = "WR_P_CAL5 ",
+	[WR_PORT_CALIBRATION_6] = "WR_P_CAL6 ",
+	[WR_PORT_CALIBRATION_7] = "WR_P_CAL7 ",
+	[WR_PORT_CALIBRATION_8] = "WR_P_CAL8 ",
 };
 
 void help(char *prgname)
@@ -254,7 +254,7 @@ void init_shm(void)
 	ppsi_connect_minipc();
 }
 
-void show_ports(void)
+void show_ports(int alive)
 {
 	int i, j;
 	time_t t;
@@ -265,18 +265,32 @@ void show_ports(void)
 	int vlan_i;
 	int nvlans;
 
+	if (!alive) {
+		if (mode == SHOW_GUI)
+			term_cprintf(C_RED, "HAL is dead!\n");
+		else if (mode == SHOW_ALL)
+			printf("HAL is dead!\n");
+		return;
+	}
+
 	pp_array = wrs_shm_follow(ppsi_head, ppg->pp_instances);
 
-	if(mode == SHOW_GUI) {
+	if (mode == SHOW_GUI) {
 		time(&t);
 		tm = localtime(&t);
 		strftime(datestr, sizeof(datestr), "%Y-%m-%d %H:%M:%S", tm);
-		term_cprintf(C_BLUE, "Switch time: %s\n", datestr);
+		term_cprintf(C_BLUE, "Switch time: ");
+		term_cprintf(C_WHITE, "%s\n", datestr);
 
 		t = (time_t)_fpga_readl(FPGA_BASE_PPS_GEN + 8 /* UTC_LO */);
 		tm = localtime(&t);
 		strftime(datestr, sizeof(datestr), "%Y-%m-%d %H:%M:%S", tm);
-		term_cprintf(C_BLUE, "WR time:     %s\n", datestr);
+		term_cprintf(C_BLUE, "WR time:     ");
+		term_cprintf(C_WHITE, "%s\n", datestr);
+/*                                    -------------------------------------------------------------------------------*/
+		term_cprintf(C_CYAN, "------------- HAL -----------|-------------- PPSI -----------------------------\n");
+		term_cprintf(C_CYAN, " Port | Link | WRconf | Freq |Inst| MAC of peer port  | PTP state | Pro | VLANs\n");
+		term_cprintf(C_CYAN, "------|------|--------|------|----|-------------------|-----------|-----|------\n");
 	}
 	if (mode & (SHOW_SLAVE_PORTS|SHOW_MASTER_PORTS)) {
 		printf("PORTS ");
@@ -300,7 +314,7 @@ void show_ports(void)
 		case HEXP_PORT_MODE_WR_MASTER:
 			if (mode == SHOW_GUI) {
 				print_mode_color = C_WHITE;
-				strcpy(if_mode, "WR Master  ");
+				strcpy(if_mode, "Master");
 			} else if (mode & SHOW_MASTER_PORTS) {
 				print_port = 1;
 				strcpy(if_mode, "M");
@@ -311,7 +325,7 @@ void show_ports(void)
 		case HEXP_PORT_MODE_WR_SLAVE:
 			if (mode == SHOW_GUI) {
 				print_mode_color = C_WHITE;
-				strcpy(if_mode, "WR Slave   ");
+				strcpy(if_mode, "Slave ");
 			} else if (mode & SHOW_SLAVE_PORTS) {
 				print_port = 1;
 				strcpy(if_mode, "S");
@@ -322,7 +336,7 @@ void show_ports(void)
 		case HEXP_PORT_MODE_NON_WR:
 			if (mode == SHOW_GUI) {
 				print_mode_color = C_WHITE;
-				strcpy(if_mode, "Non WR     ");
+				strcpy(if_mode, "Non WR");
 			} else if (mode & SHOW_OTHER_PORTS) {
 				print_port = 1;
 				strcpy(if_mode, "N");
@@ -333,7 +347,7 @@ void show_ports(void)
 		case HEXP_PORT_MODE_NONE:
 			if (mode == SHOW_GUI) {
 				print_mode_color = C_WHITE;
-				strcpy(if_mode, "None       ");
+				strcpy(if_mode, "None  ");
 			} else if (mode & SHOW_OTHER_PORTS) {
 				print_port = 1;
 				strcpy(if_mode, "X");
@@ -344,7 +358,7 @@ void show_ports(void)
 		case HEXP_PORT_MODE_WR_M_AND_S:
 			if (mode == SHOW_GUI) {
 				print_mode_color = C_WHITE;
-				strcpy(if_mode, "WR auto    ");
+				strcpy(if_mode, "Auto  ");
 			} else if (mode &
 				(SHOW_SLAVE_PORTS|SHOW_MASTER_PORTS)) {
 				print_port = 1;
@@ -356,7 +370,7 @@ void show_ports(void)
 		default:
 			if (mode == SHOW_GUI) {
 				print_mode_color = C_WHITE;
-				strcpy(if_mode, "Unknown    ");
+				strcpy(if_mode, "Unkn  ");
 			} else if (mode & SHOW_OTHER_PORTS) {
 				print_port = 1;
 				strcpy(if_mode, "U");
@@ -367,17 +381,22 @@ void show_ports(void)
 		}
 
 		if (mode == SHOW_GUI) {
-			term_cprintf(C_WHITE, " %-5s: ", if_name);
+			term_cprintf(C_WHITE, "%-5s", if_name);
+			term_cprintf(C_CYAN, " | ");
 			/* check if link is up */
 			if (state_up(port_state->state))
-				term_cprintf(C_GREEN, "Link up    ");
+				term_cprintf(C_GREEN, "up  ");
 			else
-				term_cprintf(C_RED, "Link down  ");
+				term_cprintf(C_RED, "down");
+			term_cprintf(C_CYAN, " | ");
 			term_cprintf(C_WHITE, if_mode);
+			term_cprintf(C_CYAN, " | ");
 			if (port_state->locked)
-				term_cprintf(C_GREEN, "Locked     ");
+				term_cprintf(C_GREEN, "Lock ");
 			else
-				term_cprintf(C_RED, "NoLock     ");
+				term_cprintf(C_RED, "     ");
+
+			term_cprintf(C_CYAN, "|");
 
 			instance_port = 0;
 			/*
@@ -392,40 +411,62 @@ void show_ports(void)
 					continue;
 				}
 				if (instance_port > 0) {
-					term_cprintf(C_WHITE, "\n             "
-					       "                            ");
+					term_cprintf(C_CYAN, "\n      |      |"
+						     "        |      |");
 				}
 				instance_port++;
 				/* print instance number */
-				term_cprintf(C_WHITE, " i%-2d:", j);
-				/* Warning: we may have more pp instances per
+				term_cprintf(C_WHITE, " %2d ", j);
+				term_cprintf(C_CYAN, "| ");
+				/* Note: we may have more pp instances per
 				 * port */
-				if (!state_up(port_state->state)) {
-					term_cprintf(C_RED, " no-ptp");
-				} else {
+				if (state_up(port_state->state)) {
 					unsigned char *p = pp_array[j].peer;
 
-					term_cprintf(C_WHITE," peer: %02x:%02x"
-						     ":%02x:%02x:%02x:%02x",
+					term_cprintf(C_WHITE, "%02x:%02x"
+						     ":%02x:%02x:%02x:%02x ",
 						     p[0], p[1], p[2], p[3],
 						     p[4], p[5]);
+					term_cprintf(C_CYAN, "| ");
 					if (pp_array[j].state < PP_INSTANCE_STATE_MAX) {
 						/* Known state */
-						term_cprintf(C_GREEN, " ptp "
-							"state %s(%i)",
-							pp_instance_state_to_name[pp_array[j].state],
-							pp_array[j].state);
+						term_cprintf(C_GREEN, "%s",
+							pp_instance_state_to_name[pp_array[j].state]);
 					} else {
 						/* Unknown ptp state */
-						term_cprintf(C_GREEN, " ptp "
-							"state unknown(%i)",
+						term_cprintf(C_GREEN,
+							"unkn(%3i)",
 							pp_array[j].state);
 					}
+				} else {
+					term_cprintf(C_WHITE, "               "
+						     "   ");
+					term_cprintf(C_CYAN, "|");
+					term_cprintf(C_WHITE, "           ");
 				}
-				nvlans = pp_array[j].nvlans;
-				if (nvlans > 0) {
-					term_cprintf(C_WHITE, " vlans: ");
+				term_cprintf(C_CYAN, "| ");
+				if (pp_array[j].proto == PPSI_PROTO_RAW) {
+					term_cprintf(C_WHITE, "R");
+				} else if (pp_array[j].proto
+					   == PPSI_PROTO_UDP) {
+					term_cprintf(C_WHITE, "U");
+				} else if (pp_array[j].proto
+					   == PPSI_PROTO_VLAN) {
+					term_cprintf(C_WHITE, "V");
+				} else {
+					term_cprintf(C_WHITE, "?");
+				}
+				if (pp_array[j].cfg.ext == PPSI_EXT_WR) {
+					term_cprintf(C_WHITE, "-W");
+				} else if (pp_array[j].cfg.ext
+					   == PPSI_EXT_NONE) {
+					term_cprintf(C_WHITE, "  ");
+				} else {
+					term_cprintf(C_WHITE, "-?");
 				}
+
+				nvlans = pp_array[j].nvlans;
+				term_cprintf(C_CYAN, " | ");
 				for (vlan_i = 0; vlan_i < nvlans; vlan_i++) {
 					term_cprintf(C_WHITE, "%d",
 						    pp_array[j].vlans[vlan_i]);
@@ -433,6 +474,11 @@ void show_ports(void)
 						term_cprintf(C_WHITE, ",");
 				}
 			}
+			if (!instance_port) {
+				term_cprintf(C_WHITE, " -- ");
+				term_cprintf(C_CYAN, "|                   |   "
+					     "        |     |");
+			}
 			term_cprintf(C_WHITE, "\n");
 		} else if (mode & WEB_INTERFACE) {
 			printf("%s ", state_up(port_state->state)
@@ -451,9 +497,13 @@ void show_ports(void)
 			print_port = 0;
 		}
 	}
+	if (mode == SHOW_GUI) {
+		term_cprintf(C_BLUE, "Pro - Protocol mapping: V-Ethernet over "
+			     "VLAN; U-UDP; R-Ethernet\n");
+	}
 }
 
-void show_servo(void)
+void show_servo(int alive)
 {
 	int64_t total_asymmetry;
 	int64_t crtt;
@@ -466,18 +516,27 @@ void show_servo(void)
 	       ppsi_servo_local.delta_rx_m - ppsi_servo_local.delta_tx_s -
 	       ppsi_servo_local.delta_rx_s;
 
-	if(mode == SHOW_GUI) {
-		term_cprintf(C_BLUE, "\nSynchronization status:\n");
+	if (mode == SHOW_GUI) {
+/*                                      -------------------------------------------------------------------------------*/
+		term_cprintf(C_CYAN, "\n--------------------------- Synchronization status ----------------------------\n");
+	}
 
+	if (!alive) {
+		if (mode == SHOW_GUI)
+			term_cprintf(C_RED, "PPSI is dead!\n");
+		return;
+	}
+
+	if (mode == SHOW_GUI) {
 		if (!(ppsi_servo_local.flags & WR_FLAG_VALID)) {
 			term_cprintf(C_RED,
 				     "Master mode or sync info not valid\n");
 			return;
 		}
 
-		term_cprintf(C_GREY, "Servo state:          ");
+		term_cprintf(C_BLUE, "Servo state:          ");
 		if (lastt && time(NULL) - lastt > 5) {
-			term_cprintf(C_RED, " --- not updating --- ");
+			term_cprintf(C_RED, "--- not updating ---\n");
 		} else {
 			term_cprintf(C_WHITE, "%s: %s%s\n",
 				     ppsi_servo_local.if_name,
@@ -489,55 +548,60 @@ void show_servo(void)
 		/* "tracking disabled" is just a testing tool */
 		if (!ppsi_servo_local.tracking_enabled)
 			term_cprintf(C_RED, "Tracking forcibly disabled\n");
+/*                                      -------------------------------------------------------------------------------*/
+		term_cprintf(C_CYAN, "\n------------------------------ Timing parameters ------------------------------\n");
 
-		term_cprintf(C_BLUE, "\nTiming parameters:\n");
-
-		term_cprintf(C_GREY, "Round-trip time (mu): ");
-		term_cprintf(C_WHITE, "%.3f nsec\n",
+		term_cprintf(C_BLUE, "Round-trip time (mu): ");
+		term_cprintf(C_WHITE, "%15.3f nsec\n",
 			     ppsi_servo_local.picos_mu/1000.0);
 
-		term_cprintf(C_GREY, "Master-slave delay:   ");
-		term_cprintf(C_WHITE, "%.3f nsec\n",
+		term_cprintf(C_BLUE, "Master-slave delay:   ");
+		term_cprintf(C_WHITE, "%15.3f nsec\n",
 			     ppsi_servo_local.delta_ms/1000.0);
 
-		term_cprintf(C_GREY, "Master PHY delays:    ");
-		term_cprintf(C_WHITE, "TX: %.3f nsec, RX: %.3f nsec\n",
-			     ppsi_servo_local.delta_tx_m/1000.0,
-			     ppsi_servo_local.delta_rx_m/1000.0);
-
-		term_cprintf(C_GREY, "Slave PHY delays:     ");
-		term_cprintf(C_WHITE, "TX: %.3f nsec, RX: %.3f nsec\n",
-			     ppsi_servo_local.delta_tx_s/1000.0,
-			     ppsi_servo_local.delta_rx_s/1000.0);
-
-		term_cprintf(C_GREY, "Total link asymmetry: ");
-		term_cprintf(C_WHITE, "%.3f nsec\n", total_asymmetry/1000.0);
+		term_cprintf(C_BLUE, "Total link asymmetry: ");
+		term_cprintf(C_WHITE, "%15.3f nsec\n", total_asymmetry/1000.0);
 
 		/*if (0) {
-			term_cprintf(C_GREY, "Fiber asymmetry:   ");
+			term_cprintf(C_BLUE, "Fiber asymmetry:   ");
 			term_cprintf(C_WHITE, "%.3f nsec\n",
 				ss.fiber_asymmetry/1000.0);
 		}*/
 
-		term_cprintf(C_GREY, "Clock offset:         ");
-		term_cprintf(C_WHITE, "%.3f nsec\n",
+		term_cprintf(C_BLUE, "Clock offset:         ");
+		term_cprintf(C_WHITE, "%15.3f nsec\n",
 			     ppsi_servo_local.offset/1000.0);
 
-		term_cprintf(C_GREY, "Phase setpoint:       ");
-		term_cprintf(C_WHITE, "%.3f nsec\n",
+		term_cprintf(C_BLUE, "Phase setpoint:       ");
+		term_cprintf(C_WHITE, "%15.3f nsec\n",
 			     ppsi_servo_local.cur_setpoint/1000.0);
 
-		term_cprintf(C_GREY, "Skew:                 ");
-		term_cprintf(C_WHITE, "%.3f nsec\n",
+		term_cprintf(C_BLUE, "Skew:                 ");
+		term_cprintf(C_WHITE, "%15.3f nsec\n",
 			     ppsi_servo_local.skew/1000.0);
 
-		term_cprintf(C_GREY, "Servo update counter: ");
-		term_cprintf(C_WHITE, "%u times\n",
+		term_cprintf(C_BLUE, "Servo update counter: ");
+		term_cprintf(C_WHITE, "%15u times\n",
 			     ppsi_servo_local.update_count);
 		if (ppsi_servo_local.update_count != last_count) {
 			lastt = time(NULL);
 			last_count = ppsi_servo_local.update_count;
 		}
+		term_cprintf(C_BLUE, "Master PHY delays:    ");
+		term_cprintf(C_BLUE, "TX: ");
+		term_cprintf(C_WHITE, "%11.3f nsec, ",
+			     ppsi_servo_local.delta_tx_m/1000.0);
+		term_cprintf(C_BLUE, "RX: ");
+		term_cprintf(C_WHITE, "%11.3f nsec\n",
+			     ppsi_servo_local.delta_rx_m/1000.0);
+
+		term_cprintf(C_BLUE, "Slave PHY delays:     ");
+		term_cprintf(C_BLUE, "TX: ");
+		term_cprintf(C_WHITE, "%11.3f nsec, ",
+			     ppsi_servo_local.delta_tx_s/1000.0);
+		term_cprintf(C_BLUE, "RX: ");
+		term_cprintf(C_WHITE, "%11.3f nsec\n",
+			     ppsi_servo_local.delta_rx_s/1000.0);
 	} else {
 		/* TJP: commented out fields are present on the SPEC,
 		 *      does the switch have similar fields?
@@ -573,18 +637,23 @@ void show_servo(void)
 void show_temperatures(void)
 {
 	if ((mode == SHOW_GUI) || (mode & WEB_INTERFACE)) {
-		term_cprintf(C_BLUE, "\nTemperatures:\n");
+		if (mode == SHOW_GUI) {
+/*                                              -------------------------------------------------------------------------------*/
+			term_cprintf(C_CYAN, "\n-------------------------------- Temperatures ---------------------------------\n");
+		} else {
+			term_cprintf(C_CYAN, "\nTemperatures:\n");
+		}
 
-		term_cprintf(C_GREY, "FPGA: ");
+		term_cprintf(C_BLUE, "FPGA: ");
 		term_cprintf(C_WHITE, "%2.2f ",
 			     temp_sensors_local.fpga/256.0);
-		term_cprintf(C_GREY, "PLL: ");
+		term_cprintf(C_BLUE, "PLL: ");
 		term_cprintf(C_WHITE, "%2.2f ",
 			     temp_sensors_local.pll/256.0);
-		term_cprintf(C_GREY, "PSL: ");
+		term_cprintf(C_BLUE, "PSL: ");
 		term_cprintf(C_WHITE, "%2.2f ",
 			     temp_sensors_local.psl/256.0);
-		term_cprintf(C_GREY, "PSR: ");
+		term_cprintf(C_BLUE, "PSR: ");
 		term_cprintf(C_WHITE, "%2.2f\n",
 			     temp_sensors_local.psr/256.0);
 	} else {
@@ -608,9 +677,9 @@ void show_all(void)
 
 	if (mode == SHOW_GUI) {
 		term_clear();
-		term_pcprintf(1, 1, C_BLUE,
-			      "WR Switch Sync Monitor %s[q = quit]\n\n",
-			      __GIT_VER__);
+		term_pcprintf(1, 1, C_BLUE, "WR Switch Sync Monitor ");
+		term_cprintf(C_WHITE, "%s", __GIT_VER__);
+		term_cprintf(C_BLUE, " [q = quit]\n\n");
 	}
 
 	hal_alive = (hal_head->pid && (kill(hal_head->pid, 0) == 0))
@@ -621,24 +690,16 @@ void show_all(void)
 	if (mode & SHOW_WR_TIME) {
 		if (ppsi_alive)
 			show_time();
-		else if (mode == SHOW_GUI)
-			term_cprintf(C_RED, "\nPPSI is dead!\n");
 		else if (mode == SHOW_ALL)
 			printf("PPSI is dead!\n");
 	}
 
 	if ((mode & (SHOW_ALL_PORTS|WEB_INTERFACE)) || mode == SHOW_GUI) {
-		if (hal_alive)
-			show_ports();
-		else if (mode == SHOW_GUI)
-			term_cprintf(C_RED, "\nHAL is dead!\n");
-		else if (mode == SHOW_ALL)
-			printf("HAL is dead!\n");
+		show_ports(hal_alive);
 	}
 
 	if (mode & SHOW_SERVO || mode == SHOW_GUI) {
-		if (ppsi_alive)
-			show_servo();
+		show_servo(ppsi_alive);
 	}
 
 	if (mode & (SHOW_TEMPERATURES | WEB_INTERFACE) || mode == SHOW_GUI) {
@@ -733,10 +794,10 @@ int main(int argc, char *argv[])
 		if (term_poll(10)) {
 			int c = term_get();
 
-			if(c=='q')
+			if (c == 'q')
 				break;
 
-			if(c=='t') {
+			if (c == 't') {
 				int rval;
 				track_onoff = 1-track_onoff;
 				if (ptp_ch_pid != ppsi_head->pid) {
-- 
GitLab