Closes #11
This commit is contained in:
1 parent
0067cb4ddd
commit
f17ddb6aad
104 files changed
+1864
-825
No files matched your search
@@ -924,7 +924,30 @@ It can be integrated with:
|
|||||||
- qmake
|
- qmake
|
||||||
- Makefile
|
- Makefile
|
||||||
|
|
||||||
Just add the source files to the project.
|
Open `dbc.pro` in Qt Creator to see two subprojects: `core` and `tests`.
|
||||||
|
`core/core.pro` builds the C++17 static library `dbc_core` without a Qt dependency.
|
||||||
|
`tests/tests.pro` builds the QtTest executable `dbc_tests` and links that library.
|
||||||
|
The root project declares `tests.depends = core` for parallel builds.
|
||||||
|
|
||||||
|
Build out of source (Qt 6; use `qmake` for Qt 5):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
qmake6 ../dbc.pro
|
||||||
|
make -j
|
||||||
|
make check
|
||||||
|
```
|
||||||
|
|
||||||
|
`core/core_files.pri` lists the library sources and headers.
|
||||||
|
Consumers include `core/core.pri` for include paths and library linkage; the test
|
||||||
|
source lists live in `tests/parser_tests.pri` and `tests/decoder_tests.pri`.
|
||||||
|
When building a consumer separately, pass
|
||||||
|
`DBC_CORE_BUILD_DIR=/absolute/path/to/build/core` to qmake.
|
||||||
|
|
||||||
|
The former demonstration program is preserved in `examples/main.cpp` with
|
||||||
|
`examples/demo.pro`. Build it separately after building core, using that same
|
||||||
|
`DBC_CORE_BUILD_DIR` option; run `dbc_demo <file.dbc>`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -962,7 +985,7 @@ This gives FrameTap a much better foundation for real use, because both browsing
|
|||||||
|
|
||||||
## Regression tests
|
## Regression tests
|
||||||
|
|
||||||
See [tests/README.md](tests/README.md) for compiler and qmake commands.
|
See [tests/README.md](tests/README.md) for QtTest build and execution commands.
|
||||||
Tests cover frame validation and error locations, Intel and Motorola extraction,
|
Tests cover frame validation and error locations, Intel and Motorola extraction,
|
||||||
signed and unsigned 64-bit boundaries,
|
signed and unsigned 64-bit boundaries,
|
||||||
physical conversion, numeric output, and invalid signal payloads.
|
physical conversion, numeric output, and invalid signal payloads.
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
INCLUDEPATH += $$PWD
|
||||||
|
DEPENDPATH += $$PWD
|
||||||
|
# Consumers can override this when building separately from the root project.
|
||||||
|
isEmpty(DBC_CORE_BUILD_DIR): DBC_CORE_BUILD_DIR = $$clean_path($$OUT_PWD/../core)
|
||||||
|
LIBS += -L$$DBC_CORE_BUILD_DIR -ldbc_core
|
||||||
|
win32-msvc*: DBC_CORE_LIBRARY = $$DBC_CORE_BUILD_DIR/dbc_core.lib
|
||||||
|
else: DBC_CORE_LIBRARY = $$DBC_CORE_BUILD_DIR/libdbc_core.a
|
||||||
|
PRE_TARGETDEPS += $$DBC_CORE_LIBRARY
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
TEMPLATE = lib
|
||||||
|
TARGET = dbc_core
|
||||||
|
CONFIG += staticlib c++17
|
||||||
|
CONFIG -= qt
|
||||||
|
include(core_files.pri)
|
||||||
|
CONFIG -= debug_and_release debug_and_release_target
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
SOURCES += \
|
||||||
|
$$PWD/dbc_decode_builder.cpp \
|
||||||
|
$$PWD/dbc_decoder.cpp \
|
||||||
|
$$PWD/dbc_parser.cpp \
|
||||||
|
$$PWD/dbc_statement_handler.cpp \
|
||||||
|
$$PWD/dbc_tree_builder.cpp \
|
||||||
|
$$PWD/tree_node.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
$$PWD/dbc_database.h \
|
||||||
|
$$PWD/dbc_decode_builder.h \
|
||||||
|
$$PWD/dbc_decoder.h \
|
||||||
|
$$PWD/dbc_parser.h \
|
||||||
|
$$PWD/dbc_statement_handler.h \
|
||||||
|
$$PWD/dbc_tree_builder.h \
|
||||||
|
$$PWD/decode_database.h \
|
||||||
|
$$PWD/frame_info.h \
|
||||||
|
$$PWD/signal_info.h \
|
||||||
|
$$PWD/tree_node.h \
|
||||||
|
$$PWD/typefactory.h
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,26 +1,5 @@
|
|||||||
TEMPLATE = app
|
TEMPLATE = subdirs
|
||||||
CONFIG += console c++17
|
SUBDIRS += core tests
|
||||||
CONFIG -= app_bundle
|
core.subdir = core
|
||||||
CONFIG -= qt
|
tests.subdir = tests
|
||||||
|
tests.depends = core
|
||||||
SOURCES += \
|
|
||||||
dbc_decode_builder.cpp \
|
|
||||||
dbc_decoder.cpp \
|
|
||||||
dbc_parser.cpp \
|
|
||||||
dbc_statement_handler.cpp \
|
|
||||||
dbc_tree_builder.cpp \
|
|
||||||
main.cpp \
|
|
||||||
tree_node.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
dbc_database.h \
|
|
||||||
dbc_decode_builder.h \
|
|
||||||
dbc_decoder.h \
|
|
||||||
dbc_parser.h \
|
|
||||||
dbc_statement_handler.h \
|
|
||||||
typefactory.h \
|
|
||||||
dbc_tree_builder.h \
|
|
||||||
decode_database.h \
|
|
||||||
frame_info.h \
|
|
||||||
signal_info.h \
|
|
||||||
tree_node.h
|
|
||||||
+24
-24
@@ -2,20 +2,20 @@
|
|||||||
<tagfile doxygen_version="1.9.8">
|
<tagfile doxygen_version="1.9.8">
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_database.h</name>
|
<name>dbc_database.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__database_8h.html</filename>
|
<filename>dbc__database_8h.html</filename>
|
||||||
<includes id="frame__info_8h" name="frame_info.h" local="yes" import="no" module="no" objc="no">frame_info.h</includes>
|
<includes id="frame__info_8h" name="frame_info.h" local="yes" import="no" module="no" objc="no">frame_info.h</includes>
|
||||||
<class kind="struct">DbcDatabase</class>
|
<class kind="struct">DbcDatabase</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_decode_builder.cpp</name>
|
<name>dbc_decode_builder.cpp</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__decode__builder_8cpp.html</filename>
|
<filename>dbc__decode__builder_8cpp.html</filename>
|
||||||
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" import="no" module="no" objc="no">dbc_decode_builder.h</includes>
|
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" import="no" module="no" objc="no">dbc_decode_builder.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_decode_builder.h</name>
|
<name>dbc_decode_builder.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__decode__builder_8h.html</filename>
|
<filename>dbc__decode__builder_8h.html</filename>
|
||||||
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
||||||
<includes id="decode__database_8h" name="decode_database.h" local="yes" import="no" module="no" objc="no">decode_database.h</includes>
|
<includes id="decode__database_8h" name="decode_database.h" local="yes" import="no" module="no" objc="no">decode_database.h</includes>
|
||||||
@@ -23,13 +23,13 @@
|
|||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_decoder.cpp</name>
|
<name>dbc_decoder.cpp</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__decoder_8cpp.html</filename>
|
<filename>dbc__decoder_8cpp.html</filename>
|
||||||
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" import="no" module="no" objc="no">dbc_decoder.h</includes>
|
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" import="no" module="no" objc="no">dbc_decoder.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_decoder.h</name>
|
<name>dbc_decoder.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__decoder_8h.html</filename>
|
<filename>dbc__decoder_8h.html</filename>
|
||||||
<includes id="decode__database_8h" name="decode_database.h" local="yes" import="no" module="no" objc="no">decode_database.h</includes>
|
<includes id="decode__database_8h" name="decode_database.h" local="yes" import="no" module="no" objc="no">decode_database.h</includes>
|
||||||
<class kind="struct">RawCanFrame</class>
|
<class kind="struct">RawCanFrame</class>
|
||||||
@@ -39,26 +39,26 @@
|
|||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_parser.cpp</name>
|
<name>dbc_parser.cpp</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__parser_8cpp.html</filename>
|
<filename>dbc__parser_8cpp.html</filename>
|
||||||
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" import="no" module="no" objc="no">dbc_parser.h</includes>
|
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" import="no" module="no" objc="no">dbc_parser.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_parser.h</name>
|
<name>dbc_parser.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__parser_8h.html</filename>
|
<filename>dbc__parser_8h.html</filename>
|
||||||
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
||||||
<class kind="class">DbcParser</class>
|
<class kind="class">DbcParser</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_tree_builder.cpp</name>
|
<name>dbc_tree_builder.cpp</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__tree__builder_8cpp.html</filename>
|
<filename>dbc__tree__builder_8cpp.html</filename>
|
||||||
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" import="no" module="no" objc="no">dbc_tree_builder.h</includes>
|
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" import="no" module="no" objc="no">dbc_tree_builder.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_tree_builder.h</name>
|
<name>dbc_tree_builder.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>dbc__tree__builder_8h.html</filename>
|
<filename>dbc__tree__builder_8h.html</filename>
|
||||||
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
||||||
<includes id="tree__node_8h" name="tree_node.h" local="yes" import="no" module="no" objc="no">tree_node.h</includes>
|
<includes id="tree__node_8h" name="tree_node.h" local="yes" import="no" module="no" objc="no">tree_node.h</includes>
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>decode_database.h</name>
|
<name>decode_database.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>decode__database_8h.html</filename>
|
<filename>decode__database_8h.html</filename>
|
||||||
<class kind="struct">DecodeSignal</class>
|
<class kind="struct">DecodeSignal</class>
|
||||||
<class kind="struct">DecodeFrame</class>
|
<class kind="struct">DecodeFrame</class>
|
||||||
@@ -94,35 +94,26 @@
|
|||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>frame_info.h</name>
|
<name>frame_info.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>frame__info_8h.html</filename>
|
<filename>frame__info_8h.html</filename>
|
||||||
<includes id="signal__info_8h" name="signal_info.h" local="yes" import="no" module="no" objc="no">signal_info.h</includes>
|
<includes id="signal__info_8h" name="signal_info.h" local="yes" import="no" module="no" objc="no">signal_info.h</includes>
|
||||||
<class kind="struct">FrameInfo</class>
|
<class kind="struct">FrameInfo</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
|
||||||
<name>main.cpp</name>
|
|
||||||
<path></path>
|
|
||||||
<filename>main_8cpp.html</filename>
|
|
||||||
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" import="no" module="no" objc="no">dbc_decode_builder.h</includes>
|
|
||||||
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" import="no" module="no" objc="no">dbc_decoder.h</includes>
|
|
||||||
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" import="no" module="no" objc="no">dbc_parser.h</includes>
|
|
||||||
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" import="no" module="no" objc="no">dbc_tree_builder.h</includes>
|
|
||||||
</compound>
|
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>signal_info.h</name>
|
<name>signal_info.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>signal__info_8h.html</filename>
|
<filename>signal__info_8h.html</filename>
|
||||||
<class kind="struct">SignalInfo</class>
|
<class kind="struct">SignalInfo</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>tree_node.cpp</name>
|
<name>tree_node.cpp</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>tree__node_8cpp.html</filename>
|
<filename>tree__node_8cpp.html</filename>
|
||||||
<includes id="tree__node_8h" name="tree_node.h" local="yes" import="no" module="no" objc="no">tree_node.h</includes>
|
<includes id="tree__node_8h" name="tree_node.h" local="yes" import="no" module="no" objc="no">tree_node.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>tree_node.h</name>
|
<name>tree_node.h</name>
|
||||||
<path></path>
|
<path>core/</path>
|
||||||
<filename>tree__node_8h.html</filename>
|
<filename>tree__node_8h.html</filename>
|
||||||
<includes id="frame__info_8h" name="frame_info.h" local="yes" import="no" module="no" objc="no">frame_info.h</includes>
|
<includes id="frame__info_8h" name="frame_info.h" local="yes" import="no" module="no" objc="no">frame_info.h</includes>
|
||||||
<includes id="signal__info_8h" name="signal_info.h" local="yes" import="no" module="no" objc="no">signal_info.h</includes>
|
<includes id="signal__info_8h" name="signal_info.h" local="yes" import="no" module="no" objc="no">signal_info.h</includes>
|
||||||
@@ -138,6 +129,15 @@
|
|||||||
<enumvalue file="tree__node_8h.html" anchor="acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398">Signal</enumvalue>
|
<enumvalue file="tree__node_8h.html" anchor="acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398">Signal</enumvalue>
|
||||||
</member>
|
</member>
|
||||||
</compound>
|
</compound>
|
||||||
|
<compound kind="file">
|
||||||
|
<name>examples/main.cpp</name>
|
||||||
|
<path>examples/</path>
|
||||||
|
<filename>examples_2main_8cpp.html</filename>
|
||||||
|
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" import="no" module="no" objc="no">dbc_decode_builder.h</includes>
|
||||||
|
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" import="no" module="no" objc="no">dbc_decoder.h</includes>
|
||||||
|
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" import="no" module="no" objc="no">dbc_parser.h</includes>
|
||||||
|
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" import="no" module="no" objc="no">dbc_tree_builder.h</includes>
|
||||||
|
</compound>
|
||||||
<compound kind="class">
|
<compound kind="class">
|
||||||
<name>DbcCommentHandler</name>
|
<name>DbcCommentHandler</name>
|
||||||
<filename>classDbcCommentHandler.html</filename>
|
<filename>classDbcCommentHandler.html</filename>
|
||||||
@@ -761,7 +761,7 @@
|
|||||||
</compound>
|
</compound>
|
||||||
<compound kind="page">
|
<compound kind="page">
|
||||||
<name>md_tests_2README</name>
|
<name>md_tests_2README</name>
|
||||||
<title>Decoder regression tests</title>
|
<title>QtTest regression tests</title>
|
||||||
<filename>md_tests_2README.html</filename>
|
<filename>md_tests_2README.html</filename>
|
||||||
</compound>
|
</compound>
|
||||||
</tagfile>
|
</tagfile>
|
||||||
+24
-24
@@ -1,25 +1,25 @@
|
|||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:38: warning: Compound DbcCommentHandler is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:38: warning: Compound DbcCommentHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:22: warning: Compound DbcFrameHandler is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:22: warning: Compound DbcFrameHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:30: warning: Compound DbcSignalHandler is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:30: warning: Compound DbcSignalHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:16: warning: Compound DbcStatementHandler is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:16: warning: Compound DbcStatementHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/main.cpp:101: warning: Member main(int argc, char *argv[]) (function) of file main.cpp is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/examples/main.cpp:101: warning: Member main(int argc, char *argv[]) (function) of file examples/main.cpp is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:40: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcCommentHandler is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:40: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcCommentHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:24: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcFrameHandler is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:24: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcFrameHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:12: warning: Member database (variable) of struct DbcParseContext is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:12: warning: Member database (variable) of struct DbcParseContext is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:13: warning: Member currentFrame (variable) of struct DbcParseContext is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:13: warning: Member currentFrame (variable) of struct DbcParseContext is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:32: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcSignalHandler is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:32: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcSignalHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:52: warning: Member RegisterType(const std::string &keyword) (function) of class DbcStatementDispatcher is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:52: warning: Member RegisterType(const std::string &keyword) (function) of class DbcStatementDispatcher is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:19: warning: Member Handle(const std::string &line, DbcParseContext &context) const =0 (function) of class DbcStatementHandler is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:19: warning: Member Handle(const std::string &line, DbcParseContext &context) const =0 (function) of class DbcStatementHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:112: warning: Member frames (variable) of struct DecodeDatabase is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:112: warning: Member frames (variable) of struct DecodeDatabase is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:113: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:113: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:88: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:88: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:92: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:92: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:81: warning: Member canId (variable) of struct FrameKey is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:81: warning: Member canId (variable) of struct FrameKey is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:82: warning: Member isExtended (variable) of struct FrameKey is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:82: warning: Member isExtended (variable) of struct FrameKey is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:101: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:101: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tree_node.h:59: warning: Member TreeNode(TreeNode &&)=default (function) of class TreeNode is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h:59: warning: Member TreeNode(TreeNode &&)=default (function) of class TreeNode is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tree_node.h:60: warning: Member operator=(TreeNode &&)=default (function) of class TreeNode is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h:60: warning: Member operator=(TreeNode &&)=default (function) of class TreeNode is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/typefactory.h:61: warning: Member BasePtr (typedef) of class TypeFactory is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:61: warning: Member BasePtr (typedef) of class TypeFactory is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/typefactory.h:62: warning: Member CreatorFn (typedef) of class TypeFactory is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:62: warning: Member CreatorFn (typedef) of class TypeFactory is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/typefactory.h:110: warning: Member classes (variable) of class TypeFactory is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:110: warning: Member classes (variable) of class TypeFactory is not documented.
|
||||||
error: failed to run qhelpgenerator on index.qhp
|
error: failed to run qhelpgenerator on index.qhp
|
||||||
@@ -119,7 +119,7 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ $(document).ready(function(){initNavTree('dbc__database_8h_source.html',''); ini
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp.html',''); i
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp_source.html'
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8h_source.html','
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp.html',''); initResiz
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp_source.html',''); in
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h_source.html',''); init
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ $(document).ready(function(){initNavTree('dbc__decoder__test_8cpp_source.html','
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include "<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>"</span></div>
|
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include "<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
|
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||||
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include <iostream></span></div>
|
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include <QtTest></span></div>
|
||||||
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <limits></span></div>
|
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <limits></span></div>
|
||||||
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include <sstream></span></div>
|
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include <sstream></span></div>
|
||||||
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
|
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
|
||||||
@@ -118,128 +118,141 @@ $(document).ready(function(){initNavTree('dbc__decoder__test_8cpp_source.html','
|
|||||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordtype">double</span> physicalValue;</div>
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordtype">double</span> physicalValue;</div>
|
||||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span>};</div>
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span>};</div>
|
||||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
|
||||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="keywordtype">int</span> main() {</div>
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span>Q_DECLARE_METATYPE(DecodeCase)</div>
|
||||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">const</span> DecodeCase cases[] = {</div>
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
|
||||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> {<span class="stringliteral">"Motorola reproduction"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="keyword">class </span>DbcDecoderTest : <span class="keyword">public</span> QObject {</div>
|
||||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> {<span class="stringliteral">"Motorola within byte"</span>, ByteOrder::Motorola, 5U, 4U, ValueType::Unsigned, {0xAC}, <span class="keyword">true</span>, 11, 1.0, 0.0, 11.0},</div>
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> Q_OBJECT</div>
|
||||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> {<span class="stringliteral">"Motorola unaligned crossing"</span>, ByteOrder::Motorola, 3U, 12U, ValueType::Unsigned, {0xAB, 0xCD}, <span class="keyword">true</span>, 0xBCD, 1.0, 0.0, 3021.0},</div>
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">private</span> Q_SLOTS:</div>
|
||||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> {<span class="stringliteral">"Motorola starts at bit zero"</span>, ByteOrder::Motorola, 0U, 2U, ValueType::Unsigned, {0x01, 0x80}, <span class="keyword">true</span>, 3, 1.0, 0.0, 3.0},</div>
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">void</span> decode_data();</div>
|
||||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> {<span class="stringliteral">"Motorola second byte"</span>, ByteOrder::Motorola, 15U, 16U, ValueType::Unsigned, {0xFF, 0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">void</span> decode();</div>
|
||||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> {<span class="stringliteral">"Motorola signed scaled"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Signed, {0xFF, 0xFE}, <span class="keyword">true</span>, -2, 0.5, 10.0, 9.0},</div>
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">void</span> boundaries();</div>
|
||||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> {<span class="stringliteral">"Motorola 64 bits"</span>, ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0, 0, 0, 0, 0, 0, 0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>};</div>
|
||||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> {<span class="stringliteral">"Motorola 64 bits high bit"</span>, ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0x40, 0, 0, 0, 0, 0, 0, 0}, <span class="keyword">true</span>, 0x4000000000000000LL, 1.0, 0.0, 4611686018427387904.0},</div>
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
|
||||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> {<span class="stringliteral">"Motorola short payload"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keywordtype">void</span> DbcDecoderTest::decode_data() {</div>
|
||||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> {<span class="stringliteral">"Motorola empty payload"</span>, ByteOrder::Motorola, 7U, 8U, ValueType::Unsigned, {}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> QTest::addColumn<DecodeCase>(<span class="stringliteral">"test"</span>);</div>
|
||||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> {<span class="stringliteral">"Motorola large start"</span>, ByteOrder::Motorola, std::numeric_limits<std::uint32_t>::max(), 8U, ValueType::Unsigned, {0xFF}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">const</span> DecodeCase cases[] = {</div>
|
||||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> {<span class="stringliteral">"Motorola zero length"</span>, ByteOrder::Motorola, 7U, 0U, ValueType::Unsigned, {0xFF}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> {<span class="stringliteral">"Motorola reproduction"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> {<span class="stringliteral">"Motorola excessive length"</span>, ByteOrder::Motorola, 7U, 65U, ValueType::Unsigned,</div>
|
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> {<span class="stringliteral">"Motorola within byte"</span>, ByteOrder::Motorola, 5U, 4U, ValueType::Unsigned, {0xAC}, <span class="keyword">true</span>, 11, 1.0, 0.0, 11.0},</div>
|
||||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> std::vector<std::uint8_t>(9U, 0xFF), <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> {<span class="stringliteral">"Motorola unaligned crossing"</span>, ByteOrder::Motorola, 3U, 12U, ValueType::Unsigned, {0xAB, 0xCD}, <span class="keyword">true</span>, 0xBCD, 1.0, 0.0, 3021.0},</div>
|
||||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> {<span class="stringliteral">"Intel regression"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12, 0x34}, <span class="keyword">true</span>, 0x3412, 1.0, 0.0, 13330.0},</div>
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> {<span class="stringliteral">"Motorola starts at bit zero"</span>, ByteOrder::Motorola, 0U, 2U, ValueType::Unsigned, {0x01, 0x80}, <span class="keyword">true</span>, 3, 1.0, 0.0, 3.0},</div>
|
||||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> {<span class="stringliteral">"Intel signed regression"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Signed, {0xFE, 0xFF}, <span class="keyword">true</span>, -2, 0.5, 10.0, 9.0},</div>
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> {<span class="stringliteral">"Motorola second byte"</span>, ByteOrder::Motorola, 15U, 16U, ValueType::Unsigned, {0xFF, 0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> {<span class="stringliteral">"Intel short payload"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0}};</div>
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> {<span class="stringliteral">"Motorola signed scaled"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Signed, {0xFF, 0xFE}, <span class="keyword">true</span>, -2, 0.5, 10.0, 9.0},</div>
|
||||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
|
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> {<span class="stringliteral">"Motorola 64 bits"</span>, ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0, 0, 0, 0, 0, 0, 0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">int</span> failures = 0;</div>
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> {<span class="stringliteral">"Motorola 64 bits high bit"</span>, ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0x40, 0, 0, 0, 0, 0, 0, 0}, <span class="keyword">true</span>, 0x4000000000000000LL, 1.0, 0.0, 4611686018427387904.0},</div>
|
||||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> DecodeCase &test: cases) {</div>
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> {<span class="stringliteral">"Motorola short payload"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> {<span class="stringliteral">"Motorola empty payload"</span>, ByteOrder::Motorola, 7U, 8U, ValueType::Unsigned, {}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a> = test.name;</div>
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> {<span class="stringliteral">"Motorola large start"</span>, ByteOrder::Motorola, std::numeric_limits<std::uint32_t>::max(), 8U, ValueType::Unsigned, {0xFF}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = test.byteOrder;</div>
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> {<span class="stringliteral">"Motorola zero length"</span>, ByteOrder::Motorola, 7U, 0U, ValueType::Unsigned, {0xFF}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = test.startBit;</div>
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> {<span class="stringliteral">"Motorola excessive length"</span>, ByteOrder::Motorola, 7U, 65U, ValueType::Unsigned,</div>
|
||||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = test.length;</div>
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> std::vector<std::uint8_t>(9U, 0xFF), <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = test.valueType;</div>
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> {<span class="stringliteral">"Intel regression"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12, 0x34}, <span class="keyword">true</span>, 0x3412, 1.0, 0.0, 13330.0},</div>
|
||||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = test.factor;</div>
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> {<span class="stringliteral">"Intel signed regression"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Signed, {0xFE, 0xFF}, <span class="keyword">true</span>, -2, 0.5, 10.0, 9.0},</div>
|
||||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = test.offset;</div>
|
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> {<span class="stringliteral">"Intel short payload"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0}};</div>
|
||||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
|
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
|
||||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
|
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: cases)</div>
|
||||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = 0x123U;</div>
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> QTest::newRow(test.name) << test;</div>
|
||||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(test.data.size());</div>
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>}</div>
|
||||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> definition.signals.push_back(signal);</div>
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
|
||||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keywordtype">void</span> DbcDecoderTest::decode() {</div>
|
||||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> database.frames.push_back(definition);</div>
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> QFETCH(DecodeCase, test);</div>
|
||||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>, <span class="keyword">false</span>), 0U);</div>
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
|
||||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a> = test.name;</div>
|
||||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = test.byteOrder;</div>
|
||||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>;</div>
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = test.startBit;</div>
|
||||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = test.data;</div>
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = test.length;</div>
|
||||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = test.valueType;</div>
|
||||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> passed = result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> &&</div>
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = test.factor;</div>
|
||||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> (result.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == &database.frames[0]) &&</div>
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = test.offset;</div>
|
||||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> (result.signals.size() == 1U) &&</div>
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
|
||||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> (result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == &database.frames[0].signals[0]) &&</div>
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
|
||||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> (result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> == test.valid) &&</div>
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = 0x123U;</div>
|
||||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> (!test.valid || (((test.valueType == ValueType::Signed)</div>
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(test.data.size());</div>
|
||||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> ? (std::get_if<std::int64_t>(&result.signals[0].rawValue) &&</div>
|
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> definition.signals.push_back(signal);</div>
|
||||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> std::get<std::int64_t>(result.signals[0].rawValue) == test.rawValue)</div>
|
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
|
||||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> : (std::get_if<std::uint64_t>(&result.signals[0].rawValue) &&</div>
|
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> database.frames.push_back(definition);</div>
|
||||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> std::get<std::uint64_t>(result.signals[0].rawValue) ==</div>
|
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>, <span class="keyword">false</span>), 0U);</div>
|
||||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> static_cast<std::uint64_t>(test.rawValue))) &&</div>
|
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
|
||||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> (result.signals[0].physicalValue == test.physicalValue)));</div>
|
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
||||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (!passed) {</div>
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>;</div>
|
||||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> std::cerr << <span class="stringliteral">"FAIL: "</span> << test.name << <span class="charliteral">'\n'</span>;</div>
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = test.data;</div>
|
||||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> ++failures;</div>
|
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
|
||||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
|
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> passed = result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> &&</div>
|
||||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div>
|
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> (result.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == &database.frames[0]) &&</div>
|
||||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> std::size_t boundaryCases = 0U;</div>
|
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> (result.signals.size() == 1U) &&</div>
|
||||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> order: {ByteOrder::Intel, ByteOrder::Motorola}) {</div>
|
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> (result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == &database.frames[0].signals[0]) &&</div>
|
||||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> type: {ValueType::Unsigned, ValueType::Signed}) {</div>
|
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> (result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> == test.valid) &&</div>
|
||||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">for</span> (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),</div>
|
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> (!test.valid || (((test.valueType == ValueType::Signed)</div>
|
||||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> std::uint64_t(0x8000000000000000ULL),</div>
|
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> ? (std::get_if<std::int64_t>(&result.signals[0].rawValue) &&</div>
|
||||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> std::uint64_t(0x8000000000000001ULL),</div>
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> std::get<std::int64_t>(result.signals[0].rawValue) == test.rawValue)</div>
|
||||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> std::uint64_t(0xFFFFFFFFFFFFFFFFULL)}) {</div>
|
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> : (std::get_if<std::uint64_t>(&result.signals[0].rawValue) &&</div>
|
||||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> std::get<std::uint64_t>(result.signals[0].rawValue) ==</div>
|
||||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
|
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> static_cast<std::uint64_t>(test.rawValue))) &&</div>
|
||||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
|
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> (result.signals[0].physicalValue == test.physicalValue)));</div>
|
||||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = order == ByteOrder::Intel ? 0U : 7U;</div>
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> QVERIFY2(passed, test.name);</div>
|
||||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = 64U;</div>
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span>}</div>
|
||||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = order;</div>
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
|
||||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = type;</div>
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="keywordtype">void</span> DbcDecoderTest::boundaries() {</div>
|
||||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = 0.5;</div>
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> order: {ByteOrder::Intel, ByteOrder::Motorola}) {</div>
|
||||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = 10.0;</div>
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> type: {ValueType::Unsigned, ValueType::Signed}) {</div>
|
||||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> definition.signals.push_back(signal);</div>
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">for</span> (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),</div>
|
||||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> database.frames.push_back(definition);</div>
|
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> std::uint64_t(0x8000000000000000ULL),</div>
|
||||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(0U, <span class="keyword">false</span>), 0U);</div>
|
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> std::uint64_t(0x8000000000000001ULL),</div>
|
||||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> std::uint64_t(0xFFFFFFFFFFFFFFFFULL)}) {</div>
|
||||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0U; <span class="keywordtype">byte</span> < 8U; ++byte) {</div>
|
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
|
||||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> shift = (order == ByteOrder::Intel ? byte : 7U - byte) * 8U;</div>
|
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
|
||||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.push_back(<span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(bits >> shift));</div>
|
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
|
||||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = order == ByteOrder::Intel ? 0U : 7U;</div>
|
||||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keyword">const</span> <span class="keyword">auto</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = 64U;</div>
|
||||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">const</span> std::int64_t signedExpected = bits <= 0x7FFFFFFFFFFFFFFFULL</div>
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = order;</div>
|
||||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> ? <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span>(bits)</div>
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = type;</div>
|
||||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> : std::numeric_limits<std::int64_t>::min() +</div>
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = 0.5;</div>
|
||||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> static_cast<std::int64_t>(bits - 0x8000000000000000ULL);</div>
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = 10.0;</div>
|
||||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">const</span> <span class="keyword">auto</span> &decoded = result.signals.at(0U);</div>
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> definition.signals.push_back(signal);</div>
|
||||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">const</span> <span class="keyword">auto</span> expected = type == ValueType::Unsigned</div>
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> database.frames.push_back(definition);</div>
|
||||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> ? std::variant<std::int64_t, std::uint64_t>(bits)</div>
|
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(0U, <span class="keyword">false</span>), 0U);</div>
|
||||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> : std::variant<std::int64_t, std::uint64_t>(signedExpected);</div>
|
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
||||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">const</span> <span class="keywordtype">double</span> physical = (type == ValueType::Unsigned</div>
|
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0U; <span class="keywordtype">byte</span> < 8U; ++byte) {</div>
|
||||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> ? <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(bits)</div>
|
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> shift = (order == ByteOrder::Intel ? byte : 7U - byte) * 8U;</div>
|
||||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> : static_cast<double>(signedExpected)) *</div>
|
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.push_back(<span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(bits >> shift));</div>
|
||||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> 0.5 +</div>
|
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> }</div>
|
||||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> 10.0;</div>
|
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">const</span> <span class="keyword">auto</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
|
||||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> std::ostringstream actualText;</div>
|
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">const</span> std::int64_t signedExpected = bits <= 0x7FFFFFFFFFFFFFFFULL</div>
|
||||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> std::ostringstream expectedText;</div>
|
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> ? <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span>(bits)</div>
|
||||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *signedValue = std::get_if<std::int64_t>(&decoded.rawValue))</div>
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> : std::numeric_limits<std::int64_t>::min() +</div>
|
||||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> actualText << *signedValue;</div>
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> static_cast<std::int64_t>(bits - 0x8000000000000000ULL);</div>
|
||||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">else</span></div>
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">const</span> <span class="keyword">auto</span> &decoded = result.signals.at(0U);</div>
|
||||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> actualText << std::get<std::uint64_t>(decoded.rawValue);</div>
|
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">const</span> <span class="keyword">auto</span> expected = type == ValueType::Unsigned</div>
|
||||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (type == ValueType::Unsigned)</div>
|
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> ? std::variant<std::int64_t, std::uint64_t>(bits)</div>
|
||||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> expectedText << bits;</div>
|
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> : std::variant<std::int64_t, std::uint64_t>(signedExpected);</div>
|
||||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">else</span></div>
|
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">const</span> <span class="keywordtype">double</span> physical = (type == ValueType::Unsigned</div>
|
||||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> expectedText << signedExpected;</div>
|
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> ? <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(bits)</div>
|
||||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span> (!decoded.valid || decoded.rawValue != expected ||</div>
|
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> : static_cast<double>(signedExpected)) *</div>
|
||||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> decoded.physicalValue != physical || actualText.str() != expectedText.str()) {</div>
|
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> 0.5 +</div>
|
||||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> std::cerr << <span class="stringliteral">"FAIL: 64-bit boundary "</span> << bits << <span class="charliteral">'\n'</span>;</div>
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> 10.0;</div>
|
||||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> ++failures;</div>
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> std::ostringstream actualText;</div>
|
||||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> }</div>
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> std::ostringstream expectedText;</div>
|
||||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> ++boundaryCases;</div>
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *signedValue = std::get_if<std::int64_t>(&decoded.rawValue))</div>
|
||||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> }</div>
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> actualText << *signedValue;</div>
|
||||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</div>
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">else</span></div>
|
||||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> }</div>
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> actualText << std::get<std::uint64_t>(decoded.rawValue);</div>
|
||||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (failures != 0)</div>
|
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (type == ValueType::Unsigned)</div>
|
||||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> 1;</div>
|
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> expectedText << bits;</div>
|
||||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> std::cout << <span class="stringliteral">"All "</span> << <span class="keyword">sizeof</span>(cases) / <span class="keyword">sizeof</span>(cases[0]) + boundaryCases << <span class="stringliteral">" decoder cases passed.\n"</span>;</div>
|
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">else</span></div>
|
||||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> 0;</div>
|
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> expectedText << signedExpected;</div>
|
||||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span>}</div>
|
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> QVERIFY2(decoded.valid && decoded.rawValue == expected &&</div>
|
||||||
|
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> decoded.physicalValue == physical && actualText.str() == expectedText.str(),</div>
|
||||||
|
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> expectedText.str().c_str());</div>
|
||||||
|
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> }</div>
|
||||||
|
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div>
|
||||||
|
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
|
||||||
|
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
|
||||||
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
|
||||||
|
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keywordtype">int</span> RunDecoderTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
|
||||||
|
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> DbcDecoderTest tests;</div>
|
||||||
|
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span> QTest::qExec(&tests, argc, argv);</div>
|
||||||
|
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span>}</div>
|
||||||
|
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
|
||||||
|
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="preprocessor">#include "dbc_decoder_test.moc"</span></div>
|
||||||
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
|
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
|
||||||
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
||||||
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp.html',''); initResiza
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp_source.html',''); ini
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ $(document).ready(function(){initNavTree('dbc__parser_8h_source.html',''); initR
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -101,261 +101,292 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
|
|||||||
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include "<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>"</span></div>
|
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include "<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include "dbc_statement_handler.h"</span></div>
|
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include "dbc_statement_handler.h"</span></div>
|
||||||
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
|
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
|
||||||
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <chrono></span></div>
|
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <QtTest></span></div>
|
||||||
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include <filesystem></span></div>
|
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include <chrono></span></div>
|
||||||
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include <fstream></span></div>
|
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include <filesystem></span></div>
|
||||||
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include <iostream></span></div>
|
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include <fstream></span></div>
|
||||||
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include <stdexcept></span></div>
|
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
|
||||||
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
|
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#define CHECK(condition, name) QVERIFY2((condition), std::string(name).c_str())</span></div>
|
||||||
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="keyword">struct </span>Fixture {</div>
|
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include <stdexcept></span></div>
|
||||||
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> std::filesystem::path path = std::filesystem::temp_directory_path() /</div>
|
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
|
||||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> (<span class="stringliteral">"dbc_parser_test_"</span> + std::to_string(std::chrono::steady_clock::now().time_since_epoch().count()) + <span class="stringliteral">".dbc"</span>);</div>
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">struct </span>Fixture {</div>
|
||||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> ~Fixture() {</div>
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> std::filesystem::path path = std::filesystem::temp_directory_path() /</div>
|
||||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> std::error_code error;</div>
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> (<span class="stringliteral">"dbc_parser_test_"</span> + std::to_string(std::chrono::steady_clock::now().time_since_epoch().count()) + <span class="stringliteral">".dbc"</span>);</div>
|
||||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> std::filesystem::remove(path, error);</div>
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> ~Fixture() {</div>
|
||||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> }</div>
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> std::error_code error;</div>
|
||||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordtype">void</span> Write(<span class="keyword">const</span> std::string &text)<span class="keyword"> const </span>{</div>
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> std::filesystem::remove(path, error);</div>
|
||||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> std::ofstream output(path);</div>
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> }</div>
|
||||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> output << text;</div>
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordtype">void</span> Write(<span class="keyword">const</span> std::string &text)<span class="keyword"> const </span>{</div>
|
||||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <span class="keywordflow">if</span> (!output)</div>
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> std::ofstream output(path);</div>
|
||||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Cannot write test fixture."</span>);</div>
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> output << text;</div>
|
||||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> }</div>
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordflow">if</span> (!output)</div>
|
||||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span>};</div>
|
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Cannot write test fixture."</span>);</div>
|
||||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> }</div>
|
||||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">class </span>CountingHandler : <span class="keyword">public</span> <a class="code hl_class" href="classDbcStatementHandler.html">DbcStatementHandler</a> {</div>
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span>};</div>
|
||||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">public</span>:</div>
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
|
||||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">int</span> instances = 0;</div>
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">class </span>CountingHandler : <span class="keyword">public</span> <a class="code hl_class" href="classDbcStatementHandler.html">DbcStatementHandler</a> {</div>
|
||||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">int</span> calls = 0;</div>
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">public</span>:</div>
|
||||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> CountingHandler() { ++instances; }</div>
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">int</span> instances = 0;</div>
|
||||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">void</span> Handle(<span class="keyword">const</span> std::string &, <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> &context)<span class="keyword"> const override </span>{</div>
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">int</span> calls = 0;</div>
|
||||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> ++calls;</div>
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> CountingHandler() { ++instances; }</div>
|
||||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> context.database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.emplace_back();</div>
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">void</span> Handle(<span class="keyword">const</span> std::string &, <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> &context)<span class="keyword"> const override </span>{</div>
|
||||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> }</div>
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> ++calls;</div>
|
||||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>};</div>
|
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> context.database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.emplace_back();</div>
|
||||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
|
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> }</div>
|
||||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>std::string SignalLine(<span class="keyword">const</span> std::string &start, <span class="keyword">const</span> std::string &length,</div>
|
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>};</div>
|
||||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">const</span> std::string &order, <span class="keyword">const</span> std::string &factor,</div>
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
|
||||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">const</span> std::string &offset, <span class="keyword">const</span> std::string &minimum,</div>
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>std::string SignalLine(<span class="keyword">const</span> std::string &start, <span class="keyword">const</span> std::string &length,</div>
|
||||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">const</span> std::string &maximum) {</div>
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">const</span> std::string &order, <span class="keyword">const</span> std::string &factor,</div>
|
||||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">return</span> <span class="stringliteral">"SG_ Value : "</span> + start + <span class="stringliteral">"|"</span> + length + <span class="stringliteral">"@"</span> + order +</div>
|
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">const</span> std::string &offset, <span class="keyword">const</span> std::string &minimum,</div>
|
||||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="stringliteral">" ("</span> + factor + <span class="stringliteral">","</span> + offset + <span class="stringliteral">") ["</span> + minimum + <span class="stringliteral">"|"</span> + maximum + <span class="stringliteral">"] \"\" ECU"</span>;</div>
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">const</span> std::string &maximum) {</div>
|
||||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>}</div>
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> <span class="stringliteral">"SG_ Value : "</span> + start + <span class="stringliteral">"|"</span> + length + <span class="stringliteral">"@"</span> + order +</div>
|
||||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="stringliteral">" ("</span> + factor + <span class="stringliteral">","</span> + offset + <span class="stringliteral">") ["</span> + minimum + <span class="stringliteral">"|"</span> + maximum + <span class="stringliteral">"] \"\" ECU"</span>;</div>
|
||||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">struct </span>TestContext {</div>
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>}</div>
|
||||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">int</span> failures = 0;</div>
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
|
||||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> std::size_t count = 0U;</div>
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="keyword">class </span>DbcParserTest : <span class="keyword">public</span> QObject {</div>
|
||||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">void</span> Check(<span class="keywordtype">bool</span> passed, <span class="keyword">const</span> std::string &name) {</div>
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> Q_OBJECT</div>
|
||||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> ++count;</div>
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="keyword">private</span>:</div>
|
||||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">if</span> (!passed) {</div>
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> RejectSignal(<span class="keyword">const</span> Fixture &fixture, <span class="keyword">const</span> std::string &line, <span class="keywordtype">unsigned</span> payload = 8U) {</div>
|
||||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> ++failures;</div>
|
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(payload) + <span class="stringliteral">" ECU\n\n"</span> + line + <span class="stringliteral">"\n"</span>);</div>
|
||||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> std::cerr << <span class="stringliteral">"FAIL: "</span> << name << <span class="charliteral">'\n'</span>;</div>
|
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">try</span> {</div>
|
||||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> }</div>
|
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div>
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Reject "</span> + line);</div>
|
||||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> RejectSignal(<span class="keyword">const</span> Fixture &fixture, <span class="keyword">const</span> std::string &line, <span class="keywordtype">unsigned</span> payload = 8U) {</div>
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(payload) + <span class="stringliteral">" ECU\n\n"</span> + line + <span class="stringliteral">"\n"</span>);</div>
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">const</span> std::string prefix = fixture.path.string() + <span class="stringliteral">":3: "</span>;</div>
|
||||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">try</span> {</div>
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> CHECK(std::string(error.what()).find(prefix) == 0U &&</div>
|
||||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> std::string(error.what()).size() > prefix.size(),</div>
|
||||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> Check(<span class="keyword">false</span>, <span class="stringliteral">"Reject "</span> + line);</div>
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"Reject "</span> + line);</div>
|
||||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> }</div>
|
||||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">const</span> std::string prefix = fixture.path.string() + <span class="stringliteral">":3: "</span>;</div>
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
|
||||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> Check(std::string(error.what()).find(prefix) == 0U &&</div>
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="keyword">private</span> Q_SLOTS:</div>
|
||||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> std::string(error.what()).size() > prefix.size(),</div>
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> validFrames();</div>
|
||||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">"Reject "</span> + line);</div>
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">void</span> invalidFrames();</div>
|
||||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> }</div>
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> integration();</div>
|
||||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> }</div>
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">void</span> invalidSignals();</div>
|
||||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>};</div>
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> validSignals();</div>
|
||||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> dispatch();</div>
|
||||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="keywordtype">int</span> main() {</div>
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> independentSessions();</div>
|
||||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> Fixture fixture;</div>
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>};</div>
|
||||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> TestContext tests;</div>
|
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
|
||||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">struct </span>ValidCase {</div>
|
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keywordtype">void</span> DbcParserTest::validFrames() {</div>
|
||||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *line;</div>
|
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> Fixture fixture;</div>
|
||||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> std::uint32_t id;</div>
|
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">struct </span>ValidCase {</div>
|
||||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">bool</span> extended;</div>
|
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *line;</div>
|
||||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">unsigned</span> length;</div>
|
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> std::uint32_t id;</div>
|
||||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> };</div>
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">bool</span> extended;</div>
|
||||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">const</span> ValidCase valid[] = {</div>
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">unsigned</span> length;</div>
|
||||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> {<span class="stringliteral">"BO_ 0 Frame: 0 ECU"</span>, 0U, <span class="keyword">false</span>, 0U},</div>
|
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> };</div>
|
||||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> {<span class="stringliteral">"BO_ 2047 Frame: 8 ECU"</span>, 2047U, <span class="keyword">false</span>, 8U},</div>
|
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> ValidCase valid[] = {</div>
|
||||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> {<span class="stringliteral">"BO_ 2048 Frame: 64 ECU"</span>, 2048U, <span class="keyword">true</span>, 64U},</div>
|
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> {<span class="stringliteral">"BO_ 0 Frame: 0 ECU"</span>, 0U, <span class="keyword">false</span>, 0U},</div>
|
||||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> {<span class="stringliteral">"BO_ 536870911 Frame: 255 ECU"</span>, 0x1FFFFFFFU, <span class="keyword">true</span>, 255U},</div>
|
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> {<span class="stringliteral">"BO_ 2047 Frame: 8 ECU"</span>, 2047U, <span class="keyword">false</span>, 8U},</div>
|
||||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> {<span class="stringliteral">"BO_ 2147483649 Frame: 8 ECU"</span>, 1U, <span class="keyword">true</span>, 8U},</div>
|
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> {<span class="stringliteral">"BO_ 2048 Frame: 64 ECU"</span>, 2048U, <span class="keyword">true</span>, 64U},</div>
|
||||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> {<span class="stringliteral">"BO_ 2684354559 Frame: 8 ECU"</span>, 0x1FFFFFFFU, <span class="keyword">true</span>, 8U},</div>
|
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> {<span class="stringliteral">"BO_ 536870911 Frame: 255 ECU"</span>, 0x1FFFFFFFU, <span class="keyword">true</span>, 255U},</div>
|
||||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> {<span class="stringliteral">" BO_\t256\tFrame :\t8\tECU \r"</span>, 256U, <span class="keyword">false</span>, 8U}};</div>
|
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> {<span class="stringliteral">"BO_ 2147483649 Frame: 8 ECU"</span>, 1U, <span class="keyword">true</span>, 8U},</div>
|
||||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: valid) {</div>
|
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> {<span class="stringliteral">"BO_ 2684354559 Frame: 8 ECU"</span>, 0x1FFFFFFFU, <span class="keyword">true</span>, 8U},</div>
|
||||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> fixture.Write(std::string(test.line) + <span class="charliteral">'\n'</span>);</div>
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> {<span class="stringliteral">" BO_\t256\tFrame :\t8\tECU \r"</span>, 256U, <span class="keyword">false</span>, 8U}};</div>
|
||||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">try</span> {</div>
|
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: valid) {</div>
|
||||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">const</span> <span class="keyword">auto</span> database = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> fixture.Write(std::string(test.line) + <span class="charliteral">'\n'</span>);</div>
|
||||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> tests.Check(database.frames.size() == 1U && database.frames[0].name == <span class="stringliteral">"Frame"</span> &&</div>
|
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">try</span> {</div>
|
||||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> database.frames[0].canId == test.id &&</div>
|
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">const</span> <span class="keyword">auto</span> database = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> database.frames[0].isExtended == test.extended &&</div>
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> CHECK(database.frames.size() == 1U && database.frames[0].name == <span class="stringliteral">"Frame"</span> &&</div>
|
||||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> database.frames[0].dlc == test.length &&</div>
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> database.frames[0].canId == test.id &&</div>
|
||||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> database.frames[0].transmitter == <span class="stringliteral">"ECU"</span>,</div>
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> database.frames[0].isExtended == test.extended &&</div>
|
||||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> test.line);</div>
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> database.frames[0].dlc == test.length &&</div>
|
||||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { tests.Check(<span class="keyword">false</span>, error.what()); }</div>
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> database.frames[0].transmitter == <span class="stringliteral">"ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> test.line);</div>
|
||||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *invalid[] = {</div>
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="stringliteral">"BO_ invalid"</span>, <span class="stringliteral">"BO_"</span>, <span class="stringliteral">"BO_ 1"</span>, <span class="stringliteral">"BO_ 1 : 8 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame 8 ECU"</span>,</div>
|
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> }</div>
|
||||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="stringliteral">"BO_ 1 Frame:"</span>, <span class="stringliteral">"BO_ 1 Frame: 8"</span>, <span class="stringliteral">"BO_ 1 Frame: 8 ECU extra"</span>,</div>
|
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}</div>
|
||||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="stringliteral">"BO_ 1 Two Names: 8 ECU"</span>, <span class="stringliteral">"BO_ -1 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ +1 Frame: 8 ECU"</span>,</div>
|
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
|
||||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="stringliteral">"BO_ 1x Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 0x123 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 1.5 Frame: 8 ECU"</span>,</div>
|
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keywordtype">void</span> DbcParserTest::invalidFrames() {</div>
|
||||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="stringliteral">"BO_ 4294967296 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 999999999999999999999 Frame: 8 ECU"</span>,</div>
|
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> Fixture fixture;</div>
|
||||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="stringliteral">"BO_ 536870912 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 1073741824 Frame: 8 ECU"</span>,</div>
|
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *invalid[] = {</div>
|
||||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="stringliteral">"BO_ 2684354560 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 4294967295 Frame: 8 ECU"</span>,</div>
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="stringliteral">"BO_ invalid"</span>, <span class="stringliteral">"BO_"</span>, <span class="stringliteral">"BO_ 1"</span>, <span class="stringliteral">"BO_ 1 : 8 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame 8 ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="stringliteral">"BO_ 1 Frame: -1 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: +8 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: 8x ECU"</span>,</div>
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="stringliteral">"BO_ 1 Frame:"</span>, <span class="stringliteral">"BO_ 1 Frame: 8"</span>, <span class="stringliteral">"BO_ 1 Frame: 8 ECU extra"</span>,</div>
|
||||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="stringliteral">"BO_ 1 Frame: 8.5 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: 256 ECU"</span>,</div>
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="stringliteral">"BO_ 1 Two Names: 8 ECU"</span>, <span class="stringliteral">"BO_ -1 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ +1 Frame: 8 ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="stringliteral">"BO_ 1 Frame: 4294967296 ECU"</span>, <span class="stringliteral">"BO_\tinvalid"</span>};</div>
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="stringliteral">"BO_ 1x Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 0x123 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 1.5 Frame: 8 ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *line: invalid) {</div>
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="stringliteral">"BO_ 4294967296 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 999999999999999999999 Frame: 8 ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> fixture.Write(std::string(<span class="stringliteral">"VERSION \"test\"\n\n"</span>) + line + <span class="charliteral">'\n'</span>);</div>
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="stringliteral">"BO_ 536870912 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 1073741824 Frame: 8 ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">try</span> {</div>
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="stringliteral">"BO_ 2684354560 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 4294967295 Frame: 8 ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="stringliteral">"BO_ 1 Frame: -1 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: +8 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: 8x ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> tests.Check(<span class="keyword">false</span>, line);</div>
|
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="stringliteral">"BO_ 1 Frame: 8.5 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: 256 ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="stringliteral">"BO_ 1 Frame: 4294967296 ECU"</span>, <span class="stringliteral">"BO_\tinvalid"</span>};</div>
|
||||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">const</span> std::string prefix = fixture.path.string() + <span class="stringliteral">":3: "</span>;</div>
|
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *line: invalid) {</div>
|
||||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> tests.Check(std::string(error.what()).find(prefix) == 0U &&</div>
|
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> fixture.Write(std::string(<span class="stringliteral">"VERSION \"test\"\n\n"</span>) + line + <span class="charliteral">'\n'</span>);</div>
|
||||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> std::string(error.what()).size() > prefix.size(),</div>
|
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">try</span> {</div>
|
||||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> line);</div>
|
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
|
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> CHECK(<span class="keyword">false</span>, line);</div>
|
||||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> }</div>
|
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> fixture.Write(</div>
|
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">const</span> std::string prefix = fixture.path.string() + <span class="stringliteral">":3: "</span>;</div>
|
||||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="stringliteral">"BO_TX_BU_ 256 : ECU;\nBO_ 256 Frame: 8 ECU\n"</span></div>
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> CHECK(std::string(error.what()).find(prefix) == 0U &&</div>
|
||||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="stringliteral">" SG_ Speed : 0|16@1+ (0.5,1) [0|100] \"rpm\" ECU\n"</span></div>
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> std::string(error.what()).size() > prefix.size(),</div>
|
||||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="stringliteral">"CM_ BO_ 256 \"Frame comment\";\nCM_ SG_ 256 Speed \"Signal comment\";\n"</span></div>
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> line);</div>
|
||||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="stringliteral">"BO_ 257 Second: 8 ECU\n"</span>);</div>
|
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
|
||||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">const</span> <span class="keyword">auto</span> database = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> }</div>
|
||||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> tests.Check(database.frames.size() == 2U && database.frames[0].signals.size() == 1U &&</div>
|
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>}</div>
|
||||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> database.frames[0].comment == <span class="stringliteral">"Frame comment"</span> &&</div>
|
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
|
||||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> database.frames[0].signals[0].comment == <span class="stringliteral">"Signal comment"</span>,</div>
|
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="keywordtype">void</span> DbcParserTest::integration() {</div>
|
||||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="stringliteral">"Integration"</span>);</div>
|
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> Fixture fixture;</div>
|
||||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> fixture.Write(<span class="stringliteral">"\nSG_ Speed : invalid\n"</span>);</div>
|
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> fixture.Write(</div>
|
||||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">try</span> {</div>
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="stringliteral">"BO_TX_BU_ 256 : ECU;\nBO_ 256 Frame: 8 ECU\n"</span></div>
|
||||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="stringliteral">" SG_ Speed : 0|16@1+ (0.5,1) [0|100] \"rpm\" ECU\n"</span></div>
|
||||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> tests.Check(<span class="keyword">false</span>, <span class="stringliteral">"Signal error location"</span>);</div>
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="stringliteral">"CM_ BO_ 256 \"Frame comment\";\nCM_ SG_ 256 Speed \"Signal comment\";\n"</span></div>
|
||||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="stringliteral">"BO_ 257 Second: 8 ECU\n"</span>);</div>
|
||||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> tests.Check(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":2: "</span>) == 0U,</div>
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">const</span> <span class="keyword">auto</span> database = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="stringliteral">"Signal error location"</span>);</div>
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> CHECK(database.frames.size() == 2U && database.frames[0].signals.size() == 1U &&</div>
|
||||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> }</div>
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> database.frames[0].comment == <span class="stringliteral">"Frame comment"</span> &&</div>
|
||||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> signalParser;</div>
|
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> database.frames[0].signals[0].comment == <span class="stringliteral">"Signal comment"</span>,</div>
|
||||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">const</span> std::string ordinary = SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>);</div>
|
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="stringliteral">"Integration"</span>);</div>
|
||||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"-1"</span>, <span class="stringliteral">"+1"</span>, <span class="stringliteral">"0junk"</span>, <span class="stringliteral">"0x10"</span>, <span class="stringliteral">"1.5"</span>,</div>
|
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> fixture.Write(<span class="stringliteral">"\nSG_ Speed : invalid\n"</span>);</div>
|
||||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="stringliteral">"4294967296"</span>, <span class="stringliteral">"999999999999999999999"</span>}) {</div>
|
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">try</span> {</div>
|
||||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> tests.RejectSignal(fixture, SignalLine(value, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, value, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Signal error location"</span>);</div>
|
||||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</div>
|
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string length: {<span class="stringliteral">"0"</span>, <span class="stringliteral">"65"</span>})</div>
|
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":2: "</span>) == 0U,</div>
|
||||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, length, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="stringliteral">"Signal error location"</span>);</div>
|
||||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string order: {<span class="stringliteral">"2+"</span>, <span class="stringliteral">"9-"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1x"</span>, <span class="stringliteral">"1++"</span>, <span class="stringliteral">"01+"</span>})</div>
|
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
|
||||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, order, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
|
||||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"1junk"</span>, <span class="stringliteral">"nan"</span>, <span class="stringliteral">"NaN"</span>, <span class="stringliteral">"inf"</span>, <span class="stringliteral">"-inf"</span>, <span class="stringliteral">"1e999"</span>, <span class="stringliteral">"1e-999"</span>, <span class="stringliteral">"0x1p2"</span>, <span class="stringliteral">""</span>, <span class="stringliteral">"1e"</span>, <span class="stringliteral">"1.2.3"</span>}) {</div>
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
|
||||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keywordtype">void</span> DbcParserTest::invalidSignals() {</div>
|
||||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> Fixture fixture;</div>
|
||||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, value, <span class="stringliteral">"255"</span>));</div>
|
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">const</span> std::string ordinary = SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>);</div>
|
||||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, value));</div>
|
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"-1"</span>, <span class="stringliteral">"+1"</span>, <span class="stringliteral">"0junk"</span>, <span class="stringliteral">"0x10"</span>, <span class="stringliteral">"1.5"</span>,</div>
|
||||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> }</div>
|
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="stringliteral">"4294967296"</span>, <span class="stringliteral">"999999999999999999999"</span>}) {</div>
|
||||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1"</span>));</div>
|
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> RejectSignal(fixture, SignalLine(value, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string name: {<span class="stringliteral">""</span>, <span class="stringliteral">"Two Names"</span>, <span class="stringliteral">"Value M"</span>, <span class="stringliteral">"Value m1"</span>, <span class="stringliteral">"Value m1M"</span>}) {</div>
|
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, value, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> std::string line = ordinary;</div>
|
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> }</div>
|
||||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> line.replace(4U, 5U, name);</div>
|
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string length: {<span class="stringliteral">"0"</span>, <span class="stringliteral">"65"</span>})</div>
|
||||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> tests.RejectSignal(fixture, line);</div>
|
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, length, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div>
|
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string order: {<span class="stringliteral">"2+"</span>, <span class="stringliteral">"9-"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1x"</span>, <span class="stringliteral">"1++"</span>, <span class="stringliteral">"01+"</span>})</div>
|
||||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string broken: {</div>
|
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, order, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="stringliteral">"SG_"</span>, <span class="stringliteral">"SG_ Value"</span>, <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] ECU"</span>,</div>
|
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"1junk"</span>, <span class="stringliteral">"nan"</span>, <span class="stringliteral">"NaN"</span>, <span class="stringliteral">"inf"</span>, <span class="stringliteral">"-inf"</span>, <span class="stringliteral">"1e999"</span>, <span class="stringliteral">"1e-999"</span>, <span class="stringliteral">"0x1p2"</span>, <span class="stringliteral">""</span>, <span class="stringliteral">"1e"</span>, <span class="stringliteral">"1.2.3"</span>}) {</div>
|
||||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\""</span>,</div>
|
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,"</span>,</div>
|
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"</span>})</div>
|
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, value, <span class="stringliteral">"255"</span>));</div>
|
||||||
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> tests.RejectSignal(fixture, broken);</div>
|
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, value));</div>
|
||||||
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"64"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
|
||||||
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"63"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"56"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"0+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string name: {<span class="stringliteral">""</span>, <span class="stringliteral">"Two Names"</span>, <span class="stringliteral">"Value M"</span>, <span class="stringliteral">"Value m1"</span>, <span class="stringliteral">"Value m1M"</span>}) {</div>
|
||||||
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"4294967295"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> std::string line = ordinary;</div>
|
||||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> tests.RejectSignal(fixture, ordinary, 0U);</div>
|
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> line.replace(4U, 5U, name);</div>
|
||||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> delimiter: {<span class="charliteral">'|'</span>, <span class="charliteral">'@'</span>, <span class="charliteral">'('</span>, <span class="charliteral">')'</span>, <span class="charliteral">'['</span>, <span class="charliteral">']'</span>, <span class="charliteral">'"'</span>}) {</div>
|
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> RejectSignal(fixture, line);</div>
|
||||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> std::string line = ordinary;</div>
|
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
|
||||||
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> line.erase(line.find(delimiter), 1U);</div>
|
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string broken: {</div>
|
||||||
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> tests.RejectSignal(fixture, line);</div>
|
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="stringliteral">"SG_"</span>, <span class="stringliteral">"SG_ Value"</span>, <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] ECU"</span>,</div>
|
||||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> }</div>
|
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\""</span>,</div>
|
||||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span> +</div>
|
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,"</span>,</div>
|
||||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span> +</div>
|
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"</span>})</div>
|
||||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> SignalLine(<span class="stringliteral">"8"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1-"</span>, <span class="stringliteral">"-1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"-255"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> RejectSignal(fixture, broken);</div>
|
||||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">const</span> <span class="keyword">auto</span> factors = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"64"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> tests.Check(factors.frames[0].signals.size() == 2U &&</div>
|
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"63"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> factors.frames[0].signals[0].factor == 0.0 &&</div>
|
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"56"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"0+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> factors.frames[0].signals[1].factor == -1.0,</div>
|
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"4294967295"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="stringliteral">"Zero and negative factors and equal range boundaries"</span>);</div>
|
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> RejectSignal(fixture, ordinary, 0U);</div>
|
||||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
|
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> delimiter: {<span class="charliteral">'|'</span>, <span class="charliteral">'@'</span>, <span class="charliteral">'('</span>, <span class="charliteral">')'</span>, <span class="charliteral">'['</span>, <span class="charliteral">']'</span>, <span class="charliteral">'"'</span>}) {</div>
|
||||||
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">struct </span>SignalCase {</div>
|
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> std::string line = ordinary;</div>
|
||||||
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *start;</div>
|
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> line.erase(line.find(delimiter), 1U);</div>
|
||||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *length;</div>
|
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> RejectSignal(fixture, line);</div>
|
||||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *order;</div>
|
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> }</div>
|
||||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">unsigned</span> payload;</div>
|
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span>}</div>
|
||||||
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> };</div>
|
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
|
||||||
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">const</span> SignalCase validSignals[] = {</div>
|
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="keywordtype">void</span> DbcParserTest::validSignals() {</div>
|
||||||
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 1U},</div>
|
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> Fixture fixture;</div>
|
||||||
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0-"</span>, 1U},</div>
|
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> signalParser;</div>
|
||||||
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span> +</div>
|
||||||
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"0-"</span>, 8U},</div>
|
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span> +</div>
|
||||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> {<span class="stringliteral">"63"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> SignalLine(<span class="stringliteral">"8"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1-"</span>, <span class="stringliteral">"-1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"-255"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> {<span class="stringliteral">"56"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0+"</span>, 8U},</div>
|
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">const</span> <span class="keyword">auto</span> factors = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> {<span class="stringliteral">"3"</span>, <span class="stringliteral">"12"</span>, <span class="stringliteral">"0+"</span>, 2U},</div>
|
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> CHECK(factors.frames[0].signals.size() == 2U &&</div>
|
||||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> {<span class="stringliteral">"2039"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 255U}};</div>
|
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> factors.frames[0].signals[0].factor == 0.0 &&</div>
|
||||||
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: validSignals) {</div>
|
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> factors.frames[0].signals[1].factor == -1.0,</div>
|
||||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(test.payload) + <span class="stringliteral">" ECU\n"</span> +</div>
|
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="stringliteral">"Zero and negative factors and equal range boundaries"</span>);</div>
|
||||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> SignalLine(test.start, test.length, test.order, <span class="stringliteral">".5e+1"</span>, <span class="stringliteral">"-2.5E-1"</span>, <span class="stringliteral">"-1."</span>, <span class="stringliteral">"+2e2"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
|
||||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">try</span> {</div>
|
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">struct </span>SignalCase {</div>
|
||||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">const</span> <span class="keyword">auto</span> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *start;</div>
|
||||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">const</span> <span class="keyword">auto</span> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *length;</div>
|
||||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> tests.Check(signal.startBit == std::stoul(test.start) &&</div>
|
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *order;</div>
|
||||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> signal.length == std::stoul(test.length) &&</div>
|
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">unsigned</span> payload;</div>
|
||||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> signal.isLittleEndian == (test.order[0] == <span class="charliteral">'1'</span>) &&</div>
|
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> };</div>
|
||||||
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> signal.isSigned == (test.order[1] == <span class="charliteral">'-'</span>) &&</div>
|
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">const</span> SignalCase validSignals[] = {</div>
|
||||||
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> signal.factor == 5.0 && signal.offset == -0.25 &&</div>
|
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 1U},</div>
|
||||||
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> signal.minimum == -1.0 && signal.maximum == 200.0,</div>
|
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0-"</span>, 1U},</div>
|
||||||
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="stringliteral">"Valid signal boundary and numeric metadata"</span>);</div>
|
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||||
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { tests.Check(<span class="keyword">false</span>, error.what()); }</div>
|
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"0-"</span>, 8U},</div>
|
||||||
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> }</div>
|
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> {<span class="stringliteral">"63"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||||
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span></div>
|
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> {<span class="stringliteral">"56"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0+"</span>, 8U},</div>
|
||||||
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="stringliteral">"SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n"</span>);</div>
|
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> {<span class="stringliteral">"3"</span>, <span class="stringliteral">"12"</span>, <span class="stringliteral">"0+"</span>, 2U},</div>
|
||||||
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">try</span> {</div>
|
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> {<span class="stringliteral">"2039"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 255U}};</div>
|
||||||
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">const</span> <span class="keyword">auto</span> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: validSignals) {</div>
|
||||||
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">const</span> <span class="keyword">auto</span> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(test.payload) + <span class="stringliteral">" ECU\n"</span> +</div>
|
||||||
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> tests.Check(signal.name == <span class="stringliteral">"Value"</span> && signal.unit == <span class="stringliteral">"rpm"</span> &&</div>
|
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> SignalLine(test.start, test.length, test.order, <span class="stringliteral">".5e+1"</span>, <span class="stringliteral">"-2.5E-1"</span>, <span class="stringliteral">"-1."</span>, <span class="stringliteral">"+2e2"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||||
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> signal.receivers == std::vector<std::string>({<span class="stringliteral">"ECU1"</span>, <span class="stringliteral">"ECU2"</span>}),</div>
|
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">try</span> {</div>
|
||||||
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="stringliteral">"Signal tabs, spaces, and receiver list"</span>);</div>
|
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">const</span> <span class="keyword">auto</span> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { tests.Check(<span class="keyword">false</span>, error.what()); }</div>
|
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">const</span> <span class="keyword">auto</span> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||||
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> dispatchDatabase;</div>
|
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> CHECK(signal.startBit == std::stoul(test.start) &&</div>
|
||||||
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{dispatchDatabase, <span class="keyword">nullptr</span>};</div>
|
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> signal.length == std::stoul(test.length) &&</div>
|
||||||
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
|
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> signal.isLittleEndian == (test.order[0] == <span class="charliteral">'1'</span>) &&</div>
|
||||||
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> dispatcher.RegisterType<CountingHandler>(<span class="stringliteral">"TEST_"</span>);</div>
|
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> signal.isSigned == (test.order[1] == <span class="charliteral">'-'</span>) &&</div>
|
||||||
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> tests.Check(dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ first"</span>, context) &&</div>
|
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> signal.factor == 5.0 && signal.offset == -0.25 &&</div>
|
||||||
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ second"</span>, context) &&</div>
|
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> signal.minimum == -1.0 && signal.maximum == 200.0,</div>
|
||||||
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> CountingHandler::instances == 1 && CountingHandler::calls == 2 &&</div>
|
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="stringliteral">"Valid signal boundary and numeric metadata"</span>);</div>
|
||||||
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> dispatchDatabase.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 2U,</div>
|
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||||
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="stringliteral">"Factory dispatch and handler reuse"</span>);</div>
|
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> }</div>
|
||||||
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> tests.Check(!dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_OTHER data"</span>, context) &&</div>
|
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span></div>
|
||||||
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"BO_TX_BU_ 1 : ECU;"</span>, context) &&</div>
|
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="stringliteral">"SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n"</span>);</div>
|
||||||
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"VAL_ 1 Speed 0 \"Stopped\";"</span>, context) &&</div>
|
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">try</span> {</div>
|
||||||
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> CountingHandler::calls == 2,</div>
|
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">const</span> <span class="keyword">auto</span> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="stringliteral">"Exact and unknown keyword dispatch"</span>);</div>
|
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keyword">const</span> <span class="keyword">auto</span> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||||
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
|
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> CHECK(signal.name == <span class="stringliteral">"Value"</span> && signal.unit == <span class="stringliteral">"rpm"</span> &&</div>
|
||||||
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> fixture.Write(<span class="stringliteral">"BO_ 1 First: 8 ECU\n"</span>);</div>
|
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> signal.receivers == std::vector<std::string>({<span class="stringliteral">"ECU1"</span>, <span class="stringliteral">"ECU2"</span>}),</div>
|
||||||
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> tests.Check(parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string()).<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U, <span class="stringliteral">"First parse"</span>);</div>
|
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="stringliteral">"Signal tabs, spaces, and receiver list"</span>);</div>
|
||||||
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> fixture.Write(<span class="stringliteral">"SG_ Speed : invalid\n"</span>);</div>
|
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||||
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">try</span> {</div>
|
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span>}</div>
|
||||||
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
|
||||||
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> tests.Check(<span class="keyword">false</span>, <span class="stringliteral">"Independent parse context"</span>);</div>
|
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="keywordtype">void</span> DbcParserTest::dispatch() {</div>
|
||||||
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> CountingHandler::instances = 0;</div>
|
||||||
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> tests.Check(std::string(error.what()).find(<span class="stringliteral">"Signal found before any frame"</span>) !=</div>
|
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> CountingHandler::calls = 0;</div>
|
||||||
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> std::string::npos,</div>
|
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> dispatchDatabase;</div>
|
||||||
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="stringliteral">"Independent parse context"</span>);</div>
|
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{dispatchDatabase, <span class="keyword">nullptr</span>};</div>
|
||||||
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> }</div>
|
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
|
||||||
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> fixture.Write(<span class="stringliteral">"BO_ 2 Second: 8 ECU\n"</span>);</div>
|
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> dispatcher.RegisterType<CountingHandler>(<span class="stringliteral">"TEST_"</span>);</div>
|
||||||
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">const</span> <span class="keyword">auto</span> recovered = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> CHECK(dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ first"</span>, context) &&</div>
|
||||||
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> tests.Check(recovered.frames.size() == 1U && recovered.frames[0].canId == 2U,</div>
|
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ second"</span>, context) &&</div>
|
||||||
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="stringliteral">"Fresh parse after error"</span>);</div>
|
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> CountingHandler::instances == 1 && CountingHandler::calls == 2 &&</div>
|
||||||
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span> (tests.failures != 0) <span class="keywordflow">return</span> 1;</div>
|
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> dispatchDatabase.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 2U,</div>
|
||||||
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> std::cout << <span class="stringliteral">"All "</span> << tests.count << <span class="stringliteral">" parser cases passed.\n"</span>;</div>
|
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="stringliteral">"Factory dispatch and handler reuse"</span>);</div>
|
||||||
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">return</span> 0;</div>
|
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> CHECK(!dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_OTHER data"</span>, context) &&</div>
|
||||||
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span>}</div>
|
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"BO_TX_BU_ 1 : ECU;"</span>, context) &&</div>
|
||||||
|
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"VAL_ 1 Speed 0 \"Stopped\";"</span>, context) &&</div>
|
||||||
|
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> CountingHandler::calls == 2,</div>
|
||||||
|
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="stringliteral">"Exact and unknown keyword dispatch"</span>);</div>
|
||||||
|
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span>}</div>
|
||||||
|
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
|
||||||
|
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="keywordtype">void</span> DbcParserTest::independentSessions() {</div>
|
||||||
|
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> Fixture fixture;</div>
|
||||||
|
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
|
||||||
|
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> fixture.Write(<span class="stringliteral">"BO_ 1 First: 8 ECU\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> CHECK(parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string()).<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U, <span class="stringliteral">"First parse"</span>);</div>
|
||||||
|
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> fixture.Write(<span class="stringliteral">"SG_ Speed : invalid\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||||
|
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||||
|
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> CHECK(std::string(error.what()).find(<span class="stringliteral">"Signal found before any frame"</span>) !=</div>
|
||||||
|
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> std::string::npos,</div>
|
||||||
|
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||||
|
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div>
|
||||||
|
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> fixture.Write(<span class="stringliteral">"BO_ 2 Second: 8 ECU\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keyword">const</span> <span class="keyword">auto</span> recovered = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> CHECK(recovered.frames.size() == 1U && recovered.frames[0].canId == 2U,</div>
|
||||||
|
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="stringliteral">"Fresh parse after error"</span>);</div>
|
||||||
|
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span>}</div>
|
||||||
|
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
|
||||||
|
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="keywordtype">int</span> RunParserTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
|
||||||
|
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> DbcParserTest tests;</div>
|
||||||
|
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">return</span> QTest::qExec(&tests, argc, argv);</div>
|
||||||
|
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span>}</div>
|
||||||
|
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div>
|
||||||
|
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="preprocessor">#include "dbc_parser_test.moc"</span></div>
|
||||||
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
|
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
|
||||||
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
||||||
<div class="ttc" id="aclassDbcStatementDispatcher_html"><div class="ttname"><a href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00047">dbc_statement_handler.h:47</a></div></div>
|
<div class="ttc" id="aclassDbcStatementDispatcher_html"><div class="ttname"><a href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00047">dbc_statement_handler.h:47</a></div></div>
|
||||||
|
|||||||
@@ -450,7 +450,7 @@ $(document).ready(function(){initNavTree('dbc__statement__handler_8cpp_source.ht
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><b>dbc_statement_handler.cpp</b></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><b>dbc_statement_handler.cpp</b></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ $(document).ready(function(){initNavTree('dbc__statement__handler_8h_source.html
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><b>dbc_statement_handler.h</b></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><b>dbc_statement_handler.h</b></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8cpp.html',''); ini
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8cpp_source.html','
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8h_source.html','')
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ Enumerations</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="decode__database_8h.html">decode_database.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="decode__database_8h.html">decode_database.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ $(document).ready(function(){initNavTree('decode__database_8h_source.html','');
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="decode__database_8h.html">decode_database.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="decode__database_8h.html">decode_database.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,158 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: core Directory Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('dir_4270bfced15e0e73154b13468c7c9ad9.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">core Directory Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
|
||||||
|
Files</h2></td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__database_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__database_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decode__builder_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__decode__builder_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decode__builder_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__decode__builder_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decoder_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__decoder_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decoder_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__decoder_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__parser_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__parser_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__parser_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__parser_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__statement__handler_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>dbc_statement_handler.cpp</b></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__statement__handler_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>dbc_statement_handler.h</b></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__tree__builder_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__tree__builder_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__tree__builder_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></td></tr>
|
||||||
|
<tr class="memdesc:dbc__tree__builder_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="decode__database_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="decode__database_8h.html">decode_database.h</a></td></tr>
|
||||||
|
<tr class="memdesc:decode__database_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="frame__info_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="frame__info_8h.html">frame_info.h</a></td></tr>
|
||||||
|
<tr class="memdesc:frame__info_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="signal__info_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="signal__info_8h.html">signal_info.h</a></td></tr>
|
||||||
|
<tr class="memdesc:signal__info_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="tree__node_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></td></tr>
|
||||||
|
<tr class="memdesc:tree__node_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="tree__node_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="tree__node_8h.html">tree_node.h</a></td></tr>
|
||||||
|
<tr class="memdesc:tree__node_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="typefactory_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>typefactory.h</b></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
var dir_4270bfced15e0e73154b13468c7c9ad9 =
|
||||||
|
[
|
||||||
|
[ "dbc_database.h", "dbc__database_8h.html", "dbc__database_8h" ],
|
||||||
|
[ "dbc_decode_builder.cpp", "dbc__decode__builder_8cpp.html", null ],
|
||||||
|
[ "dbc_decode_builder.h", "dbc__decode__builder_8h.html", "dbc__decode__builder_8h" ],
|
||||||
|
[ "dbc_decoder.cpp", "dbc__decoder_8cpp.html", null ],
|
||||||
|
[ "dbc_decoder.h", "dbc__decoder_8h.html", "dbc__decoder_8h" ],
|
||||||
|
[ "dbc_parser.cpp", "dbc__parser_8cpp.html", null ],
|
||||||
|
[ "dbc_parser.h", "dbc__parser_8h.html", "dbc__parser_8h" ],
|
||||||
|
[ "dbc_statement_handler.cpp", "dbc__statement__handler_8cpp_source.html", null ],
|
||||||
|
[ "dbc_statement_handler.h", "dbc__statement__handler_8h_source.html", null ],
|
||||||
|
[ "dbc_tree_builder.cpp", "dbc__tree__builder_8cpp.html", null ],
|
||||||
|
[ "dbc_tree_builder.h", "dbc__tree__builder_8h.html", "dbc__tree__builder_8h" ],
|
||||||
|
[ "decode_database.h", "decode__database_8h.html", "decode__database_8h" ],
|
||||||
|
[ "frame_info.h", "frame__info_8h.html", "frame__info_8h" ],
|
||||||
|
[ "signal_info.h", "signal__info_8h.html", "signal__info_8h" ],
|
||||||
|
[ "tree_node.cpp", "tree__node_8cpp.html", null ],
|
||||||
|
[ "tree_node.h", "tree__node_8h.html", "tree__node_8h" ],
|
||||||
|
[ "typefactory.h", "typefactory_8h_source.html", null ]
|
||||||
|
];
|
||||||
@@ -100,6 +100,8 @@ Files</h2></td></tr>
|
|||||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>dbc_parser_test.cpp</b></td></tr>
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>dbc_parser_test.cpp</b></td></tr>
|
||||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="tests_2main_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>main.cpp</b></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
var dir_59425e443f801f1f2fd8bbe4959a3ccf =
|
var dir_59425e443f801f1f2fd8bbe4959a3ccf =
|
||||||
[
|
[
|
||||||
[ "dbc_decoder_test.cpp", "dbc__decoder__test_8cpp_source.html", null ],
|
[ "dbc_decoder_test.cpp", "dbc__decoder__test_8cpp_source.html", null ],
|
||||||
[ "dbc_parser_test.cpp", "dbc__parser__test_8cpp_source.html", null ]
|
[ "dbc_parser_test.cpp", "dbc__parser__test_8cpp_source.html", null ],
|
||||||
|
[ "tests/main.cpp", "tests_2main_8cpp_source.html", null ]
|
||||||
];
|
];
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: examples Directory Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('dir_d28a4824dc47e487b107a5db32ef43c4.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">examples Directory Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
|
||||||
|
Files</h2></td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="examples_2main_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="examples_2main_8cpp.html">main.cpp</a></td></tr>
|
||||||
|
<tr class="memdesc:examples_2main_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
var dir_d28a4824dc47e487b107a5db32ef43c4 =
|
||||||
|
[
|
||||||
|
[ "main.cpp", "examples_2main_8cpp.html", null ]
|
||||||
|
];
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: main.cpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('examples_2main_8cpp.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#func-members">Functions</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">main.cpp File Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
|
||||||
|
<a href="#details">More...</a></p>
|
||||||
|
<div class="textblock"><code>#include <cstddef></code><br />
|
||||||
|
<code>#include <iomanip></code><br />
|
||||||
|
<code>#include <iostream></code><br />
|
||||||
|
<code>#include <memory></code><br />
|
||||||
|
<code>#include <vector></code><br />
|
||||||
|
<code>#include "<a class="el" href="dbc__decode__builder_8h_source.html">dbc_decode_builder.h</a>"</code><br />
|
||||||
|
<code>#include "<a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>"</code><br />
|
||||||
|
<code>#include "<a class="el" href="dbc__parser_8h_source.html">dbc_parser.h</a>"</code><br />
|
||||||
|
<code>#include "<a class="el" href="dbc__tree__builder_8h_source.html">dbc_tree_builder.h</a>"</code><br />
|
||||||
|
</div>
|
||||||
|
<p><a href="examples_2main_8cpp_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
|
||||||
|
Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97" id="r_a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="examples_2main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
|
||||||
|
<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </p>
|
||||||
|
<p>Licensed under the MIT License. See LICENSE file in the project root for full license text. </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="examples_2main_8cpp_source.html">examples/main.cpp</a>.</p>
|
||||||
|
</div><h2 class="groupheader">Function Documentation</h2>
|
||||||
|
<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">◆ </a></span>main()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">int main </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">int </td>
|
||||||
|
<td class="paramname"><em>argc</em>, </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="paramkey"></td>
|
||||||
|
<td></td>
|
||||||
|
<td class="paramtype">char * </td>
|
||||||
|
<td class="paramname"><em>argv</em>[] </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>)</td>
|
||||||
|
<td></td><td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="examples_2main_8cpp_source.html#l00101">101</a> of file <a class="el" href="examples_2main_8cpp_source.html">examples/main.cpp</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="examples_2main_8cpp.html">main.cpp</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,287 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: main.cpp Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('examples_2main_8cpp_source.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">examples/main.cpp</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<a href="examples_2main_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
||||||
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include <cstddef></span></div>
|
||||||
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include <iomanip></span></div>
|
||||||
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include <iostream></span></div>
|
||||||
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <memory></span></div>
|
||||||
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <vector></span></div>
|
||||||
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
|
||||||
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include "<a class="code" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a>"</span></div>
|
||||||
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include "<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>"</span></div>
|
||||||
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include "<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>"</span></div>
|
||||||
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include "<a class="code" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a>"</span></div>
|
||||||
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
|
||||||
|
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="keyword">static</span> <span class="keywordtype">void</span> PrintTree(<span class="keyword">const</span> <a class="code hl_class" href="classTreeNode.html">TreeNode</a> *node, <span class="keywordtype">int</span> indent) {</div>
|
||||||
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keywordflow">if</span> (node == <span class="keyword">nullptr</span>)</div>
|
||||||
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordflow">return</span>;</div>
|
||||||
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
|
||||||
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < indent; ++i)</div>
|
||||||
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> std::cout << <span class="stringliteral">" "</span>;</div>
|
||||||
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
|
||||||
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">switch</span> (node-><a class="code hl_function" href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">GetType</a>()) {</div>
|
||||||
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">case</span> NodeType::Root:</div>
|
||||||
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> std::cout << <span class="stringliteral">"[root] "</span> << node-><a class="code hl_function" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a>() << <span class="stringliteral">"\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">break</span>;</div>
|
||||||
|
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
|
||||||
|
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">case</span> NodeType::Frame: {</div>
|
||||||
|
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">const</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> *frame = node-><a class="code hl_function" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">GetFrame</a>();</div>
|
||||||
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> std::cout << <span class="stringliteral">"[frame] "</span> << node-><a class="code hl_function" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a>();</div>
|
||||||
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
|
||||||
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">if</span> (frame != <span class="keyword">nullptr</span>) {</div>
|
||||||
|
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> std::cout << <span class="stringliteral">" id=0x"</span> << std::hex << frame-><a class="code hl_variable" href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">canId</a> << std::dec</div>
|
||||||
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> << <span class="stringliteral">" ext="</span> << (frame-><a class="code hl_variable" href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">isExtended</a> ? <span class="stringliteral">"yes"</span> : <span class="stringliteral">"no"</span>)</div>
|
||||||
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> << <span class="stringliteral">" dlc="</span> << <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(frame-><a class="code hl_variable" href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">dlc</a>);</div>
|
||||||
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
|
||||||
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">if</span> (frame-><a class="code hl_variable" href="structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d">hasPgn</a>)</div>
|
||||||
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> std::cout << <span class="stringliteral">" pgn="</span> << frame-><a class="code hl_variable" href="structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943">pgn</a>;</div>
|
||||||
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> }</div>
|
||||||
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
|
||||||
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> std::cout << <span class="stringliteral">"\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">break</span>;</div>
|
||||||
|
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> }</div>
|
||||||
|
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
|
||||||
|
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">case</span> NodeType::Signal: {</div>
|
||||||
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> *signal = node-><a class="code hl_function" href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">GetSignal</a>();</div>
|
||||||
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> std::cout << <span class="stringliteral">"[signal] "</span> << node-><a class="code hl_function" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a>();</div>
|
||||||
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
|
||||||
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> (signal != <span class="keyword">nullptr</span>) {</div>
|
||||||
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> std::cout << <span class="stringliteral">" start="</span> << signal-><a class="code hl_variable" href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">startBit</a></div>
|
||||||
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> << <span class="stringliteral">" len="</span> << signal-><a class="code hl_variable" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">length</a></div>
|
||||||
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> << <span class="stringliteral">" unit="</span> << signal-><a class="code hl_variable" href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">unit</a>;</div>
|
||||||
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
|
||||||
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
|
||||||
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> std::cout << <span class="stringliteral">"\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">break</span>;</div>
|
||||||
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> }</div>
|
||||||
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
|
||||||
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">default</span>:</div>
|
||||||
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> std::cout << <span class="stringliteral">"[unknown]\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">break</span>;</div>
|
||||||
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> }</div>
|
||||||
|
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
|
||||||
|
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span> (std::size_t i = 0U; i < node-><a class="code hl_function" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">GetChildCount</a>(); ++i)</div>
|
||||||
|
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> PrintTree(node-><a class="code hl_function" href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">GetChild</a>(i), indent + 1);</div>
|
||||||
|
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>}</div>
|
||||||
|
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
|
||||||
|
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">static</span> <span class="keywordtype">void</span> PrintDecodedFrame(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> &decoded) {</div>
|
||||||
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (!decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> || (decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == <span class="keyword">nullptr</span>)) {</div>
|
||||||
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> std::cout << <span class="stringliteral">"No frame definition found.\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span>;</div>
|
||||||
|
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
|
||||||
|
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
|
||||||
|
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> std::cout << <span class="stringliteral">"Decoded frame: "</span> << decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>-><a class="code hl_variable" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">name</a> << <span class="stringliteral">"\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
|
||||||
|
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">for</span> (std::size_t index = 0U; index < decoded.signals.size(); ++index) {</div>
|
||||||
|
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> &signal = decoded.signals[index];</div>
|
||||||
|
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
|
||||||
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span> ((signal.<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a> == <span class="keyword">nullptr</span>) || !signal.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>)</div>
|
||||||
|
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">continue</span>;</div>
|
||||||
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
|
||||||
|
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> std::cout << <span class="stringliteral">" "</span> << signal.<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>-><a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a></div>
|
||||||
|
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> << <span class="stringliteral">" raw="</span>;</div>
|
||||||
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *signedValue = std::get_if<std::int64_t>(&signal.<a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a>))</div>
|
||||||
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> std::cout << *signedValue;</div>
|
||||||
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">else</span></div>
|
||||||
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> std::cout << std::get<std::uint64_t>(signal.<a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a>);</div>
|
||||||
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> std::cout << <span class="stringliteral">" physical="</span> << signal.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a></div>
|
||||||
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> << <span class="stringliteral">" "</span> << signal.<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>-><a class="code hl_variable" href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">unit</a></div>
|
||||||
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> << <span class="stringliteral">"\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> }</div>
|
||||||
|
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}</div>
|
||||||
|
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
|
||||||
|
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]) {</div>
|
||||||
|
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span> (argc < 2) {</div>
|
||||||
|
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> std::cerr << <span class="stringliteral">"Usage: dbc_demo <file.dbc>\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">return</span> 1;</div>
|
||||||
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> }</div>
|
||||||
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
|
||||||
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
|
||||||
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> database = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(argv[1]);</div>
|
||||||
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
|
||||||
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_class" href="classDbcTreeBuilder.html">DbcTreeBuilder</a> treeBuilder;</div>
|
||||||
|
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> std::unique_ptr<TreeNode> root = treeBuilder.<a class="code hl_function" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a>(database);</div>
|
||||||
|
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
|
||||||
|
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> std::cout << <span class="stringliteral">"=== Parsed tree ===\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> PrintTree(root.get(), 0);</div>
|
||||||
|
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
|
||||||
|
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a> decodeBuilder;</div>
|
||||||
|
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> decodeDatabase = decodeBuilder.<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(database);</div>
|
||||||
|
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
|
||||||
|
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="comment">/*</span></div>
|
||||||
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> * Example raw frame.</span></div>
|
||||||
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> * Replace with live CAN frame or trace record later.</span></div>
|
||||||
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> */</span></div>
|
||||||
|
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> rawFrame;</div>
|
||||||
|
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = decodeDatabase.frames.empty() ? 0U : decodeDatabase.frames[0].canId;</div>
|
||||||
|
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = decodeDatabase.frames.empty() ? false : decodeDatabase.frames[0].isExtended;</div>
|
||||||
|
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.resize(8U, 0U);</div>
|
||||||
|
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
|
||||||
|
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a> decoder;</div>
|
||||||
|
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> decoded = decoder.<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(decodeDatabase, rawFrame);</div>
|
||||||
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
|
||||||
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> std::cout << <span class="stringliteral">"\n=== Decoded frame ===\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> PrintDecodedFrame(decoded);</div>
|
||||||
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &ex) {</div>
|
||||||
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> std::cerr << <span class="stringliteral">"Error: "</span> << ex.what() << <span class="stringliteral">"\n"</span>;</div>
|
||||||
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">return</span> 2;</div>
|
||||||
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> }</div>
|
||||||
|
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
|
||||||
|
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> 0;</div>
|
||||||
|
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span>}</div>
|
||||||
|
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcTreeBuilder_html"><div class="ttname"><a href="classDbcTreeBuilder.html">DbcTreeBuilder</a></div><div class="ttdoc">Builds a simple tree from parsed DBC database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8h_source.html#l00023">dbc_tree_builder.h:23</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcTreeBuilder_html_a7e57d067d831b14b383947fd125edd4b"><div class="ttname"><a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">DbcTreeBuilder::Build</a></div><div class="ttdeci">std::unique_ptr< TreeNode > Build(const DbcDatabase &database) const</div><div class="ttdoc">Build tree representation of parsed DBC data.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8cpp_source.html#l00014">dbc_tree_builder.cpp:14</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTreeNode_html"><div class="ttname"><a href="classTreeNode.html">TreeNode</a></div><div class="ttdoc">Tree node for later use in model/view or other hierarchy consumers.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8h_source.html#l00035">tree_node.h:35</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTreeNode_html_a226518612d0d00b5988a2c44fc21d3f1"><div class="ttname"><a href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">TreeNode::GetSignal</a></div><div class="ttdeci">const SignalInfo * GetSignal() const</div><div class="ttdoc">Get signal payload if node is signal.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00061">tree_node.cpp:61</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTreeNode_html_a4727ff801a2d1b9323c5ae50a35457a6"><div class="ttname"><a href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">TreeNode::GetChild</a></div><div class="ttdeci">const TreeNode * GetChild(std::size_t index) const</div><div class="ttdoc">Get child by index.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00035">tree_node.cpp:35</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTreeNode_html_aaac5b8d9dc9e5ae1f367d1adbcf20e18"><div class="ttname"><a href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">TreeNode::GetName</a></div><div class="ttdeci">const std::string & GetName() const</div><div class="ttdoc">Get display name.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00053">tree_node.cpp:53</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTreeNode_html_abdd82460187dca8d3e5d66f5d5c529ea"><div class="ttname"><a href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">TreeNode::GetChildCount</a></div><div class="ttdeci">std::size_t GetChildCount() const</div><div class="ttdoc">Get child count.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00031">tree_node.cpp:31</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTreeNode_html_afa2f4b0aafa12d3d41ed00df8e0250c9"><div class="ttname"><a href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">TreeNode::GetType</a></div><div class="ttdeci">NodeType GetType() const</div><div class="ttdoc">Get node type.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00049">tree_node.cpp:49</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTreeNode_html_afc503b40004764163605d6dbdb4ef811"><div class="ttname"><a href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">TreeNode::GetFrame</a></div><div class="ttdeci">const FrameInfo * GetFrame() const</div><div class="ttdoc">Get frame payload if node is frame.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00057">tree_node.cpp:57</a></div></div>
|
||||||
|
<div class="ttc" id="adbc__decode__builder_8h_html"><div class="ttname"><a href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
|
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
|
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
|
<div class="ttc" id="adbc__tree__builder_8h_html"><div class="ttname"><a href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
|
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00111">decode_database.h:111</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00062">decode_database.h:62</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_a38eed9ca7581423fd8bfbedcffc12092"><div class="ttname"><a href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">DecodeSignal::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00040">decode_database.h:40</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00051">dbc_decoder.h:51</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00054">dbc_decoder.h:54</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00052">dbc_decoder.h:52</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00037">dbc_decoder.h:37</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00040">dbc_decoder.h:40</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedSignalValue_html_a95db4f7f93b5f311e8f272833e45055e"><div class="ttname"><a href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">DecodedSignalValue::rawValue</a></div><div class="ttdeci">std::variant< std::int64_t, std::uint64_t > rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00039">dbc_decoder.h:39</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00041">dbc_decoder.h:41</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00038">dbc_decoder.h:38</a></div></div>
|
||||||
|
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
|
||||||
|
<div class="ttc" id="astructFrameInfo_html_a34b726afaad2ac5c697fdb2ac070cdaf"><div class="ttname"><a href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">FrameInfo::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00027">frame_info.h:27</a></div></div>
|
||||||
|
<div class="ttc" id="astructFrameInfo_html_a4737a5420213ad4304724e39f3a4e55d"><div class="ttname"><a href="structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d">FrameInfo::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00029">frame_info.h:29</a></div></div>
|
||||||
|
<div class="ttc" id="astructFrameInfo_html_aa2b198ea0f55e560c123d35e7b3ecab9"><div class="ttname"><a href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">FrameInfo::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00030">frame_info.h:30</a></div></div>
|
||||||
|
<div class="ttc" id="astructFrameInfo_html_aee518b33f1000bf0b7f6e4a87474c943"><div class="ttname"><a href="structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943">FrameInfo::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00028">frame_info.h:28</a></div></div>
|
||||||
|
<div class="ttc" id="astructFrameInfo_html_af470b0742c05bfbffc31c51a68f5c05e"><div class="ttname"><a href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">FrameInfo::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00026">frame_info.h:26</a></div></div>
|
||||||
|
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
|
||||||
|
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector< std::uint8_t > data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
|
||||||
|
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
|
||||||
|
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
|
||||||
|
<div class="ttc" id="astructSignalInfo_html"><div class="ttname"><a href="structSignalInfo.html">SignalInfo</a></div><div class="ttdoc">Describes one signal inside a DBC frame.</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00022">signal_info.h:22</a></div></div>
|
||||||
|
<div class="ttc" id="astructSignalInfo_html_a1008b5201f71848177217bd52fb84baa"><div class="ttname"><a href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">SignalInfo::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00025">signal_info.h:25</a></div></div>
|
||||||
|
<div class="ttc" id="astructSignalInfo_html_a1f214f03e94ef5794de2d3367bfcbd01"><div class="ttname"><a href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">SignalInfo::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00032">signal_info.h:32</a></div></div>
|
||||||
|
<div class="ttc" id="astructSignalInfo_html_ace290724f9801521609aedaa946d61f1"><div class="ttname"><a href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">SignalInfo::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00024">signal_info.h:24</a></div></div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="examples_2main_8cpp.html">main.cpp</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+24
-21
@@ -95,27 +95,30 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); });
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
|
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
|
||||||
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
|
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
|
||||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html" target="_self">tests</a></td><td class="desc"></td></tr>
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html" target="_self">core</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decoder__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_decoder_test.cpp</b></td><td class="desc"></td></tr>
|
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__database_8h.html" target="_self">dbc_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_parser_test.cpp</b></td><td class="desc"></td></tr>
|
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decode__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decode__builder_8cpp.html" target="_self">dbc_decode_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__database_8h.html" target="_self">dbc_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_2_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decode__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decode__builder_8h.html" target="_self">dbc_decode_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__decode__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decode__builder_8cpp.html" target="_self">dbc_decode_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decoder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decoder_8cpp.html" target="_self">dbc_decoder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__decode__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decode__builder_8h.html" target="_self">dbc_decode_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_4_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decoder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decoder_8h.html" target="_self">dbc_decoder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__decoder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decoder_8cpp.html" target="_self">dbc_decoder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__parser_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__parser_8cpp.html" target="_self">dbc_parser.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__decoder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decoder_8h.html" target="_self">dbc_decoder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_6_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__parser_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__parser_8h.html" target="_self">dbc_parser.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__parser_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__parser_8cpp.html" target="_self">dbc_parser.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__statement__handler_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.cpp</b></td><td class="desc"></td></tr>
|
||||||
<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__parser_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__parser_8h.html" target="_self">dbc_parser.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_8_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__statement__handler_8h_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.h</b></td><td class="desc"></td></tr>
|
||||||
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__statement__handler_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.cpp</b></td><td class="desc"></td></tr>
|
<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__tree__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8cpp.html" target="_self">dbc_tree_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__statement__handler_8h_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.h</b></td><td class="desc"></td></tr>
|
<tr id="row_0_10_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__tree__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8h.html" target="_self">dbc_tree_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__tree__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8cpp.html" target="_self">dbc_tree_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="decode__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="decode__database_8h.html" target="_self">decode_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__tree__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8h.html" target="_self">dbc_tree_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_12_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="frame__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="frame__info_8h.html" target="_self">frame_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="decode__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="decode__database_8h.html" target="_self">decode_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="signal__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="signal__info_8h.html" target="_self">signal_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="frame__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="frame__info_8h.html" target="_self">frame_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_14_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="tree__node_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8cpp.html" target="_self">tree_node.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="main_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="main_8cpp.html" target="_self">main.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="tree__node_8h_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8h.html" target="_self">tree_node.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="signal__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="signal__info_8h.html" target="_self">signal_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_0_16_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="typefactory_8h_source.html"><span class="icondoc"></span></a><b>typefactory.h</b></td><td class="desc"></td></tr>
|
||||||
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="tree__node_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8cpp.html" target="_self">tree_node.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')"> </span><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html" target="_self">examples</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="tree__node_8h_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8h.html" target="_self">tree_node.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
<tr id="row_1_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="examples_2main_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="examples_2main_8cpp.html" target="_self">main.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||||
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="typefactory_8h_source.html"><span class="icondoc"></span></a><b>typefactory.h</b></td><td class="desc"></td></tr>
|
<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">▼</span><span id="img_2_" class="iconfopen" onclick="toggleFolder('2_')"> </span><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html" target="_self">tests</a></td><td class="desc"></td></tr>
|
||||||
|
<tr id="row_2_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decoder__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_decoder_test.cpp</b></td><td class="desc"></td></tr>
|
||||||
|
<tr id="row_2_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_parser_test.cpp</b></td><td class="desc"></td></tr>
|
||||||
|
<tr id="row_2_2_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="tests_2main_8cpp_source.html"><span class="icondoc"></span></a><b>main.cpp</b></td><td class="desc"></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div><!-- directory -->
|
</div><!-- directory -->
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
|
|||||||
+3
-19
@@ -1,22 +1,6 @@
|
|||||||
var files_dup =
|
var files_dup =
|
||||||
[
|
[
|
||||||
[ "tests", "dir_59425e443f801f1f2fd8bbe4959a3ccf.html", "dir_59425e443f801f1f2fd8bbe4959a3ccf" ],
|
[ "core", "dir_4270bfced15e0e73154b13468c7c9ad9.html", "dir_4270bfced15e0e73154b13468c7c9ad9" ],
|
||||||
[ "dbc_database.h", "dbc__database_8h.html", "dbc__database_8h" ],
|
[ "examples", "dir_d28a4824dc47e487b107a5db32ef43c4.html", "dir_d28a4824dc47e487b107a5db32ef43c4" ],
|
||||||
[ "dbc_decode_builder.cpp", "dbc__decode__builder_8cpp.html", null ],
|
[ "tests", "dir_59425e443f801f1f2fd8bbe4959a3ccf.html", "dir_59425e443f801f1f2fd8bbe4959a3ccf" ]
|
||||||
[ "dbc_decode_builder.h", "dbc__decode__builder_8h.html", "dbc__decode__builder_8h" ],
|
|
||||||
[ "dbc_decoder.cpp", "dbc__decoder_8cpp.html", null ],
|
|
||||||
[ "dbc_decoder.h", "dbc__decoder_8h.html", "dbc__decoder_8h" ],
|
|
||||||
[ "dbc_parser.cpp", "dbc__parser_8cpp.html", null ],
|
|
||||||
[ "dbc_parser.h", "dbc__parser_8h.html", "dbc__parser_8h" ],
|
|
||||||
[ "dbc_statement_handler.cpp", "dbc__statement__handler_8cpp_source.html", null ],
|
|
||||||
[ "dbc_statement_handler.h", "dbc__statement__handler_8h_source.html", null ],
|
|
||||||
[ "dbc_tree_builder.cpp", "dbc__tree__builder_8cpp.html", null ],
|
|
||||||
[ "dbc_tree_builder.h", "dbc__tree__builder_8h.html", "dbc__tree__builder_8h" ],
|
|
||||||
[ "decode_database.h", "decode__database_8h.html", "decode__database_8h" ],
|
|
||||||
[ "frame_info.h", "frame__info_8h.html", "frame__info_8h" ],
|
|
||||||
[ "main.cpp", "main_8cpp.html", null ],
|
|
||||||
[ "signal_info.h", "signal__info_8h.html", "signal__info_8h" ],
|
|
||||||
[ "tree_node.cpp", "tree__node_8cpp.html", null ],
|
|
||||||
[ "tree_node.h", "tree__node_8h.html", "tree__node_8h" ],
|
|
||||||
[ "typefactory.h", "typefactory_8h_source.html", null ]
|
|
||||||
];
|
];
|
||||||
@@ -121,7 +121,7 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="frame__info_8h.html">frame_info.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="frame__info_8h.html">frame_info.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ $(document).ready(function(){initNavTree('frame__info_8h_source.html',''); initR
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="frame__info_8h.html">frame_info.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="frame__info_8h.html">frame_info.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+22
-11
@@ -87,8 +87,9 @@
|
|||||||
</section>
|
</section>
|
||||||
<section title="Regression tests" ref="md_README.html#autotoc_md103"/>
|
<section title="Regression tests" ref="md_README.html#autotoc_md103"/>
|
||||||
</section>
|
</section>
|
||||||
<section title="Decoder regression tests" ref="md_tests_2README.html">
|
<section title="QtTest regression tests" ref="md_tests_2README.html">
|
||||||
<section title="Parser regression tests" ref="md_tests_2README.html#autotoc_md105"/>
|
<section title="Decoder coverage" ref="md_tests_2README.html#autotoc_md105"/>
|
||||||
|
<section title="Parser coverage" ref="md_tests_2README.html#autotoc_md106"/>
|
||||||
</section>
|
</section>
|
||||||
<section title="Classes" ref="annotated.html">
|
<section title="Classes" ref="annotated.html">
|
||||||
<section title="Class List" ref="annotated.html">
|
<section title="Class List" ref="annotated.html">
|
||||||
@@ -249,10 +250,7 @@
|
|||||||
</section>
|
</section>
|
||||||
<section title="Files" ref="files.html">
|
<section title="Files" ref="files.html">
|
||||||
<section title="File List" ref="files.html">
|
<section title="File List" ref="files.html">
|
||||||
<section title="tests" ref="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">
|
<section title="core" ref="dir_4270bfced15e0e73154b13468c7c9ad9.html">
|
||||||
<section title="dbc_decoder_test.cpp" ref="dbc__decoder__test_8cpp_source.html"/>
|
|
||||||
<section title="dbc_parser_test.cpp" ref="dbc__parser__test_8cpp_source.html"/>
|
|
||||||
</section>
|
|
||||||
<section title="dbc_database.h" ref="dbc__database_8h.html">
|
<section title="dbc_database.h" ref="dbc__database_8h.html">
|
||||||
<section title="DbcDatabase" ref="structDbcDatabase.html">
|
<section title="DbcDatabase" ref="structDbcDatabase.html">
|
||||||
<section title="frames" ref="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b"/>
|
<section title="frames" ref="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b"/>
|
||||||
@@ -355,8 +353,6 @@
|
|||||||
<section title="public" ref="structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084"/>
|
<section title="public" ref="structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084"/>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
<section title="main.cpp" ref="main_8cpp.html">
|
|
||||||
</section>
|
|
||||||
<section title="signal_info.h" ref="signal__info_8h.html">
|
<section title="signal_info.h" ref="signal__info_8h.html">
|
||||||
<section title="SignalInfo" ref="structSignalInfo.html">
|
<section title="SignalInfo" ref="structSignalInfo.html">
|
||||||
<section title="name" ref="structSignalInfo.html#a379e422a00cad56f896cacf60455b088"/>
|
<section title="name" ref="structSignalInfo.html#a379e422a00cad56f896cacf60455b088"/>
|
||||||
@@ -396,6 +392,16 @@
|
|||||||
</section>
|
</section>
|
||||||
<section title="typefactory.h" ref="typefactory_8h_source.html"/>
|
<section title="typefactory.h" ref="typefactory_8h_source.html"/>
|
||||||
</section>
|
</section>
|
||||||
|
<section title="examples" ref="dir_d28a4824dc47e487b107a5db32ef43c4.html">
|
||||||
|
<section title="main.cpp" ref="examples_2main_8cpp.html">
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section title="tests" ref="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">
|
||||||
|
<section title="dbc_decoder_test.cpp" ref="dbc__decoder__test_8cpp_source.html"/>
|
||||||
|
<section title="dbc_parser_test.cpp" ref="dbc__parser__test_8cpp_source.html"/>
|
||||||
|
<section title="tests/main.cpp" ref="tests_2main_8cpp_source.html"/>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
<section title="File Members" ref="globals.html">
|
<section title="File Members" ref="globals.html">
|
||||||
<section title="All" ref="globals.html"/>
|
<section title="All" ref="globals.html"/>
|
||||||
<section title="Enumerations" ref="globals_enum.html"/>
|
<section title="Enumerations" ref="globals_enum.html"/>
|
||||||
@@ -429,7 +435,7 @@
|
|||||||
<keyword name="TypeFactory" id="TypeFactory_" ref="classTypeFactory.html"/>
|
<keyword name="TypeFactory" id="TypeFactory_" ref="classTypeFactory.html"/>
|
||||||
<keyword name="TypeFactory< std::string, DbcStatementHandler >" id="TypeFactory< std::string, DbcStatementHandler >_" ref="classTypeFactory.html"/>
|
<keyword name="TypeFactory< std::string, DbcStatementHandler >" id="TypeFactory< std::string, DbcStatementHandler >_" ref="classTypeFactory.html"/>
|
||||||
<keyword name="DBC Parser and Runtime Decode Module Documentation" id="DBC Parser and Runtime Decode Module Documentation_" ref="md_README.html"/>
|
<keyword name="DBC Parser and Runtime Decode Module Documentation" id="DBC Parser and Runtime Decode Module Documentation_" ref="md_README.html"/>
|
||||||
<keyword name="Decoder regression tests" id="Decoder regression tests_" ref="md_tests_2README.html"/>
|
<keyword name="QtTest regression tests" id="QtTest regression tests_" ref="md_tests_2README.html"/>
|
||||||
<keyword name="AddChild(std::unique_ptr< TreeNode > child)" id="TreeNode::AddChild_a6161f2ebb92184eab4215d121870e788" ref="classTreeNode.html#a6161f2ebb92184eab4215d121870e788"/>
|
<keyword name="AddChild(std::unique_ptr< TreeNode > child)" id="TreeNode::AddChild_a6161f2ebb92184eab4215d121870e788" ref="classTreeNode.html#a6161f2ebb92184eab4215d121870e788"/>
|
||||||
<keyword name="Build(const DbcDatabase &source) const" id="DbcDecodeBuilder::Build_a2bc6386dfb5e58976c42e22c19ec471b" ref="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b"/>
|
<keyword name="Build(const DbcDatabase &source) const" id="DbcDecodeBuilder::Build_a2bc6386dfb5e58976c42e22c19ec471b" ref="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b"/>
|
||||||
<keyword name="Build(const DbcDatabase &database) const" id="DbcTreeBuilder::Build_a7e57d067d831b14b383947fd125edd4b" ref="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b"/>
|
<keyword name="Build(const DbcDatabase &database) const" id="DbcTreeBuilder::Build_a7e57d067d831b14b383947fd125edd4b" ref="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b"/>
|
||||||
@@ -576,10 +582,14 @@
|
|||||||
<file>dbc__tree__builder_8h_source.html</file>
|
<file>dbc__tree__builder_8h_source.html</file>
|
||||||
<file>decode__database_8h.html</file>
|
<file>decode__database_8h.html</file>
|
||||||
<file>decode__database_8h_source.html</file>
|
<file>decode__database_8h_source.html</file>
|
||||||
|
<file>dir_4270bfced15e0e73154b13468c7c9ad9.html</file>
|
||||||
<file>dir_59425e443f801f1f2fd8bbe4959a3ccf.html</file>
|
<file>dir_59425e443f801f1f2fd8bbe4959a3ccf.html</file>
|
||||||
|
<file>dir_d28a4824dc47e487b107a5db32ef43c4.html</file>
|
||||||
<file>doxygen.css</file>
|
<file>doxygen.css</file>
|
||||||
<file>doxygen.svg</file>
|
<file>doxygen.svg</file>
|
||||||
<file>dynsections.js</file>
|
<file>dynsections.js</file>
|
||||||
|
<file>examples_2main_8cpp.html</file>
|
||||||
|
<file>examples_2main_8cpp_source.html</file>
|
||||||
<file>files.html</file>
|
<file>files.html</file>
|
||||||
<file>frame__info_8h.html</file>
|
<file>frame__info_8h.html</file>
|
||||||
<file>frame__info_8h_source.html</file>
|
<file>frame__info_8h_source.html</file>
|
||||||
@@ -615,8 +625,6 @@
|
|||||||
<file>inherit_graph_9.svg</file>
|
<file>inherit_graph_9.svg</file>
|
||||||
<file>inherits.html</file>
|
<file>inherits.html</file>
|
||||||
<file>jquery.js</file>
|
<file>jquery.js</file>
|
||||||
<file>main_8cpp.html</file>
|
|
||||||
<file>main_8cpp_source.html</file>
|
|
||||||
<file>md_README.html</file>
|
<file>md_README.html</file>
|
||||||
<file>md_tests_2README.html</file>
|
<file>md_tests_2README.html</file>
|
||||||
<file>menu.js</file>
|
<file>menu.js</file>
|
||||||
@@ -638,6 +646,7 @@
|
|||||||
<file>search/all_15.js</file>
|
<file>search/all_15.js</file>
|
||||||
<file>search/all_16.js</file>
|
<file>search/all_16.js</file>
|
||||||
<file>search/all_17.js</file>
|
<file>search/all_17.js</file>
|
||||||
|
<file>search/all_18.js</file>
|
||||||
<file>search/all_2.js</file>
|
<file>search/all_2.js</file>
|
||||||
<file>search/all_3.js</file>
|
<file>search/all_3.js</file>
|
||||||
<file>search/all_4.js</file>
|
<file>search/all_4.js</file>
|
||||||
@@ -685,6 +694,7 @@
|
|||||||
<file>search/pages_3.js</file>
|
<file>search/pages_3.js</file>
|
||||||
<file>search/pages_4.js</file>
|
<file>search/pages_4.js</file>
|
||||||
<file>search/pages_5.js</file>
|
<file>search/pages_5.js</file>
|
||||||
|
<file>search/pages_6.js</file>
|
||||||
<file>search/search.css</file>
|
<file>search/search.css</file>
|
||||||
<file>search/search.js</file>
|
<file>search/search.js</file>
|
||||||
<file>search/searchdata.js</file>
|
<file>search/searchdata.js</file>
|
||||||
@@ -744,6 +754,7 @@
|
|||||||
<file>tab_s.png</file>
|
<file>tab_s.png</file>
|
||||||
<file>tab_sd.png</file>
|
<file>tab_sd.png</file>
|
||||||
<file>tabs.css</file>
|
<file>tabs.css</file>
|
||||||
|
<file>tests_2main_8cpp_source.html</file>
|
||||||
<file>tree__node_8cpp.html</file>
|
<file>tree__node_8cpp.html</file>
|
||||||
<file>tree__node_8cpp_source.html</file>
|
<file>tree__node_8cpp_source.html</file>
|
||||||
<file>tree__node_8h.html</file>
|
<file>tree__node_8h.html</file>
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ Parser</h2>
|
|||||||
Demo</h2>
|
Demo</h2>
|
||||||
<p>File:</p>
|
<p>File:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code><a class="el" href="main_8cpp.html" title="Created: 2026-03-13 Author: Deeaitch (Dim. Himro)">main.cpp</a></code></li>
|
<li><code>main.cpp</code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Used as a small integration example.</p>
|
<p>Used as a small integration example.</p>
|
||||||
<hr />
|
<hr />
|
||||||
@@ -797,7 +797,15 @@ Build Integration</h1>
|
|||||||
<li>qmake</li>
|
<li>qmake</li>
|
||||||
<li>Makefile</li>
|
<li>Makefile</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Just add the source files to the project.</p>
|
<p>Open <code>dbc.pro</code> in Qt Creator to see two subprojects: <code>core</code> and <code>tests</code>. <code>core/core.pro</code> builds the C++17 static library <code>dbc_core</code> without a Qt dependency. <code>tests/tests.pro</code> builds the QtTest executable <code>dbc_tests</code> and links that library. The root project declares <code>tests.depends = core</code> for parallel builds.</p>
|
||||||
|
<p>Build out of source (Qt 6; use <code>qmake</code> for Qt 5):</p>
|
||||||
|
<div class="fragment"><div class="line">mkdir build</div>
|
||||||
|
<div class="line">cd build</div>
|
||||||
|
<div class="line">qmake6 ../dbc.pro</div>
|
||||||
|
<div class="line">make -j</div>
|
||||||
|
<div class="line">make check</div>
|
||||||
|
</div><!-- fragment --><p><code>core/core_files.pri</code> lists the library sources and headers. Consumers include <code>core/core.pri</code> for include paths and library linkage; the test source lists live in <code>tests/parser_tests.pri</code> and <code>tests/decoder_tests.pri</code>. When building a consumer separately, pass <code>DBC_CORE_BUILD_DIR=/absolute/path/to/build/core</code> to qmake.</p>
|
||||||
|
<p>The former demonstration program is preserved in <code><a class="el" href="examples_2main_8cpp.html" title="Created: 2026-03-13 Author: Deeaitch (Dim. Himro)">examples/main.cpp</a></code> with <code>examples/demo.pro</code>. Build it separately after building core, using that same <code>DBC_CORE_BUILD_DIR</code> option; run <code>dbc_demo <file.dbc></code>.</p>
|
||||||
<hr />
|
<hr />
|
||||||
<h1><a class="anchor" id="autotoc_md100"></a>
|
<h1><a class="anchor" id="autotoc_md100"></a>
|
||||||
Summary</h1>
|
Summary</h1>
|
||||||
@@ -826,7 +834,7 @@ Runtime decode representation</h2>
|
|||||||
</div><!-- fragment --><p>This gives FrameTap a much better foundation for real use, because both browsing and decoding are supported without forcing one representation to do the other's job.</p>
|
</div><!-- fragment --><p>This gives FrameTap a much better foundation for real use, because both browsing and decoding are supported without forcing one representation to do the other's job.</p>
|
||||||
<h1><a class="anchor" id="autotoc_md103"></a>
|
<h1><a class="anchor" id="autotoc_md103"></a>
|
||||||
Regression tests</h1>
|
Regression tests</h1>
|
||||||
<p>See <a class="el" href="md_tests_2README.html">tests/README.md</a> for compiler and qmake commands. Tests cover frame validation and error locations, Intel and Motorola extraction, signed and unsigned 64-bit boundaries, physical conversion, numeric output, and invalid signal payloads. </p>
|
<p>See <a class="el" href="md_tests_2README.html">tests/README.md</a> for QtTest build and execution commands. Tests cover frame validation and error locations, Intel and Motorola extraction, signed and unsigned 64-bit boundaries, physical conversion, numeric output, and invalid signal payloads. </p>
|
||||||
</div></div><!-- contents -->
|
</div></div><!-- contents -->
|
||||||
</div><!-- PageDoc -->
|
</div><!-- PageDoc -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.8"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: Decoder regression tests</title>
|
<title>DBC Framework: QtTest regression tests</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
@@ -90,28 +90,30 @@ $(document).ready(function(){initNavTree('md_tests_2README.html',''); initResiza
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div><div class="header">
|
<div><div class="header">
|
||||||
<div class="headertitle"><div class="title">Decoder regression tests</div></div>
|
<div class="headertitle"><div class="title">QtTest regression tests</div></div>
|
||||||
</div><!--header-->
|
</div><!--header-->
|
||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock"><p><a class="anchor" id="autotoc_md104"></a> Run from the repository root with a C++17 compiler:</p>
|
<div class="textblock"><p><a class="anchor" id="autotoc_md104"></a> Open the repository's root <code>dbc.pro</code> in Qt Creator. It contains <code>core</code> (a static C++17 library) and <code>tests</code> (the <code>dbc_tests</code> QtTest executable). Core is built first; tests link its archive rather than compiling its implementation again. Qt Core and Qt Test development packages are required for tests only.</p>
|
||||||
<div class="fragment"><div class="line">g++ -std=c++17 -Wall -Wextra -Wpedantic -I. \</div>
|
<p>Build from the repository root with Qt 6 (use <code>qmake</code> for Qt 5):</p>
|
||||||
<div class="line"> tests/dbc_decoder_test.cpp dbc_decoder.cpp -o /tmp/dbc_decoder_test</div>
|
<div class="fragment"><div class="line">mkdir build</div>
|
||||||
<div class="line">/tmp/dbc_decoder_test</div>
|
<div class="line">cd build</div>
|
||||||
</div><!-- fragment --><p>Alternatively, build the standalone qmake project out of source:</p>
|
<div class="line">qmake6 ../dbc.pro</div>
|
||||||
<div class="fragment"><div class="line">mkdir -p /tmp/dbc_decoder_test_build</div>
|
<div class="line">make -j</div>
|
||||||
<div class="line">cd /tmp/dbc_decoder_test_build</div>
|
<div class="line">make check</div>
|
||||||
<div class="line">qmake /absolute/path/to/dbc/tests/dbc_decoder_test.pro</div>
|
</div><!-- fragment --><p>Or run <code>./tests/dbc_tests</code> directly. Both parser and decoder suites run, and the executable returns nonzero when either suite fails. Decoder cases appear as individual QtTest data rows; parser checks are grouped into named test slots. Checks also run in release builds.</p>
|
||||||
|
<p>To build tests separately against an existing core build:</p>
|
||||||
|
<div class="fragment"><div class="line">mkdir /tmp/dbc-tests-build</div>
|
||||||
|
<div class="line">cd /tmp/dbc-tests-build</div>
|
||||||
|
<div class="line">qmake6 /absolute/path/to/dbc/tests/tests.pro \</div>
|
||||||
|
<div class="line"> DBC_CORE_BUILD_DIR=/absolute/path/to/build/core</div>
|
||||||
<div class="line">make</div>
|
<div class="line">make</div>
|
||||||
<div class="line">./dbc_decoder_test</div>
|
<div class="line">make check</div>
|
||||||
</div><!-- fragment --><p>The executable returns a nonzero exit code if any case fails. Checks remain active in release builds and do not depend on <code>assert</code> or an external test framework.</p>
|
</div><!-- fragment --><p><code>parser_tests.pri</code> and <code>decoder_tests.pri</code> include the test sources. <code>../core/core.pri</code> supplies the library include path and linkage.</p>
|
||||||
<p>Coverage includes Motorola bit numbering within and across bytes, unaligned signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary values (including <code>INT64_MIN</code>, <code>INT64_MAX</code>, and <code>UINT64_MAX</code>), numeric output, invalid lengths, insufficient payloads, and Intel regression cases. Frame validity means the definition was found; insufficient payloads are checked through signal validity.</p>
|
|
||||||
<h1><a class="anchor" id="autotoc_md105"></a>
|
<h1><a class="anchor" id="autotoc_md105"></a>
|
||||||
Parser regression tests</h1>
|
Decoder coverage</h1>
|
||||||
<p>Run from the repository root:</p>
|
<p>Coverage includes Motorola bit numbering within and across bytes, unaligned signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary values (including <code>INT64_MIN</code>, <code>INT64_MAX</code>, and <code>UINT64_MAX</code>), numeric output, invalid lengths, insufficient payloads, and Intel regression cases. Frame validity means the definition was found; insufficient payloads are checked through signal validity.</p>
|
||||||
<div class="fragment"><div class="line">g++ -std=c++17 -Wall -Wextra -Wpedantic -Werror -I. \</div>
|
<h1><a class="anchor" id="autotoc_md106"></a>
|
||||||
<div class="line"> tests/dbc_parser_test.cpp dbc_parser.cpp dbc_statement_handler.cpp -o /tmp/dbc_parser_test</div>
|
Parser coverage</h1>
|
||||||
<div class="line">/tmp/dbc_parser_test</div>
|
|
||||||
</div><!-- fragment --><p>For qmake, use <code>tests/dbc_parser_test.pro</code> in a separate build directory, following the decoder instructions above, then run <code>./dbc_parser_test</code>.</p>
|
|
||||||
<p>Parser tests cover standard and extended CAN IDs, whitespace, payload storage boundaries, missing fields, malformed and overflowing numbers, reserved ID bits, error paths and line numbers, and integration with signals and comments. Signal tests cover complete syntax and numeric validation, scientific notation, finite physical parameters and ordered ranges, spaces and tabs, receiver lists, unsupported multiplexing, and Intel/Motorola declared-payload boundaries. Temporary DBC fixtures are created in the system temporary directory and removed automatically.</p>
|
<p>Parser tests cover standard and extended CAN IDs, whitespace, payload storage boundaries, missing fields, malformed and overflowing numbers, reserved ID bits, error paths and line numbers, and integration with signals and comments. Signal tests cover complete syntax and numeric validation, scientific notation, finite physical parameters and ordered ranges, spaces and tabs, receiver lists, unsupported multiplexing, and Intel/Motorola declared-payload boundaries. Temporary DBC fixtures are created in the system temporary directory and removed automatically.</p>
|
||||||
<p>Dispatch tests also verify exact keyword matching, handler construction and reuse, unknown statements, and independent parsing sessions, including recovery after errors. </p>
|
<p>Dispatch tests also verify exact keyword matching, handler construction and reuse, unknown statements, and independent parsing sessions, including recovery after errors. </p>
|
||||||
</div></div><!-- contents -->
|
</div></div><!-- contents -->
|
||||||
|
|||||||
@@ -100,8 +100,9 @@ var NAVTREE =
|
|||||||
] ],
|
] ],
|
||||||
[ "Regression tests", "md_README.html#autotoc_md103", null ]
|
[ "Regression tests", "md_README.html#autotoc_md103", null ]
|
||||||
] ],
|
] ],
|
||||||
[ "Decoder regression tests", "md_tests_2README.html", [
|
[ "QtTest regression tests", "md_tests_2README.html", [
|
||||||
[ "Parser regression tests", "md_tests_2README.html#autotoc_md105", null ]
|
[ "Decoder coverage", "md_tests_2README.html#autotoc_md105", null ],
|
||||||
|
[ "Parser coverage", "md_tests_2README.html#autotoc_md106", null ]
|
||||||
] ],
|
] ],
|
||||||
[ "Classes", "annotated.html", [
|
[ "Classes", "annotated.html", [
|
||||||
[ "Class List", "annotated.html", "annotated_dup" ],
|
[ "Class List", "annotated.html", "annotated_dup" ],
|
||||||
|
|||||||
+50
-46
@@ -34,40 +34,44 @@ var NAVTREEINDEX0 =
|
|||||||
"classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3":[2,0,22,0],
|
"classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3":[2,0,22,0],
|
||||||
"classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473":[2,0,22,1],
|
"classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473":[2,0,22,1],
|
||||||
"classes.html":[2,1],
|
"classes.html":[2,1],
|
||||||
"dbc__database_8h.html":[3,0,1],
|
"dbc__database_8h.html":[3,0,0,0],
|
||||||
"dbc__database_8h_source.html":[3,0,1],
|
"dbc__database_8h_source.html":[3,0,0,0],
|
||||||
"dbc__decode__builder_8cpp.html":[3,0,2],
|
"dbc__decode__builder_8cpp.html":[3,0,0,1],
|
||||||
"dbc__decode__builder_8cpp_source.html":[3,0,2],
|
"dbc__decode__builder_8cpp_source.html":[3,0,0,1],
|
||||||
"dbc__decode__builder_8h.html":[3,0,3],
|
"dbc__decode__builder_8h.html":[3,0,0,2],
|
||||||
"dbc__decode__builder_8h_source.html":[3,0,3],
|
"dbc__decode__builder_8h_source.html":[3,0,0,2],
|
||||||
"dbc__decoder_8cpp.html":[3,0,4],
|
"dbc__decoder_8cpp.html":[3,0,0,3],
|
||||||
"dbc__decoder_8cpp_source.html":[3,0,4],
|
"dbc__decoder_8cpp_source.html":[3,0,0,3],
|
||||||
"dbc__decoder_8h.html":[3,0,5],
|
"dbc__decoder_8h.html":[3,0,0,4],
|
||||||
"dbc__decoder_8h_source.html":[3,0,5],
|
"dbc__decoder_8h_source.html":[3,0,0,4],
|
||||||
"dbc__decoder__test_8cpp_source.html":[3,0,0,0],
|
"dbc__decoder__test_8cpp_source.html":[3,0,2,0],
|
||||||
"dbc__parser_8cpp.html":[3,0,6],
|
"dbc__parser_8cpp.html":[3,0,0,5],
|
||||||
"dbc__parser_8cpp_source.html":[3,0,6],
|
"dbc__parser_8cpp_source.html":[3,0,0,5],
|
||||||
"dbc__parser_8h.html":[3,0,7],
|
"dbc__parser_8h.html":[3,0,0,6],
|
||||||
"dbc__parser_8h_source.html":[3,0,7],
|
"dbc__parser_8h_source.html":[3,0,0,6],
|
||||||
"dbc__parser__test_8cpp_source.html":[3,0,0,1],
|
"dbc__parser__test_8cpp_source.html":[3,0,2,1],
|
||||||
"dbc__statement__handler_8cpp_source.html":[3,0,8],
|
"dbc__statement__handler_8cpp_source.html":[3,0,0,7],
|
||||||
"dbc__statement__handler_8h_source.html":[3,0,9],
|
"dbc__statement__handler_8h_source.html":[3,0,0,8],
|
||||||
"dbc__tree__builder_8cpp.html":[3,0,10],
|
"dbc__tree__builder_8cpp.html":[3,0,0,9],
|
||||||
"dbc__tree__builder_8cpp_source.html":[3,0,10],
|
"dbc__tree__builder_8cpp_source.html":[3,0,0,9],
|
||||||
"dbc__tree__builder_8h.html":[3,0,11],
|
"dbc__tree__builder_8h.html":[3,0,0,10],
|
||||||
"dbc__tree__builder_8h_source.html":[3,0,11],
|
"dbc__tree__builder_8h_source.html":[3,0,0,10],
|
||||||
"decode__database_8h.html":[3,0,12],
|
"decode__database_8h.html":[3,0,0,11],
|
||||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b":[3,0,12,5],
|
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b":[3,0,0,11,5],
|
||||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31":[3,0,12,5,1],
|
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31":[3,0,0,11,5,1],
|
||||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5":[3,0,12,5,0],
|
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5":[3,0,0,11,5,0],
|
||||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1":[3,0,12,6],
|
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1":[3,0,0,11,6],
|
||||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379":[3,0,12,6,1],
|
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379":[3,0,0,11,6,1],
|
||||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1aa1a914735b205424ba6c40b85528d78a":[3,0,12,6,0],
|
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1aa1a914735b205424ba6c40b85528d78a":[3,0,0,11,6,0],
|
||||||
"decode__database_8h_source.html":[3,0,12],
|
"decode__database_8h_source.html":[3,0,0,11],
|
||||||
"dir_59425e443f801f1f2fd8bbe4959a3ccf.html":[3,0,0],
|
"dir_4270bfced15e0e73154b13468c7c9ad9.html":[3,0,0],
|
||||||
|
"dir_59425e443f801f1f2fd8bbe4959a3ccf.html":[3,0,2],
|
||||||
|
"dir_d28a4824dc47e487b107a5db32ef43c4.html":[3,0,1],
|
||||||
|
"examples_2main_8cpp.html":[3,0,1,0],
|
||||||
|
"examples_2main_8cpp_source.html":[3,0,1,0],
|
||||||
"files.html":[3,0],
|
"files.html":[3,0],
|
||||||
"frame__info_8h.html":[3,0,13],
|
"frame__info_8h.html":[3,0,0,12],
|
||||||
"frame__info_8h_source.html":[3,0,13],
|
"frame__info_8h_source.html":[3,0,0,12],
|
||||||
"functions.html":[2,3,0],
|
"functions.html":[2,3,0],
|
||||||
"functions_func.html":[2,3,1],
|
"functions_func.html":[2,3,1],
|
||||||
"functions_vars.html":[2,3,2],
|
"functions_vars.html":[2,3,2],
|
||||||
@@ -75,8 +79,6 @@ var NAVTREEINDEX0 =
|
|||||||
"globals_enum.html":[3,1,1],
|
"globals_enum.html":[3,1,1],
|
||||||
"hierarchy.html":[2,2],
|
"hierarchy.html":[2,2],
|
||||||
"index.html":[],
|
"index.html":[],
|
||||||
"main_8cpp.html":[3,0,14],
|
|
||||||
"main_8cpp_source.html":[3,0,14],
|
|
||||||
"md_README.html":[0],
|
"md_README.html":[0],
|
||||||
"md_README.html#autotoc_md1":[0,0],
|
"md_README.html#autotoc_md1":[0,0],
|
||||||
"md_README.html#autotoc_md10":[0,3,0],
|
"md_README.html#autotoc_md10":[0,3,0],
|
||||||
@@ -145,9 +147,10 @@ var NAVTREEINDEX0 =
|
|||||||
"md_README.html#autotoc_md98":[0,43],
|
"md_README.html#autotoc_md98":[0,43],
|
||||||
"md_tests_2README.html":[1],
|
"md_tests_2README.html":[1],
|
||||||
"md_tests_2README.html#autotoc_md105":[1,0],
|
"md_tests_2README.html#autotoc_md105":[1,0],
|
||||||
|
"md_tests_2README.html#autotoc_md106":[1,1],
|
||||||
"pages.html":[],
|
"pages.html":[],
|
||||||
"signal__info_8h.html":[3,0,15],
|
"signal__info_8h.html":[3,0,0,13],
|
||||||
"signal__info_8h_source.html":[3,0,15],
|
"signal__info_8h_source.html":[3,0,0,13],
|
||||||
"structDbcDatabase.html":[2,0,1],
|
"structDbcDatabase.html":[2,0,1],
|
||||||
"structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b":[2,0,1,0],
|
"structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b":[2,0,1,0],
|
||||||
"structDbcParseContext.html":[2,0,5],
|
"structDbcParseContext.html":[2,0,5],
|
||||||
@@ -213,13 +216,14 @@ var NAVTREEINDEX0 =
|
|||||||
"structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52":[2,0,20,8],
|
"structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52":[2,0,20,8],
|
||||||
"structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499":[2,0,20,5],
|
"structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499":[2,0,20,5],
|
||||||
"structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c":[2,0,20,3],
|
"structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c":[2,0,20,3],
|
||||||
"tree__node_8cpp.html":[3,0,16],
|
"tests_2main_8cpp_source.html":[3,0,2,2],
|
||||||
"tree__node_8cpp_source.html":[3,0,16],
|
"tree__node_8cpp.html":[3,0,0,14],
|
||||||
"tree__node_8h.html":[3,0,17],
|
"tree__node_8cpp_source.html":[3,0,0,14],
|
||||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16":[3,0,17,1],
|
"tree__node_8h.html":[3,0,0,15],
|
||||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398":[3,0,17,1,2],
|
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16":[3,0,0,15,1],
|
||||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a3bb3e8c8a24891ba0f7608bcc96f8b0a":[3,0,17,1,1],
|
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398":[3,0,0,15,1,2],
|
||||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16afa03eb688ad8aa1db593d33dabd89bad":[3,0,17,1,0],
|
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a3bb3e8c8a24891ba0f7608bcc96f8b0a":[3,0,0,15,1,1],
|
||||||
"tree__node_8h_source.html":[3,0,17],
|
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16afa03eb688ad8aa1db593d33dabd89bad":[3,0,0,15,1,0],
|
||||||
"typefactory_8h_source.html":[3,0,18]
|
"tree__node_8h_source.html":[3,0,0,15],
|
||||||
|
"typefactory_8h_source.html":[3,0,0,16]
|
||||||
};
|
};
|
||||||
@@ -96,7 +96,7 @@ $(document).ready(function(){initNavTree('pages.html',''); initResizable(); });
|
|||||||
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
|
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
|
||||||
<table class="directory">
|
<table class="directory">
|
||||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md_README.html" target="_self">DBC Parser and Runtime Decode Module Documentation</a></td><td class="desc"></td></tr>
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md_README.html" target="_self">DBC Parser and Runtime Decode Module Documentation</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md_tests_2README.html" target="_self">Decoder regression tests</a></td><td class="desc"></td></tr>
|
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md_tests_2README.html" target="_self">QtTest regression tests</a></td><td class="desc"></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div><!-- directory -->
|
</div><!-- directory -->
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ var searchData=
|
|||||||
['parsefile_6',['ParseFile',['../classDbcParser.html#aef72826942c9095d653fafa435855e56',1,'DbcParser']]],
|
['parsefile_6',['ParseFile',['../classDbcParser.html#aef72826942c9095d653fafa435855e56',1,'DbcParser']]],
|
||||||
['parser_7',['Parser',['../md_README.html#autotoc_md14',1,'']]],
|
['parser_7',['Parser',['../md_README.html#autotoc_md14',1,'']]],
|
||||||
['parser_20and_20runtime_20decode_20module_20documentation_8',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
['parser_20and_20runtime_20decode_20module_20documentation_8',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||||
['parser_20regression_20tests_9',['Parser regression tests',['../md_tests_2README.html#autotoc_md105',1,'']]],
|
['parser_20coverage_9',['Parser coverage',['../md_tests_2README.html#autotoc_md106',1,'']]],
|
||||||
['parser_20support_10',['Parser Support',['../md_README.html#autotoc_md53',1,'']]],
|
['parser_20support_10',['Parser Support',['../md_README.html#autotoc_md53',1,'']]],
|
||||||
['path_11',['path',['../md_README.html#autotoc_md4',1,'1. Parse and UI path'],['../md_README.html#autotoc_md5',1,'2. Runtime decode path'],['../md_README.html#autotoc_md81',1,'live path'],['../md_README.html#autotoc_md82',1,'trace path']]],
|
['path_11',['path',['../md_README.html#autotoc_md4',1,'1. Parse and UI path'],['../md_README.html#autotoc_md5',1,'2. Runtime decode path'],['../md_README.html#autotoc_md81',1,'live path'],['../md_README.html#autotoc_md82',1,'trace path']]],
|
||||||
['pgn_12',['pgn',['../structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943',1,'FrameInfo::pgn'],['../structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23',1,'DecodeFrame::pgn']]],
|
['pgn_12',['pgn',['../structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943',1,'FrameInfo::pgn'],['../structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23',1,'DecodeFrame::pgn']]],
|
||||||
|
|||||||
@@ -1,22 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['raw_20frame_0',['Decode a raw frame',['../md_README.html#autotoc_md78',1,'']]],
|
['qttest_20regression_20tests_0',['QtTest regression tests',['../md_tests_2README.html',1,'']]]
|
||||||
['raw_20value_20representation_20and_20precision_1',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
|
||||||
['rawcanframe_2',['RawCanFrame',['../structRawCanFrame.html',1,'']]],
|
|
||||||
['rawcanframe_20tt_3',['<tt>RawCanFrame</tt>',['../md_README.html#autotoc_md43',1,'']]],
|
|
||||||
['rawvalue_4',['rawValue',['../structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e',1,'DecodedSignalValue']]],
|
|
||||||
['receivers_5',['receivers',['../structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa',1,'DecodeSignal::receivers'],['../structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3',1,'SignalInfo::receivers']]],
|
|
||||||
['recommended_20next_20steps_6',['Recommended Next Steps',['../md_README.html#autotoc_md92',1,'']]],
|
|
||||||
['registertype_7',['registerType',['../classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3',1,'TypeFactory']]],
|
|
||||||
['regression_20tests_8',['regression tests',['../md_tests_2README.html',1,'Decoder regression tests'],['../md_tests_2README.html#autotoc_md105',1,'Parser regression tests'],['../md_README.html#autotoc_md103',1,'Regression tests']]],
|
|
||||||
['representation_9',['representation',['../md_README.html#autotoc_md101',1,'Parsed representation'],['../md_README.html#autotoc_md102',1,'Runtime decode representation']]],
|
|
||||||
['representation_20and_20precision_10',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
|
||||||
['runtime_20decode_20database_11',['Build runtime decode database',['../md_README.html#autotoc_md77',1,'']]],
|
|
||||||
['runtime_20decode_20layer_12',['Runtime Decode Layer',['../md_README.html#autotoc_md27',1,'']]],
|
|
||||||
['runtime_20decode_20layer_20exists_13',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
|
||||||
['runtime_20decode_20module_20documentation_14',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
|
||||||
['runtime_20decode_20path_15',['2. Runtime decode path',['../md_README.html#autotoc_md5',1,'']]],
|
|
||||||
['runtime_20decode_20representation_16',['Runtime decode representation',['../md_README.html#autotoc_md102',1,'']]],
|
|
||||||
['runtime_20decode_20structures_17',['Runtime decode structures',['../md_README.html#autotoc_md12',1,'']]],
|
|
||||||
['runtime_20decoder_18',['Runtime decoder',['../md_README.html#autotoc_md13',1,'']]]
|
|
||||||
];
|
];
|
||||||
+19
-18
@@ -1,21 +1,22 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['signal_20definition_0',['Signal definition',['../md_README.html#autotoc_md60',1,'']]],
|
['raw_20frame_0',['Decode a raw frame',['../md_README.html#autotoc_md78',1,'']]],
|
||||||
['signal_20validation_20and_20parse_20errors_1',['Signal validation and parse errors',['../md_README.html#autotoc_md62',1,'']]],
|
['raw_20value_20representation_20and_20precision_1',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||||
['signal_5finfo_2eh_2',['signal_info.h',['../signal__info_8h.html',1,'']]],
|
['rawcanframe_2',['RawCanFrame',['../structRawCanFrame.html',1,'']]],
|
||||||
['signalinfo_3',['SignalInfo',['../structSignalInfo.html',1,'']]],
|
['rawcanframe_20tt_3',['<tt>RawCanFrame</tt>',['../md_README.html#autotoc_md43',1,'']]],
|
||||||
['signalinfo_20tt_4',['<tt>SignalInfo</tt>',['../md_README.html#autotoc_md18',1,'']]],
|
['rawvalue_4',['rawValue',['../structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e',1,'DecodedSignalValue']]],
|
||||||
['stage_201_20already_20implemented_5',['Stage 1 - already implemented',['../md_README.html#autotoc_md93',1,'']]],
|
['receivers_5',['receivers',['../structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa',1,'DecodeSignal::receivers'],['../structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3',1,'SignalInfo::receivers']]],
|
||||||
['stage_202_6',['Stage 2',['../md_README.html#autotoc_md94',1,'']]],
|
['recommended_20next_20steps_6',['Recommended Next Steps',['../md_README.html#autotoc_md92',1,'']]],
|
||||||
['stage_203_7',['Stage 3',['../md_README.html#autotoc_md95',1,'']]],
|
['registertype_7',['registerType',['../classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3',1,'TypeFactory']]],
|
||||||
['stage_204_8',['Stage 4',['../md_README.html#autotoc_md96',1,'']]],
|
['regression_20tests_8',['regression tests',['../md_tests_2README.html',1,'QtTest regression tests'],['../md_README.html#autotoc_md103',1,'Regression tests']]],
|
||||||
['startbit_9',['startbit',['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit'],['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit']]],
|
['representation_9',['representation',['../md_README.html#autotoc_md101',1,'Parsed representation'],['../md_README.html#autotoc_md102',1,'Runtime decode representation']]],
|
||||||
['statement_20handler_20factory_10',['Statement Handler Factory',['../md_README.html#autotoc_md88',1,'']]],
|
['representation_20and_20precision_10',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||||
['steps_11',['Recommended Next Steps',['../md_README.html#autotoc_md92',1,'']]],
|
['runtime_20decode_20database_11',['Build runtime decode database',['../md_README.html#autotoc_md77',1,'']]],
|
||||||
['strategy_12',['Unified Decode Strategy',['../md_README.html#autotoc_md80',1,'']]],
|
['runtime_20decode_20layer_12',['Runtime Decode Layer',['../md_README.html#autotoc_md27',1,'']]],
|
||||||
['structures_13',['structures',['../md_README.html#autotoc_md17',1,'Parsed Data Structures'],['../md_README.html#autotoc_md10',1,'Parsed DBC structures'],['../md_README.html#autotoc_md12',1,'Runtime decode structures'],['../md_README.html#autotoc_md11',1,'UI tree structures']]],
|
['runtime_20decode_20layer_20exists_13',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||||
['summary_14',['Summary',['../md_README.html#autotoc_md100',1,'']]],
|
['runtime_20decode_20module_20documentation_14',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||||
['support_15',['Parser Support',['../md_README.html#autotoc_md53',1,'']]],
|
['runtime_20decode_20path_15',['2. Runtime decode path',['../md_README.html#autotoc_md5',1,'']]],
|
||||||
['supported_20dbc_20syntax_16',['Supported DBC Syntax',['../md_README.html#autotoc_md55',1,'']]],
|
['runtime_20decode_20representation_16',['Runtime decode representation',['../md_README.html#autotoc_md102',1,'']]],
|
||||||
['syntax_17',['Supported DBC Syntax',['../md_README.html#autotoc_md55',1,'']]]
|
['runtime_20decode_20structures_17',['Runtime decode structures',['../md_README.html#autotoc_md12',1,'']]],
|
||||||
|
['runtime_20decoder_18',['Runtime decoder',['../md_README.html#autotoc_md13',1,'']]]
|
||||||
];
|
];
|
||||||
+18
-29
@@ -1,32 +1,21 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['tests_0',['tests',['../md_tests_2README.html',1,'Decoder regression tests'],['../md_tests_2README.html#autotoc_md105',1,'Parser regression tests'],['../md_README.html#autotoc_md103',1,'Regression tests']]],
|
['signal_20definition_0',['Signal definition',['../md_README.html#autotoc_md60',1,'']]],
|
||||||
['the_20runtime_20decode_20layer_20exists_1',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
['signal_20validation_20and_20parse_20errors_1',['Signal validation and parse errors',['../md_README.html#autotoc_md62',1,'']]],
|
||||||
['the_20tree_20is_20not_20enough_2',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
['signal_5finfo_2eh_2',['signal_info.h',['../signal__info_8h.html',1,'']]],
|
||||||
['trace_20path_3',['trace path',['../md_README.html#autotoc_md82',1,'']]],
|
['signalinfo_3',['SignalInfo',['../structSignalInfo.html',1,'']]],
|
||||||
['transmitter_4',['transmitter',['../structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8',1,'FrameInfo::transmitter'],['../structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9',1,'DecodeFrame::transmitter']]],
|
['signalinfo_20tt_4',['<tt>SignalInfo</tt>',['../md_README.html#autotoc_md18',1,'']]],
|
||||||
['tree_5',['Build UI tree',['../md_README.html#autotoc_md76',1,'']]],
|
['stage_201_20already_20implemented_5',['Stage 1 - already implemented',['../md_README.html#autotoc_md93',1,'']]],
|
||||||
['tree_20is_20not_20enough_6',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
['stage_202_6',['Stage 2',['../md_README.html#autotoc_md94',1,'']]],
|
||||||
['tree_20layer_7',['UI Tree Layer',['../md_README.html#autotoc_md24',1,'']]],
|
['stage_203_7',['Stage 3',['../md_README.html#autotoc_md95',1,'']]],
|
||||||
['tree_20structures_8',['UI tree structures',['../md_README.html#autotoc_md11',1,'']]],
|
['stage_204_8',['Stage 4',['../md_README.html#autotoc_md96',1,'']]],
|
||||||
['tree_5fnode_2ecpp_9',['tree_node.cpp',['../tree__node_8cpp.html',1,'']]],
|
['startbit_9',['startbit',['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit'],['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit']]],
|
||||||
['tree_5fnode_2eh_10',['tree_node.h',['../tree__node_8h.html',1,'']]],
|
['statement_20handler_20factory_10',['Statement Handler Factory',['../md_README.html#autotoc_md88',1,'']]],
|
||||||
['treenode_11',['treenode',['../classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d',1,'TreeNode::TreeNode()'],['../classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc',1,'TreeNode::TreeNode(const FrameInfo &frame)'],['../classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae',1,'TreeNode::TreeNode(const SignalInfo &signal)'],['../classTreeNode.html',1,'TreeNode']]],
|
['steps_11',['Recommended Next Steps',['../md_README.html#autotoc_md92',1,'']]],
|
||||||
['treenode_20tt_12',['<tt>TreeNode</tt>',['../md_README.html#autotoc_md25',1,'']]],
|
['strategy_12',['Unified Decode Strategy',['../md_README.html#autotoc_md80',1,'']]],
|
||||||
['tt_20byteorder_20tt_13',['<tt>ByteOrder</tt>',['../md_README.html#autotoc_md30',1,'']]],
|
['structures_13',['structures',['../md_README.html#autotoc_md17',1,'Parsed Data Structures'],['../md_README.html#autotoc_md10',1,'Parsed DBC structures'],['../md_README.html#autotoc_md12',1,'Runtime decode structures'],['../md_README.html#autotoc_md11',1,'UI tree structures']]],
|
||||||
['tt_20dbcdatabase_20tt_14',['<tt>DbcDatabase</tt>',['../md_README.html#autotoc_md22',1,'']]],
|
['summary_14',['Summary',['../md_README.html#autotoc_md100',1,'']]],
|
||||||
['tt_20dbcdecoder_20tt_15',['<tt>DbcDecoder</tt>',['../md_README.html#autotoc_md51',1,'']]],
|
['support_15',['Parser Support',['../md_README.html#autotoc_md53',1,'']]],
|
||||||
['tt_20decodedatabase_20tt_16',['<tt>DecodeDatabase</tt>',['../md_README.html#autotoc_md40',1,'']]],
|
['supported_20dbc_20syntax_16',['Supported DBC Syntax',['../md_README.html#autotoc_md55',1,'']]],
|
||||||
['tt_20decodedframevalue_20tt_17',['<tt>DecodedFrameValue</tt>',['../md_README.html#autotoc_md49',1,'']]],
|
['syntax_17',['Supported DBC Syntax',['../md_README.html#autotoc_md55',1,'']]]
|
||||||
['tt_20decodedsignalvalue_20tt_18',['<tt>DecodedSignalValue</tt>',['../md_README.html#autotoc_md45',1,'']]],
|
|
||||||
['tt_20decodeframe_20tt_19',['<tt>DecodeFrame</tt>',['../md_README.html#autotoc_md36',1,'']]],
|
|
||||||
['tt_20decodesignal_20tt_20',['<tt>DecodeSignal</tt>',['../md_README.html#autotoc_md34',1,'']]],
|
|
||||||
['tt_20frameinfo_20tt_21',['<tt>FrameInfo</tt>',['../md_README.html#autotoc_md20',1,'']]],
|
|
||||||
['tt_20framekey_20tt_22',['<tt>FrameKey</tt>',['../md_README.html#autotoc_md38',1,'']]],
|
|
||||||
['tt_20rawcanframe_20tt_23',['<tt>RawCanFrame</tt>',['../md_README.html#autotoc_md43',1,'']]],
|
|
||||||
['tt_20signalinfo_20tt_24',['<tt>SignalInfo</tt>',['../md_README.html#autotoc_md18',1,'']]],
|
|
||||||
['tt_20treenode_20tt_25',['<tt>TreeNode</tt>',['../md_README.html#autotoc_md25',1,'']]],
|
|
||||||
['tt_20valuetype_20tt_26',['<tt>ValueType</tt>',['../md_README.html#autotoc_md32',1,'']]],
|
|
||||||
['typefactory_27',['TypeFactory',['../classTypeFactory.html',1,'']]],
|
|
||||||
['typefactory_3c_20std_3a_3astring_2c_20dbcstatementhandler_20_3e_28',['TypeFactory< std::string, DbcStatementHandler >',['../classTypeFactory.html',1,'']]]
|
|
||||||
];
|
];
|
||||||
@@ -1,11 +1,32 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['ui_20path_0',['1. Parse and UI path',['../md_README.html#autotoc_md4',1,'']]],
|
['tests_0',['tests',['../md_tests_2README.html',1,'QtTest regression tests'],['../md_README.html#autotoc_md103',1,'Regression tests']]],
|
||||||
['ui_20tree_1',['Build UI tree',['../md_README.html#autotoc_md76',1,'']]],
|
['the_20runtime_20decode_20layer_20exists_1',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||||
['ui_20tree_20layer_2',['UI Tree Layer',['../md_README.html#autotoc_md24',1,'']]],
|
['the_20tree_20is_20not_20enough_2',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
||||||
['ui_20tree_20structures_3',['UI tree structures',['../md_README.html#autotoc_md11',1,'']]],
|
['trace_20path_3',['trace path',['../md_README.html#autotoc_md82',1,'']]],
|
||||||
['unified_20decode_20strategy_4',['Unified Decode Strategy',['../md_README.html#autotoc_md80',1,'']]],
|
['transmitter_4',['transmitter',['../structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8',1,'FrameInfo::transmitter'],['../structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9',1,'DecodeFrame::transmitter']]],
|
||||||
['unit_5',['unit',['../structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092',1,'DecodeSignal::unit'],['../structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01',1,'SignalInfo::unit']]],
|
['tree_5',['Build UI tree',['../md_README.html#autotoc_md76',1,'']]],
|
||||||
['usage_6',['Example Usage',['../md_README.html#autotoc_md74',1,'']]],
|
['tree_20is_20not_20enough_6',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
||||||
['use_20in_20frametap_7',['Intended Use in FrameTap',['../md_README.html#autotoc_md84',1,'']]]
|
['tree_20layer_7',['UI Tree Layer',['../md_README.html#autotoc_md24',1,'']]],
|
||||||
|
['tree_20structures_8',['UI tree structures',['../md_README.html#autotoc_md11',1,'']]],
|
||||||
|
['tree_5fnode_2ecpp_9',['tree_node.cpp',['../tree__node_8cpp.html',1,'']]],
|
||||||
|
['tree_5fnode_2eh_10',['tree_node.h',['../tree__node_8h.html',1,'']]],
|
||||||
|
['treenode_11',['treenode',['../classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d',1,'TreeNode::TreeNode()'],['../classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc',1,'TreeNode::TreeNode(const FrameInfo &frame)'],['../classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae',1,'TreeNode::TreeNode(const SignalInfo &signal)'],['../classTreeNode.html',1,'TreeNode']]],
|
||||||
|
['treenode_20tt_12',['<tt>TreeNode</tt>',['../md_README.html#autotoc_md25',1,'']]],
|
||||||
|
['tt_20byteorder_20tt_13',['<tt>ByteOrder</tt>',['../md_README.html#autotoc_md30',1,'']]],
|
||||||
|
['tt_20dbcdatabase_20tt_14',['<tt>DbcDatabase</tt>',['../md_README.html#autotoc_md22',1,'']]],
|
||||||
|
['tt_20dbcdecoder_20tt_15',['<tt>DbcDecoder</tt>',['../md_README.html#autotoc_md51',1,'']]],
|
||||||
|
['tt_20decodedatabase_20tt_16',['<tt>DecodeDatabase</tt>',['../md_README.html#autotoc_md40',1,'']]],
|
||||||
|
['tt_20decodedframevalue_20tt_17',['<tt>DecodedFrameValue</tt>',['../md_README.html#autotoc_md49',1,'']]],
|
||||||
|
['tt_20decodedsignalvalue_20tt_18',['<tt>DecodedSignalValue</tt>',['../md_README.html#autotoc_md45',1,'']]],
|
||||||
|
['tt_20decodeframe_20tt_19',['<tt>DecodeFrame</tt>',['../md_README.html#autotoc_md36',1,'']]],
|
||||||
|
['tt_20decodesignal_20tt_20',['<tt>DecodeSignal</tt>',['../md_README.html#autotoc_md34',1,'']]],
|
||||||
|
['tt_20frameinfo_20tt_21',['<tt>FrameInfo</tt>',['../md_README.html#autotoc_md20',1,'']]],
|
||||||
|
['tt_20framekey_20tt_22',['<tt>FrameKey</tt>',['../md_README.html#autotoc_md38',1,'']]],
|
||||||
|
['tt_20rawcanframe_20tt_23',['<tt>RawCanFrame</tt>',['../md_README.html#autotoc_md43',1,'']]],
|
||||||
|
['tt_20signalinfo_20tt_24',['<tt>SignalInfo</tt>',['../md_README.html#autotoc_md18',1,'']]],
|
||||||
|
['tt_20treenode_20tt_25',['<tt>TreeNode</tt>',['../md_README.html#autotoc_md25',1,'']]],
|
||||||
|
['tt_20valuetype_20tt_26',['<tt>ValueType</tt>',['../md_README.html#autotoc_md32',1,'']]],
|
||||||
|
['typefactory_27',['TypeFactory',['../classTypeFactory.html',1,'']]],
|
||||||
|
['typefactory_3c_20std_3a_3astring_2c_20dbcstatementhandler_20_3e_28',['TypeFactory< std::string, DbcStatementHandler >',['../classTypeFactory.html',1,'']]]
|
||||||
];
|
];
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['valid_0',['valid',['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid'],['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid']]],
|
['ui_20path_0',['1. Parse and UI path',['../md_README.html#autotoc_md4',1,'']]],
|
||||||
['validation_20and_20parse_20errors_1',['validation and parse errors',['../md_README.html#autotoc_md58',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md62',1,'Signal validation and parse errors']]],
|
['ui_20tree_1',['Build UI tree',['../md_README.html#autotoc_md76',1,'']]],
|
||||||
['value_20representation_20and_20precision_2',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
['ui_20tree_20layer_2',['UI Tree Layer',['../md_README.html#autotoc_md24',1,'']]],
|
||||||
['valuetype_3',['valuetype',['../structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8',1,'DecodeSignal::valueType'],['../decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1',1,'ValueType: decode_database.h']]],
|
['ui_20tree_20structures_3',['UI tree structures',['../md_README.html#autotoc_md11',1,'']]],
|
||||||
['valuetype_20tt_4',['<tt>ValueType</tt>',['../md_README.html#autotoc_md32',1,'']]]
|
['unified_20decode_20strategy_4',['Unified Decode Strategy',['../md_README.html#autotoc_md80',1,'']]],
|
||||||
|
['unit_5',['unit',['../structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092',1,'DecodeSignal::unit'],['../structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01',1,'SignalInfo::unit']]],
|
||||||
|
['usage_6',['Example Usage',['../md_README.html#autotoc_md74',1,'']]],
|
||||||
|
['use_20in_20frametap_7',['Intended Use in FrameTap',['../md_README.html#autotoc_md84',1,'']]]
|
||||||
];
|
];
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['why_20the_20runtime_20decode_20layer_20exists_0',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
['valid_0',['valid',['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid'],['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid']]],
|
||||||
['why_20the_20tree_20is_20not_20enough_1',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]]
|
['validation_20and_20parse_20errors_1',['validation and parse errors',['../md_README.html#autotoc_md58',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md62',1,'Signal validation and parse errors']]],
|
||||||
|
['value_20representation_20and_20precision_2',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||||
|
['valuetype_3',['valuetype',['../structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8',1,'DecodeSignal::valueType'],['../decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1',1,'ValueType: decode_database.h']]],
|
||||||
|
['valuetype_20tt_4',['<tt>ValueType</tt>',['../md_README.html#autotoc_md32',1,'']]]
|
||||||
];
|
];
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['why_20the_20runtime_20decode_20layer_20exists_0',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||||
|
['why_20the_20tree_20is_20not_20enough_1',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]]
|
||||||
|
];
|
||||||
@@ -5,7 +5,8 @@ var searchData=
|
|||||||
['comment_2',['comment',['../structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473',1,'DecodeSignal::comment'],['../structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22',1,'DecodeFrame::comment'],['../structFrameInfo.html#ace75121294f9d89b762080ab5643293c',1,'FrameInfo::comment'],['../structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5',1,'SignalInfo::comment']]],
|
['comment_2',['comment',['../structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473',1,'DecodeSignal::comment'],['../structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22',1,'DecodeFrame::comment'],['../structFrameInfo.html#ace75121294f9d89b762080ab5643293c',1,'FrameInfo::comment'],['../structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5',1,'SignalInfo::comment']]],
|
||||||
['comments_3',['Comments',['../md_README.html#autotoc_md64',1,'']]],
|
['comments_3',['Comments',['../md_README.html#autotoc_md64',1,'']]],
|
||||||
['contains_4',['contains',['../classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4',1,'TypeFactory']]],
|
['contains_4',['contains',['../classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4',1,'TypeFactory']]],
|
||||||
['create_5',['create',['../classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f',1,'TypeFactory']]],
|
['coverage_5',['coverage',['../md_tests_2README.html#autotoc_md105',1,'Decoder coverage'],['../md_tests_2README.html#autotoc_md106',1,'Parser coverage']]],
|
||||||
['creator_6',['creator',['../classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473',1,'TypeFactory']]],
|
['create_6',['create',['../classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f',1,'TypeFactory']]],
|
||||||
['current_20limitations_7',['Current Limitations',['../md_README.html#autotoc_md90',1,'']]]
|
['creator_7',['creator',['../classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473',1,'TypeFactory']]],
|
||||||
|
['current_20limitations_8',['Current Limitations',['../md_README.html#autotoc_md90',1,'']]]
|
||||||
];
|
];
|
||||||
@@ -50,13 +50,13 @@ var searchData=
|
|||||||
['decodeframe_47',['DecodeFrame',['../structDecodeFrame.html',1,'']]],
|
['decodeframe_47',['DecodeFrame',['../structDecodeFrame.html',1,'']]],
|
||||||
['decodeframe_20tt_48',['<tt>DecodeFrame</tt>',['../md_README.html#autotoc_md36',1,'']]],
|
['decodeframe_20tt_48',['<tt>DecodeFrame</tt>',['../md_README.html#autotoc_md36',1,'']]],
|
||||||
['decoder_49',['Runtime decoder',['../md_README.html#autotoc_md13',1,'']]],
|
['decoder_49',['Runtime decoder',['../md_README.html#autotoc_md13',1,'']]],
|
||||||
['decoder_20layer_50',['Decoder Layer',['../md_README.html#autotoc_md42',1,'']]],
|
['decoder_20coverage_50',['Decoder coverage',['../md_tests_2README.html#autotoc_md105',1,'']]],
|
||||||
['decoder_20regression_20tests_51',['Decoder regression tests',['../md_tests_2README.html',1,'']]],
|
['decoder_20layer_51',['Decoder Layer',['../md_README.html#autotoc_md42',1,'']]],
|
||||||
['decodesignal_52',['DecodeSignal',['../structDecodeSignal.html',1,'']]],
|
['decodesignal_52',['DecodeSignal',['../structDecodeSignal.html',1,'']]],
|
||||||
['decodesignal_20tt_53',['<tt>DecodeSignal</tt>',['../md_README.html#autotoc_md34',1,'']]],
|
['decodesignal_20tt_53',['<tt>DecodeSignal</tt>',['../md_README.html#autotoc_md34',1,'']]],
|
||||||
['definition_54',['definition',['../structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c',1,'DecodedFrameValue::definition'],['../structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7',1,'DecodedSignalValue::definition'],['../md_README.html#autotoc_md56',1,'Frame definition'],['../md_README.html#autotoc_md60',1,'Signal definition']]],
|
['definition_54',['definition',['../structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c',1,'DecodedFrameValue::definition'],['../structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7',1,'DecodedSignalValue::definition'],['../md_README.html#autotoc_md56',1,'Frame definition'],['../md_README.html#autotoc_md60',1,'Signal definition']]],
|
||||||
['demo_55',['Demo',['../md_README.html#autotoc_md15',1,'']]],
|
['demo_55',['Demo',['../md_README.html#autotoc_md15',1,'']]],
|
||||||
['dispatch_56',['Dispatch',['../classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed',1,'DbcStatementDispatcher']]],
|
['dispatch_56',['Dispatch',['../classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed',1,'DbcStatementDispatcher']]],
|
||||||
['dlc_57',['dlc',['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc'],['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc']]],
|
['dlc_57',['dlc',['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc'],['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc']]],
|
||||||
['documentation_58',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
['documentation_58',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
||||||
];
|
];
|
||||||
@@ -3,6 +3,7 @@ var searchData=
|
|||||||
['enough_0',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
['enough_0',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
||||||
['errors_1',['errors',['../md_README.html#autotoc_md58',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md62',1,'Signal validation and parse errors']]],
|
['errors_1',['errors',['../md_README.html#autotoc_md58',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md62',1,'Signal validation and parse errors']]],
|
||||||
['example_20usage_2',['Example Usage',['../md_README.html#autotoc_md74',1,'']]],
|
['example_20usage_2',['Example Usage',['../md_README.html#autotoc_md74',1,'']]],
|
||||||
['exists_3',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
['examples_2fmain_2ecpp_3',['main.cpp',['../examples_2main_8cpp.html',1,'']]],
|
||||||
['extraction_4',['extraction',['../md_README.html#autotoc_md72',1,'Intel and Motorola Extraction'],['../md_README.html#autotoc_md68',1,'PGN Extraction']]]
|
['exists_4',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||||
|
['extraction_5',['extraction',['../md_README.html#autotoc_md72',1,'Intel and Motorola Extraction'],['../md_README.html#autotoc_md68',1,'PGN Extraction']]]
|
||||||
];
|
];
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]],
|
['maximum_0',['maximum',['../structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7',1,'DecodeSignal::maximum'],['../structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52',1,'SignalInfo::maximum']]],
|
||||||
['maximum_1',['maximum',['../structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7',1,'DecodeSignal::maximum'],['../structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52',1,'SignalInfo::maximum']]],
|
['minimum_1',['minimum',['../structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25',1,'DecodeSignal::minimum'],['../structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b',1,'SignalInfo::minimum']]],
|
||||||
['minimum_2',['minimum',['../structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25',1,'DecodeSignal::minimum'],['../structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b',1,'SignalInfo::minimum']]],
|
['module_20documentation_2',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||||
['module_20documentation_3',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
['module_20layout_3',['Module Layout',['../md_README.html#autotoc_md9',1,'']]],
|
||||||
['module_20layout_4',['Module Layout',['../md_README.html#autotoc_md9',1,'']]],
|
['motorola_20extraction_4',['Intel and Motorola Extraction',['../md_README.html#autotoc_md72',1,'']]]
|
||||||
['motorola_20extraction_5',['Intel and Motorola Extraction',['../md_README.html#autotoc_md72',1,'']]]
|
|
||||||
];
|
];
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['frame_5finfo_2eh_0',['frame_info.h',['../frame__info_8h.html',1,'']]]
|
['examples_2fmain_2ecpp_0',['main.cpp',['../examples_2main_8cpp.html',1,'']]]
|
||||||
];
|
];
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]]
|
['frame_5finfo_2eh_0',['frame_info.h',['../frame__info_8h.html',1,'']]]
|
||||||
];
|
];
|
||||||
@@ -2,6 +2,5 @@ var searchData=
|
|||||||
[
|
[
|
||||||
['dbc_20parser_20and_20runtime_20decode_20module_20documentation_0',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
['dbc_20parser_20and_20runtime_20decode_20module_20documentation_0',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||||
['decode_20module_20documentation_1',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
['decode_20module_20documentation_1',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||||
['decoder_20regression_20tests_2',['Decoder regression tests',['../md_tests_2README.html',1,'']]],
|
['documentation_2',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
||||||
['documentation_3',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
|
||||||
];
|
];
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['regression_20tests_0',['Decoder regression tests',['../md_tests_2README.html',1,'']]],
|
['qttest_20regression_20tests_0',['QtTest regression tests',['../md_tests_2README.html',1,'']]]
|
||||||
['runtime_20decode_20module_20documentation_1',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
|
||||||
];
|
];
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['tests_0',['Decoder regression tests',['../md_tests_2README.html',1,'']]]
|
['regression_20tests_0',['QtTest regression tests',['../md_tests_2README.html',1,'']]],
|
||||||
|
['runtime_20decode_20module_20documentation_1',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
||||||
];
|
];
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tests_0',['QtTest regression tests',['../md_tests_2README.html',1,'']]]
|
||||||
|
];
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
var indexSectionsWithContent =
|
var indexSectionsWithContent =
|
||||||
{
|
{
|
||||||
0: "1234abcdefghilmnoprstuvw",
|
0: "1234abcdefghilmnopqrstuvw",
|
||||||
1: "dfrst",
|
1: "dfrst",
|
||||||
2: "dfmst",
|
2: "defst",
|
||||||
3: "abcdfgprt",
|
3: "abcdfgprt",
|
||||||
4: "bcdfhilmnoprstuv",
|
4: "bcdfhilmnoprstuv",
|
||||||
5: "bnv",
|
5: "bnv",
|
||||||
6: "admprt"
|
6: "admpqrt"
|
||||||
};
|
};
|
||||||
|
|
||||||
var indexSectionNames =
|
var indexSectionNames =
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="signal__info_8h.html">signal_info.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="signal__info_8h.html">signal_info.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ $(document).ready(function(){initNavTree('signal__info_8h_source.html',''); init
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="signal__info_8h.html">signal_info.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="signal__info_8h.html">signal_info.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,123 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: main.cpp Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('tests_2main_8cpp_source.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">tests/main.cpp</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include <QCoreApplication></span></div>
|
||||||
|
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include <QtTest></span></div>
|
||||||
|
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
|
||||||
|
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="keywordtype">int</span> RunParserTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv);</div>
|
||||||
|
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="keywordtype">int</span> RunDecoderTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv);</div>
|
||||||
|
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
|
||||||
|
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
|
||||||
|
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> QCoreApplication application(argc, argv);</div>
|
||||||
|
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">const</span> <span class="keywordtype">int</span> parserResult = RunParserTests(argc, argv);</div>
|
||||||
|
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">const</span> <span class="keywordtype">int</span> decoderResult = RunDecoderTests(argc, argv);</div>
|
||||||
|
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <span class="keywordflow">return</span> parserResult | decoderResult;</div>
|
||||||
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span>}</div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">tests</a></li><li class="navelem"><b>main.cpp</b></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('tree__node_8cpp.html',''); initResizab
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ $(document).ready(function(){initNavTree('tree__node_8cpp_source.html',''); init
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ Enumerations</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="tree__node_8h.html">tree_node.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="tree__node_8h.html">tree_node.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ $(document).ready(function(){initNavTree('tree__node_8h_source.html',''); initRe
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="tree__node_8h.html">tree_node.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="tree__node_8h.html">tree_node.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ $(document).ready(function(){initNavTree('typefactory_8h_source.html',''); initR
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><b>typefactory.h</b></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><b>typefactory.h</b></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
TEMPLATE = app
|
||||||
|
TARGET = dbc_demo
|
||||||
|
CONFIG += console c++17
|
||||||
|
CONFIG -= qt app_bundle
|
||||||
|
include(../core/core.pri)
|
||||||
|
SOURCES += main.cpp
|
||||||
|
CONFIG -= debug_and_release debug_and_release_target
|
||||||
File renamed without changes.
+28
-24
@@ -1,25 +1,40 @@
|
|||||||
# Decoder regression tests
|
# QtTest regression tests
|
||||||
|
|
||||||
Run from the repository root with a C++17 compiler:
|
Open the repository's root `dbc.pro` in Qt Creator. It contains `core` (a static
|
||||||
|
C++17 library) and `tests` (the `dbc_tests` QtTest executable). Core is built first;
|
||||||
|
tests link its archive rather than compiling its implementation again.
|
||||||
|
Qt Core and Qt Test development packages are required for tests only.
|
||||||
|
|
||||||
|
Build from the repository root with Qt 6 (use `qmake` for Qt 5):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
g++ -std=c++17 -Wall -Wextra -Wpedantic -I. \
|
mkdir build
|
||||||
tests/dbc_decoder_test.cpp dbc_decoder.cpp -o /tmp/dbc_decoder_test
|
cd build
|
||||||
/tmp/dbc_decoder_test
|
qmake6 ../dbc.pro
|
||||||
|
make -j
|
||||||
|
make check
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, build the standalone qmake project out of source:
|
Or run `./tests/dbc_tests` directly. Both parser and decoder suites run, and the
|
||||||
|
executable returns nonzero when either suite fails. Decoder cases appear as
|
||||||
|
individual QtTest data rows; parser checks are grouped into named test slots.
|
||||||
|
Checks also run in release builds.
|
||||||
|
|
||||||
|
To build tests separately against an existing core build:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
mkdir -p /tmp/dbc_decoder_test_build
|
mkdir /tmp/dbc-tests-build
|
||||||
cd /tmp/dbc_decoder_test_build
|
cd /tmp/dbc-tests-build
|
||||||
qmake /absolute/path/to/dbc/tests/dbc_decoder_test.pro
|
qmake6 /absolute/path/to/dbc/tests/tests.pro \
|
||||||
|
DBC_CORE_BUILD_DIR=/absolute/path/to/build/core
|
||||||
make
|
make
|
||||||
./dbc_decoder_test
|
make check
|
||||||
```
|
```
|
||||||
|
|
||||||
The executable returns a nonzero exit code if any case fails. Checks remain
|
`parser_tests.pri` and `decoder_tests.pri` include the test sources.
|
||||||
active in release builds and do not depend on `assert` or an external test framework.
|
`../core/core.pri` supplies the library include path and linkage.
|
||||||
|
|
||||||
|
## Decoder coverage
|
||||||
|
|
||||||
Coverage includes Motorola bit numbering within and across bytes, unaligned
|
Coverage includes Motorola bit numbering within and across bytes, unaligned
|
||||||
signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary values
|
signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary values
|
||||||
@@ -27,18 +42,7 @@ signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary val
|
|||||||
payloads, and Intel regression cases. Frame validity means the definition was
|
payloads, and Intel regression cases. Frame validity means the definition was
|
||||||
found; insufficient payloads are checked through signal validity.
|
found; insufficient payloads are checked through signal validity.
|
||||||
|
|
||||||
## Parser regression tests
|
## Parser coverage
|
||||||
|
|
||||||
Run from the repository root:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
g++ -std=c++17 -Wall -Wextra -Wpedantic -Werror -I. \
|
|
||||||
tests/dbc_parser_test.cpp dbc_parser.cpp dbc_statement_handler.cpp -o /tmp/dbc_parser_test
|
|
||||||
/tmp/dbc_parser_test
|
|
||||||
```
|
|
||||||
|
|
||||||
For qmake, use `tests/dbc_parser_test.pro` in a separate build directory,
|
|
||||||
following the decoder instructions above, then run `./dbc_parser_test`.
|
|
||||||
|
|
||||||
Parser tests cover standard and extended CAN IDs, whitespace, payload storage
|
Parser tests cover standard and extended CAN IDs, whitespace, payload storage
|
||||||
boundaries, missing fields, malformed and overflowing numbers, reserved ID bits,
|
boundaries, missing fields, malformed and overflowing numbers, reserved ID bits,
|
||||||
|
|||||||
+33
-20
@@ -1,6 +1,6 @@
|
|||||||
#include "dbc_decoder.h"
|
#include "dbc_decoder.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <QtTest>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
@@ -18,7 +18,18 @@ struct DecodeCase {
|
|||||||
double physicalValue;
|
double physicalValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
int main() {
|
Q_DECLARE_METATYPE(DecodeCase)
|
||||||
|
|
||||||
|
class DbcDecoderTest : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
private Q_SLOTS:
|
||||||
|
void decode_data();
|
||||||
|
void decode();
|
||||||
|
void boundaries();
|
||||||
|
};
|
||||||
|
|
||||||
|
void DbcDecoderTest::decode_data() {
|
||||||
|
QTest::addColumn<DecodeCase>("test");
|
||||||
const DecodeCase cases[] = {
|
const DecodeCase cases[] = {
|
||||||
{"Motorola reproduction", ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12, 0x34}, true, 0x1234, 1.0, 0.0, 4660.0},
|
{"Motorola reproduction", ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12, 0x34}, true, 0x1234, 1.0, 0.0, 4660.0},
|
||||||
{"Motorola within byte", ByteOrder::Motorola, 5U, 4U, ValueType::Unsigned, {0xAC}, true, 11, 1.0, 0.0, 11.0},
|
{"Motorola within byte", ByteOrder::Motorola, 5U, 4U, ValueType::Unsigned, {0xAC}, true, 11, 1.0, 0.0, 11.0},
|
||||||
@@ -38,8 +49,12 @@ int main() {
|
|||||||
{"Intel signed regression", ByteOrder::Intel, 0U, 16U, ValueType::Signed, {0xFE, 0xFF}, true, -2, 0.5, 10.0, 9.0},
|
{"Intel signed regression", ByteOrder::Intel, 0U, 16U, ValueType::Signed, {0xFE, 0xFF}, true, -2, 0.5, 10.0, 9.0},
|
||||||
{"Intel short payload", ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12}, false, 0, 1.0, 0.0, 0.0}};
|
{"Intel short payload", ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12}, false, 0, 1.0, 0.0, 0.0}};
|
||||||
|
|
||||||
int failures = 0;
|
for (const auto &test: cases)
|
||||||
for (const DecodeCase &test: cases) {
|
QTest::newRow(test.name) << test;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcDecoderTest::decode() {
|
||||||
|
QFETCH(DecodeCase, test);
|
||||||
DecodeSignal signal;
|
DecodeSignal signal;
|
||||||
signal.name = test.name;
|
signal.name = test.name;
|
||||||
signal.byteOrder = test.byteOrder;
|
signal.byteOrder = test.byteOrder;
|
||||||
@@ -73,12 +88,10 @@ int main() {
|
|||||||
std::get<std::uint64_t>(result.signals[0].rawValue) ==
|
std::get<std::uint64_t>(result.signals[0].rawValue) ==
|
||||||
static_cast<std::uint64_t>(test.rawValue))) &&
|
static_cast<std::uint64_t>(test.rawValue))) &&
|
||||||
(result.signals[0].physicalValue == test.physicalValue)));
|
(result.signals[0].physicalValue == test.physicalValue)));
|
||||||
if (!passed) {
|
QVERIFY2(passed, test.name);
|
||||||
std::cerr << "FAIL: " << test.name << '\n';
|
}
|
||||||
++failures;
|
|
||||||
}
|
void DbcDecoderTest::boundaries() {
|
||||||
}
|
|
||||||
std::size_t boundaryCases = 0U;
|
|
||||||
for (ByteOrder order: {ByteOrder::Intel, ByteOrder::Motorola}) {
|
for (ByteOrder order: {ByteOrder::Intel, ByteOrder::Motorola}) {
|
||||||
for (ValueType type: {ValueType::Unsigned, ValueType::Signed}) {
|
for (ValueType type: {ValueType::Unsigned, ValueType::Signed}) {
|
||||||
for (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),
|
for (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),
|
||||||
@@ -126,17 +139,17 @@ int main() {
|
|||||||
expectedText << bits;
|
expectedText << bits;
|
||||||
else
|
else
|
||||||
expectedText << signedExpected;
|
expectedText << signedExpected;
|
||||||
if (!decoded.valid || decoded.rawValue != expected ||
|
QVERIFY2(decoded.valid && decoded.rawValue == expected &&
|
||||||
decoded.physicalValue != physical || actualText.str() != expectedText.str()) {
|
decoded.physicalValue == physical && actualText.str() == expectedText.str(),
|
||||||
std::cerr << "FAIL: 64-bit boundary " << bits << '\n';
|
expectedText.str().c_str());
|
||||||
++failures;
|
|
||||||
}
|
|
||||||
++boundaryCases;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (failures != 0)
|
|
||||||
return 1;
|
|
||||||
std::cout << "All " << sizeof(cases) / sizeof(cases[0]) + boundaryCases << " decoder cases passed.\n";
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int RunDecoderTests(int argc, char **argv) {
|
||||||
|
DbcDecoderTest tests;
|
||||||
|
return QTest::qExec(&tests, argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "dbc_decoder_test.moc"
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
TEMPLATE = app
|
|
||||||
TARGET = dbc_decoder_test
|
|
||||||
CONFIG += console c++17
|
|
||||||
CONFIG -= app_bundle qt
|
|
||||||
INCLUDEPATH += ..
|
|
||||||
SOURCES += dbc_decoder_test.cpp ../dbc_decoder.cpp
|
|
||||||
HEADERS += ../dbc_decoder.h ../decode_database.h
|
|
||||||
+85
-54
@@ -1,10 +1,12 @@
|
|||||||
#include "dbc_parser.h"
|
#include "dbc_parser.h"
|
||||||
#include "dbc_statement_handler.h"
|
#include "dbc_statement_handler.h"
|
||||||
|
|
||||||
|
#include <QtTest>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
|
||||||
|
#define CHECK(condition, name) QVERIFY2((condition), std::string(name).c_str())
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
struct Fixture {
|
struct Fixture {
|
||||||
@@ -41,33 +43,33 @@ std::string SignalLine(const std::string &start, const std::string &length,
|
|||||||
" (" + factor + "," + offset + ") [" + minimum + "|" + maximum + "] \"\" ECU";
|
" (" + factor + "," + offset + ") [" + minimum + "|" + maximum + "] \"\" ECU";
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TestContext {
|
class DbcParserTest : public QObject {
|
||||||
int failures = 0;
|
Q_OBJECT
|
||||||
std::size_t count = 0U;
|
private:
|
||||||
void Check(bool passed, const std::string &name) {
|
|
||||||
++count;
|
|
||||||
if (!passed) {
|
|
||||||
++failures;
|
|
||||||
std::cerr << "FAIL: " << name << '\n';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void RejectSignal(const Fixture &fixture, const std::string &line, unsigned payload = 8U) {
|
void RejectSignal(const Fixture &fixture, const std::string &line, unsigned payload = 8U) {
|
||||||
fixture.Write("BO_ 1 Frame: " + std::to_string(payload) + " ECU\n\n" + line + "\n");
|
fixture.Write("BO_ 1 Frame: " + std::to_string(payload) + " ECU\n\n" + line + "\n");
|
||||||
try {
|
try {
|
||||||
DbcParser().ParseFile(fixture.path.string());
|
DbcParser().ParseFile(fixture.path.string());
|
||||||
Check(false, "Reject " + line);
|
CHECK(false, "Reject " + line);
|
||||||
} catch (const std::runtime_error &error) {
|
} catch (const std::runtime_error &error) {
|
||||||
const std::string prefix = fixture.path.string() + ":3: ";
|
const std::string prefix = fixture.path.string() + ":3: ";
|
||||||
Check(std::string(error.what()).find(prefix) == 0U &&
|
CHECK(std::string(error.what()).find(prefix) == 0U &&
|
||||||
std::string(error.what()).size() > prefix.size(),
|
std::string(error.what()).size() > prefix.size(),
|
||||||
"Reject " + line);
|
"Reject " + line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private Q_SLOTS:
|
||||||
|
void validFrames();
|
||||||
|
void invalidFrames();
|
||||||
|
void integration();
|
||||||
|
void invalidSignals();
|
||||||
|
void validSignals();
|
||||||
|
void dispatch();
|
||||||
|
void independentSessions();
|
||||||
};
|
};
|
||||||
|
|
||||||
int main() {
|
void DbcParserTest::validFrames() {
|
||||||
Fixture fixture;
|
Fixture fixture;
|
||||||
TestContext tests;
|
|
||||||
struct ValidCase {
|
struct ValidCase {
|
||||||
const char *line;
|
const char *line;
|
||||||
std::uint32_t id;
|
std::uint32_t id;
|
||||||
@@ -86,14 +88,18 @@ int main() {
|
|||||||
fixture.Write(std::string(test.line) + '\n');
|
fixture.Write(std::string(test.line) + '\n');
|
||||||
try {
|
try {
|
||||||
const auto database = DbcParser().ParseFile(fixture.path.string());
|
const auto database = DbcParser().ParseFile(fixture.path.string());
|
||||||
tests.Check(database.frames.size() == 1U && database.frames[0].name == "Frame" &&
|
CHECK(database.frames.size() == 1U && database.frames[0].name == "Frame" &&
|
||||||
database.frames[0].canId == test.id &&
|
database.frames[0].canId == test.id &&
|
||||||
database.frames[0].isExtended == test.extended &&
|
database.frames[0].isExtended == test.extended &&
|
||||||
database.frames[0].dlc == test.length &&
|
database.frames[0].dlc == test.length &&
|
||||||
database.frames[0].transmitter == "ECU",
|
database.frames[0].transmitter == "ECU",
|
||||||
test.line);
|
test.line);
|
||||||
} catch (const std::exception &error) { tests.Check(false, error.what()); }
|
} catch (const std::exception &error) { CHECK(false, error.what()); }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcParserTest::invalidFrames() {
|
||||||
|
Fixture fixture;
|
||||||
const char *invalid[] = {
|
const char *invalid[] = {
|
||||||
"BO_ invalid", "BO_", "BO_ 1", "BO_ 1 : 8 ECU", "BO_ 1 Frame 8 ECU",
|
"BO_ invalid", "BO_", "BO_ 1", "BO_ 1 : 8 ECU", "BO_ 1 Frame 8 ECU",
|
||||||
"BO_ 1 Frame:", "BO_ 1 Frame: 8", "BO_ 1 Frame: 8 ECU extra",
|
"BO_ 1 Frame:", "BO_ 1 Frame: 8", "BO_ 1 Frame: 8 ECU extra",
|
||||||
@@ -109,76 +115,88 @@ int main() {
|
|||||||
fixture.Write(std::string("VERSION \"test\"\n\n") + line + '\n');
|
fixture.Write(std::string("VERSION \"test\"\n\n") + line + '\n');
|
||||||
try {
|
try {
|
||||||
DbcParser().ParseFile(fixture.path.string());
|
DbcParser().ParseFile(fixture.path.string());
|
||||||
tests.Check(false, line);
|
CHECK(false, line);
|
||||||
} catch (const std::runtime_error &error) {
|
} catch (const std::runtime_error &error) {
|
||||||
const std::string prefix = fixture.path.string() + ":3: ";
|
const std::string prefix = fixture.path.string() + ":3: ";
|
||||||
tests.Check(std::string(error.what()).find(prefix) == 0U &&
|
CHECK(std::string(error.what()).find(prefix) == 0U &&
|
||||||
std::string(error.what()).size() > prefix.size(),
|
std::string(error.what()).size() > prefix.size(),
|
||||||
line);
|
line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcParserTest::integration() {
|
||||||
|
Fixture fixture;
|
||||||
fixture.Write(
|
fixture.Write(
|
||||||
"BO_TX_BU_ 256 : ECU;\nBO_ 256 Frame: 8 ECU\n"
|
"BO_TX_BU_ 256 : ECU;\nBO_ 256 Frame: 8 ECU\n"
|
||||||
" SG_ Speed : 0|16@1+ (0.5,1) [0|100] \"rpm\" ECU\n"
|
" SG_ Speed : 0|16@1+ (0.5,1) [0|100] \"rpm\" ECU\n"
|
||||||
"CM_ BO_ 256 \"Frame comment\";\nCM_ SG_ 256 Speed \"Signal comment\";\n"
|
"CM_ BO_ 256 \"Frame comment\";\nCM_ SG_ 256 Speed \"Signal comment\";\n"
|
||||||
"BO_ 257 Second: 8 ECU\n");
|
"BO_ 257 Second: 8 ECU\n");
|
||||||
const auto database = DbcParser().ParseFile(fixture.path.string());
|
const auto database = DbcParser().ParseFile(fixture.path.string());
|
||||||
tests.Check(database.frames.size() == 2U && database.frames[0].signals.size() == 1U &&
|
CHECK(database.frames.size() == 2U && database.frames[0].signals.size() == 1U &&
|
||||||
database.frames[0].comment == "Frame comment" &&
|
database.frames[0].comment == "Frame comment" &&
|
||||||
database.frames[0].signals[0].comment == "Signal comment",
|
database.frames[0].signals[0].comment == "Signal comment",
|
||||||
"Integration");
|
"Integration");
|
||||||
fixture.Write("\nSG_ Speed : invalid\n");
|
fixture.Write("\nSG_ Speed : invalid\n");
|
||||||
try {
|
try {
|
||||||
DbcParser().ParseFile(fixture.path.string());
|
DbcParser().ParseFile(fixture.path.string());
|
||||||
tests.Check(false, "Signal error location");
|
CHECK(false, "Signal error location");
|
||||||
} catch (const std::runtime_error &error) {
|
} catch (const std::runtime_error &error) {
|
||||||
tests.Check(std::string(error.what()).find(fixture.path.string() + ":2: ") == 0U,
|
CHECK(std::string(error.what()).find(fixture.path.string() + ":2: ") == 0U,
|
||||||
"Signal error location");
|
"Signal error location");
|
||||||
}
|
}
|
||||||
const DbcParser signalParser;
|
}
|
||||||
|
|
||||||
|
void DbcParserTest::invalidSignals() {
|
||||||
|
Fixture fixture;
|
||||||
const std::string ordinary = SignalLine("0", "8", "1+", "1", "0", "0", "255");
|
const std::string ordinary = SignalLine("0", "8", "1+", "1", "0", "0", "255");
|
||||||
for (const std::string value: {"-1", "+1", "0junk", "0x10", "1.5",
|
for (const std::string value: {"-1", "+1", "0junk", "0x10", "1.5",
|
||||||
"4294967296", "999999999999999999999"}) {
|
"4294967296", "999999999999999999999"}) {
|
||||||
tests.RejectSignal(fixture, SignalLine(value, "8", "1+", "1", "0", "0", "255"));
|
RejectSignal(fixture, SignalLine(value, "8", "1+", "1", "0", "0", "255"));
|
||||||
tests.RejectSignal(fixture, SignalLine("0", value, "1+", "1", "0", "0", "255"));
|
RejectSignal(fixture, SignalLine("0", value, "1+", "1", "0", "0", "255"));
|
||||||
}
|
}
|
||||||
for (const std::string length: {"0", "65"})
|
for (const std::string length: {"0", "65"})
|
||||||
tests.RejectSignal(fixture, SignalLine("0", length, "1+", "1", "0", "0", "255"));
|
RejectSignal(fixture, SignalLine("0", length, "1+", "1", "0", "0", "255"));
|
||||||
for (const std::string order: {"2+", "9-", "1", "1x", "1++", "01+"})
|
for (const std::string order: {"2+", "9-", "1", "1x", "1++", "01+"})
|
||||||
tests.RejectSignal(fixture, SignalLine("0", "8", order, "1", "0", "0", "255"));
|
RejectSignal(fixture, SignalLine("0", "8", order, "1", "0", "0", "255"));
|
||||||
for (const std::string value: {"1junk", "nan", "NaN", "inf", "-inf", "1e999", "1e-999", "0x1p2", "", "1e", "1.2.3"}) {
|
for (const std::string value: {"1junk", "nan", "NaN", "inf", "-inf", "1e999", "1e-999", "0x1p2", "", "1e", "1.2.3"}) {
|
||||||
tests.RejectSignal(fixture, SignalLine("0", "8", "1+", value, "0", "0", "255"));
|
RejectSignal(fixture, SignalLine("0", "8", "1+", value, "0", "0", "255"));
|
||||||
tests.RejectSignal(fixture, SignalLine("0", "8", "1+", "1", value, "0", "255"));
|
RejectSignal(fixture, SignalLine("0", "8", "1+", "1", value, "0", "255"));
|
||||||
tests.RejectSignal(fixture, SignalLine("0", "8", "1+", "1", "0", value, "255"));
|
RejectSignal(fixture, SignalLine("0", "8", "1+", "1", "0", value, "255"));
|
||||||
tests.RejectSignal(fixture, SignalLine("0", "8", "1+", "1", "0", "0", value));
|
RejectSignal(fixture, SignalLine("0", "8", "1+", "1", "0", "0", value));
|
||||||
}
|
}
|
||||||
tests.RejectSignal(fixture, SignalLine("0", "8", "1+", "1", "0", "2", "1"));
|
RejectSignal(fixture, SignalLine("0", "8", "1+", "1", "0", "2", "1"));
|
||||||
for (const std::string name: {"", "Two Names", "Value M", "Value m1", "Value m1M"}) {
|
for (const std::string name: {"", "Two Names", "Value M", "Value m1", "Value m1M"}) {
|
||||||
std::string line = ordinary;
|
std::string line = ordinary;
|
||||||
line.replace(4U, 5U, name);
|
line.replace(4U, 5U, name);
|
||||||
tests.RejectSignal(fixture, line);
|
RejectSignal(fixture, line);
|
||||||
}
|
}
|
||||||
for (const std::string broken: {
|
for (const std::string broken: {
|
||||||
"SG_", "SG_ Value", "SG_ Value : 0|8@1+ (1,0) [0|255] ECU",
|
"SG_", "SG_ Value", "SG_ Value : 0|8@1+ (1,0) [0|255] ECU",
|
||||||
"SG_ Value : 0|8@1+ (1,0) [0|255] \"\"",
|
"SG_ Value : 0|8@1+ (1,0) [0|255] \"\"",
|
||||||
"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,",
|
"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,",
|
||||||
"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"})
|
"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"})
|
||||||
tests.RejectSignal(fixture, broken);
|
RejectSignal(fixture, broken);
|
||||||
tests.RejectSignal(fixture, SignalLine("64", "1", "1+", "1", "0", "0", "1"));
|
RejectSignal(fixture, SignalLine("64", "1", "1+", "1", "0", "0", "1"));
|
||||||
tests.RejectSignal(fixture, SignalLine("63", "2", "1+", "1", "0", "0", "3"));
|
RejectSignal(fixture, SignalLine("63", "2", "1+", "1", "0", "0", "3"));
|
||||||
tests.RejectSignal(fixture, SignalLine("56", "2", "0+", "1", "0", "0", "3"));
|
RejectSignal(fixture, SignalLine("56", "2", "0+", "1", "0", "0", "3"));
|
||||||
tests.RejectSignal(fixture, SignalLine("4294967295", "64", "1+", "1", "0", "0", "1"));
|
RejectSignal(fixture, SignalLine("4294967295", "64", "1+", "1", "0", "0", "1"));
|
||||||
tests.RejectSignal(fixture, ordinary, 0U);
|
RejectSignal(fixture, ordinary, 0U);
|
||||||
for (const char delimiter: {'|', '@', '(', ')', '[', ']', '"'}) {
|
for (const char delimiter: {'|', '@', '(', ')', '[', ']', '"'}) {
|
||||||
std::string line = ordinary;
|
std::string line = ordinary;
|
||||||
line.erase(line.find(delimiter), 1U);
|
line.erase(line.find(delimiter), 1U);
|
||||||
tests.RejectSignal(fixture, line);
|
RejectSignal(fixture, line);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcParserTest::validSignals() {
|
||||||
|
Fixture fixture;
|
||||||
|
const DbcParser signalParser;
|
||||||
fixture.Write("BO_ 1 Frame: 8 ECU\n" +
|
fixture.Write("BO_ 1 Frame: 8 ECU\n" +
|
||||||
SignalLine("0", "8", "1+", "0", "0", "0", "0") + "\n" +
|
SignalLine("0", "8", "1+", "0", "0", "0", "0") + "\n" +
|
||||||
SignalLine("8", "8", "1-", "-1", "0", "-255", "0") + "\n");
|
SignalLine("8", "8", "1-", "-1", "0", "-255", "0") + "\n");
|
||||||
const auto factors = signalParser.ParseFile(fixture.path.string());
|
const auto factors = signalParser.ParseFile(fixture.path.string());
|
||||||
tests.Check(factors.frames[0].signals.size() == 2U &&
|
CHECK(factors.frames[0].signals.size() == 2U &&
|
||||||
factors.frames[0].signals[0].factor == 0.0 &&
|
factors.frames[0].signals[0].factor == 0.0 &&
|
||||||
factors.frames[0].signals[1].factor == -1.0,
|
factors.frames[0].signals[1].factor == -1.0,
|
||||||
"Zero and negative factors and equal range boundaries");
|
"Zero and negative factors and equal range boundaries");
|
||||||
@@ -204,55 +222,68 @@ int main() {
|
|||||||
try {
|
try {
|
||||||
const auto parsed = signalParser.ParseFile(fixture.path.string());
|
const auto parsed = signalParser.ParseFile(fixture.path.string());
|
||||||
const auto &signal = parsed.frames.at(0).signals.at(0);
|
const auto &signal = parsed.frames.at(0).signals.at(0);
|
||||||
tests.Check(signal.startBit == std::stoul(test.start) &&
|
CHECK(signal.startBit == std::stoul(test.start) &&
|
||||||
signal.length == std::stoul(test.length) &&
|
signal.length == std::stoul(test.length) &&
|
||||||
signal.isLittleEndian == (test.order[0] == '1') &&
|
signal.isLittleEndian == (test.order[0] == '1') &&
|
||||||
signal.isSigned == (test.order[1] == '-') &&
|
signal.isSigned == (test.order[1] == '-') &&
|
||||||
signal.factor == 5.0 && signal.offset == -0.25 &&
|
signal.factor == 5.0 && signal.offset == -0.25 &&
|
||||||
signal.minimum == -1.0 && signal.maximum == 200.0,
|
signal.minimum == -1.0 && signal.maximum == 200.0,
|
||||||
"Valid signal boundary and numeric metadata");
|
"Valid signal boundary and numeric metadata");
|
||||||
} catch (const std::exception &error) { tests.Check(false, error.what()); }
|
} catch (const std::exception &error) { CHECK(false, error.what()); }
|
||||||
}
|
}
|
||||||
fixture.Write("BO_ 1 Frame: 8 ECU\n"
|
fixture.Write("BO_ 1 Frame: 8 ECU\n"
|
||||||
"SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n");
|
"SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n");
|
||||||
try {
|
try {
|
||||||
const auto parsed = signalParser.ParseFile(fixture.path.string());
|
const auto parsed = signalParser.ParseFile(fixture.path.string());
|
||||||
const auto &signal = parsed.frames.at(0).signals.at(0);
|
const auto &signal = parsed.frames.at(0).signals.at(0);
|
||||||
tests.Check(signal.name == "Value" && signal.unit == "rpm" &&
|
CHECK(signal.name == "Value" && signal.unit == "rpm" &&
|
||||||
signal.receivers == std::vector<std::string>({"ECU1", "ECU2"}),
|
signal.receivers == std::vector<std::string>({"ECU1", "ECU2"}),
|
||||||
"Signal tabs, spaces, and receiver list");
|
"Signal tabs, spaces, and receiver list");
|
||||||
} catch (const std::exception &error) { tests.Check(false, error.what()); }
|
} catch (const std::exception &error) { CHECK(false, error.what()); }
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcParserTest::dispatch() {
|
||||||
|
CountingHandler::instances = 0;
|
||||||
|
CountingHandler::calls = 0;
|
||||||
DbcDatabase dispatchDatabase;
|
DbcDatabase dispatchDatabase;
|
||||||
DbcParseContext context{dispatchDatabase, nullptr};
|
DbcParseContext context{dispatchDatabase, nullptr};
|
||||||
DbcStatementDispatcher dispatcher;
|
DbcStatementDispatcher dispatcher;
|
||||||
dispatcher.RegisterType<CountingHandler>("TEST_");
|
dispatcher.RegisterType<CountingHandler>("TEST_");
|
||||||
tests.Check(dispatcher.Dispatch("TEST_ first", context) &&
|
CHECK(dispatcher.Dispatch("TEST_ first", context) &&
|
||||||
dispatcher.Dispatch("TEST_ second", context) &&
|
dispatcher.Dispatch("TEST_ second", context) &&
|
||||||
CountingHandler::instances == 1 && CountingHandler::calls == 2 &&
|
CountingHandler::instances == 1 && CountingHandler::calls == 2 &&
|
||||||
dispatchDatabase.frames.size() == 2U,
|
dispatchDatabase.frames.size() == 2U,
|
||||||
"Factory dispatch and handler reuse");
|
"Factory dispatch and handler reuse");
|
||||||
tests.Check(!dispatcher.Dispatch("TEST_OTHER data", context) &&
|
CHECK(!dispatcher.Dispatch("TEST_OTHER data", context) &&
|
||||||
!dispatcher.Dispatch("BO_TX_BU_ 1 : ECU;", context) &&
|
!dispatcher.Dispatch("BO_TX_BU_ 1 : ECU;", context) &&
|
||||||
!dispatcher.Dispatch("VAL_ 1 Speed 0 \"Stopped\";", context) &&
|
!dispatcher.Dispatch("VAL_ 1 Speed 0 \"Stopped\";", context) &&
|
||||||
CountingHandler::calls == 2,
|
CountingHandler::calls == 2,
|
||||||
"Exact and unknown keyword dispatch");
|
"Exact and unknown keyword dispatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcParserTest::independentSessions() {
|
||||||
|
Fixture fixture;
|
||||||
const DbcParser parser;
|
const DbcParser parser;
|
||||||
fixture.Write("BO_ 1 First: 8 ECU\n");
|
fixture.Write("BO_ 1 First: 8 ECU\n");
|
||||||
tests.Check(parser.ParseFile(fixture.path.string()).frames.size() == 1U, "First parse");
|
CHECK(parser.ParseFile(fixture.path.string()).frames.size() == 1U, "First parse");
|
||||||
fixture.Write("SG_ Speed : invalid\n");
|
fixture.Write("SG_ Speed : invalid\n");
|
||||||
try {
|
try {
|
||||||
parser.ParseFile(fixture.path.string());
|
parser.ParseFile(fixture.path.string());
|
||||||
tests.Check(false, "Independent parse context");
|
CHECK(false, "Independent parse context");
|
||||||
} catch (const std::runtime_error &error) {
|
} catch (const std::runtime_error &error) {
|
||||||
tests.Check(std::string(error.what()).find("Signal found before any frame") !=
|
CHECK(std::string(error.what()).find("Signal found before any frame") !=
|
||||||
std::string::npos,
|
std::string::npos,
|
||||||
"Independent parse context");
|
"Independent parse context");
|
||||||
}
|
}
|
||||||
fixture.Write("BO_ 2 Second: 8 ECU\n");
|
fixture.Write("BO_ 2 Second: 8 ECU\n");
|
||||||
const auto recovered = parser.ParseFile(fixture.path.string());
|
const auto recovered = parser.ParseFile(fixture.path.string());
|
||||||
tests.Check(recovered.frames.size() == 1U && recovered.frames[0].canId == 2U,
|
CHECK(recovered.frames.size() == 1U && recovered.frames[0].canId == 2U,
|
||||||
"Fresh parse after error");
|
"Fresh parse after error");
|
||||||
if (tests.failures != 0) return 1;
|
|
||||||
std::cout << "All " << tests.count << " parser cases passed.\n";
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int RunParserTests(int argc, char **argv) {
|
||||||
|
DbcParserTest tests;
|
||||||
|
return QTest::qExec(&tests, argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "dbc_parser_test.moc"
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
TEMPLATE = app
|
|
||||||
TARGET = dbc_parser_test
|
|
||||||
CONFIG += console c++17
|
|
||||||
CONFIG -= app_bundle qt
|
|
||||||
INCLUDEPATH += ..
|
|
||||||
SOURCES += dbc_parser_test.cpp ../dbc_parser.cpp ../dbc_statement_handler.cpp
|
|
||||||
HEADERS += ../dbc_statement_handler.h ../typefactory.h ../dbc_parser.h ../dbc_database.h ../frame_info.h ../signal_info.h
|
|
||||||
Loaded 100 of 104 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user