write
can now open a monitor right after flashing
This commit is contained in:
@@ -73,7 +73,11 @@ pub struct ArgWrite {
|
|||||||
|
|
||||||
#[argp(switch)]
|
#[argp(switch)]
|
||||||
#[argp(description = "Write individual sections to Flash rather than performing a single write. Only applies to Intel HEX.")]
|
#[argp(description = "Write individual sections to Flash rather than performing a single write. Only applies to Intel HEX.")]
|
||||||
pub write_individual: bool
|
pub write_individual: bool,
|
||||||
|
|
||||||
|
#[argp(switch)]
|
||||||
|
#[argp(description = "Open a serial monitor right after flashing.")]
|
||||||
|
pub monitor: bool
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(FromArgs)]
|
#[derive(FromArgs)]
|
||||||
|
27
src/main.rs
27
src/main.rs
@@ -14,6 +14,7 @@ use monitor::Monitor;
|
|||||||
|
|
||||||
mod target;
|
mod target;
|
||||||
use target::{PhysicalTarget, Target};
|
use target::{PhysicalTarget, Target};
|
||||||
|
use termion::event::Key;
|
||||||
|
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
@@ -132,9 +133,9 @@ pub fn write_chip_chunk(data: &[u8], target: &mut impl Target, mut start: usize,
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_chip(args: ArgWrite, target: &mut PhysicalTarget) -> Result<(), Error> {
|
fn write_chip_data(args: &ArgWrite, target: &mut PhysicalTarget) -> Result<(), Error> {
|
||||||
if args.bin {
|
if args.bin {
|
||||||
let mut file = std::fs::read(args.path)?;
|
let mut file = std::fs::read(&args.path)?;
|
||||||
|
|
||||||
let size = args.end - args.start + 1;
|
let size = args.end - args.start + 1;
|
||||||
|
|
||||||
@@ -145,7 +146,7 @@ fn write_chip(args: ArgWrite, target: &mut PhysicalTarget) -> Result<(), Error>
|
|||||||
return write_chip_chunk(&file, target, args.start, !args.skip_verify)
|
return write_chip_chunk(&file, target, args.start, !args.skip_verify)
|
||||||
}
|
}
|
||||||
|
|
||||||
let hexreader = IntelHexReader::init(std::fs::File::open(args.path)?);
|
let hexreader = IntelHexReader::init(std::fs::File::open(&args.path)?);
|
||||||
|
|
||||||
if args.write_individual {
|
if args.write_individual {
|
||||||
let mut last_addr = 0;
|
let mut last_addr = 0;
|
||||||
@@ -198,6 +199,24 @@ fn write_chip(args: ArgWrite, target: &mut PhysicalTarget) -> Result<(), Error>
|
|||||||
write_chip_chunk(&buf[first_addr..=last_addr], target, first_addr, !args.skip_verify)
|
write_chip_chunk(&buf[first_addr..=last_addr], target, first_addr, !args.skip_verify)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn write_chip(args: ArgWrite, target: &mut PhysicalTarget) -> Result<(), Error> {
|
||||||
|
loop {
|
||||||
|
write_chip_data(&args, target)?;
|
||||||
|
|
||||||
|
if !args.monitor { break }
|
||||||
|
|
||||||
|
let cause = Monitor::new()
|
||||||
|
.add_hook(Key::Ctrl('f'), "Re-flash target")
|
||||||
|
.run(target.port())?;
|
||||||
|
|
||||||
|
if cause != Key::Ctrl('f') { break }
|
||||||
|
|
||||||
|
target.resync_target()?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn erase_chip(_args: ArgErase, target: &mut PhysicalTarget) -> Result<(), Error> {
|
fn erase_chip(_args: ArgErase, target: &mut PhysicalTarget) -> Result<(), Error> {
|
||||||
target.erase()?;
|
target.erase()?;
|
||||||
|
|
||||||
@@ -206,8 +225,6 @@ fn erase_chip(_args: ArgErase, target: &mut PhysicalTarget) -> Result<(), Error>
|
|||||||
|
|
||||||
fn monitor_chip(_args: ArgMonitor, target: &mut PhysicalTarget) -> Result<(), Error> {
|
fn monitor_chip(_args: ArgMonitor, target: &mut PhysicalTarget) -> Result<(), Error> {
|
||||||
let _ = Monitor::new().run(target.port())?;
|
let _ = Monitor::new().run(target.port())?;
|
||||||
target.resync_target().unwrap();
|
|
||||||
target.read_info(0x00, 0x00).unwrap();
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -21,8 +21,9 @@ impl Monitor {
|
|||||||
Self { hooks }
|
Self { hooks }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_hook(&mut self, key: Key, desc: &'static str) {
|
pub fn add_hook(&mut self, key: Key, desc: &'static str) -> &mut Self {
|
||||||
self.hooks.push((key, desc));
|
self.hooks.push((key, desc));
|
||||||
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(&mut self, port: &mut SerialPort) -> Result<Key, Error> {
|
pub fn run(&mut self, port: &mut SerialPort) -> Result<Key, Error> {
|
||||||
@@ -32,6 +33,7 @@ impl Monitor {
|
|||||||
port.set_dtr(false)?;
|
port.set_dtr(false)?;
|
||||||
port.set_rts(false)?;
|
port.set_rts(false)?;
|
||||||
|
|
||||||
|
println!();
|
||||||
println!("Monitor controls:");
|
println!("Monitor controls:");
|
||||||
|
|
||||||
for (key, desc) in &self.hooks {
|
for (key, desc) in &self.hooks {
|
||||||
|
Reference in New Issue
Block a user