autd3_driver/firmware/v12/cpu/
mod.rs

1mod error;
2
3use autd3_core::link::MsgId;
4pub use autd3_core::link::{Header, RxMessage, TxMessage};
5
6pub use error::check_firmware_err;
7
8#[doc(hidden)]
9pub fn check_if_msg_is_processed(msg_id: MsgId, rx: &[RxMessage]) -> impl Iterator<Item = bool> {
10    rx.iter().map(move |r| {
11        msg_id.get() == r.ack().msg_id() || r.ack().err() == error::INVALID_MESSAGE_ID
12    })
13}
14
15#[cfg(test)]
16mod tests {
17    use autd3_core::link::{Ack, MsgId};
18    use itertools::Itertools;
19
20    use super::*;
21
22    #[rstest::rstest]
23    #[test]
24    #[case::success(vec![
25        RxMessage::new(0, Ack::new().with_err(0).with_msg_id(0)),
26        RxMessage::new(0, Ack::new().with_err(0).with_msg_id(0)),
27        RxMessage::new(0, Ack::new().with_err(0).with_msg_id(0)),
28    ], vec![true, true, true])]
29    #[case::success(vec![
30        RxMessage::new(0, Ack::new().with_err(0).with_msg_id(1)),
31        RxMessage::new(0, Ack::new().with_err(0).with_msg_id(0)),
32        RxMessage::new(0, Ack::new().with_err(0).with_msg_id(2)),
33    ], vec![false, true, false])]
34    fn test_check_if_msg_is_processed(#[case] rx: Vec<RxMessage>, #[case] expect: Vec<bool>) {
35        assert_eq!(
36            expect,
37            check_if_msg_is_processed(MsgId::new(0), &rx).collect_vec()
38        );
39    }
40}