1#![no_std]
2
3#[cfg(feature = "alloc")]
4extern crate alloc;
5
6pub mod codec;
7pub use codec::{take_n, FrameCodec, FrameRead, FrameWrite, Writer};
8
9pub mod iter;
10pub use iter::FrameIter;
11
12pub trait DiagnosticAddress: Clone + core::fmt::Debug {
15 fn address_mode(&self) -> AddressMode;
16}
17
18#[derive(Debug, Clone, PartialEq, Eq)]
19pub enum AddressMode {
20 Physical,
21 Functional,
22}
23
24#[derive(Debug)]
29pub enum DiagError {
30 Timeout,
31 InvalidFrame(heapless::String<64>),
32 BufferOverflow,
33 Driver(heapless::String<64>),
34 AddressNotReachable,
35 LengthMismatch { expected: usize, actual: usize },
36}
37
38pub fn diag_err_str(s: &str) -> heapless::String<64> {
39 let mut hs = heapless::String::new();
40 let _ = hs.push_str(s);
41 hs
42}
43
44