veloxity_core/board/
dummy.rs1use 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 }
29 fn serial_tx_write(&mut self, bytes: &[u8]) -> Option<Result<usize, errors::TelemError>> {
30 Some(Ok(bytes.len())) }
32
33 fn clock_millis(&self) -> u32 {
34 (self.current_time_us / 1000) as u32
35 }
36
37 fn clock_micros(&self) -> u64 {
39 self.current_time_us
40 }
41
42 fn set_test_pin_1(&mut self, _high: bool) {
43 }
45 fn set_test_pin_2(&mut self, _high: bool) {
46 }
48 fn set_test_pin_3(&mut self, _high: bool) {
49 }
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}