1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
/*
* File: silencer.rs
* Project: datagram
* Created Date: 01/09/2023
* Author: Shun Suzuki
* -----
* Last Modified: 29/09/2023
* Modified By: Shun Suzuki (suzuki@hapis.k.u-tokyo.ac.jp)
* -----
* Copyright (c) 2023 Shun Suzuki. All rights reserved.
*
*/
use std::time::Duration;
use crate::{datagram::*, error::AUTDInternalError, geometry::*};
/// Datagram for configure silencer
pub struct Silencer {
step: u16,
}
impl Silencer {
/// constructor
///
/// # Arguments
/// * `step` - The update step of silencer. The lower the value, the stronger the silencer effect.
pub const fn new(step: u16) -> Self {
Self { step }
}
/// Disable silencer
pub const fn disable() -> Self {
Self { step: 0xFFFF }
}
pub const fn step(&self) -> u16 {
self.step
}
}
impl Default for Silencer {
fn default() -> Self {
Self::new(10)
}
}
impl<T: Transducer> Datagram<T> for Silencer {
type O1 = crate::operation::ConfigSilencerOp;
type O2 = crate::operation::NullOp;
fn timeout(&self) -> Option<Duration> {
Some(Duration::from_millis(200))
}
fn operation(self) -> Result<(Self::O1, Self::O2), AUTDInternalError> {
Ok((Self::O1::new(self.step), Self::O2::default()))
}
}