mirror of
https://github.com/alemidev/scope-tui.git
synced 2024-11-23 14:14:48 +01:00
feat: super rudimentary triggering
This commit is contained in:
parent
aed3598ef7
commit
ffd14b2a36
2 changed files with 25 additions and 1 deletions
|
@ -47,6 +47,7 @@ pub struct AppConfig {
|
||||||
width: u32,
|
width: u32,
|
||||||
vectorscope: bool,
|
vectorscope: bool,
|
||||||
pub references: bool,
|
pub references: bool,
|
||||||
|
pub triggering: bool,
|
||||||
|
|
||||||
pub marker_type: symbols::Marker,
|
pub marker_type: symbols::Marker,
|
||||||
pub graph_type: GraphType,
|
pub graph_type: GraphType,
|
||||||
|
@ -161,6 +162,7 @@ impl From::<&crate::Args> for App {
|
||||||
palette: vec![Color::Red, Color::Yellow],
|
palette: vec![Color::Red, Color::Yellow],
|
||||||
scale: args.range,
|
scale: args.range,
|
||||||
width: args.buffer / 4, // TODO It's 4 because 2 channels and 2 bytes per sample!
|
width: args.buffer / 4, // TODO It's 4 because 2 channels and 2 bytes per sample!
|
||||||
|
triggering: args.triggering,
|
||||||
vectorscope: args.vectorscope,
|
vectorscope: args.vectorscope,
|
||||||
references: !args.no_reference,
|
references: !args.no_reference,
|
||||||
marker_type, graph_type,
|
marker_type, graph_type,
|
||||||
|
|
24
src/main.rs
24
src/main.rs
|
@ -61,6 +61,10 @@ struct Args {
|
||||||
#[arg(long, value_name = "N", default_value_t = 32)]
|
#[arg(long, value_name = "N", default_value_t = 32)]
|
||||||
server_buffer: u32,
|
server_buffer: u32,
|
||||||
|
|
||||||
|
/// Start drawing at first rising edge
|
||||||
|
#[arg(long, default_value_t = false)]
|
||||||
|
triggering: bool,
|
||||||
|
|
||||||
/// Don't draw reference line
|
/// Don't draw reference line
|
||||||
#[arg(long, default_value_t = false)]
|
#[arg(long, default_value_t = false)]
|
||||||
no_reference: bool,
|
no_reference: bool,
|
||||||
|
@ -171,6 +175,20 @@ fn run_app<T : Backend>(args: Args, terminal: &mut Terminal<T>) -> Result<(), io
|
||||||
channels = fmt.oscilloscope(&mut buffer, 2);
|
channels = fmt.oscilloscope(&mut buffer, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if app.cfg.triggering {
|
||||||
|
// TODO allow to customize channel to use for triggering and threshold
|
||||||
|
if let Some(ch) = channels.get(0) {
|
||||||
|
let mut discard = 0;
|
||||||
|
for i in 0..ch.len() { // seek to first sample rising through threshold
|
||||||
|
if i + 1 < ch.len() && ch[i] <= 0.0 && ch[i+1] > 0.0 { // triggered
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
discard += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ch in channels.iter_mut() {
|
||||||
|
*ch = ch[discard..].to_vec();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,6 +264,9 @@ fn run_app<T : Backend>(args: Args, terminal: &mut Terminal<T>) -> Result<(), io
|
||||||
KeyCode::Char('v') => app.set_vectorscope(!app.vectorscope()),
|
KeyCode::Char('v') => app.set_vectorscope(!app.vectorscope()),
|
||||||
KeyCode::Char('s') => app.set_scatter(!app.scatter()),
|
KeyCode::Char('s') => app.set_scatter(!app.scatter()),
|
||||||
KeyCode::Char('h') => app.cfg.references = !app.cfg.references,
|
KeyCode::Char('h') => app.cfg.references = !app.cfg.references,
|
||||||
|
KeyCode::Char('t') => app.cfg.triggering = !app.cfg.triggering,
|
||||||
|
KeyCode::Up => {},
|
||||||
|
KeyCode::Down => {},
|
||||||
_ => {},
|
_ => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -298,8 +319,9 @@ fn block(app: &App, sample_rate: f32, framerate: u32) -> Block {
|
||||||
b = b.title(
|
b = b.title(
|
||||||
Span::styled(
|
Span::styled(
|
||||||
format!(
|
format!(
|
||||||
"TUI {} -- {} mode -- range {} -- {} samples -- {:.1} kHz -- {} fps",
|
"TUI {} -- {}{} mode -- range {} -- {} samples -- {:.1} kHz -- {} fps",
|
||||||
if app.vectorscope() { "Vectorscope" } else { "Oscilloscope" },
|
if app.vectorscope() { "Vectorscope" } else { "Oscilloscope" },
|
||||||
|
if app.cfg.triggering { "triggered " } else { "" },
|
||||||
if app.scatter() { "scatter" } else { "line" },
|
if app.scatter() { "scatter" } else { "line" },
|
||||||
app.scale(), app.width(), sample_rate / 1000.0, framerate,
|
app.scale(), app.width(), sample_rate / 1000.0, framerate,
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue