DBC Framework
DBC parsing and CAN signal decoding framework
Loading...
Searching...
No Matches
dbc_decoder.h
Go to the documentation of this file.
1
12#ifndef DBC_DECODER_H
13#define DBC_DECODER_H
14
15#include <cstdint>
16#include <variant>
17#include <vector>
18
19#include "decode_database.h"
20#include "multiplex_graph.h"
21
26 std::uint32_t canId = 0U;
27 bool isExtended = false;
28 std::vector<std::uint8_t> data;
30 RawCanFrame() = default;
31};
32
35 InvalidDefinition,
36 InsufficientPayload,
37 SelectorUnavailable,
38 Inactive,
39 Valid,
40 PhysicalConversionFailed
41};
42
45 UnknownFrame,
46 InsufficientPayload,
47 SignalErrors,
48 Valid,
49 AmbiguousFrame
50};
51
56 std::shared_ptr<const DecodeSignal> definition;
58 RawSignalValue rawValue = std::uint64_t(0U);
59 double physicalValue = 0.0;
60 bool valid = false;
61 SignalDecodeStatus status = SignalDecodeStatus::InvalidDefinition;
64 const std::string *GetValueDescription() const {
65 return valid && definition ? FindValueDescription(definition->valueDescriptions, rawValue) : nullptr;
66 }
67
68 DecodedSignalValue() = default;
69};
70
75 std::shared_ptr<const DecodeFrame> definition;
77 std::vector<DecodedSignalValue> signals;
78 bool valid = false;
79 FrameDecodeStatus status = FrameDecodeStatus::UnknownFrame;
81 DecodedFrameValue() = default;
82};
83
88public:
96 std::shared_ptr<const DecodeFrame> FindFrame(const DecodeDatabase &database,
97 std::uint32_t canId,
98 bool isExtended) const;
99
108 const RawCanFrame &frame) const;
109
119 const RawCanFrame &frame,
120 const std::vector<SignalKey> &selection) const;
121
122private:
123 static PgnLookupResult ResolveFrame(const DecodeDatabase &database,
124 std::uint32_t canId, bool isExtended);
125
126 DecodedFrameValue DecodeImpl(const DecodeDatabase &database,
127 const RawCanFrame &frame,
128 const std::vector<SignalKey> *selection) const;
129
130 static bool IsValidDefinition(const DecodeSignal &signal, std::uint8_t dlc);
131
132 static SignalDecodeStatus ActivationStatus(std::size_t index,
133 const DecodeFrame &definition,
134 const RawCanFrame &frame,
135 const dbc_detail::MultiplexGraph &graph);
136 static DecodedSignalValue DecodeOneSignal(const DecodeSignal &signal,
137 std::uint8_t dlc,
138 const RawCanFrame &frame,
139 SignalDecodeStatus activation);
140
141 static bool ExtractUnsigned(const std::vector<std::uint8_t> &data,
142 const DecodeSignal &signal,
143 std::uint64_t &value);
144
145 static bool ExtractIntel(const std::vector<std::uint8_t> &data,
146 std::uint32_t startBit,
147 std::uint32_t length,
148 std::uint64_t &value);
149
150 static bool ExtractMotorola(const std::vector<std::uint8_t> &data,
151 std::uint32_t startBit,
152 std::uint32_t length,
153 std::uint64_t &value);
154
155 static std::int64_t SignExtend(std::uint64_t value, std::uint32_t bitLength);
156};
157
158#endif /* DBC_DECODER_H */
Runtime CAN decoder using prebuilt decode database.
Definition dbc_decoder.h:87
DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const
Decode one raw CAN frame.
std::shared_ptr< const DecodeFrame > FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const
Find exact CAN ID first, then unique PGN among explicitly J1939 definitions.
Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...
SignalDecodeStatus
Outcome of signal extraction and physical conversion.
Definition dbc_decoder.h:34
FrameDecodeStatus
Definition dbc_decoder.h:44
Runtime definitions and immutable indexed database.
Runtime-ready frame definition.
Runtime-ready signal definition.
Fully decoded frame.
Definition dbc_decoder.h:74
std::shared_ptr< const DecodeFrame > definition
Definition dbc_decoder.h:75
FrameDecodeStatus status
Definition dbc_decoder.h:79
One decoded signal value.
Definition dbc_decoder.h:55
RawSignalValue rawValue
Definition dbc_decoder.h:58
std::shared_ptr< const DecodeSignal > definition
Definition dbc_decoder.h:56
SignalDecodeStatus status
Definition dbc_decoder.h:61
const std::string * GetValueDescription() const
Definition dbc_decoder.h:64
Stable frame identifier: normalized CAN ID and frame type.
Raw CAN frame used for runtime or trace decoding.
Definition dbc_decoder.h:25
std::vector< std::uint8_t > data
Definition dbc_decoder.h:28
std::uint32_t canId
Definition dbc_decoder.h:26
bool isExtended
Definition dbc_decoder.h:27