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.
11// pub const SIM_MAX_FRAME: usize = 4096;
12
13/// Maximum outbox depth.
14// pub const SIM_MAX_OUTBOX: usize = 16;
15
16// endregion: Capacity Constants
17
18// region: SimNode for UdsClient
19
20impl<
21        const PENDING: usize,
22        const SIM_MAX_FRAME: usize,
23        const SIM_MAX_OUTBOX: usize,
24        const MAX_EVENTS: usize,
25        const PERIODIC_DIDS: usize,
26        const MAX_DATA: usize,
27    > SimNode<SIM_MAX_FRAME, SIM_MAX_OUTBOX>
28    for UdsClient<PENDING, SIM_MAX_FRAME, SIM_MAX_OUTBOX, MAX_EVENTS, PERIODIC_DIDS, MAX_DATA>
29{
30    type Error = ClientError;
31
32    fn address(&self) -> &ace_sim::io::NodeAddress {
33        UdsClient::address(self)
34    }
35
36    fn handle(
37        &mut self,
38        src: &ace_sim::io::NodeAddress,
39        data: &[u8],
40        now: ace_sim::clock::Instant,
41    ) -> Result<(), Self::Error> {
42        UdsClient::handle(self, src, data, now)
43    }
44
45    fn tick(&mut self, now: ace_sim::clock::Instant) -> Result<(), Self::Error> {
46        UdsClient::tick(self, now)
47    }
48
49    fn drain_outbox(
50        &mut self,
51        out: &mut heapless::Vec<
52            (ace_sim::io::NodeAddress, heapless::Vec<u8, SIM_MAX_FRAME>),
53            SIM_MAX_OUTBOX,
54        >,
55    ) -> usize {
56        UdsClient::drain_outbox(self, out)
57    }
58}
59
60// endregion: SimNode for UdsClient