autd3capi_def/
sampling_config.rs1use crate::ConstPtr;
15use autd3_driver::{defined::float, error::AUTDInternalError};
16
17#[derive(Clone, Copy, Debug)]
18#[repr(C)]
19pub struct SamplingConfiguration {
20 pub(crate) div: u32,
21}
22
23#[repr(C)]
24#[derive(Debug, Clone, Copy)]
25pub struct ResultSamplingConfig {
26 pub result: SamplingConfiguration,
27 pub err_len: u32,
28 pub err: ConstPtr,
29}
30
31impl From<autd3_driver::common::SamplingConfiguration> for SamplingConfiguration {
32 fn from(value: autd3_driver::common::SamplingConfiguration) -> Self {
33 Self {
34 div: value.frequency_division(),
35 }
36 }
37}
38
39impl From<SamplingConfiguration> for autd3_driver::common::SamplingConfiguration {
40 fn from(value: SamplingConfiguration) -> Self {
41 Self::from_frequency_division(value.div).unwrap()
42 }
43}
44
45#[no_mangle]
46#[must_use]
47pub unsafe extern "C" fn AUTDSamplingConfigFromFrequencyDivision(div: u32) -> ResultSamplingConfig {
48 autd3_driver::common::SamplingConfiguration::from_frequency_division(div).into()
49}
50
51#[no_mangle]
52#[must_use]
53pub unsafe extern "C" fn AUTDSamplingConfigFromFrequency(f: float) -> ResultSamplingConfig {
54 autd3_driver::common::SamplingConfiguration::from_frequency(f).into()
55}
56
57#[no_mangle]
58#[must_use]
59pub unsafe extern "C" fn AUTDSamplingConfigFromPeriod(p: u64) -> ResultSamplingConfig {
60 autd3_driver::common::SamplingConfiguration::from_period(std::time::Duration::from_nanos(p))
61 .into()
62}
63
64#[no_mangle]
65#[must_use]
66pub unsafe extern "C" fn AUTDSamplingConfigFrequencyDivision(config: SamplingConfiguration) -> u32 {
67 autd3_driver::common::SamplingConfiguration::from(config).frequency_division()
68}
69
70#[no_mangle]
71#[must_use]
72pub unsafe extern "C" fn AUTDSamplingConfigFrequency(config: SamplingConfiguration) -> float {
73 autd3_driver::common::SamplingConfiguration::from(config).frequency()
74}
75
76#[no_mangle]
77#[must_use]
78pub unsafe extern "C" fn AUTDSamplingConfigPeriod(config: SamplingConfiguration) -> u64 {
79 autd3_driver::common::SamplingConfiguration::from(config)
80 .period()
81 .as_nanos() as _
82}
83
84impl From<Result<autd3_driver::common::SamplingConfiguration, AUTDInternalError>>
85 for ResultSamplingConfig
86{
87 fn from(r: Result<autd3_driver::common::SamplingConfiguration, AUTDInternalError>) -> Self {
88 match r {
89 Ok(result) => Self {
90 result: result.into(),
91 err_len: 0,
92 err: std::ptr::null_mut(),
93 },
94 Err(e) => {
95 let err = e.to_string();
96 Self {
97 result: SamplingConfiguration { div: 0 },
98 err_len: err.as_bytes().len() as u32 + 1,
99 err: Box::into_raw(Box::new(err)) as _,
100 }
101 }
102 }
103 }
104}