autd3-driver 38.1.0

AUTD3 driver
Documentation
use autd3_core::link::Ack;

use crate::error::AUTDDriverError;

const NO_ERROR: u8 = 0x00;
const NOT_SUPPORTED_TAG: u8 = 0x01;
pub(crate) const INVALID_MESSAGE_ID: u8 = 0x02;
const INVALID_INFO_TYPE: u8 = 0x03;
const INVALID_GAIN_STM_MODE: u8 = 0x04;
const INVALID_SEGMENT_TRANSITION: u8 = 0x05;
const MISS_TRANSITION_TIME: u8 = 0x06;
const INVALID_SILENCER_SETTINGS: u8 = 0x07;
const INVALID_TRANSITION_MODE: u8 = 0x08;

#[doc(hidden)]
pub const fn check_firmware_err(ack: Ack) -> Result<(), AUTDDriverError> {
    match ack.err() {
        NO_ERROR => Ok(()),
        NOT_SUPPORTED_TAG => Err(AUTDDriverError::NotSupportedTag),
        INVALID_MESSAGE_ID => Err(AUTDDriverError::InvalidMessageID),
        INVALID_INFO_TYPE => Err(AUTDDriverError::InvalidInfoType),
        INVALID_GAIN_STM_MODE => Err(AUTDDriverError::InvalidGainSTMMode),
        INVALID_SEGMENT_TRANSITION => Err(AUTDDriverError::InvalidSegmentTransition),
        MISS_TRANSITION_TIME => Err(AUTDDriverError::MissTransitionTime),
        INVALID_SILENCER_SETTINGS => Err(AUTDDriverError::InvalidSilencerSettings),
        INVALID_TRANSITION_MODE => Err(AUTDDriverError::InvalidTransitionMode),
        _ => Err(AUTDDriverError::UnknownFirmwareError(ack.err())),
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[rstest::rstest]
    #[case(AUTDDriverError::NotSupportedTag, NOT_SUPPORTED_TAG)]
    #[case(AUTDDriverError::InvalidMessageID, INVALID_MESSAGE_ID)]
    #[case(AUTDDriverError::InvalidInfoType, INVALID_INFO_TYPE)]
    #[case(AUTDDriverError::InvalidGainSTMMode, INVALID_GAIN_STM_MODE)]
    #[case(AUTDDriverError::InvalidSegmentTransition, INVALID_SEGMENT_TRANSITION)]
    #[case(AUTDDriverError::MissTransitionTime, MISS_TRANSITION_TIME)]
    #[case(AUTDDriverError::InvalidSilencerSettings, INVALID_SILENCER_SETTINGS)]
    #[case(AUTDDriverError::InvalidTransitionMode, INVALID_TRANSITION_MODE)]
    #[case(AUTDDriverError::UnknownFirmwareError(0x0F), 0xFF)]
    fn check_firmware_err(#[case] expected: AUTDDriverError, #[case] err_code: u8) {
        let ack = Ack::new(0, err_code);
        let result = super::check_firmware_err(ack);
        assert_eq!(result.unwrap_err(), expected);
    }
}