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()
|
print()
|
||||||
|
|
||||||
if enable_tui:
|
if enable_tui:
|
||||||
tui_record(packet_filter, vcd_sink, enable_verbose_trace)
|
tui_record(signals, packet_filter, vcd_sink, enable_verbose_trace)
|
||||||
else:
|
else:
|
||||||
record(packet_filter, vcd_sink, enable_verbose_trace)
|
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, total=self.maximum)
|
||||||
self.progress.update(self.progress_task, completed=value, visible=True)
|
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:
|
try:
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
from rich.text import Text
|
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.progress import Progress, TextColumn, BarColumn, TaskProgressColumn, MofNCompleteColumn
|
||||||
from rich.live import Live
|
from rich.live import Live
|
||||||
from rich.align import Align
|
from rich.align import Align
|
||||||
|
from rich.table import Table
|
||||||
except:
|
except:
|
||||||
print("error: TUI mode requires the rich package")
|
print("error: TUI mode requires the rich package")
|
||||||
exit()
|
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}"))
|
noise_buffer = NoiseLineBuffer(lambda text: console.print(f"[blue]{text}"))
|
||||||
trace_text = Text("")
|
trace_text = Text("")
|
||||||
|
|
||||||
|
# set up progress bars
|
||||||
progress_colums = [
|
progress_colums = [
|
||||||
TextColumn("[progress.description]{task.description}"),
|
TextColumn("[progress.description]{task.description}"),
|
||||||
BarColumn(bar_width=80, complete_style="gold3", finished_style="red"),
|
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)
|
render_time_tm = TotalMaximumProgressUpdater(diag_progress, render_time)
|
||||||
comp_time_tm = TotalMaximumProgressUpdater(diag_progress, comp_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:
|
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.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))
|
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 bstr in sys.stdin.buffer:
|
||||||
for b in bstr:
|
for b in bstr:
|
||||||
packet_filter.process(b)
|
packet_filter.process(b)
|
||||||
live_status.update(diag_progress)
|
live_status.update(generate_table(diag_progress, signal_values))
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
diag_progress.stop()
|
diag_progress.stop()
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user