use gdbstub::{
arch::Arch,
target::{TargetError, ext::flash::Flash},
};
use probe_rs::flashing::DownloadOptions;
use super::RuntimeTarget;
impl Flash for RuntimeTarget<'_> {
fn flash_erase(
&mut self,
_start_addr: <Self::Arch as Arch>::Usize,
_length: <Self::Arch as Arch>::Usize,
) -> gdbstub::target::TargetResult<(), Self> {
let _drop = self.flash_loader.take();
Ok(())
}
fn flash_write(
&mut self,
start_addr: <Self::Arch as Arch>::Usize,
data: &[u8],
) -> gdbstub::target::TargetResult<(), Self> {
let flash_loader = self
.flash_loader
.get_or_insert_with(|| self.session.lock().target().flash_loader());
flash_loader
.add_data(start_addr, data)
.map_err(|_e| TargetError::NonFatal)?;
Ok(())
}
fn flash_done(&mut self) -> gdbstub::target::TargetResult<(), Self> {
let flash_loader = self.flash_loader.as_mut().ok_or(TargetError::NonFatal)?;
let mut session = self.session.lock();
flash_loader
.commit(&mut session, DownloadOptions::default())
.map_err(|_e| TargetError::NonFatal)?;
let _drop = self.flash_loader.take();
Ok(())
}
}