cnt_cli 0.2.0

Command line interface for the embedded counters crate - cnt
use cnt_core::{Counters, CountersBlock};
use probe_rs::{Core, MemoryInterface};

pub fn read(counters: &mut Counters, mut core: Core) -> anyhow::Result<()> {
    if counters.is_empty() {
        println!("No counters found");
        return Ok(());
    }

    if let Some(cnt) = counters.ram_counters_mut() {
        read_counters(cnt, &mut core)?;
    }
    if let Some(cnt) = counters.bkp_counters_mut() {
        read_counters(cnt, &mut core)?;
    }

    Ok(())
}

fn read_counters(counters: &mut CountersBlock, core: &mut Core) -> anyhow::Result<()> {
    let mut data = vec![0u8; counters.buffer().size as usize];
    core.read_mem_32bit(counters.buffer().addr, &mut data)?;
    counters.read_values(&data)?;
    for (cnt, value) in counters.values() {
        println!("{}: {} {:?}", cnt.name, value, cnt.location);
    }
    Ok(())
}