DBC framework
dbc_parser.h
Go to the documentation of this file.
1/**
2 * @file dbc_parser.h
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#ifndef DBC_PARSER_H
13#define DBC_PARSER_H
14
15#include <string>
16#include <vector>
17#include <cstdint>
18
19#include "dbc_database.h"
20
21/**
22 * @brief Minimal DBC parser.
23 *
24 * Supports:
25 * - BO_
26 * - SG_
27 * - CM_ BO_
28 * - CM_ SG_
29 *
30 * Ignores:
31 * - attributes
32 * - multiplexing
33 * - value tables
34 */
35class DbcParser {
36 public:
37 /**
38 * @brief Parse DBC file.
39 * @param filePath Path to input file.
40 * @return Parsed database.
41 * @throws std::runtime_error on file or parse errors.
42 */
43 DbcDatabase ParseFile (const std::string &filePath) const;
44
45 private:
46 static bool IsFrameLine (const std::string &line);
47 static bool IsSignalLine (const std::string &line);
48 static bool IsCommentLine (const std::string &line);
49 static std::string Trim (const std::string &text);
50 static std::vector<std::string> SplitReceivers (const std::string &text);
51 static std::uint32_t TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn);
52
53 static void NormalizeCanId (std::uint32_t rawCanId,
54 std::uint32_t &normalizedCanId,
55 bool &isExtended);
56
57 static FrameInfo ParseFrameLine (const std::string &line);
58 static SignalInfo ParseSignalLine (const std::string &line);
59
60 static void ParseCommentLine (const std::string &line, DbcDatabase &database);
61
62 static FrameInfo *FindFrameById (DbcDatabase &database,
63 std::uint32_t canId,
64 bool isExtended);
65
66 static SignalInfo *FindSignalByName (FrameInfo &frame, const std::string &signalName);
67};
68
69#endif /* DBC_PARSER_H */
Minimal DBC parser.
Definition: dbc_parser.h:35
static std::vector< std::string > SplitReceivers(const std::string &text)
Definition: dbc_parser.cpp:87
static std::string Trim(const std::string &text)
Definition: dbc_parser.cpp:83
static SignalInfo ParseSignalLine(const std::string &line)
Definition: dbc_parser.cpp:181
static FrameInfo ParseFrameLine(const std::string &line)
Definition: dbc_parser.cpp:142
static std::uint32_t TryExtractPgn(std::uint32_t canId, bool isExtended, bool &hasPgn)
Definition: dbc_parser.cpp:118
static void NormalizeCanId(std::uint32_t rawCanId, std::uint32_t &normalizedCanId, bool &isExtended)
Definition: dbc_parser.cpp:101
static void ParseCommentLine(const std::string &line, DbcDatabase &database)
Definition: dbc_parser.cpp:274
static FrameInfo * FindFrameById(DbcDatabase &database, std::uint32_t canId, bool isExtended)
Definition: dbc_parser.cpp:337
static SignalInfo * FindSignalByName(FrameInfo &frame, const std::string &signalName)
Definition: dbc_parser.cpp:349
static bool IsSignalLine(const std::string &line)
Definition: dbc_parser.cpp:75
static bool IsFrameLine(const std::string &line)
Definition: dbc_parser.cpp:71
static bool IsCommentLine(const std::string &line)
Definition: dbc_parser.cpp:79
DbcDatabase ParseFile(const std::string &filePath) const
Parse DBC file.
Definition: dbc_parser.cpp:40
Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
Parsed DBC content stored in a simple internal form.
Definition: dbc_database.h:22
Describes one CAN frame from a DBC file.
Definition: frame_info.h:24
Describes one signal inside a DBC frame.
Definition: signal_info.h:22