dbc_codegen2/ir/
signal.rs1use crate::ir::identifier::Identifier;
2use crate::ir::map_into;
3use crate::ir::signal_layout::SignalLayoutIdx;
4use crate::ir::signal_value_type::IntReprType;
5use can_dbc::MultiplexIndicator as ParsedMultiplexIndicator;
6use can_dbc::Signal as ParsedSignal;
7use crate::ir::signal_value_type::{PhysicalType, RawType};
8use crate::ir::{SignalValueEnum, ExtendedValueType};
9
10#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
11pub struct SignalIdx(pub usize);
12
13#[derive(Debug, Clone)]
14pub struct Signal {
15 pub name: Identifier,
16 pub multiplexer: MultiplexIndicator,
17 pub unit: String,
18 pub receivers: Vec<Receiver>,
19
20 pub layout: SignalLayoutIdx,
21 pub signal_value_enum: Option<SignalValueEnum>,
22 pub extended_type: ExtendedValueType,
23
24 pub raw_type: RawType,
25 pub physical_type: PhysicalType,
26}
27
28impl From<ParsedSignal> for Signal {
29 fn from(value: ParsedSignal) -> Self {
30 Signal {
31 name: Identifier(value.name),
32 multiplexer: MultiplexIndicator::from(value.multiplexer_indicator),
33 unit: value.unit,
34 receivers: map_into(value.receivers),
35
36 layout: SignalLayoutIdx(0),
37 signal_value_enum: None,
38 extended_type: ExtendedValueType::Integer,
39
40 raw_type: RawType::Integer(IntReprType::I64),
41 physical_type: PhysicalType::Integer(IntReprType::I64),
42 }
43 }
44}
45
46#[derive(Debug, Clone)]
47pub enum MultiplexIndicator {
48 Multiplexor,
49 MultiplexedSignal(u64),
50 MultiplexorAndMultiplexedSignal(u64),
51 Plain,
52}
53impl From<ParsedMultiplexIndicator> for MultiplexIndicator {
54 fn from(value: ParsedMultiplexIndicator) -> Self {
55 match value {
56 ParsedMultiplexIndicator::Multiplexor => MultiplexIndicator::Multiplexor,
57 ParsedMultiplexIndicator::MultiplexedSignal(v) => {
58 MultiplexIndicator::MultiplexedSignal(v)
59 }
60 ParsedMultiplexIndicator::MultiplexorAndMultiplexedSignal(v) => {
61 MultiplexIndicator::MultiplexorAndMultiplexedSignal(v)
62 }
63 ParsedMultiplexIndicator::Plain => MultiplexIndicator::Plain,
64 }
65 }
66}
67
68#[derive(Debug, Clone)]
69pub enum Receiver {
70 Node(Identifier),
71 VectorXXX,
72}
73impl From<String> for Receiver {
74 fn from(value: String) -> Self {
75 match value.as_str() {
76 "Vector__XXX" => Receiver::VectorXXX,
77 _ => Receiver::Node(Identifier(value)),
78 }
79 }
80}