autd3_driver/firmware/cpu/
mod.rs1mod 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
19 use super::*;
20
21 #[rstest::rstest]
22 #[case::success(vec![
23 RxMessage::new(0, Ack::new(0, 0)),
24 RxMessage::new(0, Ack::new(0, 0)),
25 RxMessage::new(0, Ack::new(0, 0)),
26 ], vec![true, true, true])]
27 #[case::success(vec![
28 RxMessage::new(0, Ack::new(1, 0)),
29 RxMessage::new(0, Ack::new(0, 0)),
30 RxMessage::new(0, Ack::new(2, 0)),
31 ], vec![false, true, false])]
32 fn test_check_if_msg_is_processed(#[case] rx: Vec<RxMessage>, #[case] expect: Vec<bool>) {
33 assert_eq!(
34 expect,
35 check_if_msg_is_processed(MsgId::new(0), &rx).collect::<Vec<_>>()
36 );
37 }
38}