DBC framework
dbc_decode_builder.cpp
Go to the documentation of this file.
1/**
2 * @file dbc_decode_builder.cpp
3 * @brief
4 *
5 * Created: 2026-03-13
6 * Author: Deeaitch (Dim. Himro)
7 *
8 * Licensed under the MIT License.
9 * See LICENSE file in the project root for full license text.
10 */
11
12#include "dbc_decode_builder.h"
13
15 DecodeDatabase result;
16
17 for (std::size_t frameIndex = 0U; frameIndex < source.frames.size(); ++frameIndex) {
18 const FrameInfo &sourceFrame = source.frames[frameIndex];
19 DecodeFrame targetFrame;
20
21 targetFrame.name = sourceFrame.name;
22 targetFrame.canId = sourceFrame.canId;
23 targetFrame.isExtended = sourceFrame.isExtended;
24 targetFrame.dlc = sourceFrame.dlc;
25 targetFrame.pgn = sourceFrame.pgn;
26 targetFrame.hasPgn = sourceFrame.hasPgn;
27 targetFrame.transmitter = sourceFrame.transmitter;
28 targetFrame.comment = sourceFrame.comment;
29
30 for (std::size_t signalIndex = 0U; signalIndex < sourceFrame.signals.size(); ++signalIndex) {
31 const SignalInfo &sourceSignal = sourceFrame.signals[signalIndex];
32 DecodeSignal targetSignal;
33
34 targetSignal.name = sourceSignal.name;
35 targetSignal.startBit = sourceSignal.startBit;
36 targetSignal.length = sourceSignal.length;
37 targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;
38 targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;
39 targetSignal.factor = sourceSignal.factor;
40 targetSignal.offset = sourceSignal.offset;
41 targetSignal.minimum = sourceSignal.minimum;
42 targetSignal.maximum = sourceSignal.maximum;
43 targetSignal.unit = sourceSignal.unit;
44 targetSignal.receivers = sourceSignal.receivers;
45 targetSignal.comment = sourceSignal.comment;
46
47 targetFrame.signals.push_back (targetSignal);
48 }
49
50 result.frames.push_back (targetFrame);
51 result.frameIndexByKey[FrameKey (targetFrame.canId, targetFrame.isExtended)] =
52 result.frames.size() - 1U;
53 }
54
55 return result;
56}
DecodeDatabase Build(const DbcDatabase &source) const
Build runtime decode database.
Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
Parsed DBC content stored in a simple internal form.
Definition: dbc_database.h:22
std::vector< FrameInfo > frames
Definition: dbc_database.h:23
Runtime decode database with fast lookup by CAN ID.
std::vector< DecodeFrame > frames
std::unordered_map< FrameKey, std::size_t, FrameKeyHasher > frameIndexByKey
Runtime-ready frame definition.
std::uint32_t pgn
std::string comment
std::vector< DecodeSignal > signals
std::uint8_t dlc
std::uint32_t canId
std::string name
std::string transmitter
Runtime-ready signal definition.
std::string unit
std::string name
ValueType valueType
std::uint32_t startBit
std::vector< std::string > receivers
ByteOrder byteOrder
std::uint32_t length
std::string comment
Describes one CAN frame from a DBC file.
Definition: frame_info.h:24
bool isExtended
Definition: frame_info.h:27
bool hasPgn
Definition: frame_info.h:29
std::string transmitter
Definition: frame_info.h:31
std::vector< SignalInfo > signals
Definition: frame_info.h:33
std::uint8_t dlc
Definition: frame_info.h:30
std::string name
Definition: frame_info.h:25
std::string comment
Definition: frame_info.h:32
std::uint32_t pgn
Definition: frame_info.h:28
std::uint32_t canId
Definition: frame_info.h:26
Key for fast frame lookup.
Describes one signal inside a DBC frame.
Definition: signal_info.h:22
std::uint32_t length
Definition: signal_info.h:25
std::string unit
Definition: signal_info.h:32
std::vector< std::string > receivers
Definition: signal_info.h:33
std::string name
Definition: signal_info.h:23
bool isSigned
Definition: signal_info.h:27
double offset
Definition: signal_info.h:29
std::string comment
Definition: signal_info.h:34
std::uint32_t startBit
Definition: signal_info.h:24
double minimum
Definition: signal_info.h:30
double maximum
Definition: signal_info.h:31
double factor
Definition: signal_info.h:28
bool isLittleEndian
Definition: signal_info.h:26