Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
Software for White Rabbit PTP Core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
32
Issues
32
List
Board
Labels
Milestones
Merge Requests
5
Merge Requests
5
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Software for White Rabbit PTP Core
Commits
5491ed9d
Commit
5491ed9d
authored
Feb 05, 2021
by
Adam Wujek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
monitor: split print of description and data
Signed-off-by:
Adam Wujek
<
adam.wujek@creotech.pl
>
parent
122a89e3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
98 additions
and
67 deletions
+98
-67
monitor_ppsi.c
monitor/monitor_ppsi.c
+98
-67
No files found.
monitor/monitor_ppsi.c
View file @
5491ed9d
...
...
@@ -31,29 +31,37 @@
#error ("WRPC monitor requires full version of pp_printf implementation")
#endif
/* internal "last", exported to shell command */
uint32_t
wrc_stats_last
;
#define WRC_MONITOR_REFRESH_PERIOD (1 * TICS_PER_SECOND)
#define WRC_DIAG_REFRESH_PERIOD (1 * TICS_PER_SECOND)
#define DESCRIPTION_MAIN 1
#define DESCRIPTION_SERVO 2
#define DESCRIPTION_WR_SERVO 4
/* protocol extension data */
#define IS_PROTO_EXT_INFO_AVAILABLE(proto_id) \
((proto_id < sizeof(proto_ext_info) / sizeof(struct proto_ext_info_t)) \
&& (proto_ext_info[proto_id].valid == 1))
/* internal "last", exported to shell command */
uint32_t
wrc_stats_last
;
extern
struct
pp_instance
ppi_static
;
extern
struct
pp_globals
ppg_static
;
extern
struct
pp_globals
*
ppg
;
const
char
*
ptp_unknown_str
=
"unknown"
;
extern
char
wrc_hw_name
[
HW_NAME_LENGTH
];
static
int
redraw_gui_description
=
1
;
static
int
redraw_servo
_description
=
1
;
static
int
prev_gui_description
=
0
;
static
int
gui
_description
=
1
;
static
uint32_t
next_update_ticks
;
void
print_main_description
(
void
);
void
print_main_data
(
void
);
void
print_servo_description
(
void
);
void
print_servo_data
(
struct
pp_instance
*
ppi
);
void
print_aux_data
(
void
);
int
wrc_wr_diags
(
void
);
void
show_servo
(
struct
pp_instance
*
ppi
);
/* protocol extension data */
#define IS_PROTO_EXT_INFO_AVAILABLE(proto_id) \
((proto_id < sizeof(proto_ext_info) / sizeof(struct proto_ext_info_t)) \
&& (proto_ext_info[proto_id].valid == 1))
struct
proto_ext_info_t
{
int
valid
;
...
...
@@ -326,13 +334,54 @@ int time(void *a)
void
redraw_gui
(
void
)
{
term_clear
();
redraw_gui_description
=
1
;
redraw_servo_description
=
1
;
prev_gui_description
=
0
;
next_update_ticks
=
0
;
}
void
print_gui_description
(
void
)
int
wrc_mon_gui
(
void
)
{
static
uint32_t
last_servo_count
;
struct
pp_servo
*
s
=
SRV
(
ppg
->
pp_instances
);
/* print new values only if time elapsed or servo's update_count
* increased */
if
(
prev_gui_description
!=
gui_description
)
{
term_clear
();
if
(
gui_description
&
DESCRIPTION_MAIN
)
{
print_main_description
();
}
if
(
gui_description
&
DESCRIPTION_SERVO
)
{
print_servo_description
();
}
next_update_ticks
=
0
;
term_clear_to_end
();
prev_gui_description
=
gui_description
;
return
1
;
}
/* update on timeout or servo update */
if
(
time_before
(
timer_get_tics
(),
next_update_ticks
)
&&
last_servo_count
==
s
->
update_count
)
return
0
;
next_update_ticks
=
timer_get_tics
()
+
WRC_MONITOR_REFRESH_PERIOD
;
last_servo_count
=
s
->
update_count
;
prev_gui_description
=
gui_description
;
gui_description
=
DESCRIPTION_MAIN
;
print_main_data
();
/* Print servo */
/* FIXME: add support of multiple instances */
print_servo_data
(
ppg
->
pp_instances
);
print_aux_data
();
/* clear colors */
pp_printf
(
"\e[m
\n
"
);
/* clear till the end of a screen */
term_clear_to_end
();
return
1
;
}
void
print_main_description
(
void
)
{
int
i
;
int
ndevs
;
...
...
@@ -371,36 +420,19 @@ void print_gui_description(void)
cprintf
(
C_CYAN
,
"
\n
--------------------------- Synchronization status ----------------------------"
);
}
int
wrc_mon_gui
(
void
)
void
print_main_data
(
void
)
{
static
uint32_t
last_servo_count
;
struct
hal_port_state
state
;
int
tx
,
rx
;
struct
spll_aux_clock_status
aux_stat
;
int
leap_sec
,
tmp
;
uint64_t
sec
;
uint32_t
nsec
;
struct
pp_servo
*
s
=
SRV
(
ppg
->
pp_instances
);
char
buf
[
20
];
uint8_t
mac
[
ETH_ALEN
];
int
n_out
,
i
;
int
ndevs
;
int
i
;
const
char
*
pll_locking_state_name
;
/* print new values only if time elapsed or servo's update_count
* increased */
if
(
time_before
(
timer_get_tics
(),
next_update_ticks
)
&&
last_servo_count
==
s
->
update_count
)
return
0
;
next_update_ticks
=
timer_get_tics
()
+
WRC_MONITOR_REFRESH_PERIOD
;
last_servo_count
=
s
->
update_count
;
if
(
redraw_gui_description
)
{
print_gui_description
();
redraw_gui_description
=
0
;
}
shw_pps_gen_get_time
(
&
sec
,
&
nsec
);
/* TAI Time */
...
...
@@ -408,8 +440,8 @@ int wrc_mon_gui(void)
/* UTC offset */
wrc_ptp_get_leapsec
(
&
i
,
&
n_out
/* dummy */
);
pprintf
(
4
,
44
,
"%d"
,
i
);
wrc_ptp_get_leapsec
(
&
leap_sec
,
&
tmp
/* dummy */
);
pprintf
(
4
,
44
,
"%d"
,
leap_sec
);
/* Timing mode */
pprintf
(
5
,
11
,
getStateAsString
(
timing_mode_state
,
WRPC_ARCH_G
(
ppg
)
->
timingMode
));
...
...
@@ -489,9 +521,6 @@ int wrc_mon_gui(void)
/* FIXME: should be independent for each interface */
wrpc_get_port_state
(
&
state
,
NULL
);
// if (!state.state) {
// continue;
// }
if
(
state
.
locked
)
pcprintf
(
14
,
9
,
C_GREEN
,
"Lock"
);
...
...
@@ -615,14 +644,18 @@ int wrc_mon_gui(void)
/* ----------------------------------------------------------------------------------------------------------------------- */
}
/* Print servo */
/* FIXME: add support of multiple instances */
show_servo
(
ppg
->
pp_instances
);
return
;
}
void
print_aux_data
(
void
)
{
int
n_out
,
i
;
struct
spll_aux_clock_status
aux_stat
;
spll_get_num_channels
(
NULL
,
&
n_out
);
for
(
i
=
0
;
i
<
n_out
-
1
;
i
++
)
{
cprintf
(
C_MAGENTA
,
"Aux clock %d status: "
,
i
);
cprintf
(
C_MAGENTA
,
"
\n\n
Aux clock %d status: "
,
i
);
aux_stat
=
spll_get_aux_status
(
i
);
...
...
@@ -640,19 +673,12 @@ int wrc_mon_gui(void)
cprintf
(
C_GREEN
,
", ready"
);
cprintf
(
C_WHITE
,
" (AUX-to-WR offset: %d ps)"
,
aux_stat
.
phase
);
}
pp_printf
(
"
\n
"
);
}
/* clear colors */
pp_printf
(
"\e[m
\n
"
);
/* clear till the end of a screen */
term_clear_to_end
();
return
0
;
return
;
}
void
print_servo_description
(
int
wr_servo
)
void
print_servo_description
()
{
pcprintf
(
18
,
1
,
C_BLUE
,
"Servo state:
\n
"
);
...
...
@@ -673,21 +699,20 @@ void print_servo_description(int wr_servo)
pp_printf
(
"egressLatency :
\n
"
);
pp_printf
(
"semistaticLatency:
\n
"
);
pp_printf
(
"offsetFromMaster :
\n
"
);
if
(
wr_servo
)
{
if
(
gui_description
&
DESCRIPTION_WR_SERVO
)
{
pp_printf
(
"Phase setpoint :
\n
"
);
pp_printf
(
"Skew :
\n
"
);
}
pp_printf
(
"Update counter :
\n
"
);
if
(
wr_servo
)
{
if
(
gui_description
&
DESCRIPTION_WR_SERVO
)
{
pp_printf
(
"Master PHY delays TX:
\n
"
);
/* RX: */
pp_printf
(
"Slave PHY delays TX:
\n
"
);
/* RX: */
}
}
void
show_servo
(
struct
pp_instance
*
ppi
)
void
print_servo_data
(
struct
pp_instance
*
ppi
)
{
wrh_servo_t
*
wr_servo
;
static
wrh_servo_t
*
wr_servo_prev
;
wr_servo_ext_t
*
wr_servo_ext
=
NULL
;
char
buf
[
128
];
int
row_offset
;
...
...
@@ -698,27 +723,33 @@ void show_servo(struct pp_instance *ppi)
pprintf
(
18
,
1
,
""
);
if
(
ppi
->
state
!=
PPS_SLAVE
||
!
(
ppi
->
servo
->
flags
&
PP_SERVO_FLAG_VALID
))
{
cprintf
(
C_RED
,
"Link down, master mode or sync info not valid"
);
term_clear_to_end
();
redraw_servo_description
=
1
;
return
;
}
wr_servo
=
(
ppi
->
protocol_extension
==
PPSI_EXT_WR
&&
ppi
->
extState
==
PP_EXSTATE_ACTIVE
)
?
(
wrh_servo_t
*
)
ppi
->
ext_data
:
NULL
;
if
(
wr_servo_prev
!=
wr_servo
)
redraw_servo_description
=
1
;
wr_servo_prev
=
wr_servo
;
/* should print servio description */
gui_description
|=
DESCRIPTION_SERVO
;
if
(
wr_servo
)
{
wr_servo_ext
=
&
((
struct
wr_data
*
)
wr_servo
)
->
servo_ext
;
}
if
(
redraw_servo_description
)
{
term_clear_to_end
();
print_servo_description
(
wr_servo
?
1
:
0
);
redraw_servo_description
=
0
;
}
/* should print WR servio description */
gui_description
|=
wr_servo
?
DESCRIPTION_WR_SERVO
:
0
;
/* Avoid printing new data if change in description is expected.
* This avoids extra redraw of data values */
if
(
prev_gui_description
!=
(
gui_description
&
(
DESCRIPTION_MAIN
|
DESCRIPTION_SERVO
|
DESCRIPTION_WR_SERVO
)
)
)
return
;
if
(
pe_info
->
lastt
&&
time
(
NULL
)
-
pe_info
->
lastt
>
5
)
{
pcprintf
(
18
,
23
,
C_RED
,
"--- not updating ---
\n
"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment