WIP Signal TUI view
This commit is contained in:
parent
90787ec97e
commit
c670df3ce0
33
st_record.py
33
st_record.py
@ -538,7 +538,7 @@ def main():
|
||||
print()
|
||||
|
||||
if enable_tui:
|
||||
tui_record(packet_filter, vcd_sink, enable_verbose_trace)
|
||||
tui_record(signals, packet_filter, vcd_sink, enable_verbose_trace)
|
||||
else:
|
||||
record(packet_filter, vcd_sink, enable_verbose_trace)
|
||||
|
||||
@ -606,7 +606,7 @@ class TotalMaximumProgressUpdater:
|
||||
self.progress.update(self.progress_task, total=self.maximum)
|
||||
self.progress.update(self.progress_task, completed=value, visible=True)
|
||||
|
||||
def tui_record(packet_filter, vcd_sink, enable_verbose_trace):
|
||||
def tui_record(signals, packet_filter, vcd_sink, enable_verbose_trace):
|
||||
try:
|
||||
from rich.console import Console
|
||||
from rich.text import Text
|
||||
@ -614,6 +614,7 @@ def tui_record(packet_filter, vcd_sink, enable_verbose_trace):
|
||||
from rich.progress import Progress, TextColumn, BarColumn, TaskProgressColumn, MofNCompleteColumn
|
||||
from rich.live import Live
|
||||
from rich.align import Align
|
||||
from rich.table import Table
|
||||
except:
|
||||
print("error: TUI mode requires the rich package")
|
||||
exit()
|
||||
@ -626,6 +627,7 @@ def tui_record(packet_filter, vcd_sink, enable_verbose_trace):
|
||||
noise_buffer = NoiseLineBuffer(lambda text: console.print(f"[blue]{text}"))
|
||||
trace_text = Text("")
|
||||
|
||||
# set up progress bars
|
||||
progress_colums = [
|
||||
TextColumn("[progress.description]{task.description}"),
|
||||
BarColumn(bar_width=80, complete_style="gold3", finished_style="red"),
|
||||
@ -646,6 +648,31 @@ def tui_record(packet_filter, vcd_sink, enable_verbose_trace):
|
||||
render_time_tm = TotalMaximumProgressUpdater(diag_progress, render_time)
|
||||
comp_time_tm = TotalMaximumProgressUpdater(diag_progress, comp_time)
|
||||
|
||||
# set up table layout and signal view
|
||||
signal_values = {name.split(":")[0]:None for name in signals}
|
||||
|
||||
|
||||
def on_any_value(time,signal,value,sub):
|
||||
signal_values[signal].plain(value)
|
||||
|
||||
vcd_sink.onanyvalue(on_any_value)
|
||||
|
||||
def generate_table(diag_progress, signal_values):
|
||||
grid = Table.grid(expand=True)
|
||||
grid.add_column(justify="left")
|
||||
grid.add_column(justify="left")
|
||||
grid.add_column(justify="left")
|
||||
grid.add_row(None) # this empty row is there to not leave behind a render on interrupt
|
||||
|
||||
for sig in signals:
|
||||
name, sigtype = sig.split(":")
|
||||
value = signal_values[name]
|
||||
text = Text("X" if value is None else value, style="red" if value is None else "green")
|
||||
grid.add_row(sigtype, name, text)
|
||||
|
||||
grid.add_row("Diagnostics", diag_progress)
|
||||
return grid
|
||||
|
||||
with Live(console=console, transient=True) as live_status:
|
||||
vcd_sink.onvalue("ST.BufferHealth", lambda _,value,sub: diag_progress.update(buffer_health, completed=value, visible=True))
|
||||
vcd_sink.onvalue("ST.BufferItems", lambda _,value,sub: buffer_items_tm.update(value))
|
||||
@ -660,7 +687,7 @@ def tui_record(packet_filter, vcd_sink, enable_verbose_trace):
|
||||
for bstr in sys.stdin.buffer:
|
||||
for b in bstr:
|
||||
packet_filter.process(b)
|
||||
live_status.update(diag_progress)
|
||||
live_status.update(generate_table(diag_progress, signal_values))
|
||||
except KeyboardInterrupt:
|
||||
diag_progress.stop()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user