rsiot/components_config/uart_general/
calculate_transmission_time.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::time::Duration;

/// Расчет скорости передачи с учетом служебных битов
pub fn data_rate(
    baudrate: &super::Baudrate,
    data_bits: &super::DataBits,
    parity: &super::Parity,
    stop_bits: &super::StopBits,
) -> f64 {
    let start_bits: f64 = 1.0;
    let data_bits: f64 = data_bits.clone().into();
    let parity: f64 = parity.clone().into();
    let stop_bits: f64 = stop_bits.clone().into();

    let baudrate: f64 = baudrate.clone().into();

    baudrate * data_bits / (start_bits + data_bits + parity + stop_bits)
}

/// Расчет времени передачи определенного количества байт
pub fn calculate_transmission_time(data_rate: f64, bytes: usize, reserve: Duration) -> Duration {
    Duration::from_secs_f64(bytes as f64 * 8.0 / data_rate) + reserve
}