Skip to main content

ace_uds/message/services/
link_control.rs

1use crate::UdsError;
2use ace_macros::FrameCodec;
3
4#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, FrameCodec)]
5#[frame(error = UdsError)]
6pub enum LinkControlRequest {
7    #[frame(id = 0x01)]
8    VerifyModeTransitionWithFixedParameterRequest(VerifyModeTransitionWithFixedParameterRequest),
9    #[frame(id = 0x02)]
10    VerifyModeTransitionWithSpecificParameterRequest(
11        VerifyModeTransitionWithSpecificParameterRequest,
12    ),
13    #[frame(id = 0x03)]
14    TransitionModeRequst(TransitionModeRequest),
15}
16
17#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, FrameCodec)]
18#[frame(error = UdsError)]
19pub struct VerifyModeTransitionWithSpecificParameterRequest {
20    pub link_record: [u8; 3],
21}
22
23#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, FrameCodec)]
24#[frame(error = UdsError)]
25pub struct VerifyModeTransitionWithFixedParameterRequest {
26    pub link_control_mode_identifier: LinkControlModeIdentifier,
27}
28
29#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, FrameCodec)]
30#[frame(error = UdsError)]
31pub struct TransitionModeRequest {
32    pub link_control_type: LinkControlType,
33}
34
35#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, FrameCodec)]
36#[frame(error = UdsError)]
37pub enum LinkControlType {
38    #[frame(id_pat = "0x00 | 0x04..=0x3F")]
39    IsoSaereserved(u8),
40    #[frame(id = 0x01)]
41    VerifyModeTransitionWithFixedParameter,
42    #[frame(id = 0x02)]
43    VerifyModeTransitionWithSpecificParameter,
44    #[frame(id = 0x03)]
45    TransitionMode,
46    #[frame(id_pat = "0x40..=0x5F")]
47    VehicleManufacturerSpecific(u8),
48    #[frame(id_pat = "0x60..=0x7E")]
49    SystemSupplierSpecific(u8),
50}
51
52#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, FrameCodec)]
53#[frame(error = UdsError)]
54pub struct LinkControlResponse {
55    pub link_control_type: LinkControlType,
56}
57
58#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, FrameCodec)]
59#[frame(error = UdsError)]
60pub enum LinkControlModeIdentifier {
61    #[frame(id_pat = "0x00 | 0x06..=0x0F | 0x14..=0x1F | 0x21..=0xFF")]
62    IsoSaeReserved(u8),
63    #[frame(id = 0x01)]
64    PC9600Baud,
65    #[frame(id = 0x02)]
66    PC19200Baud,
67    #[frame(id = 0x03)]
68    PC38400Baud,
69    #[frame(id = 0x04)]
70    PC57600Baud,
71    #[frame(id = 0x05)]
72    PC115200Baud,
73    #[frame(id = 0x10)]
74    Can125000Baud,
75    #[frame(id = 0x11)]
76    Can250000Baud,
77    #[frame(id = 0x12)]
78    Can500000Baud,
79    #[frame(id = 0x13)]
80    Can1000000Baud,
81    #[frame(id = 0x20)]
82    ProgrammingSetup,
83}