From 76dc34b115f0644d8482456e55eda8e7e5310219 Mon Sep 17 00:00:00 2001 From: ede1998 Date: Fri, 31 Jul 2026 23:20:55 +0200 Subject: [PATCH] retry on failure --- src/bin/main.rs | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/bin/main.rs b/src/bin/main.rs index 4325f94..c1d509a 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -166,15 +166,16 @@ fn main() -> ! { ) { Ok(uid) => { info!("uid = {uid:?}"); - for i in (4..=231) { - let result = pn532.process(&Request::ntag_read(i), 17, ms_1000).unwrap(); - let success = result.first().is_some_and(|x| *x == 0); - if success { - // info!("page {i}: {:02x?}", result); - data.extend(&result[1..5]); - } else { - info!("err {i}: {:02x?}", result); + for i in (0x0b..=230) { + let mut parse_result = Err(()); + while parse_result.is_err() { + let Ok(result) = pn532.process(&Request::ntag_read(i), 17, ms_1000) else { + continue; + }; + parse_result = parse_nfc(i, result); } + let bytes = parse_result.unwrap(); + data.extend(bytes); } info!("Full data: {data:02x?}"); data.clear(); @@ -191,6 +192,19 @@ fn main() -> ! { // for inspiration have a look at the examples at https://github.com/esp-rs/esp-hal/tree/esp-hal-v1.1.0/examples } +fn parse_nfc(iteration: u8, bytes: &[u8]) -> Result<[u8; 4], ()> { + let success = bytes.first().is_some_and(|x| *x == 0); + if success { + // info!("page {i}: {:02x?}", result); + let mut arr = [0; 4]; + arr.copy_from_slice(&bytes[1..5]); + Ok(arr) + } else { + info!("err {iteration}: {:02x?}", bytes); + Err(()) + } +} + struct TimerWrapper { // TODO Is that timer accurate enough? start: Instant,