1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
pub struct FlashProgress { handler: Box<dyn Fn(ProgressEvent)>, } impl FlashProgress { pub fn new(handler: impl Fn(ProgressEvent) + 'static) -> Self { Self { handler: Box::new(handler), } } pub fn emit(&self, event: ProgressEvent) { (self.handler)(event); } pub fn initialized(&self, total_pages: usize, total_sector_size: usize, page_size: u32) { self.emit(ProgressEvent::Initialized { total_pages, total_sector_size, page_size, }); } pub fn started_flashing(&self) { self.emit(ProgressEvent::StartedFlashing); } pub fn started_erasing(&self) { self.emit(ProgressEvent::StartedErasing); } pub fn page_programmed(&self, size: u32, time: u128) { self.emit(ProgressEvent::PageFlashed { size, time }); } pub fn sector_erased(&self, size: u32, time: u128) { self.emit(ProgressEvent::SectorErased { size, time }); } pub fn finished_programming(&self) { self.emit(ProgressEvent::FinishedProgramming); } pub fn finished_erasing(&self) { self.emit(ProgressEvent::FinishedErasing); } } pub enum ProgressEvent { Initialized { total_pages: usize, total_sector_size: usize, page_size: u32, }, StartedFlashing, StartedErasing, PageFlashed { size: u32, time: u128, }, SectorErased { size: u32, time: u128, }, FinishedProgramming, FinishedErasing, }