autd3_driver/firmware/cpu/
mod.rs1mod 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}