Skip to main content

veloxity_core/board/
dummy.rs

1use crate::board::BoardIo;
2use crate::errors;
3use crate::math::FlightFloat;
4use crate::packets;
5use crate::sensors::SensorBus;
6
7#[derive(Default)]
8pub struct DummyBoard {
9    pub current_time_us: u64,
10}
11
12impl BoardIo for DummyBoard {
13    fn update_sensor_bus<R: FlightFloat>(&mut self, sensors: &mut SensorBus<R>) {
14        sensors.clear();
15        sensors.imu = Some(Ok(packets::ImuPacket::<R>::default()));
16        sensors.mag = Some(Ok(packets::MagPacket::default()));
17        sensors.baro = Some(Ok(packets::BaroPacket::default()));
18        sensors.pitot = Some(Ok(packets::PitotPacket::default()));
19        sensors.range = Some(Ok(packets::RangePacket::default()));
20        sensors.gnss = Some(Ok(packets::GNSSPacket::default()));
21        sensors.battery = Some(Ok(packets::BatteryPacket::default()));
22        sensors.rc = Some(Ok(packets::RcPacket::default()));
23        sensors.attitude = Some(Ok(packets::AttitudePacket::default()));
24    }
25
26    fn serial_rx_read(&mut self, _buf: &mut [u8]) -> Option<Result<usize, errors::TelemError>> {
27        None // pretend we never receive any data
28    }
29    fn serial_tx_write(&mut self, bytes: &[u8]) -> Option<Result<usize, errors::TelemError>> {
30        Some(Ok(bytes.len())) // pretend we've written the bytes successfully
31    }
32
33    fn clock_millis(&self) -> u32 {
34        (self.current_time_us / 1000) as u32
35    }
36
37    /// Returns the current dummy time in microseconds.
38    fn clock_micros(&self) -> u64 {
39        self.current_time_us
40    }
41
42    fn set_test_pin_1(&mut self, _high: bool) {
43        // Dummy implementation does nothing
44    }
45    fn set_test_pin_2(&mut self, _high: bool) {
46        // Dummy implementation does nothing
47    }
48    fn set_test_pin_3(&mut self, _high: bool) {
49        // Dummy implementation does nothing
50    }
51}
52
53#[cfg(test)]
54mod tests {
55    use super::*;
56    use crate::board::BoardIo;
57
58    #[test]
59    fn dummy_board_populates_named_sensor_bus() {
60        let mut board = DummyBoard::default();
61        let mut sensors = SensorBus::<f64>::default();
62
63        BoardIo::update_sensor_bus(&mut board, &mut sensors);
64
65        assert!(sensors.imu.as_ref().is_some_and(Result::is_ok));
66        assert!(sensors.mag.as_ref().is_some_and(Result::is_ok));
67        assert!(sensors.baro.as_ref().is_some_and(Result::is_ok));
68        assert!(sensors.pitot.as_ref().is_some_and(Result::is_ok));
69        assert!(sensors.range.as_ref().is_some_and(Result::is_ok));
70        assert!(sensors.gnss.as_ref().is_some_and(Result::is_ok));
71        assert!(sensors.battery.as_ref().is_some_and(Result::is_ok));
72        assert!(sensors.rc.as_ref().is_some_and(Result::is_ok));
73        assert!(sensors.attitude.as_ref().is_some_and(Result::is_ok));
74    }
75}