Skip to main content

ace_client/
sim_node.rs

1// region: Imports
2
3use crate::{client::UdsClient, ClientError};
4use ace_sim::node::SimNode;
5
6// endregion: Imports
7
8// region: Capacity Constants
9
10/// Maximum UDS frame payload bytes = matches ace-server for bus compatibility.
11pub const SIM_MAX_FRAME: usize = 4096;
12
13/// Maximum outbox depth.
14pub const SIM_MAX_OUTBOX: usize = 16;
15
16// endregion: Capacity Constants
17
18// region: SimNode for UdsClient
19
20impl<const N: usize> SimNode<SIM_MAX_FRAME, SIM_MAX_OUTBOX> for UdsClient<N> {
21    type Error = ClientError;
22
23    fn address(&self) -> &ace_sim::io::NodeAddress {
24        UdsClient::address(self)
25    }
26
27    fn handle(
28        &mut self,
29        src: &ace_sim::io::NodeAddress,
30        data: &[u8],
31        now: ace_sim::clock::Instant,
32    ) -> Result<(), Self::Error> {
33        UdsClient::handle(self, src, data, now)
34    }
35
36    fn tick(&mut self, now: ace_sim::clock::Instant) -> Result<(), Self::Error> {
37        UdsClient::tick(self, now)
38    }
39
40    fn drain_outbox(
41        &mut self,
42        out: &mut heapless::Vec<
43            (ace_sim::io::NodeAddress, heapless::Vec<u8, SIM_MAX_FRAME>),
44            SIM_MAX_OUTBOX,
45        >,
46    ) -> usize {
47        UdsClient::drain_outbox(self, out)
48    }
49}
50
51// endregion: SimNode for UdsClient