autd3_driver/firmware/cpu/
mod.rs

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