dbc_codegen2/ir/
signal_layout.rs1use can_dbc::ByteOrder as ParsedByteOrder;
2use can_dbc::ValueType as ParsedValueType;
3use can_dbc::Signal as ParsedSignal;
4
5#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
6pub struct SignalLayoutIdx(pub usize);
7
8#[derive(Debug, Clone, Copy)]
9pub struct SignalLayout {
10 pub start_bit: u64,
11 pub size: u64,
12 pub byte_order: ByteOrder,
13 pub value_type: ValueType,
14 pub factor: f64,
15 pub offset: f64,
16 pub min: f64,
17 pub max: f64,
18}
19
20impl From<&ParsedSignal> for SignalLayout {
21 fn from(value: &ParsedSignal) -> Self {
22 Self {
23 start_bit: value.start_bit,
24 size: value.size,
25 byte_order: ByteOrder::from(value.byte_order),
26 value_type: ValueType::from(value.value_type),
27 factor: value.factor,
28 offset: value.offset,
29 min: value.min,
30 max: value.max,
31 }
32 }
33}
34
35use std::hash::{Hash, Hasher};
36
37impl PartialEq for SignalLayout {
38 fn eq(&self, other: &Self) -> bool {
39 self.start_bit == other.start_bit
40 && self.size == other.size
41 && self.byte_order == other.byte_order
42 && self.value_type == other.value_type
43 && self.factor.to_bits() == other.factor.to_bits()
44 && self.offset.to_bits() == other.offset.to_bits()
45 && self.min.to_bits() == other.min.to_bits()
46 && self.max.to_bits() == other.max.to_bits()
47 }
48}
49
50impl Eq for SignalLayout {}
51
52impl Hash for SignalLayout {
53 fn hash<H: Hasher>(&self, state: &mut H) {
54 self.start_bit.hash(state);
55 self.size.hash(state);
56 self.byte_order.hash(state);
57 self.value_type.hash(state);
58
59 self.factor.to_bits().hash(state);
60 self.offset.to_bits().hash(state);
61 self.min.to_bits().hash(state);
62 self.max.to_bits().hash(state);
63 }
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
67pub enum ByteOrder {
68 BigEndian,
69 LittleEndian,
70}
71impl From<ParsedByteOrder> for ByteOrder {
72 fn from(value: ParsedByteOrder) -> Self {
73 match value {
74 ParsedByteOrder::BigEndian => ByteOrder::BigEndian,
75 ParsedByteOrder::LittleEndian => ByteOrder::LittleEndian,
76 }
77 }
78}
79
80#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
81pub enum ValueType {
82 Unsigned,
83 Signed,
84}
85impl From<ParsedValueType> for ValueType {
86 fn from(value: ParsedValueType) -> Self {
87 match value {
88 ParsedValueType::Signed => ValueType::Signed,
89 ParsedValueType::Unsigned => ValueType::Unsigned,
90 }
91 }
92}