diff --git a/Doxyfile b/Doxyfile index 2a37392..17d392d 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,1792 +1,285 @@ -# Doxyfile 1.8.1.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). +# Doxyfile optimized for C++ / Qt / Qt Creator Help +# Generated for DBC Framework #--------------------------------------------------------------------------- -# Project related configuration options +# Project #--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or sequence of words) that should -# identify the project. Note that if you do not use Doxywizard you need -# to put quotes around the project name if it contains spaces. - -PROJECT_NAME = "DBC framework" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - +PROJECT_NAME = "DBC Framework" +PROJECT_BRIEF = "DBC parsing and CAN signal decoding framework" PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ./docs - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - +OUTPUT_DIRECTORY = docs OUTPUT_LANGUAGE = English +OUTPUT_TEXT_DIRECTION = None -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = YES - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 2 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding -# "class=itcl::class" will allow you to use the command class in the -# itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all -# comments according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you -# can mix doxygen, HTML, and XML commands with Markdown formatting. -# Disable only in case of backward compatibilities issues. - -MARKDOWN_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and -# unions with only public data fields will be shown inline in the documentation -# of the scope in which they are defined (i.e. file, namespace, or group -# documentation), provided this scope is documented. If set to NO (the default), -# structs, classes, and unions are shown on a separate page (for HTML and Man -# pages) or section (for LaTeX and RTF). - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -SYMBOL_CACHE_SIZE = 0 - -# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be -# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given -# their name and scope. Since this can be an expensive process and often the -# same symbol appear multiple times in the code, doxygen keeps a cache of -# pre-resolved symbols. If the cache is too small doxygen will become slower. -# If the cache is too large, memory is wasted. The cache size is given by this -# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -LOOKUP_CACHE_SIZE = 0 +# Stable output: useful for git diffs +HTML_TIMESTAMP = NO #--------------------------------------------------------------------------- -# Build related configuration options +# Input #--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = YES - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files -# containing the references data. This must be a list of .bib files. The -# .bib extension is automatically appended if omitted. Using this command -# requires the bibtex tool to be installed. See also -# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style -# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this -# feature you need bibtex and perl available in the search path. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = . - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - +INPUT = . README.md INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - RECURSIVE = YES -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# Note that relative paths are relative to the directory from which doxygen is -# run. +FILE_PATTERNS = *.h \ + *.hpp \ + *.hh \ + *.hxx \ + *.cpp \ + *.cc \ + *.cxx \ + *.c++ \ + *.md -EXCLUDE = +EXCLUDE = .git \ + build \ + docs -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. +EXCLUDE_PATTERNS = */.git/* \ + */build/* \ + */build-*/* \ + */docs/* \ + */moc_* \ + */ui_* \ + */qrc_* \ + */CMakeFiles/* \ + */Testing/* -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = +EXCLUDE_SYMLINKS = YES #--------------------------------------------------------------------------- -# configuration options related to source browsing +# General C++ / Qt parsing #--------------------------------------------------------------------------- +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +BUILTIN_STL_SUPPORT = YES +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +MARKDOWN_SUPPORT = YES +AUTOLINK_SUPPORT = YES -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. +# Java-style comments are convenient in C++ projects: +# /** +# * @brief ... +# */ +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +#--------------------------------------------------------------------------- +# Extraction policy +#--------------------------------------------------------------------------- +# Public/API-oriented documentation. +# For internal documentation, change these to YES in a separate Doxyfile.internal. +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_PRIV_VIRTUAL = NO +EXTRACT_PACKAGE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +INTERNAL_DOCS = NO + +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO + +#--------------------------------------------------------------------------- +# Output organization +#--------------------------------------------------------------------------- +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = YES +FULL_PATH_NAMES = NO +SHORT_NAMES = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 4 + +# Keep API order close to header order. Usually nicer for hand-written C++ APIs. +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = YES +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO + +SHOW_INCLUDE_FILES = YES +SHOW_USED_FILES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES +INLINE_INFO = YES +FORCE_LOCAL_INCLUDES = NO + +#--------------------------------------------------------------------------- +# Warnings +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = docs/doxygen_warnings.log + +#--------------------------------------------------------------------------- +# Source browsing +#--------------------------------------------------------------------------- SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C, C++ and Fortran comments will always remain visible. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - +STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# HTML output #--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is advised to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# style sheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the style sheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - +HTML_DYNAMIC_SECTIONS = YES HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of -# entries shown in the various tree structured indices initially; the user -# can expand and collapse entries dynamically later on. Doxygen will expand -# the tree to such a level that at most the specified number of entries are -# visible (unless a fully collapsed tree already exceeds this amount). -# So setting the number of entries 1 will produce a full collapsed tree by -# default. 0 is a special value representing an infinite number of entries -# and will result in a full expanded tree by default. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = YES - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = dbc.chm - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = YES - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = dbc.qch - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = /usr/bin/qhelpgenerator - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) -# at top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. Since the tabs have the same information as the -# navigation tree you can set this option to NO if you already set -# GENERATE_TREEVIEW to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. -# Since the tree basically has the same information as the tab index you -# could consider to set DISABLE_INDEX to NO when enabling this option. - GENERATE_TREEVIEW = YES - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - +DISABLE_INDEX = NO +FULL_SIDEBAR = NO +HTML_INDEX_NUM_ENTRIES = 100 +TREEVIEW_WIDTH = 280 ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you may also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to -# the MathJax Content Delivery Network so you can quickly see the result without -# installing MathJax. -# However, it is strongly recommended to install a local -# copy of MathJax from http://www.mathjax.org before deployment. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension -# names that should be enabled during MathJax rendering. - -MATHJAX_EXTENSIONS = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvantages are that it is more difficult to setup -# and does not have live searching capabilities. - SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- -# configuration options related to the LaTeX output +# Qt Creator / Qt Help output #--------------------------------------------------------------------------- +# Result: docs/html/dbc.qch +# In Qt Creator: Edit -> Preferences/Options -> Help -> Documentation -> Add +GENERATE_QHP = YES +QCH_FILE = dbc.qch +QHP_NAMESPACE = ca.himro.dbcframework +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = "DBC Framework" +QHP_CUST_FILT_ATTRS = dbc framework c++ qt +QHP_SECT_FILTER_ATTRS = dbc framework c++ qt +QHG_LOCATION = qhelpgenerator -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = letter - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See -# http://en.wikipedia.org/wiki/BibTeX for more info. - -LATEX_BIB_STYLE = plain +# Not useful on Linux/Qt Creator workflow +GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +GENERATE_ECLIPSEHELP = NO #--------------------------------------------------------------------------- -# configuration options related to the RTF output +# Other output formats disabled #--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - +GENERATE_LATEX = NO GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load style sheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - GENERATE_PERLMOD = NO -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - #--------------------------------------------------------------------------- -# Configuration options related to the preprocessor +# Preprocessor / Qt macros #--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = *.h *.hpp *.hh *.hxx -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. +PREDEFINED = DOXYGEN \ + Q_OBJECT= \ + Q_GADGET= \ + Q_NAMESPACE= \ + Q_ENUM(...)= \ + Q_ENUM_NS(...)= \ + Q_FLAG(...)= \ + Q_FLAG_NS(...)= \ + Q_PROPERTY(...)= \ + Q_DECLARE_FLAGS(...)= \ + Q_DECLARE_OPERATORS_FOR_FLAGS(...)= \ + Q_INTERFACES(...)= \ + Q_CLASSINFO(...)= \ + Q_PLUGIN_METADATA(...)= \ + Q_INVOKABLE= \ + Q_SIGNAL= \ + Q_SLOT= \ + Q_SIGNALS=public \ + Q_SLOTS= \ + Q_EMIT= \ + signals=public \ + slots= \ + emit= \ + Q_DECL_OVERRIDE=override \ + Q_DECL_FINAL=final \ + Q_DECL_DEPRECATED= \ + Q_DECL_DEPRECATED_X(...)= \ + QT_BEGIN_NAMESPACE= \ + QT_END_NAMESPACE= \ + QT_FORWARD_DECLARE_CLASS(...)= \ + Q_DISABLE_COPY(...)= \ + Q_DISABLE_COPY_MOVE(...)= \ + Q_UNUSED(...)= EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- -# Configuration::additions related to external references +# Graphviz / diagrams #--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. For each -# tag file the location of the external documentation should be added. The -# format of a tag file without this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths -# or URLs. Note that each tag file must have a unique name (where the name does -# NOT include the path). If a tag file is not located in the directory in which -# doxygen is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. +# For Qt Creator help, diagrams are useful, but call/caller graphs are noisy and slow. +HAVE_DOT = YES +DOT_NUM_THREADS = 0 +DOT_IMAGE_FORMAT = svg +INTERACTIVE_SVG = YES +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = YES +DOT_CLEANUP = YES CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = NO - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will use the Helvetica font for all dot files that -# doxygen generates. When you want a differently looking font you can specify -# the font name using DOT_FONTNAME. You need to make sure dot is able to find -# the font, which can be done by putting it in a standard location or by setting -# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the Helvetica font. -# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to -# set the path where dot can find it. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# CLASS_DIAGRAMS tag to NO. - CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - +COLLABORATION_GRAPH = NO GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - UML_LOOK = YES - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside -# the class node. If there are many fields or methods and many nodes the -# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS -# threshold limits the number of items for each type to make the size more -# managable. Set this to 0 for no limit. Note that the threshold may be -# exceeded by 50% before the limit is enforced. - -UML_LIMIT_NUM_FIELDS = 10 - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - +UML_LIMIT_NUM_FIELDS = 12 TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. If you choose svg you need to set -# HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible in IE 9+ (other browsers do not have this requirement). - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# Note that this requires a modern browser other than Internet Explorer. -# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you -# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible. Older versions of IE do not have SVG support. - -INTERACTIVE_SVG = NO - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - +DIRECTORY_GRAPH = NO DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - +MAX_DOT_GRAPH_DEPTH = 2 GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. +#--------------------------------------------------------------------------- +# Indexes / lists +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES -DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# External references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = docs/dbcframework.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +PERL_PATH = /usr/bin/perl diff --git a/README.md b/README.md index dde0824..6984da4 100644 --- a/README.md +++ b/README.md @@ -151,8 +151,11 @@ Files: - `dbc_parser.h` - `dbc_parser.cpp` +- `dbc_statement_handler.h` +- `dbc_statement_handler.cpp` +- `typefactory.h` -These parse the DBC file itself. +The parser reads files and reports errors; registered statement handlers parse DBC constructs. ### Demo @@ -414,6 +417,34 @@ Fields: --- +### Raw value representation and precision + +`DecodedSignalValue::rawValue` is a C++17 +`std::variant`. For a valid signal, signed definitions +produce the `int64_t` alternative and unsigned definitions produce the `uint64_t` +alternative. Raw values remain exact across their full 64-bit ranges. Check +`valid` before using the value; an invalid result's default value is not decoded data. + +Use `std::get` when the numeric type is known, or `std::visit` to handle both: + +```cpp +std::visit([] (auto raw) { std::cout << raw; }, decodedSignal.rawValue); +``` + +This replaces the previous `int64_t` field: consumers that read or print +`rawValue` directly must handle the variant. + +Physical conversion uses the active numeric type: +`physicalValue = static_cast(raw) * factor + offset`. +`physicalValue` remains a `double` and is approximate for large integers. +On usual IEEE 754 binary64 implementations, integers are exactly representable +through 2^53; above that, some integers round to the same floating-point value. +For example, unsigned `UINT64_MAX` remains exact in `rawValue`, but converts to +approximately 18446744073709551616 in binary64 before scaling. +Use `rawValue` whenever exact integer values are required. + +--- + ## `DecodedFrameValue` Represents one decoded frame result. @@ -477,6 +508,36 @@ Parsed fields: --- +### Frame validation and parse errors + +`BO_` definitions require a decimal CAN ID, a nonempty single-token frame name, +a colon, a decimal payload length, and a transmitter token. Spaces or tabs may +separate fields, and whitespace before the colon is accepted. Additional trailing +fields are rejected. + +Numeric fields must contain decimal digits only; signs, hexadecimal notation, +fractional values, suffixes, and overflow are rejected. CAN IDs may contain the +29-bit identifier plus the optional DBC extended flag (bit 31). Bits 29 and 30 +are rejected rather than silently discarded. For compatibility, unflagged IDs +above `0x7FF` are still treated as extended. + +The payload length must fit `uint8_t` (`0..255`). This is a storage-range check, +not CAN or CAN FD protocol validation; no new 8-byte or 64-byte limit is imposed. + +Parsing stops at the first detected error. Exceptions raised while parsing a +line are reported as `std::runtime_error` with the supplied file path and the +one-based physical line number, including blank lines: + +```text +example.dbc:3: Invalid CAN ID: invalid +``` + +This change validates frame definitions. Signal syntax and unsupported DBC +constructs retain their existing behavior; comprehensive validation is still +planned. File-open errors contain the path but have no line number. + +--- + ## Signal definition Example: @@ -709,20 +770,47 @@ That is why `DecodeDatabase` is a separate layer. --- -## Why No Abstract Factory Is Used +## Statement Handler Factory -At the current stage, abstract factory is intentionally avoided. +`DbcParser` owns file reading, trimming, line numbers, and error reporting. +Each `ParseFile()` call creates a fresh `DbcParseContext` and a +`DbcStatementDispatcher`. The context contains the parsed database and current +frame; handlers receive it by reference and retain no parsing state. -The current design is already clean: +The dispatcher uses `TypeFactory` to create +registered handlers once per parsing session, then reuses them for all matching +lines: -```text -parser → parsed database → decode database - ↘ tree builder → UI tree +- `BO_` → `DbcFrameHandler` +- `SG_` → `DbcSignalHandler` +- `CM_` → `DbcCommentHandler` + +Grammar implementations live in `dbc_statement_handler.cpp`; their interface, +context, and dispatcher live in `dbc_statement_handler.h`. `typefactory.h` +provides the generic registry and object creation. + +To add a construct, implement a default-constructible handler deriving from +`DbcStatementHandler` with: + +```cpp +void Handle(const std::string &line, DbcParseContext &context) const override; ``` -Introducing factory layers now would increase complexity without solving an immediate problem. +Register it in the dispatcher constructor: -If later the project requires multiple output representations or multiple build strategies, that can be added then. +```cpp +RegisterType("VAL_"); // after implementing DbcValueHandler +``` + +Registration creates one handler; replacing a registration replaces that instance. +Register during initialization before dispatching. A line is routed using its +full first whitespace-delimited keyword, so `BO_TX_BU_` cannot match `BO_`. +Unregistered keywords remain ignored. Existing `SG_` and `CM_` syntax policies +are preserved, including requiring a literal space after those keywords. + +This factory handles statements inside DBC files. A separate format-level +factory can be introduced when another file format is implemented. The decoder +and database builders remain independent of statement dispatch. --- @@ -839,3 +927,10 @@ DBC parser → DbcDatabase → DecodeDatabase → DbcDecoder ``` 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. + +## Regression tests + +See [tests/README.md](tests/README.md) 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. diff --git a/dbc.pro b/dbc.pro index 06d7c4b..5699d2b 100644 --- a/dbc.pro +++ b/dbc.pro @@ -7,6 +7,7 @@ SOURCES += \ dbc_decode_builder.cpp \ dbc_decoder.cpp \ dbc_parser.cpp \ + dbc_statement_handler.cpp \ dbc_tree_builder.cpp \ main.cpp \ tree_node.cpp @@ -16,6 +17,8 @@ HEADERS += \ 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 \ diff --git a/dbc_decoder.cpp b/dbc_decoder.cpp index 42297bc..c1faaa1 100644 --- a/dbc_decoder.cpp +++ b/dbc_decoder.cpp @@ -55,10 +55,12 @@ DecodedFrameValue DbcDecoder::Decode (const DecodeDatabase &database, if (signal.valueType == ValueType::Signed) decoded.rawValue = SignExtend (unsignedValue, signal.length); else - decoded.rawValue = static_cast (unsignedValue); + decoded.rawValue = unsignedValue; decoded.physicalValue = - (static_cast (decoded.rawValue) * signal.factor) + signal.offset; + std::visit ([&signal] (auto rawValue) { + return (static_cast (rawValue) * signal.factor) + signal.offset; + }, decoded.rawValue); decoded.valid = true; result.signals.push_back (decoded); @@ -111,47 +113,43 @@ bool DbcDecoder::ExtractMotorola (const std::vector &data, * - startBit points to the most significant bit of the signal * - inside a byte, bit numbering goes 7..0 * - crossing byte boundary moves to the next byte, bit 7 + * Example: a signal starting at 7 follows 7..0, 15..8, 23..16. */ value = 0U; - std::int32_t currentBit = static_cast (startBit); + std::size_t byteIndex = startBit / 8U; + std::uint32_t bitInByte = startBit % 8U; for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) { - if (currentBit < 0) - return false; - - const std::uint32_t absoluteBit = static_cast (currentBit); - const std::uint32_t byteIndex = absoluteBit / 8U; - const std::uint32_t bitFromMsb = absoluteBit % 8U; - const std::uint32_t bitInByte = 7U - bitFromMsb; - if (byteIndex >= data.size()) return false; value <<= 1U; value |= static_cast ((data[byteIndex] >> bitInByte) & 0x01U); - if ((absoluteBit % 8U) == 7U) - currentBit = static_cast ((byteIndex + 1U) * 8U); - else - --currentBit; + if (bitInByte == 0U) { + ++byteIndex; + bitInByte = 7U; + } else + --bitInByte; } return true; } std::int64_t DbcDecoder::SignExtend (std::uint64_t value, std::uint32_t bitLength) { - if ((bitLength == 0U) || (bitLength >= 64U)) - return static_cast (value); - - const std::uint64_t signMask = (static_cast (1U) << (bitLength - 1U)); - const std::uint64_t valueMask = (static_cast (1U) << bitLength) - 1U; + if ((bitLength == 0U) || (bitLength > 64U)) + return 0; + const std::uint64_t signMask = std::uint64_t (1U) << (bitLength - 1U); + const std::uint64_t valueMask = (bitLength == 64U) + ? ~std::uint64_t (0U) : (std::uint64_t (1U) << bitLength) - 1U; value &= valueMask; if ((value & signMask) == 0U) return static_cast (value); - return static_cast (value | (~valueMask)); + // The complemented magnitude fits int64_t, including for INT64_MIN. + return -1 - static_cast ((~value) & valueMask); } diff --git a/dbc_decoder.h b/dbc_decoder.h index 2629a3c..6b7a3ef 100644 --- a/dbc_decoder.h +++ b/dbc_decoder.h @@ -14,6 +14,7 @@ #include #include +#include #include "decode_database.h" @@ -37,13 +38,13 @@ struct RawCanFrame { */ struct DecodedSignalValue { const DecodeSignal *definition; /**< Signal definition. */ - std::int64_t rawValue; /**< Extracted raw integer value. */ + std::variant rawValue; /**< Exact signed or unsigned raw value. */ double physicalValue; /**< Converted physical value. */ bool valid; /**< true if decoding succeeded. */ DecodedSignalValue() : definition (nullptr) - , rawValue (0) + , rawValue (std::uint64_t (0U)) , physicalValue (0.0) , valid (false) { } diff --git a/dbc_parser.cpp b/dbc_parser.cpp index 6519ff8..3882efe 100644 --- a/dbc_parser.cpp +++ b/dbc_parser.cpp @@ -10,9 +10,9 @@ */ #include "dbc_parser.h" +#include "dbc_statement_handler.h" #include -#include #include #include @@ -43,314 +43,28 @@ DbcDatabase DbcParser::ParseFile (const std::string &filePath) const { throw std::runtime_error ("Failed to open DBC file: " + filePath); DbcDatabase database; - FrameInfo *currentFrame = nullptr; + DbcParseContext context {database, nullptr}; + const DbcStatementDispatcher dispatcher; + std::size_t lineNumber = 0U; std::string line; while (std::getline (input, line)) { + ++lineNumber; line = Trim (line); if (line.empty()) continue; - if (IsFrameLine (line)) { - FrameInfo frame = ParseFrameLine (line); - database.frames.push_back (frame); - currentFrame = &database.frames.back(); - } else if (IsSignalLine (line)) { - if (currentFrame == nullptr) - throw std::runtime_error ("Signal found before any frame definition."); - - SignalInfo signal = ParseSignalLine (line); - currentFrame->signals.push_back (signal); - } else if (IsCommentLine (line)) - ParseCommentLine (line, database); + try { + dispatcher.Dispatch (line, context); + } catch (const std::exception &error) { + throw std::runtime_error (filePath + ":" + std::to_string (lineNumber) + + ": " + error.what()); + } } return database; } -bool DbcParser::IsFrameLine (const std::string &line) { - return (line.size() >= 4U) && (line.compare (0U, 4U, "BO_ ") == 0); -} - -bool DbcParser::IsSignalLine (const std::string &line) { - return (line.size() >= 4U) && (line.compare (0U, 4U, "SG_ ") == 0); -} - -bool DbcParser::IsCommentLine (const std::string &line) { - return (line.size() >= 4U) && (line.compare (0U, 4U, "CM_ ") == 0); -} - std::string DbcParser::Trim (const std::string &text) { return TrimText (text); } - -std::vector DbcParser::SplitReceivers (const std::string &text) { - std::vector receivers; - std::string token; - std::istringstream stream (text); - - while (std::getline (stream, token, ',')) { - token = TrimText (token); - if (!token.empty()) - receivers.push_back (token); - } - - return receivers; -} - -void DbcParser::NormalizeCanId (std::uint32_t rawCanId, - std::uint32_t &normalizedCanId, - bool &isExtended) { - /* - * DBC commonly stores extended identifiers with bit 31 set. - * Example: - * raw id = 0x80000000 | actual_29_bit_id - */ - if ((rawCanId & 0x80000000U) != 0U) { - isExtended = true; - normalizedCanId = (rawCanId & 0x1FFFFFFFU); - } else { - isExtended = (rawCanId > 0x7FFU); - normalizedCanId = rawCanId; - } -} - -std::uint32_t DbcParser::TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn) { - hasPgn = false; - - if (!isExtended) - return 0U; - - if ((canId & 0x1FFFFFFFU) != canId) - return 0U; - - const std::uint32_t pf = (canId >> 16U) & 0xFFU; - const std::uint32_t ps = (canId >> 8U) & 0xFFU; - const std::uint32_t dp = (canId >> 24U) & 0x01U; - - std::uint32_t pgn = 0U; - - if (pf < 240U) - pgn = (dp << 16U) | (pf << 8U); - else - pgn = (dp << 16U) | (pf << 8U) | ps; - - hasPgn = true; - return pgn; -} - -FrameInfo DbcParser::ParseFrameLine (const std::string &line) { - /* - * Example: - * BO_ 256 EngineData: 8 EEC1 - */ - - std::istringstream stream (line); - std::string token; - FrameInfo frame; - std::uint32_t rawCanId = 0U; - - stream >> token; - if (token != "BO_") - throw std::runtime_error ("Invalid frame line: " + line); - - stream >> rawCanId; - NormalizeCanId (rawCanId, frame.canId, frame.isExtended); - - stream >> token; - if (token.empty()) - throw std::runtime_error ("Missing frame name: " + line); - - if (token[token.size() - 1U] == ':') - token.erase (token.size() - 1U, 1U); - - frame.name = token; - - { - unsigned int dlcValue = 0U; - stream >> dlcValue; - frame.dlc = static_cast (dlcValue); - } - - stream >> frame.transmitter; - frame.pgn = TryExtractPgn (frame.canId, frame.isExtended, frame.hasPgn); - - return frame; -} - -SignalInfo DbcParser::ParseSignalLine (const std::string &line) { - /* - * Example: - * SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8000] "rpm" ECU1,ECU2 - */ - - SignalInfo signal; - - std::string work = TrimText (line); - if (work.compare (0U, 4U, "SG_ ") != 0) - throw std::runtime_error ("Invalid signal line: " + line); - - work.erase (0U, 4U); - - const std::string::size_type colonPos = work.find (':'); - if (colonPos == std::string::npos) - throw std::runtime_error ("Signal line missing ':' : " + line); - - signal.name = TrimText (work.substr (0U, colonPos)); - std::string rest = TrimText (work.substr (colonPos + 1U)); - - const std::string::size_type pipePos = rest.find ('|'); - const std::string::size_type atPos = rest.find ('@'); - const std::string::size_type signPos = rest.find_first_of ("+-", atPos); - const std::string::size_type factorBegin = rest.find ('('); - const std::string::size_type factorComma = rest.find (',', factorBegin); - const std::string::size_type factorEnd = rest.find (')', factorComma); - const std::string::size_type rangeBegin = rest.find ('['); - const std::string::size_type rangeSep = rest.find ('|', rangeBegin); - const std::string::size_type rangeEnd = rest.find (']', rangeSep); - const std::string::size_type unitBegin = rest.find ('"', rangeEnd); - const std::string::size_type unitEnd = rest.find ('"', unitBegin + 1U); - - if ((pipePos == std::string::npos) || - (atPos == std::string::npos) || - (signPos == std::string::npos) || - (factorBegin == std::string::npos) || - (factorComma == std::string::npos) || - (factorEnd == std::string::npos) || - (rangeBegin == std::string::npos) || - (rangeSep == std::string::npos) || - (rangeEnd == std::string::npos) || - (unitBegin == std::string::npos) || - (unitEnd == std::string::npos)) - throw std::runtime_error ("Unsupported signal syntax: " + line); - - signal.startBit = static_cast ( - std::stoul (TrimText (rest.substr (0U, pipePos))) - ); - - signal.length = static_cast ( - std::stoul (TrimText (rest.substr (pipePos + 1U, atPos - pipePos - 1U))) - ); - - { - if ((atPos + 1U) >= rest.size()) - throw std::runtime_error ("Invalid endianness in signal: " + line); - - const char endianChar = rest[atPos + 1U]; - signal.isLittleEndian = (endianChar == '1'); - } - - { - const char signChar = rest[signPos]; - signal.isSigned = (signChar == '-'); - } - - signal.factor = std::stod ( - TrimText (rest.substr (factorBegin + 1U, factorComma - factorBegin - 1U)) - ); - - signal.offset = std::stod ( - TrimText (rest.substr (factorComma + 1U, factorEnd - factorComma - 1U)) - ); - - signal.minimum = std::stod ( - TrimText (rest.substr (rangeBegin + 1U, rangeSep - rangeBegin - 1U)) - ); - - signal.maximum = std::stod ( - TrimText (rest.substr (rangeSep + 1U, rangeEnd - rangeSep - 1U)) - ); - - signal.unit = rest.substr (unitBegin + 1U, unitEnd - unitBegin - 1U); - - { - const std::string receiversText = TrimText (rest.substr (unitEnd + 1U)); - signal.receivers = SplitReceivers (receiversText); - } - - return signal; -} - -void DbcParser::ParseCommentLine (const std::string &line, DbcDatabase &database) { - /* - * Examples: - * CM_ BO_ 256 "Frame comment"; - * CM_ SG_ 256 EngineSpeed "Signal comment"; - */ - - std::istringstream stream (line); - std::string token; - stream >> token; - - if (token != "CM_") - return; - - stream >> token; - - if (token == "BO_") { - std::uint32_t rawCanId = 0U; - std::uint32_t canId = 0U; - bool isExtended = false; - - stream >> rawCanId; - NormalizeCanId (rawCanId, canId, isExtended); - - const std::string::size_type quoteBegin = line.find ('"'); - const std::string::size_type quoteEnd = line.rfind ('"'); - - if ((quoteBegin == std::string::npos) || - (quoteEnd == std::string::npos) || - (quoteEnd <= quoteBegin)) - return; - - FrameInfo *frame = FindFrameById (database, canId, isExtended); - if (frame != nullptr) - frame->comment = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U); - } else if (token == "SG_") { - std::uint32_t rawCanId = 0U; - std::uint32_t canId = 0U; - bool isExtended = false; - std::string signalName; - - stream >> rawCanId; - stream >> signalName; - - NormalizeCanId (rawCanId, canId, isExtended); - - const std::string::size_type quoteBegin = line.find ('"'); - const std::string::size_type quoteEnd = line.rfind ('"'); - - if ((quoteBegin == std::string::npos) || - (quoteEnd == std::string::npos) || - (quoteEnd <= quoteBegin)) - return; - - FrameInfo *frame = FindFrameById (database, canId, isExtended); - if (frame != nullptr) { - SignalInfo *signal = FindSignalByName (*frame, signalName); - if (signal != nullptr) - signal->comment = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U); - } - } -} - -FrameInfo *DbcParser::FindFrameById (DbcDatabase &database, - std::uint32_t canId, - bool isExtended) { - for (std::size_t index = 0U; index < database.frames.size(); ++index) { - if ((database.frames[index].canId == canId) && - (database.frames[index].isExtended == isExtended)) - return &database.frames[index]; - } - - return nullptr; -} - -SignalInfo *DbcParser::FindSignalByName (FrameInfo &frame, const std::string &signalName) { - for (std::size_t index = 0U; index < frame.signals.size(); ++index) { - if (frame.signals[index].name == signalName) - return &frame.signals[index]; - } - - return nullptr; -} diff --git a/dbc_parser.h b/dbc_parser.h index 4d621aa..fa58508 100644 --- a/dbc_parser.h +++ b/dbc_parser.h @@ -13,8 +13,6 @@ #define DBC_PARSER_H #include -#include -#include #include "dbc_database.h" @@ -39,31 +37,12 @@ class DbcParser { * @param filePath Path to input file. * @return Parsed database. * @throws std::runtime_error on file or parse errors. + * Line parse errors include the file path and one-based line number. */ DbcDatabase ParseFile (const std::string &filePath) const; private: - static bool IsFrameLine (const std::string &line); - static bool IsSignalLine (const std::string &line); - static bool IsCommentLine (const std::string &line); static std::string Trim (const std::string &text); - static std::vector SplitReceivers (const std::string &text); - static std::uint32_t TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn); - - static void NormalizeCanId (std::uint32_t rawCanId, - std::uint32_t &normalizedCanId, - bool &isExtended); - - static FrameInfo ParseFrameLine (const std::string &line); - static SignalInfo ParseSignalLine (const std::string &line); - - static void ParseCommentLine (const std::string &line, DbcDatabase &database); - - static FrameInfo *FindFrameById (DbcDatabase &database, - std::uint32_t canId, - bool isExtended); - - static SignalInfo *FindSignalByName (FrameInfo &frame, const std::string &signalName); }; #endif /* DBC_PARSER_H */ diff --git a/dbc_statement_handler.cpp b/dbc_statement_handler.cpp new file mode 100644 index 0000000..293caa7 --- /dev/null +++ b/dbc_statement_handler.cpp @@ -0,0 +1,358 @@ +// SPDX-License-Identifier: MIT +#include "dbc_statement_handler.h" +#include +#include +#include +#include +#include + +namespace { + std::uint32_t ParseDecimal (const std::string &text, + std::uint32_t maximum, + const char *field) { + std::uint32_t value = 0U; + const auto parsed = std::from_chars (text.data(), text.data() + text.size(), value); + if (text.empty() || parsed.ec != std::errc() || + parsed.ptr != text.data() + text.size() || value > maximum) + throw std::runtime_error (std::string ("Invalid ") + field + ": " + text); + return value; + } + + /** + * @brief Remove leading and trailing spaces. + * @param text Input text. + * @return Trimmed text. + */ + std::string TrimText (const std::string &text) { + std::string::size_type begin = 0U; + while ((begin < text.size()) && + std::isspace (static_cast (text[begin]))) + ++begin; + + std::string::size_type end = text.size(); + while ((end > begin) && + std::isspace (static_cast (text[end - 1U]))) + --end; + + return text.substr (begin, end - begin); + } + FrameInfo *FindFrameById (DbcDatabase &, std::uint32_t, bool); + SignalInfo *FindSignalByName (FrameInfo &, const std::string &); +} + +namespace { +std::vector SplitReceivers (const std::string &text) { + std::vector receivers; + std::string token; + std::istringstream stream (text); + + while (std::getline (stream, token, ',')) { + token = TrimText (token); + if (!token.empty()) + receivers.push_back (token); + } + + return receivers; +} + +void NormalizeCanId (std::uint32_t rawCanId, + std::uint32_t &normalizedCanId, + bool &isExtended) { + /* + * DBC commonly stores extended identifiers with bit 31 set. + * Example: + * raw id = 0x80000000 | actual_29_bit_id + */ + if ((rawCanId & 0x80000000U) != 0U) { + isExtended = true; + normalizedCanId = (rawCanId & 0x1FFFFFFFU); + } else { + isExtended = (rawCanId > 0x7FFU); + normalizedCanId = rawCanId; + } +} + +std::uint32_t TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn) { + hasPgn = false; + + if (!isExtended) + return 0U; + + if ((canId & 0x1FFFFFFFU) != canId) + return 0U; + + const std::uint32_t pf = (canId >> 16U) & 0xFFU; + const std::uint32_t ps = (canId >> 8U) & 0xFFU; + const std::uint32_t dp = (canId >> 24U) & 0x01U; + + std::uint32_t pgn = 0U; + + if (pf < 240U) + pgn = (dp << 16U) | (pf << 8U); + else + pgn = (dp << 16U) | (pf << 8U) | ps; + + hasPgn = true; + return pgn; +} + +} + +FrameInfo DbcFrameHandler::ParseFrameLine (const std::string &line) { + /* + * Example: + * BO_ 256 EngineData: 8 EEC1 + */ + + std::istringstream stream (line); + std::string keyword; + std::string idText; + if (!(stream >> keyword >> idText) || keyword != "BO_") + throw std::runtime_error ("Missing CAN ID in frame definition."); + + const std::uint32_t rawCanId = ParseDecimal ( + idText, std::numeric_limits::max(), "CAN ID"); + // Only bit 31 may accompany the actual 29-bit identifier. + if ((rawCanId & 0x60000000U) != 0U) + throw std::runtime_error ("CAN ID exceeds the 29-bit identifier range."); + + std::string nameText; + if (!std::getline (stream, nameText, ':') || stream.eof()) + throw std::runtime_error ("Missing ':' in frame definition."); + std::istringstream nameStream (nameText); + FrameInfo frame; + std::string extra; + if (!(nameStream >> frame.name) || (nameStream >> extra)) + throw std::runtime_error ("Missing or invalid frame name."); + + std::string lengthText; + if (!(stream >> lengthText)) + throw std::runtime_error ("Missing payload length in frame definition."); + frame.dlc = static_cast (ParseDecimal ( + lengthText, std::numeric_limits::max(), "payload length")); + if (!(stream >> frame.transmitter)) + throw std::runtime_error ("Missing transmitter in frame definition."); + if (stream >> extra) + throw std::runtime_error ("Unexpected trailing field in frame definition: " + extra); + + NormalizeCanId (rawCanId, frame.canId, frame.isExtended); + frame.pgn = TryExtractPgn (frame.canId, frame.isExtended, frame.hasPgn); + + return frame; +} + +SignalInfo DbcSignalHandler::ParseSignalLine (const std::string &line) { + /* + * Example: + * SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8000] "rpm" ECU1,ECU2 + */ + + SignalInfo signal; + + std::string work = TrimText (line); + if (work.compare (0U, 4U, "SG_ ") != 0) + throw std::runtime_error ("Invalid signal line: " + line); + + work.erase (0U, 4U); + + const std::string::size_type colonPos = work.find (':'); + if (colonPos == std::string::npos) + throw std::runtime_error ("Signal line missing ':' : " + line); + + signal.name = TrimText (work.substr (0U, colonPos)); + std::string rest = TrimText (work.substr (colonPos + 1U)); + + const std::string::size_type pipePos = rest.find ('|'); + const std::string::size_type atPos = rest.find ('@'); + const std::string::size_type signPos = rest.find_first_of ("+-", atPos); + const std::string::size_type factorBegin = rest.find ('('); + const std::string::size_type factorComma = rest.find (',', factorBegin); + const std::string::size_type factorEnd = rest.find (')', factorComma); + const std::string::size_type rangeBegin = rest.find ('['); + const std::string::size_type rangeSep = rest.find ('|', rangeBegin); + const std::string::size_type rangeEnd = rest.find (']', rangeSep); + const std::string::size_type unitBegin = rest.find ('"', rangeEnd); + const std::string::size_type unitEnd = rest.find ('"', unitBegin + 1U); + + if ((pipePos == std::string::npos) || + (atPos == std::string::npos) || + (signPos == std::string::npos) || + (factorBegin == std::string::npos) || + (factorComma == std::string::npos) || + (factorEnd == std::string::npos) || + (rangeBegin == std::string::npos) || + (rangeSep == std::string::npos) || + (rangeEnd == std::string::npos) || + (unitBegin == std::string::npos) || + (unitEnd == std::string::npos)) + throw std::runtime_error ("Unsupported signal syntax: " + line); + + signal.startBit = static_cast ( + std::stoul (TrimText (rest.substr (0U, pipePos))) + ); + + signal.length = static_cast ( + std::stoul (TrimText (rest.substr (pipePos + 1U, atPos - pipePos - 1U))) + ); + + { + if ((atPos + 1U) >= rest.size()) + throw std::runtime_error ("Invalid endianness in signal: " + line); + + const char endianChar = rest[atPos + 1U]; + signal.isLittleEndian = (endianChar == '1'); + } + + { + const char signChar = rest[signPos]; + signal.isSigned = (signChar == '-'); + } + + signal.factor = std::stod ( + TrimText (rest.substr (factorBegin + 1U, factorComma - factorBegin - 1U)) + ); + + signal.offset = std::stod ( + TrimText (rest.substr (factorComma + 1U, factorEnd - factorComma - 1U)) + ); + + signal.minimum = std::stod ( + TrimText (rest.substr (rangeBegin + 1U, rangeSep - rangeBegin - 1U)) + ); + + signal.maximum = std::stod ( + TrimText (rest.substr (rangeSep + 1U, rangeEnd - rangeSep - 1U)) + ); + + signal.unit = rest.substr (unitBegin + 1U, unitEnd - unitBegin - 1U); + + { + const std::string receiversText = TrimText (rest.substr (unitEnd + 1U)); + signal.receivers = SplitReceivers (receiversText); + } + + return signal; +} + +void DbcCommentHandler::ParseCommentLine (const std::string &line, DbcDatabase &database) { + /* + * Examples: + * CM_ BO_ 256 "Frame comment"; + * CM_ SG_ 256 EngineSpeed "Signal comment"; + */ + + std::istringstream stream (line); + std::string token; + stream >> token; + + if (token != "CM_") + return; + + stream >> token; + + if (token == "BO_") { + std::uint32_t rawCanId = 0U; + std::uint32_t canId = 0U; + bool isExtended = false; + + stream >> rawCanId; + NormalizeCanId (rawCanId, canId, isExtended); + + const std::string::size_type quoteBegin = line.find ('"'); + const std::string::size_type quoteEnd = line.rfind ('"'); + + if ((quoteBegin == std::string::npos) || + (quoteEnd == std::string::npos) || + (quoteEnd <= quoteBegin)) + return; + + FrameInfo *frame = FindFrameById (database, canId, isExtended); + if (frame != nullptr) + frame->comment = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U); + } else if (token == "SG_") { + std::uint32_t rawCanId = 0U; + std::uint32_t canId = 0U; + bool isExtended = false; + std::string signalName; + + stream >> rawCanId; + stream >> signalName; + + NormalizeCanId (rawCanId, canId, isExtended); + + const std::string::size_type quoteBegin = line.find ('"'); + const std::string::size_type quoteEnd = line.rfind ('"'); + + if ((quoteBegin == std::string::npos) || + (quoteEnd == std::string::npos) || + (quoteEnd <= quoteBegin)) + return; + + FrameInfo *frame = FindFrameById (database, canId, isExtended); + if (frame != nullptr) { + SignalInfo *signal = FindSignalByName (*frame, signalName); + if (signal != nullptr) + signal->comment = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U); + } + } +} + +namespace { +FrameInfo *FindFrameById (DbcDatabase &database, + std::uint32_t canId, + bool isExtended) { + for (std::size_t index = 0U; index < database.frames.size(); ++index) { + if ((database.frames[index].canId == canId) && + (database.frames[index].isExtended == isExtended)) + return &database.frames[index]; + } + + return nullptr; +} + +SignalInfo *FindSignalByName (FrameInfo &frame, const std::string &signalName) { + for (std::size_t index = 0U; index < frame.signals.size(); ++index) { + if (frame.signals[index].name == signalName) + return &frame.signals[index]; + } + + return nullptr; +} +} + +void DbcFrameHandler::Handle (const std::string &line, DbcParseContext &context) const { + context.database.frames.push_back (ParseFrameLine (line)); + context.currentFrame = &context.database.frames.back(); +} + +void DbcSignalHandler::Handle (const std::string &line, DbcParseContext &context) const { + // Preserve the existing signal syntax policy during this refactor. + if (line.compare (0U, 4U, "SG_ ") != 0) + return; + if (context.currentFrame == nullptr) + throw std::runtime_error ("Signal found before any frame definition."); + context.currentFrame->signals.push_back (ParseSignalLine (line)); +} + +void DbcCommentHandler::Handle (const std::string &line, DbcParseContext &context) const { + if (line.compare (0U, 4U, "CM_ ") == 0) + ParseCommentLine (line, context.database); +} + +DbcStatementDispatcher::DbcStatementDispatcher() { + RegisterType ("BO_"); + RegisterType ("SG_"); + RegisterType ("CM_"); +} + +bool DbcStatementDispatcher::Dispatch (const std::string &line, + DbcParseContext &context) const { + std::istringstream stream (line); + std::string keyword; + stream >> keyword; + const auto handler = m_handlers.find (keyword); + if (handler == m_handlers.end()) + return false; + handler->second->Handle (line, context); + return true; +} diff --git a/dbc_statement_handler.h b/dbc_statement_handler.h new file mode 100644 index 0000000..fccea45 --- /dev/null +++ b/dbc_statement_handler.h @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +#ifndef DBC_STATEMENT_HANDLER_H +#define DBC_STATEMENT_HANDLER_H + +#include "dbc_database.h" +#include "typefactory.h" +#include +#include + +/** Mutable state belonging to one file parse. Handlers do not retain it. */ +struct DbcParseContext { + DbcDatabase &database; + FrameInfo *currentFrame = nullptr; +}; + +class DbcStatementHandler { + public: + virtual ~DbcStatementHandler() = default; + virtual void Handle (const std::string &line, DbcParseContext &context) const = 0; +}; + +class DbcFrameHandler : public DbcStatementHandler { + public: + void Handle (const std::string &line, DbcParseContext &context) const override; + private: + static FrameInfo ParseFrameLine (const std::string &line); +}; + +class DbcSignalHandler : public DbcStatementHandler { + public: + void Handle (const std::string &line, DbcParseContext &context) const override; + private: + static SignalInfo ParseSignalLine (const std::string &line); +}; + +class DbcCommentHandler : public DbcStatementHandler { + public: + void Handle (const std::string &line, DbcParseContext &context) const override; + private: + static void ParseCommentLine (const std::string &line, DbcDatabase &database); +}; + +/** Exact-key dispatch to handlers created once per registration via TypeFactory. */ +class DbcStatementDispatcher { + public: + DbcStatementDispatcher(); + + template + void RegisterType (const std::string &keyword) { + m_factory.registerType (keyword); + m_handlers.insert_or_assign (keyword, m_factory.create (keyword)); + } + + /** Returns false for an unregistered keyword; input must be trimmed. */ + bool Dispatch (const std::string &line, DbcParseContext &context) const; + + private: + TypeFactory m_factory; + std::unordered_map > m_handlers; +}; + +#endif /* DBC_STATEMENT_HANDLER_H */ diff --git a/docs/dbcframework.tag b/docs/dbcframework.tag new file mode 100644 index 0000000..7d60b80 --- /dev/null +++ b/docs/dbcframework.tag @@ -0,0 +1,693 @@ + + + + dbc_database.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__database_8h.html + frame_info.h + DbcDatabase + + + dbc_decode_builder.cpp + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__decode__builder_8cpp.html + dbc_decode_builder.h + + + dbc_decode_builder.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__decode__builder_8h.html + dbc_database.h + decode_database.h + DbcDecodeBuilder + + + dbc_decoder.cpp + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__decoder_8cpp.html + dbc_decoder.h + + + dbc_decoder.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__decoder_8h.html + decode_database.h + RawCanFrame + DecodedSignalValue + DecodedFrameValue + DbcDecoder + + + dbc_parser.cpp + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__parser_8cpp.html + dbc_parser.h + + + dbc_parser.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__parser_8h.html + dbc_database.h + DbcParser + + + dbc_tree_builder.cpp + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__tree__builder_8cpp.html + dbc_tree_builder.h + + + dbc_tree_builder.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__tree__builder_8h.html + dbc_database.h + tree_node.h + DbcTreeBuilder + + + decode_database.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + decode__database_8h.html + DecodeSignal + DecodeFrame + FrameKey + FrameKeyHasher + DecodeDatabase + + + ByteOrder + decode__database_8h.html + aaeb92d42f5a6e27b8ba19f18d69d142b + + Intel + Motorola + + + + ValueType + decode__database_8h.html + ad9971b6ef33e02ba2c75d19c1d2518a1 + + Unsigned + Signed + + + + frame_info.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + frame__info_8h.html + signal_info.h + FrameInfo + + + main.cpp + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + main_8cpp.html + dbc_parser.h + dbc_tree_builder.h + dbc_decode_builder.h + dbc_decoder.h + + + signal_info.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + signal__info_8h.html + SignalInfo + + + tree_node.cpp + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + tree__node_8cpp.html + tree_node.h + + + tree_node.h + /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + tree__node_8h.html + frame_info.h + signal_info.h + TreeNode + + + NodeType + tree__node_8h.html + acac9cbaeea226ed297804c012dc12b16 + + Root + Frame + Signal + + + + DbcDatabase + structDbcDatabase.html + + std::vector< FrameInfo > + frames + structDbcDatabase.html + a2cade5d0234ee816132127542f8c612b + + + + + DbcDecodeBuilder + classDbcDecodeBuilder.html + + DecodeDatabase + Build + classDbcDecodeBuilder.html + a2bc6386dfb5e58976c42e22c19ec471b + (const DbcDatabase &source) const + + + + DbcDecoder + classDbcDecoder.html + + const DecodeFrame * + FindFrame + classDbcDecoder.html + ab2cfb2fb711c95d3a29365546b89f3da + (const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const + + + DecodedFrameValue + Decode + classDbcDecoder.html + a345951ffe5d943a70d3a1ea1f39e74f7 + (const DecodeDatabase &database, const RawCanFrame &frame) const + + + + DbcParser + classDbcParser.html + + DbcDatabase + ParseFile + classDbcParser.html + aef72826942c9095d653fafa435855e56 + (const std::string &filePath) const + + + + DbcTreeBuilder + classDbcTreeBuilder.html + + std::unique_ptr< TreeNode > + Build + classDbcTreeBuilder.html + a7e57d067d831b14b383947fd125edd4b + (const DbcDatabase &database) const + + + + DecodeDatabase + structDecodeDatabase.html + + + DecodedFrameValue + structDecodedFrameValue.html + + const DecodeFrame * + definition + structDecodedFrameValue.html + a60dda1cc352d2c8087f0bdbc81dd266c + + + + std::vector< DecodedSignalValue > + public + structDecodedFrameValue.html + adae123ac7fbb4a5c314b64b01109f4a8 + + + + bool + valid + structDecodedFrameValue.html + a4f51c31110dba1f73a763c596372beb0 + + + + + DecodedSignalValue + structDecodedSignalValue.html + + const DecodeSignal * + definition + structDecodedSignalValue.html + acadc3b3bb21dd6b0412d342c7e6b20d7 + + + + std::int64_t + rawValue + structDecodedSignalValue.html + a5138b825940e34689f7b3891627ee9ec + + + + double + physicalValue + structDecodedSignalValue.html + a6847d05b3cb00d5e0f6c611968f57978 + + + + bool + valid + structDecodedSignalValue.html + aac0ed361af545cde48d0e6f41a859686 + + + + + DecodeFrame + structDecodeFrame.html + + std::string + name + structDecodeFrame.html + aa0a7f8fd5bfde2148dfd0d838328f579 + + + + std::uint32_t + canId + structDecodeFrame.html + a52e10215388db7df8b541b9d9909edcf + + + + bool + isExtended + structDecodeFrame.html + a3ee2348d781f8f15aaf87e8dcf57ec41 + + + + std::uint8_t + dlc + structDecodeFrame.html + a51111ac13988be372d5673d12cf3e060 + + + + std::uint32_t + pgn + structDecodeFrame.html + a1d3c54055c0cbceb73adf551f7067f23 + + + + bool + hasPgn + structDecodeFrame.html + a2551102670c4a540fced4c71da0b369d + + + + std::string + transmitter + structDecodeFrame.html + ad78241dc40c793aabb8495b6989b81a9 + + + + std::string + comment + structDecodeFrame.html + a25819ef907a32391af5c9f7cae9cdb22 + + + + std::vector< DecodeSignal > + public + structDecodeFrame.html + a7f4e71bbdec3f424b625e724e3dfbf14 + + + + + DecodeSignal + structDecodeSignal.html + + std::string + name + structDecodeSignal.html + a58cf5844f2272a23dcb9687d912e4780 + + + + std::uint32_t + startBit + structDecodeSignal.html + aaf5d7527ddf65b6355c2b4f3626df22d + + + + std::uint32_t + length + structDecodeSignal.html + acd4ef5ee30421d117b5756854302debb + + + + ByteOrder + byteOrder + structDecodeSignal.html + abdc4c4bb4a67a6d61d6ca81e8a52833d + + + + ValueType + valueType + structDecodeSignal.html + a9d37638129263b8902ba5be59baf39a8 + + + + double + factor + structDecodeSignal.html + a428c39913a366a8476dd291061354391 + + + + double + offset + structDecodeSignal.html + a92db637af4e224a0ae70173050dc3f74 + + + + double + minimum + structDecodeSignal.html + a0fb84e19a0ab3bd50b6f65c1075ebc25 + + + + double + maximum + structDecodeSignal.html + a4a6ba87142a9badbf0ca830e9e709cb7 + + + + std::string + unit + structDecodeSignal.html + a38eed9ca7581423fd8bfbedcffc12092 + + + + std::vector< std::string > + receivers + structDecodeSignal.html + abdbae62a64d2df716bf60c6b67b30eaa + + + + std::string + comment + structDecodeSignal.html + ae28c905d4a2bc86419c2a8361bfea473 + + + + + FrameInfo + structFrameInfo.html + + std::string + name + structFrameInfo.html + abb53a7f93ed7abc0ea1ae4a8ccafcdcb + + + + std::uint32_t + canId + structFrameInfo.html + af470b0742c05bfbffc31c51a68f5c05e + + + + bool + isExtended + structFrameInfo.html + a34b726afaad2ac5c697fdb2ac070cdaf + + + + std::uint32_t + pgn + structFrameInfo.html + aee518b33f1000bf0b7f6e4a87474c943 + + + + bool + hasPgn + structFrameInfo.html + a4737a5420213ad4304724e39f3a4e55d + + + + std::uint8_t + dlc + structFrameInfo.html + aa2b198ea0f55e560c123d35e7b3ecab9 + + + + std::string + transmitter + structFrameInfo.html + a92749ec3798d4211a505860fb389a9e8 + + + + std::string + comment + structFrameInfo.html + ace75121294f9d89b762080ab5643293c + + + + std::vector< SignalInfo > + public + structFrameInfo.html + a3f7e25d67ddae22f2ed50823a5a26084 + + + + + FrameKey + structFrameKey.html + + + FrameKeyHasher + structFrameKeyHasher.html + + + RawCanFrame + structRawCanFrame.html + + std::uint32_t + canId + structRawCanFrame.html + a2d0e7fa0e3d5c20bbed55ed8f7888ff4 + + + + bool + isExtended + structRawCanFrame.html + a462193d275adc1dba8bd18ffa0e36bb7 + + + + std::vector< std::uint8_t > + data + structRawCanFrame.html + a0acb487612104c99c9907344c035df83 + + + + + SignalInfo + structSignalInfo.html + + std::string + name + structSignalInfo.html + a379e422a00cad56f896cacf60455b088 + + + + std::uint32_t + startBit + structSignalInfo.html + ace290724f9801521609aedaa946d61f1 + + + + std::uint32_t + length + structSignalInfo.html + a1008b5201f71848177217bd52fb84baa + + + + bool + isLittleEndian + structSignalInfo.html + af363b1563fb4c7cc8973f9a80c06846c + + + + bool + isSigned + structSignalInfo.html + a52a52b320eef92fbcb4626307f9a498f + + + + double + factor + structSignalInfo.html + ae4f78d99a2750aa564d7eba860171499 + + + + double + offset + structSignalInfo.html + ab7d0769f47aa540656b22e4e49db517e + + + + double + minimum + structSignalInfo.html + ada7bf94fbeaa26bd08c73982b5af255b + + + + double + maximum + structSignalInfo.html + adf1c4331b9eabced0d7fdda40ff0eb52 + + + + std::string + unit + structSignalInfo.html + a1f214f03e94ef5794de2d3367bfcbd01 + + + + std::vector< std::string > + receivers + structSignalInfo.html + a2c95562fd0b29327a7fd7b1e6feee7f3 + + + + std::string + comment + structSignalInfo.html + ac99ba7563a5dad01e39c4257216953f5 + + + + + TreeNode + classTreeNode.html + + + TreeNode + classTreeNode.html + a984a98d5ccf7ef1f5a18094c6821f35d + () + + + + TreeNode + classTreeNode.html + a8e38dd591d8801d7ee3a7dbad90c67fc + (const FrameInfo &frame) + + + + TreeNode + classTreeNode.html + ab9f00f5253d56461bb2d420fd639c5ae + (const SignalInfo &signal) + + + void + AddChild + classTreeNode.html + a6161f2ebb92184eab4215d121870e788 + (std::unique_ptr< TreeNode > child) + + + std::size_t + GetChildCount + classTreeNode.html + abdd82460187dca8d3e5d66f5d5c529ea + () const + + + const TreeNode * + GetChild + classTreeNode.html + a4727ff801a2d1b9323c5ae50a35457a6 + (std::size_t index) const + + + TreeNode * + GetChild + classTreeNode.html + a81047bd7d2a4cc96b9ef5e20d0d63b5f + (std::size_t index) + + + NodeType + GetType + classTreeNode.html + afa2f4b0aafa12d3d41ed00df8e0250c9 + () const + + + const std::string & + GetName + classTreeNode.html + aaac5b8d9dc9e5ae1f367d1adbcf20e18 + () const + + + const FrameInfo * + GetFrame + classTreeNode.html + afc503b40004764163605d6dbdb4ef811 + () const + + + const SignalInfo * + GetSignal + classTreeNode.html + a226518612d0d00b5988a2c44fc21d3f1 + () const + + + + md_README + DBC Parser and Runtime Decode Module Documentation + md_README.html + + diff --git a/docs/doxygen_warnings.log b/docs/doxygen_warnings.log new file mode 100644 index 0000000..4fab2c9 --- /dev/null +++ b/docs/doxygen_warnings.log @@ -0,0 +1,10 @@ +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/main.cpp:97: 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/decode_database.h:133: warning: Member frames (variable) of struct DecodeDatabase is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:134: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:108: 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:113: 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:100: warning: Member canId (variable) of struct FrameKey is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:101: warning: Member isExtended (variable) of struct FrameKey is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:122: 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/tree_node.h:60: warning: Member operator=(TreeNode &&)=default (function) of class TreeNode is not documented. diff --git a/docs/html/annotated.html b/docs/html/annotated.html index bfbb64b..f42465c 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -5,10 +5,17 @@ -DBC framework: Class List +DBC Framework: Class List + + + + + + + @@ -18,8 +25,9 @@ -
DBC framework +
DBC Framework
+
DBC parsing and CAN signal decoding framework
@@ -27,23 +35,53 @@
- - + + + + + +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+
Class List
@@ -69,9 +107,12 @@
+ - + diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js new file mode 100644 index 0000000..54910e2 --- /dev/null +++ b/docs/html/annotated_dup.js @@ -0,0 +1,19 @@ +var annotated_dup = +[ + [ "DbcDatabase", "structDbcDatabase.html", "structDbcDatabase" ], + [ "DbcDecodeBuilder", "classDbcDecodeBuilder.html", "classDbcDecodeBuilder" ], + [ "DbcDecoder", "classDbcDecoder.html", "classDbcDecoder" ], + [ "DbcParser", "classDbcParser.html", "classDbcParser" ], + [ "DbcTreeBuilder", "classDbcTreeBuilder.html", "classDbcTreeBuilder" ], + [ "DecodeDatabase", "structDecodeDatabase.html", null ], + [ "DecodedFrameValue", "structDecodedFrameValue.html", "structDecodedFrameValue" ], + [ "DecodedSignalValue", "structDecodedSignalValue.html", "structDecodedSignalValue" ], + [ "DecodeFrame", "structDecodeFrame.html", "structDecodeFrame" ], + [ "DecodeSignal", "structDecodeSignal.html", "structDecodeSignal" ], + [ "FrameInfo", "structFrameInfo.html", "structFrameInfo" ], + [ "FrameKey", "structFrameKey.html", null ], + [ "FrameKeyHasher", "structFrameKeyHasher.html", null ], + [ "RawCanFrame", "structRawCanFrame.html", "structRawCanFrame" ], + [ "SignalInfo", "structSignalInfo.html", "structSignalInfo" ], + [ "TreeNode", "classTreeNode.html", "classTreeNode" ] +]; \ No newline at end of file diff --git a/docs/html/classDbcDecodeBuilder-members.html b/docs/html/classDbcDecodeBuilder-members.html index 79f5a08..5bf2363 100644 --- a/docs/html/classDbcDecodeBuilder-members.html +++ b/docs/html/classDbcDecodeBuilder-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
DBC framework +
DBC Framework
+
DBC parsing and CAN signal decoding framework
@@ -27,23 +35,53 @@
- - + + + + + +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+
DbcDecodeBuilder Member List
@@ -53,9 +91,12 @@
Build(const DbcDatabase &source) constDbcDecodeBuilder
+ - + diff --git a/docs/html/classDbcDecodeBuilder.html b/docs/html/classDbcDecodeBuilder.html index c69d60b..41cda74 100644 --- a/docs/html/classDbcDecodeBuilder.html +++ b/docs/html/classDbcDecodeBuilder.html @@ -5,10 +5,17 @@ -DBC framework: DbcDecodeBuilder Class Reference +DBC Framework: DbcDecodeBuilder Class Reference + + + + + + + @@ -18,8 +25,9 @@ -
DBC framework +
DBC Framework
+
DBC parsing and CAN signal decoding framework
@@ -27,23 +35,53 @@
- - + + + + + +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+
Public Member Functions | @@ -95,9 +133,7 @@ Public Member Functions

Definition at line 14 of file dbc_decode_builder.cpp.

-

References DecodeSignal::byteOrder, DecodeFrame::canId, FrameInfo::canId, DecodeSignal::comment, DecodeFrame::comment, FrameInfo::comment, SignalInfo::comment, DecodeFrame::dlc, FrameInfo::dlc, DecodeSignal::factor, SignalInfo::factor, DecodeDatabase::frameIndexByKey, DbcDatabase::frames, DecodeDatabase::frames, DecodeFrame::hasPgn, FrameInfo::hasPgn, Intel, DecodeFrame::isExtended, FrameInfo::isExtended, SignalInfo::isLittleEndian, SignalInfo::isSigned, DecodeSignal::length, SignalInfo::length, DecodeSignal::maximum, SignalInfo::maximum, DecodeSignal::minimum, SignalInfo::minimum, Motorola, DecodeSignal::name, DecodeFrame::name, FrameInfo::name, SignalInfo::name, DecodeSignal::offset, SignalInfo::offset, DecodeFrame::pgn, FrameInfo::pgn, DecodeSignal::receivers, SignalInfo::receivers, DecodeFrame::signals, FrameInfo::signals, Signed, DecodeSignal::startBit, SignalInfo::startBit, DecodeFrame::transmitter, FrameInfo::transmitter, DecodeSignal::unit, SignalInfo::unit, Unsigned, and DecodeSignal::valueType.

- -

Referenced by main().

+

References DecodeSignal::byteOrder, DecodeFrame::canId, FrameInfo::canId, DecodeFrame::comment, FrameInfo::comment, DecodeFrame::dlc, FrameInfo::dlc, DbcDatabase::frames, DecodeFrame::hasPgn, FrameInfo::hasPgn, DecodeFrame::isExtended, FrameInfo::isExtended, SignalInfo::isLittleEndian, DecodeSignal::length, SignalInfo::length, DecodeSignal::name, DecodeFrame::name, FrameInfo::name, SignalInfo::name, DecodeFrame::pgn, FrameInfo::pgn, DecodeSignal::startBit, SignalInfo::startBit, DecodeFrame::transmitter, and FrameInfo::transmitter.

@@ -106,9 +142,13 @@ Public Member Functions
  • dbc_decode_builder.cpp
  • + - + diff --git a/docs/html/classDbcDecodeBuilder.js b/docs/html/classDbcDecodeBuilder.js new file mode 100644 index 0000000..bd3ef09 --- /dev/null +++ b/docs/html/classDbcDecodeBuilder.js @@ -0,0 +1,4 @@ +var classDbcDecodeBuilder = +[ + [ "Build", "classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b", null ] +]; \ No newline at end of file diff --git a/docs/html/classDbcDecoder-members.html b/docs/html/classDbcDecoder-members.html index 550ff86..250d9a8 100644 --- a/docs/html/classDbcDecoder-members.html +++ b/docs/html/classDbcDecoder-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DbcDecoder Member List
    @@ -52,15 +90,14 @@

    This is the complete list of members for DbcDecoder, including all inherited members.

    - - - - - +
    Decode(const DecodeDatabase &database, const RawCanFrame &frame) constDbcDecoder
    ExtractIntel(const std::vector< std::uint8_t > &data, std::uint32_t startBit, std::uint32_t length, std::uint64_t &value)DbcDecoderprivatestatic
    ExtractMotorola(const std::vector< std::uint8_t > &data, std::uint32_t startBit, std::uint32_t length, std::uint64_t &value)DbcDecoderprivatestatic
    ExtractUnsigned(const std::vector< std::uint8_t > &data, const DecodeSignal &signal, std::uint64_t &value)DbcDecoderprivatestatic
    FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) constDbcDecoder
    SignExtend(std::uint64_t value, std::uint32_t bitLength)DbcDecoderprivatestatic
    FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) constDbcDecoder
    + - + diff --git a/docs/html/classDbcDecoder.html b/docs/html/classDbcDecoder.html index 7c48056..c748da7 100644 --- a/docs/html/classDbcDecoder.html +++ b/docs/html/classDbcDecoder.html @@ -5,10 +5,17 @@ -DBC framework: DbcDecoder Class Reference +DBC Framework: DbcDecoder Class Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,27 +35,56 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + @@ -66,219 +103,12 @@ Public Member Functions DecodedFrameValue Decode (const DecodeDatabase &database, const RawCanFrame &frame) const  Decode one raw CAN frame. More...
      - - - - - - - - - -

    -Static Private Member Functions

    static bool ExtractUnsigned (const std::vector< std::uint8_t > &data, const DecodeSignal &signal, std::uint64_t &value)
     
    static bool ExtractIntel (const std::vector< std::uint8_t > &data, std::uint32_t startBit, std::uint32_t length, std::uint64_t &value)
     
    static bool ExtractMotorola (const std::vector< std::uint8_t > &data, std::uint32_t startBit, std::uint32_t length, std::uint64_t &value)
     
    static std::int64_t SignExtend (std::uint64_t value, std::uint32_t bitLength)
     

    Detailed Description

    Runtime CAN decoder using prebuilt decode database.

    Definition at line 70 of file dbc_decoder.h.

    Member Function Documentation

    - -

    ◆ Decode()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    DecodedFrameValue DbcDecoder::Decode (const DecodeDatabase & database,
    const RawCanFrame & frame 
    ) const
    -
    -
    - -

    ◆ ExtractIntel()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool DbcDecoder::ExtractIntel (const std::vector< std::uint8_t > & data,
    std::uint32_t startBit,
    std::uint32_t length,
    std::uint64_t & value 
    )
    -
    -staticprivate
    -
    - -

    Definition at line 82 of file dbc_decoder.cpp.

    - -

    Referenced by ExtractUnsigned().

    - -
    -
    - -

    ◆ ExtractMotorola()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool DbcDecoder::ExtractMotorola (const std::vector< std::uint8_t > & data,
    std::uint32_t startBit,
    std::uint32_t length,
    std::uint64_t & value 
    )
    -
    -staticprivate
    -
    - -

    Definition at line 105 of file dbc_decoder.cpp.

    - -

    Referenced by ExtractUnsigned().

    - -
    -
    - -

    ◆ ExtractUnsigned()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool DbcDecoder::ExtractUnsigned (const std::vector< std::uint8_t > & data,
    const DecodeSignal & signal,
    std::uint64_t & value 
    )
    -
    -staticprivate
    -
    - -

    Definition at line 70 of file dbc_decoder.cpp.

    - -

    References DecodeSignal::byteOrder, ExtractIntel(), ExtractMotorola(), Intel, DecodeSignal::length, and DecodeSignal::startBit.

    - -

    Referenced by Decode().

    - -
    -

    ◆ FindFrame()

    @@ -324,49 +154,49 @@ Static Private Member Functions

    Definition at line 14 of file dbc_decoder.cpp.

    -

    References DecodeDatabase::frameIndexByKey, and DecodeDatabase::frames.

    -

    Referenced by Decode().

    - -

    ◆ SignExtend()

    + +

    ◆ Decode()

    - - - - - -
    - + - - + + - - + + - +
    std::int64_t DbcDecoder::SignExtend DecodedFrameValue DbcDecoder::Decode (std::uint64_t value, const DecodeDatabase & database,
    std::uint32_t bitLength const RawCanFrame & frame 
    ) const
    -
    -staticprivate
    -

    Definition at line 144 of file dbc_decoder.cpp.

    +

    Decode one raw CAN frame.

    +
    Parameters
    + + + +
    databaseRuntime decode database.
    frameRaw CAN frame.
    +
    +
    +
    Returns
    Decoded frame value.
    -

    Referenced by Decode().

    +

    Definition at line 31 of file dbc_decoder.cpp.

    + +

    References RawCanFrame::canId, RawCanFrame::data, DecodedSignalValue::definition, DecodedFrameValue::definition, FindFrame(), RawCanFrame::isExtended, DecodedSignalValue::valid, DecodedFrameValue::valid, and DecodeSignal::valueType.

    @@ -375,9 +205,13 @@ Static Private Member Functions
  • dbc_decoder.cpp
  • + - + diff --git a/docs/html/classDbcDecoder.js b/docs/html/classDbcDecoder.js new file mode 100644 index 0000000..e36dac7 --- /dev/null +++ b/docs/html/classDbcDecoder.js @@ -0,0 +1,5 @@ +var classDbcDecoder = +[ + [ "FindFrame", "classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da", null ], + [ "Decode", "classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7", null ] +]; \ No newline at end of file diff --git a/docs/html/classDbcParser-members.html b/docs/html/classDbcParser-members.html index 13cf41d..cf45c26 100644 --- a/docs/html/classDbcParser-members.html +++ b/docs/html/classDbcParser-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DbcParser Member List
    @@ -51,23 +89,14 @@

    This is the complete list of members for DbcParser, including all inherited members.

    - - - - - - - - - - - - - +
    FindFrameById(DbcDatabase &database, std::uint32_t canId, bool isExtended)DbcParserprivatestatic
    FindSignalByName(FrameInfo &frame, const std::string &signalName)DbcParserprivatestatic
    IsCommentLine(const std::string &line)DbcParserprivatestatic
    IsFrameLine(const std::string &line)DbcParserprivatestatic
    IsSignalLine(const std::string &line)DbcParserprivatestatic
    NormalizeCanId(std::uint32_t rawCanId, std::uint32_t &normalizedCanId, bool &isExtended)DbcParserprivatestatic
    ParseCommentLine(const std::string &line, DbcDatabase &database)DbcParserprivatestatic
    ParseFile(const std::string &filePath) constDbcParser
    ParseFrameLine(const std::string &line)DbcParserprivatestatic
    ParseSignalLine(const std::string &line)DbcParserprivatestatic
    SplitReceivers(const std::string &text)DbcParserprivatestatic
    Trim(const std::string &text)DbcParserprivatestatic
    TryExtractPgn(std::uint32_t canId, bool isExtended, bool &hasPgn)DbcParserprivatestatic
    ParseFile(const std::string &filePath) constDbcParser
    + - + diff --git a/docs/html/classDbcParser.html b/docs/html/classDbcParser.html index 95bb025..449ecd9 100644 --- a/docs/html/classDbcParser.html +++ b/docs/html/classDbcParser.html @@ -5,10 +5,17 @@ -DBC framework: DbcParser Class Reference +DBC Framework: DbcParser Class Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,27 +35,56 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + @@ -63,33 +100,6 @@ Public Member Functions DbcDatabase ParseFile (const std::string &filePath) const  Parse DBC file. More...
      - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Static Private Member Functions

    static bool IsFrameLine (const std::string &line)
     
    static bool IsSignalLine (const std::string &line)
     
    static bool IsCommentLine (const std::string &line)
     
    static std::string Trim (const std::string &text)
     
    static std::vector< std::string > SplitReceivers (const std::string &text)
     
    static std::uint32_t TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn)
     
    static void NormalizeCanId (std::uint32_t rawCanId, std::uint32_t &normalizedCanId, bool &isExtended)
     
    static FrameInfo ParseFrameLine (const std::string &line)
     
    static SignalInfo ParseSignalLine (const std::string &line)
     
    static void ParseCommentLine (const std::string &line, DbcDatabase &database)
     
    static FrameInfo * FindFrameById (DbcDatabase &database, std::uint32_t canId, bool isExtended)
     
    static SignalInfo * FindSignalByName (FrameInfo &frame, const std::string &signalName)
     

    Detailed Description

    Minimal DBC parser.

    @@ -107,274 +117,6 @@ Static Private Member Functions

    Definition at line 35 of file dbc_parser.h.

    Member Function Documentation

    - -

    ◆ FindFrameById()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    FrameInfo * DbcParser::FindFrameById (DbcDatabase & database,
    std::uint32_t canId,
    bool isExtended 
    )
    -
    -staticprivate
    -
    - -

    Definition at line 337 of file dbc_parser.cpp.

    - -

    References DbcDatabase::frames.

    - -

    Referenced by ParseCommentLine().

    - -
    -
    - -

    ◆ FindSignalByName()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    SignalInfo * DbcParser::FindSignalByName (FrameInfo & frame,
    const std::string & signalName 
    )
    -
    -staticprivate
    -
    - -

    Definition at line 349 of file dbc_parser.cpp.

    - -

    References FrameInfo::signals.

    - -

    Referenced by ParseCommentLine().

    - -
    -
    - -

    ◆ IsCommentLine()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool DbcParser::IsCommentLine (const std::string & line)
    -
    -staticprivate
    -
    - -

    Definition at line 79 of file dbc_parser.cpp.

    - -

    Referenced by ParseFile().

    - -
    -
    - -

    ◆ IsFrameLine()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool DbcParser::IsFrameLine (const std::string & line)
    -
    -staticprivate
    -
    - -

    Definition at line 71 of file dbc_parser.cpp.

    - -

    Referenced by ParseFile().

    - -
    -
    - -

    ◆ IsSignalLine()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool DbcParser::IsSignalLine (const std::string & line)
    -
    -staticprivate
    -
    - -

    Definition at line 75 of file dbc_parser.cpp.

    - -

    Referenced by ParseFile().

    - -
    -
    - -

    ◆ NormalizeCanId()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void DbcParser::NormalizeCanId (std::uint32_t rawCanId,
    std::uint32_t & normalizedCanId,
    bool & isExtended 
    )
    -
    -staticprivate
    -
    - -

    Definition at line 101 of file dbc_parser.cpp.

    - -

    Referenced by ParseCommentLine(), and ParseFrameLine().

    - -
    -
    - -

    ◆ ParseCommentLine()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void DbcParser::ParseCommentLine (const std::string & line,
    DbcDatabase & database 
    )
    -
    -staticprivate
    -
    - -

    Definition at line 274 of file dbc_parser.cpp.

    - -

    References FrameInfo::comment, SignalInfo::comment, FindFrameById(), FindSignalByName(), and NormalizeCanId().

    - -

    Referenced by ParseFile().

    - -
    -

    ◆ ParseFile()

    @@ -408,183 +150,7 @@ Static Private Member Functions

    Definition at line 40 of file dbc_parser.cpp.

    -

    References DbcDatabase::frames, IsCommentLine(), IsFrameLine(), IsSignalLine(), ParseCommentLine(), ParseFrameLine(), ParseSignalLine(), FrameInfo::signals, and Trim().

    - -

    Referenced by main().

    - -
    - - -

    ◆ ParseFrameLine()

    - -
    -
    - - - - - -
    - - - - - - - - -
    FrameInfo DbcParser::ParseFrameLine (const std::string & line)
    -
    -staticprivate
    -
    -
    - -

    ◆ ParseSignalLine()

    - -
    -
    - - - - - -
    - - - - - - - - -
    SignalInfo DbcParser::ParseSignalLine (const std::string & line)
    -
    -staticprivate
    -
    -
    - -

    ◆ SplitReceivers()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< std::string > DbcParser::SplitReceivers (const std::string & text)
    -
    -staticprivate
    -
    - -

    Definition at line 87 of file dbc_parser.cpp.

    - -

    References anonymous_namespace{dbc_parser.cpp}::TrimText().

    - -

    Referenced by ParseSignalLine().

    - -
    -
    - -

    ◆ Trim()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::string DbcParser::Trim (const std::string & text)
    -
    -staticprivate
    -
    - -

    Definition at line 83 of file dbc_parser.cpp.

    - -

    References anonymous_namespace{dbc_parser.cpp}::TrimText().

    - -

    Referenced by ParseFile().

    - -
    -
    - -

    ◆ TryExtractPgn()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    std::uint32_t DbcParser::TryExtractPgn (std::uint32_t canId,
    bool isExtended,
    bool & hasPgn 
    )
    -
    -staticprivate
    -
    - -

    Definition at line 118 of file dbc_parser.cpp.

    - -

    Referenced by ParseFrameLine().

    +

    References DbcDatabase::frames.

    @@ -593,9 +159,13 @@ Static Private Member Functions
  • dbc_parser.cpp
  • + - + diff --git a/docs/html/classDbcParser.js b/docs/html/classDbcParser.js new file mode 100644 index 0000000..46247c3 --- /dev/null +++ b/docs/html/classDbcParser.js @@ -0,0 +1,4 @@ +var classDbcParser = +[ + [ "ParseFile", "classDbcParser.html#aef72826942c9095d653fafa435855e56", null ] +]; \ No newline at end of file diff --git a/docs/html/classDbcTreeBuilder-members.html b/docs/html/classDbcTreeBuilder-members.html index 1c0bc40..46759e3 100644 --- a/docs/html/classDbcTreeBuilder-members.html +++ b/docs/html/classDbcTreeBuilder-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DbcTreeBuilder Member List
    @@ -53,9 +91,12 @@
    Build(const DbcDatabase &database) constDbcTreeBuilder
    + - + diff --git a/docs/html/classDbcTreeBuilder.html b/docs/html/classDbcTreeBuilder.html index fa81693..6003542 100644 --- a/docs/html/classDbcTreeBuilder.html +++ b/docs/html/classDbcTreeBuilder.html @@ -5,10 +5,17 @@ -DBC framework: DbcTreeBuilder Class Reference +DBC Framework: DbcTreeBuilder Class Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    Public Member Functions | @@ -95,9 +133,7 @@ Public Member Functions

    Definition at line 14 of file dbc_tree_builder.cpp.

    -

    References DbcDatabase::frames, and FrameInfo::signals.

    - -

    Referenced by main().

    +

    References DbcDatabase::frames.

    @@ -106,9 +142,13 @@ Public Member Functions
  • dbc_tree_builder.cpp
  • + - + diff --git a/docs/html/classDbcTreeBuilder.js b/docs/html/classDbcTreeBuilder.js new file mode 100644 index 0000000..b61edc1 --- /dev/null +++ b/docs/html/classDbcTreeBuilder.js @@ -0,0 +1,4 @@ +var classDbcTreeBuilder = +[ + [ "Build", "classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b", null ] +]; \ No newline at end of file diff --git a/docs/html/classTreeNode-members.html b/docs/html/classTreeNode-members.html index 4095d06..18ef360 100644 --- a/docs/html/classTreeNode-members.html +++ b/docs/html/classTreeNode-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    TreeNode Member List
    @@ -59,23 +97,21 @@ GetName() constTreeNode GetSignal() constTreeNode GetType() constTreeNode - m_childrenTreeNodeprivate - m_frameTreeNodeprivate - m_nameTreeNodeprivate - m_signalTreeNodeprivate - m_typeTreeNodeprivate - operator=(const TreeNode &)=deleteTreeNode - operator=(TreeNode &&)=defaultTreeNode - TreeNode()TreeNode - TreeNode(const FrameInfo &frame)TreeNodeexplicit - TreeNode(const SignalInfo &signal)TreeNodeexplicit - TreeNode(const TreeNode &)=deleteTreeNode - TreeNode(TreeNode &&)=defaultTreeNode - ~TreeNode()=defaultTreeNode + operator=(const TreeNode &)=delete (defined in TreeNode)TreeNode + operator=(TreeNode &&)=default (defined in TreeNode)TreeNode + TreeNode()TreeNode + TreeNode(const FrameInfo &frame)TreeNodeexplicit + TreeNode(const SignalInfo &signal)TreeNodeexplicit + TreeNode(const TreeNode &)=delete (defined in TreeNode)TreeNode + TreeNode(TreeNode &&)=default (defined in TreeNode)TreeNode + ~TreeNode()=default (defined in TreeNode)TreeNode
    + - + diff --git a/docs/html/classTreeNode.html b/docs/html/classTreeNode.html index e414e89..379fcae 100644 --- a/docs/html/classTreeNode.html +++ b/docs/html/classTreeNode.html @@ -5,10 +5,17 @@ -DBC framework: TreeNode Class Reference +DBC Framework: TreeNode Class Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,27 +35,56 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + @@ -69,15 +106,17 @@ Public Member Functions  TreeNode (const SignalInfo &signal)  Create signal node. More...
      - ~TreeNode ()=default -  - TreeNode (const TreeNode &)=delete + + TreeNode (const TreeNode &)=delete   -TreeNode & operator= (const TreeNode &)=delete + +TreeNode & operator= (const TreeNode &)=delete   - TreeNode (TreeNode &&)=default + + TreeNode (TreeNode &&)=default   -TreeNode & operator= (TreeNode &&)=default + +TreeNode & operator= (TreeNode &&)=default   void AddChild (std::unique_ptr< TreeNode > child)  Add child node. More...
    @@ -103,19 +142,6 @@ Public Member Functions const SignalInfo * GetSignal () const  Get signal payload if node is signal. More...
      - - - - - - - - - - - -

    -Private Attributes

    NodeType m_type
     
    std::string m_name
     
    std::vector< std::unique_ptr< TreeNode > > m_children
     
    std::unique_ptr< FrameInfo > m_frame
     
    std::unique_ptr< SignalInfo > m_signal
     

    Detailed Description

    Tree node for later use in model/view or other hierarchy consumers.

    @@ -123,7 +149,7 @@ Private Attributes

    Definition at line 35 of file tree_node.h.

    Constructor & Destructor Documentation

    -

    ◆ TreeNode() [1/5]

    +

    ◆ TreeNode() [1/3]

    @@ -141,12 +167,10 @@ Private Attributes

    Definition at line 14 of file tree_node.cpp.

    -

    References Root.

    -
    -

    ◆ TreeNode() [2/5]

    +

    ◆ TreeNode() [2/3]

    @@ -179,12 +203,10 @@ Private Attributes

    Definition at line 22 of file tree_node.cpp.

    -

    References Frame.

    -
    -

    ◆ TreeNode() [3/5]

    +

    ◆ TreeNode() [3/3]

    @@ -217,85 +239,6 @@ Private Attributes

    Definition at line 30 of file tree_node.cpp.

    -

    References Signal.

    - -
    -
    - -

    ◆ ~TreeNode()

    - -
    -
    - - - - - -
    - - - - - - - -
    TreeNode::~TreeNode ()
    -
    -default
    -
    - -
    -
    - -

    ◆ TreeNode() [4/5]

    - -
    -
    - - - - - -
    - - - - - - - - -
    TreeNode::TreeNode (const TreeNode & )
    -
    -delete
    -
    - -
    -
    - -

    ◆ TreeNode() [5/5]

    - -
    -
    - - - - - -
    - - - - - - - - -
    TreeNode::TreeNode (TreeNode && )
    -
    -default
    -
    -

    Member Function Documentation

    @@ -325,43 +268,32 @@ Private Attributes

    Definition at line 38 of file tree_node.cpp.

    -

    References m_children.

    -
    - -

    ◆ GetChild() [1/2]

    + +

    ◆ GetChildCount()

    - + - - - + +
    TreeNode * TreeNode::GetChild std::size_t TreeNode::GetChildCount (std::size_t index)) const
    -

    Get mutable child by index.

    -
    Parameters
    - - -
    indexChild index.
    -
    -
    -
    Returns
    Child pointer or nullptr if index is invalid.
    +

    Get child count.

    +
    Returns
    Number of children.
    -

    Definition at line 54 of file tree_node.cpp.

    - -

    References m_children.

    +

    Definition at line 43 of file tree_node.cpp.

    -

    ◆ GetChild() [2/2]

    +

    ◆ GetChild() [1/2]

    @@ -387,113 +319,34 @@ Private Attributes

    Definition at line 47 of file tree_node.cpp.

    -

    References m_children.

    - -

    Referenced by PrintTree().

    -
    - -

    ◆ GetChildCount()

    + +

    ◆ GetChild() [2/2]

    - + - - + + +
    std::size_t TreeNode::GetChildCount TreeNode * TreeNode::GetChild () conststd::size_t index)
    -

    Get child count.

    -
    Returns
    Number of children.
    +

    Get mutable child by index.

    +
    Parameters
    + + +
    indexChild index.
    +
    +
    +
    Returns
    Child pointer or nullptr if index is invalid.
    -

    Definition at line 43 of file tree_node.cpp.

    - -

    References m_children.

    - -

    Referenced by PrintTree().

    - -
    -
    - -

    ◆ GetFrame()

    - -
    -
    - - - - - - - -
    const FrameInfo * TreeNode::GetFrame () const
    -
    - -

    Get frame payload if node is frame.

    -
    Returns
    Pointer to frame info or nullptr.
    - -

    Definition at line 69 of file tree_node.cpp.

    - -

    References m_frame.

    - -

    Referenced by PrintTree().

    - -
    -
    - -

    ◆ GetName()

    - -
    -
    - - - - - - - -
    const std::string & TreeNode::GetName () const
    -
    - -

    Get display name.

    -
    Returns
    Node name.
    - -

    Definition at line 65 of file tree_node.cpp.

    - -

    References m_name.

    - -

    Referenced by PrintTree().

    - -
    -
    - -

    ◆ GetSignal()

    - -
    -
    - - - - - - - -
    const SignalInfo * TreeNode::GetSignal () const
    -
    - -

    Get signal payload if node is signal.

    -
    Returns
    Pointer to signal info or nullptr.
    - -

    Definition at line 73 of file tree_node.cpp.

    - -

    References m_signal.

    - -

    Referenced by PrintTree().

    +

    Definition at line 54 of file tree_node.cpp.

    @@ -517,192 +370,71 @@ Private Attributes

    Definition at line 61 of file tree_node.cpp.

    -

    References m_type.

    - -

    Referenced by PrintTree().

    - - -

    ◆ operator=() [1/2]

    + +

    ◆ GetName()

    - - - - - -
    - + - - +
    TreeNode & TreeNode::operator= const std::string & TreeNode::GetName (const TreeNode &  ) const
    -
    -delete
    +

    Get display name.

    +
    Returns
    Node name.
    + +

    Definition at line 65 of file tree_node.cpp.

    +
    - -

    ◆ operator=() [2/2]

    + +

    ◆ GetFrame()

    - - - - - -
    - + - - +
    TreeNode & TreeNode::operator= const FrameInfo * TreeNode::GetFrame (TreeNode &&  ) const
    -
    -default
    +

    Get frame payload if node is frame.

    +
    Returns
    Pointer to frame info or nullptr.
    + +

    Definition at line 69 of file tree_node.cpp.

    +
    -

    Member Data Documentation

    - -

    ◆ m_children

    + +

    ◆ GetSignal()

    - - - - - -
    - + + + +
    std::vector<std::unique_ptr<TreeNode> > TreeNode::m_childrenconst SignalInfo * TreeNode::GetSignal () const
    -
    -private
    -

    Definition at line 115 of file tree_node.h.

    +

    Get signal payload if node is signal.

    +
    Returns
    Pointer to signal info or nullptr.
    -

    Referenced by AddChild(), GetChild(), and GetChildCount().

    - -
    -
    - -

    ◆ m_frame

    - -
    -
    - - - - - -
    - - - - -
    std::unique_ptr<FrameInfo> TreeNode::m_frame
    -
    -private
    -
    - -

    Definition at line 116 of file tree_node.h.

    - -

    Referenced by GetFrame().

    - -
    -
    - -

    ◆ m_name

    - -
    -
    - - - - - -
    - - - - -
    std::string TreeNode::m_name
    -
    -private
    -
    - -

    Definition at line 114 of file tree_node.h.

    - -

    Referenced by GetName().

    - -
    -
    - -

    ◆ m_signal

    - -
    -
    - - - - - -
    - - - - -
    std::unique_ptr<SignalInfo> TreeNode::m_signal
    -
    -private
    -
    - -

    Definition at line 117 of file tree_node.h.

    - -

    Referenced by GetSignal().

    - -
    -
    - -

    ◆ m_type

    - -
    -
    - - - - - -
    - - - - -
    NodeType TreeNode::m_type
    -
    -private
    -
    - -

    Definition at line 113 of file tree_node.h.

    - -

    Referenced by GetType().

    +

    Definition at line 73 of file tree_node.cpp.

    @@ -711,9 +443,13 @@ Private Attributes
  • tree_node.cpp
  • + - + diff --git a/docs/html/classTreeNode.js b/docs/html/classTreeNode.js new file mode 100644 index 0000000..edfa15e --- /dev/null +++ b/docs/html/classTreeNode.js @@ -0,0 +1,14 @@ +var classTreeNode = +[ + [ "TreeNode", "classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d", null ], + [ "TreeNode", "classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc", null ], + [ "TreeNode", "classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae", null ], + [ "AddChild", "classTreeNode.html#a6161f2ebb92184eab4215d121870e788", null ], + [ "GetChildCount", "classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea", null ], + [ "GetChild", "classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6", null ], + [ "GetChild", "classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f", null ], + [ "GetType", "classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9", null ], + [ "GetName", "classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18", null ], + [ "GetFrame", "classTreeNode.html#afc503b40004764163605d6dbdb4ef811", null ], + [ "GetSignal", "classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1", null ] +]; \ No newline at end of file diff --git a/docs/html/classes.html b/docs/html/classes.html index 13d90c1..bada205 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -5,10 +5,17 @@ -DBC framework: Class Index +DBC Framework: Class Index + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    Class Index
    @@ -67,9 +105,12 @@
    TreeNode
    + - + diff --git a/docs/html/dbc.qch b/docs/html/dbc.qch index 1a4d077..72a7fb2 100644 Binary files a/docs/html/dbc.qch and b/docs/html/dbc.qch differ diff --git a/docs/html/dbc__database_8h.html b/docs/html/dbc__database_8h.html index 8165570..1c08ec9 100644 --- a/docs/html/dbc__database_8h.html +++ b/docs/html/dbc__database_8h.html @@ -5,10 +5,17 @@ -DBC framework: dbc_database.h File Reference +DBC Framework: dbc_database.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    @@ -69,9 +108,13 @@ Classes

    Definition in file dbc_database.h.

    + - + diff --git a/docs/html/dbc__database_8h.js b/docs/html/dbc__database_8h.js new file mode 100644 index 0000000..1514ec6 --- /dev/null +++ b/docs/html/dbc__database_8h.js @@ -0,0 +1,4 @@ +var dbc__database_8h = +[ + [ "DbcDatabase", "structDbcDatabase.html", "structDbcDatabase" ] +]; \ No newline at end of file diff --git a/docs/html/dbc__database_8h_source.html b/docs/html/dbc__database_8h_source.html index 614d235..d076836 100644 --- a/docs/html/dbc__database_8h_source.html +++ b/docs/html/dbc__database_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_database.h Source File +DBC Framework: dbc_database.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,49 +35,67 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_database.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_database.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef DBC_DATABASE_H
    13#define DBC_DATABASE_H
    14
    15#include <vector>
    16
    17#include "frame_info.h"
    -
    18
    -
    19/**
    -
    20 * @brief Parsed DBC content stored in a simple internal form.
    -
    21 */
    +
    18
    -
    23 std::vector<FrameInfo> frames; /**< All frames found in the DBC file. */
    +
    23 std::vector<FrameInfo> frames;
    24};
    25
    26#endif /* DBC_DATABASE_H */
    @@ -77,9 +103,13 @@
    Parsed DBC content stored in a simple internal form.
    Definition: dbc_database.h:22
    std::vector< FrameInfo > frames
    Definition: dbc_database.h:23
    +
    - + diff --git a/docs/html/dbc__decode__builder_8cpp.html b/docs/html/dbc__decode__builder_8cpp.html index 790675e..f04e5d1 100644 --- a/docs/html/dbc__decode__builder_8cpp.html +++ b/docs/html/dbc__decode__builder_8cpp.html @@ -5,10 +5,17 @@ -DBC framework: dbc_decode_builder.cpp File Reference +DBC Framework: dbc_decode_builder.cpp File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_decode_builder.cpp File Reference
    @@ -59,9 +98,13 @@

    Definition in file dbc_decode_builder.cpp.

    + - + diff --git a/docs/html/dbc__decode__builder_8cpp_source.html b/docs/html/dbc__decode__builder_8cpp_source.html index a7abccf..69dab41 100644 --- a/docs/html/dbc__decode__builder_8cpp_source.html +++ b/docs/html/dbc__decode__builder_8cpp_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_decode_builder.cpp Source File +DBC Framework: dbc_decode_builder.cpp Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_decode_builder.cpp
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_decode_builder.cpp
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#include "dbc_decode_builder.h"
    13
    @@ -76,15 +105,15 @@
    27 targetFrame.transmitter = sourceFrame.transmitter;
    28 targetFrame.comment = sourceFrame.comment;
    29
    -
    30 for (std::size_t signalIndex = 0U; signalIndex < sourceFrame.signals.size(); ++signalIndex) {
    -
    31 const SignalInfo &sourceSignal = sourceFrame.signals[signalIndex];
    +
    30 for (std::size_t signalIndex = 0U; signalIndex < sourceFrame.signals.size(); ++signalIndex) {
    +
    31 const SignalInfo &sourceSignal = sourceFrame.signals[signalIndex];
    32 DecodeSignal targetSignal;
    33
    34 targetSignal.name = sourceSignal.name;
    35 targetSignal.startBit = sourceSignal.startBit;
    36 targetSignal.length = sourceSignal.length;
    -
    37 targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;
    -
    38 targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;
    +
    37 targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;
    +
    38 targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;
    39 targetSignal.factor = sourceSignal.factor;
    40 targetSignal.offset = sourceSignal.offset;
    41 targetSignal.minimum = sourceSignal.minimum;
    @@ -93,32 +122,25 @@
    44 targetSignal.receivers = sourceSignal.receivers;
    45 targetSignal.comment = sourceSignal.comment;
    46
    -
    47 targetFrame.signals.push_back (targetSignal);
    +
    47 targetFrame.signals.push_back (targetSignal);
    48 }
    49
    -
    50 result.frames.push_back (targetFrame);
    -
    51 result.frameIndexByKey[FrameKey (targetFrame.canId, targetFrame.isExtended)] =
    -
    52 result.frames.size() - 1U;
    +
    50 result.frames.push_back (targetFrame);
    +
    51 result.frameIndexByKey[FrameKey (targetFrame.canId, targetFrame.isExtended)] =
    +
    52 result.frames.size() - 1U;
    53 }
    54
    55 return result;
    56}
    DecodeDatabase Build(const DbcDatabase &source) const
    Build runtime decode database.
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    - - - -
    Parsed DBC content stored in a simple internal form.
    Definition: dbc_database.h:22
    std::vector< FrameInfo > frames
    Definition: dbc_database.h:23
    Runtime decode database with fast lookup by CAN ID.
    -
    std::vector< DecodeFrame > frames
    -
    std::unordered_map< FrameKey, std::size_t, FrameKeyHasher > frameIndexByKey
    Runtime-ready frame definition.
    std::uint32_t pgn
    std::string comment
    -
    std::vector< DecodeSignal > signals
    std::uint8_t dlc
    std::uint32_t canId
    @@ -141,7 +163,6 @@
    bool isExtended
    Definition: frame_info.h:27
    bool hasPgn
    Definition: frame_info.h:29
    std::string transmitter
    Definition: frame_info.h:31
    -
    std::vector< SignalInfo > signals
    Definition: frame_info.h:33
    std::uint8_t dlc
    Definition: frame_info.h:30
    std::string name
    Definition: frame_info.h:25
    std::string comment
    Definition: frame_info.h:32
    @@ -162,9 +183,13 @@
    double factor
    Definition: signal_info.h:28
    bool isLittleEndian
    Definition: signal_info.h:26
    +
    - + diff --git a/docs/html/dbc__decode__builder_8h.html b/docs/html/dbc__decode__builder_8h.html index e22e560..5830c0e 100644 --- a/docs/html/dbc__decode__builder_8h.html +++ b/docs/html/dbc__decode__builder_8h.html @@ -5,10 +5,17 @@ -DBC framework: dbc_decode_builder.h File Reference +DBC Framework: dbc_decode_builder.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    @@ -69,9 +108,13 @@ Classes

    Definition in file dbc_decode_builder.h.

    + - + diff --git a/docs/html/dbc__decode__builder_8h.js b/docs/html/dbc__decode__builder_8h.js new file mode 100644 index 0000000..a7a4bc7 --- /dev/null +++ b/docs/html/dbc__decode__builder_8h.js @@ -0,0 +1,4 @@ +var dbc__decode__builder_8h = +[ + [ "DbcDecodeBuilder", "classDbcDecodeBuilder.html", "classDbcDecodeBuilder" ] +]; \ No newline at end of file diff --git a/docs/html/dbc__decode__builder_8h_source.html b/docs/html/dbc__decode__builder_8h_source.html index d502e09..f8d622d 100644 --- a/docs/html/dbc__decode__builder_8h_source.html +++ b/docs/html/dbc__decode__builder_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_decode_builder.h Source File +DBC Framework: dbc_decode_builder.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,53 +35,66 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_decode_builder.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_decode_builder.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef DBC_DECODE_BUILDER_H
    13#define DBC_DECODE_BUILDER_H
    14
    15#include "dbc_database.h"
    16#include "decode_database.h"
    -
    17
    -
    18/**
    -
    19 * @brief Converts parsed DBC data into runtime decode database.
    -
    20 */
    +
    17
    -
    22 public:
    -
    23 /**
    -
    24 * @brief Build runtime decode database.
    -
    25 * @param source Parsed DBC database.
    -
    26 * @return Runtime-ready decode database.
    -
    27 */
    +
    22 public:
    28 DecodeDatabase Build (const DbcDatabase &source) const;
    29};
    30
    @@ -85,9 +106,13 @@
    Parsed DBC content stored in a simple internal form.
    Definition: dbc_database.h:22
    Runtime decode database with fast lookup by CAN ID.
    +
    - + diff --git a/docs/html/dbc__decoder_8cpp.html b/docs/html/dbc__decoder_8cpp.html index 3606b3a..4c76fc0 100644 --- a/docs/html/dbc__decoder_8cpp.html +++ b/docs/html/dbc__decoder_8cpp.html @@ -5,10 +5,17 @@ -DBC framework: dbc_decoder.cpp File Reference +DBC Framework: dbc_decoder.cpp File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_decoder.cpp File Reference
    @@ -59,9 +98,13 @@

    Definition in file dbc_decoder.cpp.

    + - + diff --git a/docs/html/dbc__decoder_8cpp_source.html b/docs/html/dbc__decoder_8cpp_source.html index e212796..5e4921e 100644 --- a/docs/html/dbc__decoder_8cpp_source.html +++ b/docs/html/dbc__decoder_8cpp_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_decoder.cpp Source File +DBC Framework: dbc_decoder.cpp Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_decoder.cpp
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_decoder.cpp
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#include "dbc_decoder.h"
    13
    @@ -65,16 +94,16 @@
    16 bool isExtended) const {
    17 const FrameKey key (canId, isExtended);
    18 const std::unordered_map<FrameKey, std::size_t, FrameKeyHasher>::const_iterator it =
    -
    19 database.frameIndexByKey.find (key);
    +
    19 database.frameIndexByKey.find (key);
    20
    -
    21 if (it == database.frameIndexByKey.end())
    +
    21 if (it == database.frameIndexByKey.end())
    22 return nullptr;
    23
    24 const std::size_t index = it->second;
    -
    25 if (index >= database.frames.size())
    +
    25 if (index >= database.frames.size())
    26 return nullptr;
    27
    -
    28 return &database.frames[index];
    +
    28 return &database.frames[index];
    29}
    30
    @@ -88,21 +117,21 @@
    39 result.definition = definition;
    40 result.valid = true;
    41
    -
    42 for (std::size_t signalIndex = 0U; signalIndex < definition->signals.size(); ++signalIndex) {
    -
    43 const DecodeSignal &signal = definition->signals[signalIndex];
    +
    42 for (std::size_t signalIndex = 0U; signalIndex < definition->signals.size(); ++signalIndex) {
    +
    43 const DecodeSignal &signal = definition->signals[signalIndex];
    44 DecodedSignalValue decoded;
    45 std::uint64_t unsignedValue = 0U;
    46
    47 decoded.definition = &signal;
    48
    -
    49 if (!ExtractUnsigned (frame.data, signal, unsignedValue)) {
    +
    49 if (!ExtractUnsigned (frame.data, signal, unsignedValue)) {
    50 decoded.valid = false;
    -
    51 result.signals.push_back (decoded);
    +
    51 result.signals.push_back (decoded);
    52 continue;
    53 }
    54
    -
    55 if (signal.valueType == ValueType::Signed)
    -
    56 decoded.rawValue = SignExtend (unsignedValue, signal.length);
    +
    55 if (signal.valueType == ValueType::Signed)
    +
    56 decoded.rawValue = SignExtend (unsignedValue, signal.length);
    57 else
    58 decoded.rawValue = static_cast<std::int64_t> (unsignedValue);
    59
    @@ -110,25 +139,25 @@
    61 (static_cast<double> (decoded.rawValue) * signal.factor) + signal.offset;
    62 decoded.valid = true;
    63
    -
    64 result.signals.push_back (decoded);
    +
    64 result.signals.push_back (decoded);
    65 }
    66
    67 return result;
    68}
    69
    -
    70bool DbcDecoder::ExtractUnsigned (const std::vector<std::uint8_t> &data,
    +
    70bool DbcDecoder::ExtractUnsigned (const std::vector<std::uint8_t> &data,
    71 const DecodeSignal &signal,
    72 std::uint64_t &value) {
    73 if ((signal.length == 0U) || (signal.length > 64U))
    74 return false;
    75
    -
    76 if (signal.byteOrder == ByteOrder::Intel)
    -
    77 return ExtractIntel (data, signal.startBit, signal.length, value);
    +
    76 if (signal.byteOrder == ByteOrder::Intel)
    +
    77 return ExtractIntel (data, signal.startBit, signal.length, value);
    78
    -
    79 return ExtractMotorola (data, signal.startBit, signal.length, value);
    +
    79 return ExtractMotorola (data, signal.startBit, signal.length, value);
    80}
    81
    -
    82bool DbcDecoder::ExtractIntel (const std::vector<std::uint8_t> &data,
    +
    82bool DbcDecoder::ExtractIntel (const std::vector<std::uint8_t> &data,
    83 std::uint32_t startBit,
    84 std::uint32_t length,
    85 std::uint64_t &value) {
    @@ -151,7 +180,7 @@
    102 return true;
    103}
    104
    -
    105bool DbcDecoder::ExtractMotorola (const std::vector<std::uint8_t> &data,
    +
    105bool DbcDecoder::ExtractMotorola (const std::vector<std::uint8_t> &data,
    106 std::uint32_t startBit,
    107 std::uint32_t length,
    108 std::uint64_t &value) {
    @@ -190,7 +219,7 @@
    141 return true;
    142}
    143
    -
    144std::int64_t DbcDecoder::SignExtend (std::uint64_t value, std::uint32_t bitLength) {
    +
    144std::int64_t DbcDecoder::SignExtend (std::uint64_t value, std::uint32_t bitLength) {
    145 if ((bitLength == 0U) || (bitLength >= 64U))
    146 return static_cast<std::int64_t> (value);
    147
    @@ -204,20 +233,11 @@
    155
    156 return static_cast<std::int64_t> (value | (~valueMask));
    157}
    -
    static bool ExtractUnsigned(const std::vector< std::uint8_t > &data, const DecodeSignal &signal, std::uint64_t &value)
    Definition: dbc_decoder.cpp:70
    DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const
    Decode one raw CAN frame.
    Definition: dbc_decoder.cpp:31
    -
    static std::int64_t SignExtend(std::uint64_t value, std::uint32_t bitLength)
    const DecodeFrame * FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const
    Find frame definition by CAN ID.
    Definition: dbc_decoder.cpp:14
    -
    static bool ExtractIntel(const std::vector< std::uint8_t > &data, std::uint32_t startBit, std::uint32_t length, std::uint64_t &value)
    Definition: dbc_decoder.cpp:82
    -
    static bool ExtractMotorola(const std::vector< std::uint8_t > &data, std::uint32_t startBit, std::uint32_t length, std::uint64_t &value)
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    - -
    Runtime decode database with fast lookup by CAN ID.
    -
    std::vector< DecodeFrame > frames
    -
    std::unordered_map< FrameKey, std::size_t, FrameKeyHasher > frameIndexByKey
    Runtime-ready frame definition.
    -
    std::vector< DecodeSignal > signals
    Runtime-ready signal definition.
    @@ -228,7 +248,6 @@
    Fully decoded frame.
    Definition: dbc_decoder.h:55
    const DecodeFrame * definition
    Definition: dbc_decoder.h:56
    -
    std::vector< DecodedSignalValue > signals
    Definition: dbc_decoder.h:57
    One decoded signal value.
    Definition: dbc_decoder.h:38
    std::int64_t rawValue
    Definition: dbc_decoder.h:40
    @@ -240,9 +259,13 @@
    std::uint32_t canId
    Definition: dbc_decoder.h:24
    bool isExtended
    Definition: dbc_decoder.h:25
    +
    - + diff --git a/docs/html/dbc__decoder_8h.html b/docs/html/dbc__decoder_8h.html index 6cc42ab..c2e4e03 100644 --- a/docs/html/dbc__decoder_8h.html +++ b/docs/html/dbc__decoder_8h.html @@ -5,10 +5,17 @@ -DBC framework: dbc_decoder.h File Reference +DBC Framework: dbc_decoder.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    @@ -79,9 +118,13 @@ Classes

    Definition in file dbc_decoder.h.

    + - + diff --git a/docs/html/dbc__decoder_8h.js b/docs/html/dbc__decoder_8h.js new file mode 100644 index 0000000..b9711cc --- /dev/null +++ b/docs/html/dbc__decoder_8h.js @@ -0,0 +1,7 @@ +var dbc__decoder_8h = +[ + [ "RawCanFrame", "structRawCanFrame.html", "structRawCanFrame" ], + [ "DecodedSignalValue", "structDecodedSignalValue.html", "structDecodedSignalValue" ], + [ "DecodedFrameValue", "structDecodedFrameValue.html", "structDecodedFrameValue" ], + [ "DbcDecoder", "classDbcDecoder.html", "classDbcDecoder" ] +]; \ No newline at end of file diff --git a/docs/html/dbc__decoder_8h_source.html b/docs/html/dbc__decoder_8h_source.html index c7beeeb..f765efb 100644 --- a/docs/html/dbc__decoder_8h_source.html +++ b/docs/html/dbc__decoder_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_decoder.h Source File +DBC Framework: dbc_decoder.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_decoder.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_decoder.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef DBC_DECODER_H
    13#define DBC_DECODER_H
    14
    @@ -65,129 +94,97 @@
    16#include <cstdint>
    17
    18#include "decode_database.h"
    -
    19
    -
    20/**
    -
    21 * @brief Raw CAN frame used for runtime or trace decoding.
    -
    22 */
    +
    19
    -
    24 std::uint32_t canId; /**< Normalized CAN ID. */
    -
    25 bool isExtended; /**< true for extended frame. */
    -
    26 std::vector<std::uint8_t> data; /**< Payload bytes. */
    -
    27
    - +
    24 std::uint32_t canId;
    + +
    26 std::vector<std::uint8_t> data;
    +
    29 : canId (0U)
    30 , isExtended (false)
    31 , data() {
    32 }
    33};
    -
    34
    -
    35/**
    -
    36 * @brief One decoded signal value.
    -
    37 */
    +
    34
    -
    39 const DecodeSignal *definition; /**< Signal definition. */
    -
    40 std::int64_t rawValue; /**< Extracted raw integer value. */
    -
    41 double physicalValue; /**< Converted physical value. */
    -
    42 bool valid; /**< true if decoding succeeded. */
    -
    43
    - + +
    40 std::int64_t rawValue;
    + +
    42 bool valid;
    +
    45 : definition (nullptr)
    46 , rawValue (0)
    47 , physicalValue (0.0)
    48 , valid (false) {
    49 }
    50};
    -
    51
    -
    52/**
    -
    53 * @brief Fully decoded frame.
    -
    54 */
    +
    51
    -
    56 const DecodeFrame *definition; /**< Frame definition. */
    -
    57 std::vector<DecodedSignalValue> signals; /**< Decoded signal values. */
    -
    58 bool valid; /**< true if frame was matched. */
    -
    59
    - + +
    57 std::vector<DecodedSignalValue> signals;
    +
    58 bool valid;
    +
    61 : definition (nullptr)
    -
    62 , signals()
    +
    62 , signals()
    63 , valid (false) {
    64 }
    65};
    -
    66
    -
    67/**
    -
    68 * @brief Runtime CAN decoder using prebuilt decode database.
    -
    69 */
    +
    66
    -
    71 public:
    -
    72 /**
    -
    73 * @brief Find frame definition by CAN ID.
    -
    74 * @param database Runtime decode database.
    -
    75 * @param canId Normalized CAN ID.
    -
    76 * @param isExtended true for extended frame.
    -
    77 * @return Pointer to frame definition or nullptr.
    -
    78 */
    +
    71 public:
    79 const DecodeFrame *FindFrame (const DecodeDatabase &database,
    80 std::uint32_t canId,
    81 bool isExtended) const;
    -
    82
    -
    83 /**
    -
    84 * @brief Decode one raw CAN frame.
    -
    85 * @param database Runtime decode database.
    -
    86 * @param frame Raw CAN frame.
    -
    87 * @return Decoded frame value.
    -
    88 */
    +
    82
    90 const RawCanFrame &frame) const;
    91
    92 private:
    -
    93 static bool ExtractUnsigned (const std::vector<std::uint8_t> &data,
    +
    93 static bool ExtractUnsigned (const std::vector<std::uint8_t> &data,
    94 const DecodeSignal &signal,
    95 std::uint64_t &value);
    96
    -
    97 static bool ExtractIntel (const std::vector<std::uint8_t> &data,
    +
    97 static bool ExtractIntel (const std::vector<std::uint8_t> &data,
    98 std::uint32_t startBit,
    99 std::uint32_t length,
    100 std::uint64_t &value);
    101
    -
    102 static bool ExtractMotorola (const std::vector<std::uint8_t> &data,
    +
    102 static bool ExtractMotorola (const std::vector<std::uint8_t> &data,
    103 std::uint32_t startBit,
    104 std::uint32_t length,
    105 std::uint64_t &value);
    106
    -
    107 static std::int64_t SignExtend (std::uint64_t value, std::uint32_t bitLength);
    +
    107 static std::int64_t SignExtend (std::uint64_t value, std::uint32_t bitLength);
    108};
    109
    110#endif /* DBC_DECODER_H */
    Runtime CAN decoder using prebuilt decode database.
    Definition: dbc_decoder.h:70
    -
    static bool ExtractUnsigned(const std::vector< std::uint8_t > &data, const DecodeSignal &signal, std::uint64_t &value)
    Definition: dbc_decoder.cpp:70
    DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const
    Decode one raw CAN frame.
    Definition: dbc_decoder.cpp:31
    -
    static std::int64_t SignExtend(std::uint64_t value, std::uint32_t bitLength)
    const DecodeFrame * FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const
    Find frame definition by CAN ID.
    Definition: dbc_decoder.cpp:14
    -
    static bool ExtractIntel(const std::vector< std::uint8_t > &data, std::uint32_t startBit, std::uint32_t length, std::uint64_t &value)
    Definition: dbc_decoder.cpp:82
    -
    static bool ExtractMotorola(const std::vector< std::uint8_t > &data, std::uint32_t startBit, std::uint32_t length, std::uint64_t &value)
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    Runtime decode database with fast lookup by CAN ID.
    Runtime-ready frame definition.
    Runtime-ready signal definition.
    Fully decoded frame.
    Definition: dbc_decoder.h:55
    -
    const DecodeFrame * definition
    Definition: dbc_decoder.h:56
    -
    std::vector< DecodedSignalValue > signals
    Definition: dbc_decoder.h:57
    One decoded signal value.
    Definition: dbc_decoder.h:38
    -
    std::int64_t rawValue
    Definition: dbc_decoder.h:40
    const DecodeSignal * definition
    Definition: dbc_decoder.h:39
    Raw CAN frame used for runtime or trace decoding.
    Definition: dbc_decoder.h:23
    std::vector< std::uint8_t > data
    Definition: dbc_decoder.h:26
    -
    std::uint32_t canId
    Definition: dbc_decoder.h:24
    bool isExtended
    Definition: dbc_decoder.h:25
    +
    - + diff --git a/docs/html/dbc__parser_8cpp.html b/docs/html/dbc__parser_8cpp.html index 167e655..f943b59 100644 --- a/docs/html/dbc__parser_8cpp.html +++ b/docs/html/dbc__parser_8cpp.html @@ -5,10 +5,17 @@ -DBC framework: dbc_parser.cpp File Reference +DBC Framework: dbc_parser.cpp File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,26 +35,54 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    -
    dbc_parser.cpp File Reference
    @@ -60,27 +96,19 @@ #include <cctype>

    Go to the source code of this file.

    - - - - -

    -Namespaces

    namespace  anonymous_namespace{dbc_parser.cpp}
     
    - - - - -

    -Functions

    std::string anonymous_namespace{dbc_parser.cpp}::TrimText (const std::string &text)
     Remove leading and trailing spaces. More...
     

    Detailed Description

    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

    Licensed under the MIT License. See LICENSE file in the project root for full license text.

    Definition in file dbc_parser.cpp.

    + - + diff --git a/docs/html/dbc__parser_8cpp_source.html b/docs/html/dbc__parser_8cpp_source.html index 2f502d5..b98cb34 100644 --- a/docs/html/dbc__parser_8cpp_source.html +++ b/docs/html/dbc__parser_8cpp_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_parser.cpp Source File +DBC Framework: dbc_parser.cpp Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_parser.cpp
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_parser.cpp
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#include "dbc_parser.h"
    13
    14#include <fstream>
    @@ -65,13 +94,8 @@
    16#include <stdexcept>
    17#include <cctype>
    18
    -
    19namespace {
    -
    20 /**
    -
    21 * @brief Remove leading and trailing spaces.
    -
    22 * @param text Input text.
    -
    23 * @return Trimmed text.
    -
    24 */
    -
    25 std::string TrimText (const std::string &text) {
    +
    19namespace {
    +
    25 std::string TrimText (const std::string &text) {
    26 std::string::size_type begin = 0U;
    27 while ((begin < text.size()) &&
    28 std::isspace (static_cast<unsigned char> (text[begin])))
    @@ -96,50 +120,50 @@
    47
    48 std::string line;
    49 while (std::getline (input, line)) {
    -
    50 line = Trim (line);
    +
    50 line = Trim (line);
    51 if (line.empty())
    52 continue;
    53
    -
    54 if (IsFrameLine (line)) {
    -
    55 FrameInfo frame = ParseFrameLine (line);
    +
    54 if (IsFrameLine (line)) {
    +
    55 FrameInfo frame = ParseFrameLine (line);
    56 database.frames.push_back (frame);
    57 currentFrame = &database.frames.back();
    -
    58 } else if (IsSignalLine (line)) {
    +
    58 } else if (IsSignalLine (line)) {
    59 if (currentFrame == nullptr)
    60 throw std::runtime_error ("Signal found before any frame definition.");
    61
    -
    62 SignalInfo signal = ParseSignalLine (line);
    -
    63 currentFrame->signals.push_back (signal);
    -
    64 } else if (IsCommentLine (line))
    -
    65 ParseCommentLine (line, database);
    +
    62 SignalInfo signal = ParseSignalLine (line);
    +
    63 currentFrame->signals.push_back (signal);
    +
    64 } else if (IsCommentLine (line))
    +
    65 ParseCommentLine (line, database);
    66 }
    67
    68 return database;
    69}
    70
    -
    71bool DbcParser::IsFrameLine (const std::string &line) {
    +
    71bool DbcParser::IsFrameLine (const std::string &line) {
    72 return (line.size() >= 4U) && (line.compare (0U, 4U, "BO_ ") == 0);
    73}
    74
    -
    75bool DbcParser::IsSignalLine (const std::string &line) {
    +
    75bool DbcParser::IsSignalLine (const std::string &line) {
    76 return (line.size() >= 4U) && (line.compare (0U, 4U, "SG_ ") == 0);
    77}
    78
    -
    79bool DbcParser::IsCommentLine (const std::string &line) {
    +
    79bool DbcParser::IsCommentLine (const std::string &line) {
    80 return (line.size() >= 4U) && (line.compare (0U, 4U, "CM_ ") == 0);
    81}
    82
    -
    83std::string DbcParser::Trim (const std::string &text) {
    -
    84 return TrimText (text);
    +
    83std::string DbcParser::Trim (const std::string &text) {
    +
    84 return TrimText (text);
    85}
    86
    -
    87std::vector<std::string> DbcParser::SplitReceivers (const std::string &text) {
    +
    87std::vector<std::string> DbcParser::SplitReceivers (const std::string &text) {
    88 std::vector<std::string> receivers;
    89 std::string token;
    90 std::istringstream stream (text);
    91
    92 while (std::getline (stream, token, ',')) {
    -
    93 token = TrimText (token);
    +
    93 token = TrimText (token);
    94 if (!token.empty())
    95 receivers.push_back (token);
    96 }
    @@ -147,7 +171,7 @@
    98 return receivers;
    99}
    100
    -
    101void DbcParser::NormalizeCanId (std::uint32_t rawCanId,
    +
    101void DbcParser::NormalizeCanId (std::uint32_t rawCanId,
    102 std::uint32_t &normalizedCanId,
    103 bool &isExtended) {
    104 /*
    @@ -164,7 +188,7 @@
    115 }
    116}
    117
    -
    118std::uint32_t DbcParser::TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn) {
    +
    118std::uint32_t DbcParser::TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn) {
    119 hasPgn = false;
    120
    121 if (!isExtended)
    @@ -188,7 +212,7 @@
    139 return pgn;
    140}
    141
    -
    142FrameInfo DbcParser::ParseFrameLine (const std::string &line) {
    +
    142FrameInfo DbcParser::ParseFrameLine (const std::string &line) {
    143 /*
    144 * Example:
    145 * BO_ 256 EngineData: 8 EEC1
    @@ -204,7 +228,7 @@
    155 throw std::runtime_error ("Invalid frame line: " + line);
    156
    157 stream >> rawCanId;
    -
    158 NormalizeCanId (rawCanId, frame.canId, frame.isExtended);
    +
    158 NormalizeCanId (rawCanId, frame.canId, frame.isExtended);
    159
    160 stream >> token;
    161 if (token.empty())
    @@ -222,12 +246,12 @@
    173 }
    174
    175 stream >> frame.transmitter;
    -
    176 frame.pgn = TryExtractPgn (frame.canId, frame.isExtended, frame.hasPgn);
    +
    176 frame.pgn = TryExtractPgn (frame.canId, frame.isExtended, frame.hasPgn);
    177
    178 return frame;
    179}
    180
    -
    181SignalInfo DbcParser::ParseSignalLine (const std::string &line) {
    +
    181SignalInfo DbcParser::ParseSignalLine (const std::string &line) {
    182 /*
    183 * Example:
    184 * SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8000] "rpm" ECU1,ECU2
    @@ -235,7 +259,7 @@
    186
    187 SignalInfo signal;
    188
    -
    189 std::string work = TrimText (line);
    +
    189 std::string work = TrimText (line);
    190 if (work.compare (0U, 4U, "SG_ ") != 0)
    191 throw std::runtime_error ("Invalid signal line: " + line);
    192
    @@ -245,8 +269,8 @@
    196 if (colonPos == std::string::npos)
    197 throw std::runtime_error ("Signal line missing ':' : " + line);
    198
    -
    199 signal.name = TrimText (work.substr (0U, colonPos));
    -
    200 std::string rest = TrimText (work.substr (colonPos + 1U));
    +
    199 signal.name = TrimText (work.substr (0U, colonPos));
    +
    200 std::string rest = TrimText (work.substr (colonPos + 1U));
    201
    202 const std::string::size_type pipePos = rest.find ('|');
    203 const std::string::size_type atPos = rest.find ('@');
    @@ -274,11 +298,11 @@
    225 throw std::runtime_error ("Unsupported signal syntax: " + line);
    226
    227 signal.startBit = static_cast<std::uint32_t> (
    -
    228 std::stoul (TrimText (rest.substr (0U, pipePos)))
    +
    228 std::stoul (TrimText (rest.substr (0U, pipePos)))
    229 );
    230
    231 signal.length = static_cast<std::uint32_t> (
    -
    232 std::stoul (TrimText (rest.substr (pipePos + 1U, atPos - pipePos - 1U)))
    +
    232 std::stoul (TrimText (rest.substr (pipePos + 1U, atPos - pipePos - 1U)))
    233 );
    234
    235 {
    @@ -295,32 +319,32 @@
    246 }
    247
    248 signal.factor = std::stod (
    -
    249 TrimText (rest.substr (factorBegin + 1U, factorComma - factorBegin - 1U))
    +
    249 TrimText (rest.substr (factorBegin + 1U, factorComma - factorBegin - 1U))
    250 );
    251
    252 signal.offset = std::stod (
    -
    253 TrimText (rest.substr (factorComma + 1U, factorEnd - factorComma - 1U))
    +
    253 TrimText (rest.substr (factorComma + 1U, factorEnd - factorComma - 1U))
    254 );
    255
    256 signal.minimum = std::stod (
    -
    257 TrimText (rest.substr (rangeBegin + 1U, rangeSep - rangeBegin - 1U))
    +
    257 TrimText (rest.substr (rangeBegin + 1U, rangeSep - rangeBegin - 1U))
    258 );
    259
    260 signal.maximum = std::stod (
    -
    261 TrimText (rest.substr (rangeSep + 1U, rangeEnd - rangeSep - 1U))
    +
    261 TrimText (rest.substr (rangeSep + 1U, rangeEnd - rangeSep - 1U))
    262 );
    263
    264 signal.unit = rest.substr (unitBegin + 1U, unitEnd - unitBegin - 1U);
    265
    266 {
    -
    267 const std::string receiversText = TrimText (rest.substr (unitEnd + 1U));
    -
    268 signal.receivers = SplitReceivers (receiversText);
    +
    267 const std::string receiversText = TrimText (rest.substr (unitEnd + 1U));
    +
    268 signal.receivers = SplitReceivers (receiversText);
    269 }
    270
    271 return signal;
    272}
    273
    -
    274void DbcParser::ParseCommentLine (const std::string &line, DbcDatabase &database) {
    +
    274void DbcParser::ParseCommentLine (const std::string &line, DbcDatabase &database) {
    275 /*
    276 * Examples:
    277 * CM_ BO_ 256 "Frame comment";
    @@ -342,7 +366,7 @@
    293 bool isExtended = false;
    294
    295 stream >> rawCanId;
    -
    296 NormalizeCanId (rawCanId, canId, isExtended);
    +
    296 NormalizeCanId (rawCanId, canId, isExtended);
    297
    298 const std::string::size_type quoteBegin = line.find ('"');
    299 const std::string::size_type quoteEnd = line.rfind ('"');
    @@ -352,7 +376,7 @@
    303 (quoteEnd <= quoteBegin))
    304 return;
    305
    -
    306 FrameInfo *frame = FindFrameById (database, canId, isExtended);
    +
    306 FrameInfo *frame = FindFrameById (database, canId, isExtended);
    307 if (frame != nullptr)
    308 frame->comment = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U);
    309 } else if (token == "SG_") {
    @@ -364,7 +388,7 @@
    315 stream >> rawCanId;
    316 stream >> signalName;
    317
    -
    318 NormalizeCanId (rawCanId, canId, isExtended);
    +
    318 NormalizeCanId (rawCanId, canId, isExtended);
    319
    320 const std::string::size_type quoteBegin = line.find ('"');
    321 const std::string::size_type quoteEnd = line.rfind ('"');
    @@ -374,16 +398,16 @@
    325 (quoteEnd <= quoteBegin))
    326 return;
    327
    -
    328 FrameInfo *frame = FindFrameById (database, canId, isExtended);
    +
    328 FrameInfo *frame = FindFrameById (database, canId, isExtended);
    329 if (frame != nullptr) {
    -
    330 SignalInfo *signal = FindSignalByName (*frame, signalName);
    +
    330 SignalInfo *signal = FindSignalByName (*frame, signalName);
    331 if (signal != nullptr)
    332 signal->comment = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U);
    333 }
    334 }
    335}
    336
    - +
    337FrameInfo *DbcParser::FindFrameById (DbcDatabase &database,
    338 std::uint32_t canId,
    339 bool isExtended) {
    340 for (std::size_t index = 0U; index < database.frames.size(); ++index) {
    @@ -395,36 +419,22 @@
    346 return nullptr;
    347}
    348
    -
    349SignalInfo *DbcParser::FindSignalByName (FrameInfo &frame, const std::string &signalName) {
    -
    350 for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
    -
    351 if (frame.signals[index].name == signalName)
    -
    352 return &frame.signals[index];
    +
    349SignalInfo *DbcParser::FindSignalByName (FrameInfo &frame, const std::string &signalName) {
    +
    350 for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
    +
    351 if (frame.signals[index].name == signalName)
    +
    352 return &frame.signals[index];
    353 }
    354
    355 return nullptr;
    356}
    -
    static std::vector< std::string > SplitReceivers(const std::string &text)
    Definition: dbc_parser.cpp:87
    -
    static std::string Trim(const std::string &text)
    Definition: dbc_parser.cpp:83
    -
    static SignalInfo ParseSignalLine(const std::string &line)
    Definition: dbc_parser.cpp:181
    -
    static FrameInfo ParseFrameLine(const std::string &line)
    Definition: dbc_parser.cpp:142
    -
    static std::uint32_t TryExtractPgn(std::uint32_t canId, bool isExtended, bool &hasPgn)
    Definition: dbc_parser.cpp:118
    -
    static void NormalizeCanId(std::uint32_t rawCanId, std::uint32_t &normalizedCanId, bool &isExtended)
    Definition: dbc_parser.cpp:101
    -
    static void ParseCommentLine(const std::string &line, DbcDatabase &database)
    Definition: dbc_parser.cpp:274
    -
    static FrameInfo * FindFrameById(DbcDatabase &database, std::uint32_t canId, bool isExtended)
    Definition: dbc_parser.cpp:337
    -
    static SignalInfo * FindSignalByName(FrameInfo &frame, const std::string &signalName)
    Definition: dbc_parser.cpp:349
    -
    static bool IsSignalLine(const std::string &line)
    Definition: dbc_parser.cpp:75
    -
    static bool IsFrameLine(const std::string &line)
    Definition: dbc_parser.cpp:71
    -
    static bool IsCommentLine(const std::string &line)
    Definition: dbc_parser.cpp:79
    DbcDatabase ParseFile(const std::string &filePath) const
    Parse DBC file.
    Definition: dbc_parser.cpp:40
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    -
    std::string TrimText(const std::string &text)
    Remove leading and trailing spaces.
    Definition: dbc_parser.cpp:25
    Parsed DBC content stored in a simple internal form.
    Definition: dbc_database.h:22
    std::vector< FrameInfo > frames
    Definition: dbc_database.h:23
    Describes one CAN frame from a DBC file.
    Definition: frame_info.h:24
    bool isExtended
    Definition: frame_info.h:27
    bool hasPgn
    Definition: frame_info.h:29
    std::string transmitter
    Definition: frame_info.h:31
    -
    std::vector< SignalInfo > signals
    Definition: frame_info.h:33
    std::uint8_t dlc
    Definition: frame_info.h:30
    std::string name
    Definition: frame_info.h:25
    std::string comment
    Definition: frame_info.h:32
    @@ -444,9 +454,13 @@
    double factor
    Definition: signal_info.h:28
    bool isLittleEndian
    Definition: signal_info.h:26
    +
    - + diff --git a/docs/html/dbc__parser_8h.html b/docs/html/dbc__parser_8h.html index 369cbe6..9e37fcc 100644 --- a/docs/html/dbc__parser_8h.html +++ b/docs/html/dbc__parser_8h.html @@ -5,10 +5,17 @@ -DBC framework: dbc_parser.h File Reference +DBC Framework: dbc_parser.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    @@ -71,9 +110,13 @@ Classes

    Definition in file dbc_parser.h.

    + - + diff --git a/docs/html/dbc__parser_8h.js b/docs/html/dbc__parser_8h.js new file mode 100644 index 0000000..1eb44b1 --- /dev/null +++ b/docs/html/dbc__parser_8h.js @@ -0,0 +1,4 @@ +var dbc__parser_8h = +[ + [ "DbcParser", "classDbcParser.html", "classDbcParser" ] +]; \ No newline at end of file diff --git a/docs/html/dbc__parser_8h_source.html b/docs/html/dbc__parser_8h_source.html index 63dfc7e..5792d31 100644 --- a/docs/html/dbc__parser_8h_source.html +++ b/docs/html/dbc__parser_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_parser.h Source File +DBC Framework: dbc_parser.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_parser.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_parser.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef DBC_PARSER_H
    13#define DBC_PARSER_H
    14
    @@ -66,78 +95,50 @@
    17#include <cstdint>
    18
    19#include "dbc_database.h"
    -
    20
    -
    21/**
    -
    22 * @brief Minimal DBC parser.
    -
    23 *
    -
    24 * Supports:
    -
    25 * - BO_
    -
    26 * - SG_
    -
    27 * - CM_ BO_
    -
    28 * - CM_ SG_
    -
    29 *
    -
    30 * Ignores:
    -
    31 * - attributes
    -
    32 * - multiplexing
    -
    33 * - value tables
    -
    34 */
    +
    20
    35class DbcParser {
    -
    36 public:
    -
    37 /**
    -
    38 * @brief Parse DBC file.
    -
    39 * @param filePath Path to input file.
    -
    40 * @return Parsed database.
    -
    41 * @throws std::runtime_error on file or parse errors.
    -
    42 */
    +
    36 public:
    43 DbcDatabase ParseFile (const std::string &filePath) const;
    44
    45 private:
    -
    46 static bool IsFrameLine (const std::string &line);
    -
    47 static bool IsSignalLine (const std::string &line);
    -
    48 static bool IsCommentLine (const std::string &line);
    -
    49 static std::string Trim (const std::string &text);
    -
    50 static std::vector<std::string> SplitReceivers (const std::string &text);
    -
    51 static std::uint32_t TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn);
    +
    46 static bool IsFrameLine (const std::string &line);
    +
    47 static bool IsSignalLine (const std::string &line);
    +
    48 static bool IsCommentLine (const std::string &line);
    +
    49 static std::string Trim (const std::string &text);
    +
    50 static std::vector<std::string> SplitReceivers (const std::string &text);
    +
    51 static std::uint32_t TryExtractPgn (std::uint32_t canId, bool isExtended, bool &hasPgn);
    52
    -
    53 static void NormalizeCanId (std::uint32_t rawCanId,
    +
    53 static void NormalizeCanId (std::uint32_t rawCanId,
    54 std::uint32_t &normalizedCanId,
    55 bool &isExtended);
    56
    -
    57 static FrameInfo ParseFrameLine (const std::string &line);
    -
    58 static SignalInfo ParseSignalLine (const std::string &line);
    +
    57 static FrameInfo ParseFrameLine (const std::string &line);
    +
    58 static SignalInfo ParseSignalLine (const std::string &line);
    59
    -
    60 static void ParseCommentLine (const std::string &line, DbcDatabase &database);
    +
    60 static void ParseCommentLine (const std::string &line, DbcDatabase &database);
    61
    -
    62 static FrameInfo *FindFrameById (DbcDatabase &database,
    +
    62 static FrameInfo *FindFrameById (DbcDatabase &database,
    63 std::uint32_t canId,
    64 bool isExtended);
    65
    -
    66 static SignalInfo *FindSignalByName (FrameInfo &frame, const std::string &signalName);
    +
    66 static SignalInfo *FindSignalByName (FrameInfo &frame, const std::string &signalName);
    67};
    68
    69#endif /* DBC_PARSER_H */
    Minimal DBC parser.
    Definition: dbc_parser.h:35
    -
    static std::vector< std::string > SplitReceivers(const std::string &text)
    Definition: dbc_parser.cpp:87
    -
    static std::string Trim(const std::string &text)
    Definition: dbc_parser.cpp:83
    -
    static SignalInfo ParseSignalLine(const std::string &line)
    Definition: dbc_parser.cpp:181
    -
    static FrameInfo ParseFrameLine(const std::string &line)
    Definition: dbc_parser.cpp:142
    -
    static std::uint32_t TryExtractPgn(std::uint32_t canId, bool isExtended, bool &hasPgn)
    Definition: dbc_parser.cpp:118
    -
    static void NormalizeCanId(std::uint32_t rawCanId, std::uint32_t &normalizedCanId, bool &isExtended)
    Definition: dbc_parser.cpp:101
    -
    static void ParseCommentLine(const std::string &line, DbcDatabase &database)
    Definition: dbc_parser.cpp:274
    -
    static FrameInfo * FindFrameById(DbcDatabase &database, std::uint32_t canId, bool isExtended)
    Definition: dbc_parser.cpp:337
    -
    static SignalInfo * FindSignalByName(FrameInfo &frame, const std::string &signalName)
    Definition: dbc_parser.cpp:349
    -
    static bool IsSignalLine(const std::string &line)
    Definition: dbc_parser.cpp:75
    -
    static bool IsFrameLine(const std::string &line)
    Definition: dbc_parser.cpp:71
    -
    static bool IsCommentLine(const std::string &line)
    Definition: dbc_parser.cpp:79
    DbcDatabase ParseFile(const std::string &filePath) const
    Parse DBC file.
    Definition: dbc_parser.cpp:40
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    Parsed DBC content stored in a simple internal form.
    Definition: dbc_database.h:22
    Describes one CAN frame from a DBC file.
    Definition: frame_info.h:24
    Describes one signal inside a DBC frame.
    Definition: signal_info.h:22
    +
    - + diff --git a/docs/html/dbc__tree__builder_8cpp.html b/docs/html/dbc__tree__builder_8cpp.html index 0427eec..bd70981 100644 --- a/docs/html/dbc__tree__builder_8cpp.html +++ b/docs/html/dbc__tree__builder_8cpp.html @@ -5,10 +5,17 @@ -DBC framework: dbc_tree_builder.cpp File Reference +DBC Framework: dbc_tree_builder.cpp File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_tree_builder.cpp File Reference
    @@ -59,9 +98,13 @@

    Definition in file dbc_tree_builder.cpp.

    + - + diff --git a/docs/html/dbc__tree__builder_8cpp_source.html b/docs/html/dbc__tree__builder_8cpp_source.html index c5f65a8..577390b 100644 --- a/docs/html/dbc__tree__builder_8cpp_source.html +++ b/docs/html/dbc__tree__builder_8cpp_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_tree_builder.cpp Source File +DBC Framework: dbc_tree_builder.cpp Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_tree_builder.cpp
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_tree_builder.cpp
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#include "dbc_tree_builder.h"
    13
    14std::unique_ptr<TreeNode> DbcTreeBuilder::Build (const DbcDatabase &database) const {
    @@ -67,8 +96,8 @@
    18 const FrameInfo &frame = database.frames[frameIndex];
    19 std::unique_ptr<TreeNode> frameNode (new TreeNode (frame));
    20
    -
    21 for (std::size_t signalIndex = 0U; signalIndex < frame.signals.size(); ++signalIndex) {
    -
    22 const SignalInfo &signal = frame.signals[signalIndex];
    +
    21 for (std::size_t signalIndex = 0U; signalIndex < frame.signals.size(); ++signalIndex) {
    +
    22 const SignalInfo &signal = frame.signals[signalIndex];
    23 std::unique_ptr<TreeNode> signalNode (new TreeNode (signal));
    24 frameNode->AddChild (std::move (signalNode));
    25 }
    @@ -84,12 +113,15 @@
    Parsed DBC content stored in a simple internal form.
    Definition: dbc_database.h:22
    std::vector< FrameInfo > frames
    Definition: dbc_database.h:23
    Describes one CAN frame from a DBC file.
    Definition: frame_info.h:24
    -
    std::vector< SignalInfo > signals
    Definition: frame_info.h:33
    Describes one signal inside a DBC frame.
    Definition: signal_info.h:22
    +
    - + diff --git a/docs/html/dbc__tree__builder_8h.html b/docs/html/dbc__tree__builder_8h.html index ccbfb85..de86569 100644 --- a/docs/html/dbc__tree__builder_8h.html +++ b/docs/html/dbc__tree__builder_8h.html @@ -5,10 +5,17 @@ -DBC framework: dbc_tree_builder.h File Reference +DBC Framework: dbc_tree_builder.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    @@ -70,9 +109,13 @@ Classes

    Definition in file dbc_tree_builder.h.

    + - + diff --git a/docs/html/dbc__tree__builder_8h.js b/docs/html/dbc__tree__builder_8h.js new file mode 100644 index 0000000..7cf0dbb --- /dev/null +++ b/docs/html/dbc__tree__builder_8h.js @@ -0,0 +1,4 @@ +var dbc__tree__builder_8h = +[ + [ "DbcTreeBuilder", "classDbcTreeBuilder.html", "classDbcTreeBuilder" ] +]; \ No newline at end of file diff --git a/docs/html/dbc__tree__builder_8h_source.html b/docs/html/dbc__tree__builder_8h_source.html index 47ce76a..b13e3fc 100644 --- a/docs/html/dbc__tree__builder_8h_source.html +++ b/docs/html/dbc__tree__builder_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: dbc_tree_builder.h Source File +DBC Framework: dbc_tree_builder.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    dbc_tree_builder.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file dbc_tree_builder.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef DBC_TREE_BUILDER_H
    13#define DBC_TREE_BUILDER_H
    14
    @@ -65,17 +94,9 @@
    16
    17#include "dbc_database.h"
    18#include "tree_node.h"
    -
    19
    -
    20/**
    -
    21 * @brief Builds a simple tree from parsed DBC database.
    -
    22 */
    +
    19
    -
    24 public:
    -
    25 /**
    -
    26 * @brief Build tree representation of parsed DBC data.
    -
    27 * @param database Parsed database.
    -
    28 * @return Root node of the tree.
    -
    29 */
    +
    24 public:
    30 std::unique_ptr<TreeNode> Build (const DbcDatabase &database) const;
    31};
    32
    @@ -86,9 +107,13 @@
    Parsed DBC content stored in a simple internal form.
    Definition: dbc_database.h:22
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    +
    - + diff --git a/docs/html/decode__database_8h.html b/docs/html/decode__database_8h.html index 406c715..189e2b9 100644 --- a/docs/html/decode__database_8h.html +++ b/docs/html/decode__database_8h.html @@ -5,10 +5,17 @@ -DBC framework: decode_database.h File Reference +DBC Framework: decode_database.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    Classes | @@ -80,13 +119,13 @@ Classes - - @@ -118,10 +157,6 @@ Enumerations

    Signal byte order used for runtime decoding.

    -

    Enumerations

    enum class  ByteOrder { Intel -, Motorola +
    enum class  ByteOrder { Intel +, Motorola }
     Signal byte order used for runtime decoding. More...
     
    enum class  ValueType { Unsigned -, Signed +
    enum class  ValueType { Unsigned +, Signed }
     Signal numeric type. More...
     
    - - -
    Enumerator
    Intel 
    Motorola 

    Definition at line 23 of file decode_database.h.

    @@ -148,19 +183,19 @@ Enumerations

    Signal numeric type.

    - - - -
    Enumerator
    Unsigned 
    Signed 

    Definition at line 31 of file decode_database.h.

    + - + diff --git a/docs/html/decode__database_8h.js b/docs/html/decode__database_8h.js new file mode 100644 index 0000000..5fce961 --- /dev/null +++ b/docs/html/decode__database_8h.js @@ -0,0 +1,16 @@ +var decode__database_8h = +[ + [ "DecodeSignal", "structDecodeSignal.html", "structDecodeSignal" ], + [ "DecodeFrame", "structDecodeFrame.html", "structDecodeFrame" ], + [ "FrameKey", "structFrameKey.html", null ], + [ "FrameKeyHasher", "structFrameKeyHasher.html", null ], + [ "DecodeDatabase", "structDecodeDatabase.html", null ], + [ "ByteOrder", "decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b", [ + [ "Intel", "decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5", null ], + [ "Motorola", "decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31", null ] + ] ], + [ "ValueType", "decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1", [ + [ "Unsigned", "decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1aa1a914735b205424ba6c40b85528d78a", null ], + [ "Signed", "decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/html/decode__database_8h_source.html b/docs/html/decode__database_8h_source.html index b6fdf4a..be86652 100644 --- a/docs/html/decode__database_8h_source.html +++ b/docs/html/decode__database_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: decode_database.h Source File +DBC Framework: decode_database.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    decode_database.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file decode_database.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef DECODE_DATABASE_H
    13#define DECODE_DATABASE_H
    14
    @@ -65,46 +94,36 @@
    16#include <vector>
    17#include <unordered_map>
    18#include <cstdint>
    -
    19
    -
    20/**
    -
    21 * @brief Signal byte order used for runtime decoding.
    -
    22 */
    +
    19
    23enum class ByteOrder {
    -
    24 Intel,
    - +
    24 Intel,
    +
    25 Motorola
    26};
    -
    27
    -
    28/**
    -
    29 * @brief Signal numeric type.
    -
    30 */
    +
    27
    31enum class ValueType {
    - -
    33 Signed
    +
    32 Unsigned,
    +
    33 Signed
    34};
    -
    35
    -
    36/**
    -
    37 * @brief Runtime-ready signal definition.
    -
    38 */
    +
    35
    -
    40 std::string name; /**< Signal name. */
    -
    41 std::uint32_t startBit; /**< DBC start bit. */
    -
    42 std::uint32_t length; /**< Signal length in bits. */
    -
    43 ByteOrder byteOrder; /**< Intel or Motorola. */
    -
    44 ValueType valueType; /**< Signed or unsigned. */
    -
    45 double factor; /**< Scaling factor. */
    -
    46 double offset; /**< Physical offset. */
    -
    47 double minimum; /**< Minimum physical value. */
    -
    48 double maximum; /**< Maximum physical value. */
    -
    49 std::string unit; /**< Physical unit. */
    -
    50 std::vector<std::string> receivers; /**< Receivers. */
    -
    51 std::string comment; /**< Comment. */
    -
    52
    - +
    40 std::string name;
    +
    41 std::uint32_t startBit;
    +
    42 std::uint32_t length;
    + + +
    45 double factor;
    +
    46 double offset;
    +
    47 double minimum;
    +
    48 double maximum;
    +
    49 std::string unit;
    +
    50 std::vector<std::string> receivers;
    +
    51 std::string comment;
    +
    54 : name()
    55 , startBit (0U)
    56 , length (0U)
    - - +
    57 , byteOrder (ByteOrder::Intel)
    +
    58 , valueType (ValueType::Unsigned)
    59 , factor (1.0)
    60 , offset (0.0)
    61 , minimum (0.0)
    @@ -114,22 +133,18 @@
    65 , comment() {
    66 }
    67};
    -
    68
    -
    69/**
    -
    70 * @brief Runtime-ready frame definition.
    -
    71 */
    +
    68
    -
    73 std::string name; /**< Frame name. */
    -
    74 std::uint32_t canId; /**< Normalized CAN ID. */
    -
    75 bool isExtended; /**< true for extended frame. */
    -
    76 std::uint8_t dlc; /**< Payload length. */
    -
    77 std::uint32_t pgn; /**< PGN if available. */
    -
    78 bool hasPgn; /**< true if PGN is valid. */
    -
    79 std::string transmitter; /**< Transmitter ECU. */
    -
    80 std::string comment; /**< Frame comment. */
    -
    81 std::vector<DecodeSignal> signals; /**< Signal definitions. */
    -
    82
    - +
    73 std::string name;
    +
    74 std::uint32_t canId;
    + +
    76 std::uint8_t dlc;
    +
    77 std::uint32_t pgn;
    +
    78 bool hasPgn;
    +
    79 std::string transmitter;
    +
    80 std::string comment;
    +
    81 std::vector<DecodeSignal> signals;
    +
    84 : name()
    85 , canId (0U)
    86 , isExtended (false)
    @@ -138,72 +153,55 @@
    89 , hasPgn (false)
    90 , transmitter()
    91 , comment()
    -
    92 , signals() {
    +
    92 , signals() {
    93 }
    94};
    -
    95
    -
    96/**
    -
    97 * @brief Key for fast frame lookup.
    -
    98 */
    +
    95
    99struct FrameKey {
    -
    100 std::uint32_t canId;
    - +
    100 std::uint32_t canId;
    +
    101 bool isExtended;
    102
    - -
    104 : canId (0U)
    -
    105 , isExtended (false) {
    +
    103 FrameKey()
    +
    104 : canId (0U)
    +
    105 , isExtended (false) {
    106 }
    107
    -
    108 FrameKey (std::uint32_t id, bool extended)
    -
    109 : canId (id)
    -
    110 , isExtended (extended) {
    +
    108 FrameKey (std::uint32_t id, bool extended)
    +
    109 : canId (id)
    +
    110 , isExtended (extended) {
    111 }
    112
    -
    113 bool operator== (const FrameKey &other) const {
    -
    114 return (canId == other.canId) && (isExtended == other.isExtended);
    +
    113 bool operator== (const FrameKey &other) const {
    +
    114 return (canId == other.canId) && (isExtended == other.isExtended);
    115 }
    116};
    -
    117
    -
    118/**
    -
    119 * @brief Hasher for frame key.
    -
    120 */
    +
    117
    -
    122 std::size_t operator() (const FrameKey &key) const {
    -
    123 const std::size_t a = static_cast<std::size_t> (key.canId);
    -
    124 const std::size_t b = key.isExtended ? 1U : 0U;
    +
    122 std::size_t operator() (const FrameKey &key) const {
    +
    123 const std::size_t a = static_cast<std::size_t> (key.canId);
    +
    124 const std::size_t b = key.isExtended ? 1U : 0U;
    125 return (a * 1315423911U) ^ b;
    126 }
    127};
    -
    128
    -
    129/**
    -
    130 * @brief Runtime decode database with fast lookup by CAN ID.
    -
    131 */
    +
    128
    -
    133 std::vector<DecodeFrame> frames;
    -
    134 std::unordered_map<FrameKey, std::size_t, FrameKeyHasher> frameIndexByKey;
    +
    133 std::vector<DecodeFrame> frames;
    +
    134 std::unordered_map<FrameKey, std::size_t, FrameKeyHasher> frameIndexByKey;
    135};
    136
    137#endif /* DECODE_DATABASE_H */
    ByteOrder
    Signal byte order used for runtime decoding.
    - -
    ValueType
    Signal numeric type.
    - -
    Runtime decode database with fast lookup by CAN ID.
    -
    std::vector< DecodeFrame > frames
    -
    std::unordered_map< FrameKey, std::size_t, FrameKeyHasher > frameIndexByKey
    Runtime-ready frame definition.
    std::uint32_t pgn
    std::string comment
    -
    std::vector< DecodeSignal > signals
    std::uint8_t dlc
    std::uint32_t canId
    std::string name
    std::string transmitter
    -
    Runtime-ready signal definition.
    std::string unit
    @@ -211,7 +209,6 @@
    std::string name
    -
    ValueType valueType
    std::uint32_t startBit
    std::vector< std::string > receivers
    @@ -219,17 +216,15 @@
    std::uint32_t length
    std::string comment
    Hasher for frame key.
    -
    std::size_t operator()(const FrameKey &key) const
    Key for fast frame lookup.
    -
    std::uint32_t canId
    - -
    FrameKey(std::uint32_t id, bool extended)
    - -
    bool operator==(const FrameKey &other) const
    +
    - + diff --git a/docs/html/files.html b/docs/html/files.html index 6b966c3..dbb765c 100644 --- a/docs/html/files.html +++ b/docs/html/files.html @@ -5,10 +5,17 @@ -DBC framework: File List +DBC Framework: File List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,27 +35,58 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    File List
    -
    Here is a list of all files with brief descriptions:
    +
    Here is a list of all documented files with brief descriptions:
    @@ -67,9 +106,12 @@
     dbc_database.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
     dbc_decode_builder.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
    +
    - + diff --git a/docs/html/files_dup.js b/docs/html/files_dup.js new file mode 100644 index 0000000..8384f1b --- /dev/null +++ b/docs/html/files_dup.js @@ -0,0 +1,18 @@ +var files_dup = +[ + [ "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_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" ] +]; \ No newline at end of file diff --git a/docs/html/frame__info_8h.html b/docs/html/frame__info_8h.html index 23f2efc..2151798 100644 --- a/docs/html/frame__info_8h.html +++ b/docs/html/frame__info_8h.html @@ -5,10 +5,17 @@ -DBC framework: frame_info.h File Reference +DBC Framework: frame_info.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    @@ -71,9 +110,13 @@ Classes

    Definition in file frame_info.h.

    + - + diff --git a/docs/html/frame__info_8h.js b/docs/html/frame__info_8h.js new file mode 100644 index 0000000..6488e18 --- /dev/null +++ b/docs/html/frame__info_8h.js @@ -0,0 +1,4 @@ +var frame__info_8h = +[ + [ "FrameInfo", "structFrameInfo.html", "structFrameInfo" ] +]; \ No newline at end of file diff --git a/docs/html/frame__info_8h_source.html b/docs/html/frame__info_8h_source.html index 32a6f1f..e8982ea 100644 --- a/docs/html/frame__info_8h_source.html +++ b/docs/html/frame__info_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: frame_info.h Source File +DBC Framework: frame_info.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    frame_info.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file frame_info.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef FRAME_INFO_H
    13#define FRAME_INFO_H
    14
    @@ -66,22 +95,18 @@
    17#include <cstdint>
    18
    19#include "signal_info.h"
    -
    20
    -
    21/**
    -
    22 * @brief Describes one CAN frame from a DBC file.
    -
    23 */
    +
    20
    24struct FrameInfo {
    -
    25 std::string name; /**< Frame name. */
    -
    26 std::uint32_t canId; /**< Normalized CAN identifier. */
    -
    27 bool isExtended; /**< true for extended frame. */
    -
    28 std::uint32_t pgn; /**< J1939 PGN if applicable. */
    -
    29 bool hasPgn; /**< true if PGN was derived. */
    -
    30 std::uint8_t dlc; /**< Frame payload length. */
    -
    31 std::string transmitter; /**< Transmitter ECU name. */
    -
    32 std::string comment; /**< Optional frame comment. */
    -
    33 std::vector<SignalInfo> signals; /**< Signals contained in the frame. */
    -
    34
    - +
    25 std::string name;
    +
    26 std::uint32_t canId;
    + +
    28 std::uint32_t pgn;
    +
    29 bool hasPgn;
    +
    30 std::uint8_t dlc;
    +
    31 std::string transmitter;
    +
    32 std::string comment;
    +
    33 std::vector<SignalInfo> signals;
    +
    35 FrameInfo()
    36 : name()
    37 , canId (0U)
    38 , isExtended (false)
    @@ -90,7 +115,7 @@
    41 , dlc (0U)
    42 , transmitter()
    43 , comment()
    -
    44 , signals() {
    +
    44 , signals() {
    45 }
    46};
    47
    @@ -99,18 +124,20 @@
    Describes one CAN frame from a DBC file.
    Definition: frame_info.h:24
    bool isExtended
    Definition: frame_info.h:27
    bool hasPgn
    Definition: frame_info.h:29
    -
    std::string transmitter
    Definition: frame_info.h:31
    -
    std::vector< SignalInfo > signals
    Definition: frame_info.h:33
    std::uint8_t dlc
    Definition: frame_info.h:30
    std::string name
    Definition: frame_info.h:25
    std::string comment
    Definition: frame_info.h:32
    std::uint32_t pgn
    Definition: frame_info.h:28
    std::uint32_t canId
    Definition: frame_info.h:26
    +
    - + diff --git a/docs/html/functions.html b/docs/html/functions.html index 04ce34c..df238d0 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -5,10 +5,17 @@ -DBC framework: Class Members +DBC Framework: Class Members + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,56 +35,55 @@
    - - - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    -
    Here is a list of all class members with links to the classes they belong to:
    +
    Here is a list of all documented class members with links to the class documentation for each member:

    - a -

    - - -

    - ~ -

    +
    - + diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index b72d7db..4a37e4b 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -5,10 +5,17 @@ -DBC framework: Class Members - Functions +DBC Framework: Class Members - Functions + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,149 +35,75 @@
    - - - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    -  - -

    - a -

    +
    - + diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index 5267e4b..7d44d94 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -5,10 +5,17 @@ -DBC framework: Class Members - Variables +DBC Framework: Class Members - Variables + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,50 +35,53 @@
    - - - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
      @@ -80,7 +91,7 @@

    - c -

    @@ -94,8 +105,7 @@

    - f -

    @@ -105,7 +115,7 @@

    - i -

    @@ -117,11 +127,6 @@

    - m -

    @@ -140,6 +145,7 @@

    - p -

    @@ -150,7 +156,6 @@

    - s -

    @@ -170,9 +175,12 @@
  • valueType : DecodeSignal
  • +
    - + diff --git a/docs/html/globals.html b/docs/html/globals.html index 18651ec..594e5b3 100644 --- a/docs/html/globals.html +++ b/docs/html/globals.html @@ -5,10 +5,17 @@ -DBC framework: File Members +DBC Framework: File Members + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,42 +35,66 @@
    - - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    -
    Here is a list of all file members with links to the files they belong to:
    +
    - + diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html index 427a8a7..4b7186e 100644 --- a/docs/html/globals_enum.html +++ b/docs/html/globals_enum.html @@ -5,10 +5,17 @@ -DBC framework: File Members +DBC Framework: File Members + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,29 +35,53 @@
    - - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
     
    +
    - + diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html new file mode 100644 index 0000000..b160e8c --- /dev/null +++ b/docs/html/graph_legend.html @@ -0,0 +1,158 @@ + + + + + + + +DBC Framework: Graph Legend + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    DBC Framework +
    +
    DBC parsing and CAN signal decoding framework
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    Graph Legend
    +
    +
    +

    This page explains how to interpret the graphs that are generated by doxygen.

    +

    Consider the following example:

    /*! Invisible class because of truncation */
    +
    class Invisible { };
    +
    +
    /*! Truncated class, inheritance relation is hidden */
    +
    class Truncated : public Invisible { };
    +
    +
    /* Class not documented with doxygen comments */
    +
    class Undocumented { };
    +
    +
    /*! Class that is inherited using public inheritance */
    +
    class PublicBase : public Truncated { };
    +
    +
    /*! A template class */
    +
    template<class T> class Templ { };
    +
    +
    /*! Class that is inherited using protected inheritance */
    +
    class ProtectedBase { };
    +
    +
    /*! Class that is inherited using private inheritance */
    +
    class PrivateBase { };
    +
    +
    /*! Class that is used by the Inherited class */
    +
    class Used { };
    +
    +
    /*! Super class that inherits a number of other classes */
    +
    class Inherited : public PublicBase,
    +
    protected ProtectedBase,
    +
    private PrivateBase,
    +
    public Undocumented,
    +
    public Templ<int>
    +
    {
    +
    private:
    +
    Used *m_usedClass;
    +
    };
    +

    This will result in the following graph:

    +

    The boxes in the above graph have the following meaning:

    +
      +
    • +A filled gray box represents the struct or class for which the graph is generated.
    • +
    • +A box with a black border denotes a documented struct or class.
    • +
    • +A box with a gray border denotes an undocumented struct or class.
    • +
    • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
    • +
    +

    The arrows have the following meaning:

    +
      +
    • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
    • +
    • +A dark green arrow is used for protected inheritance.
    • +
    • +A dark red arrow is used for private inheritance.
    • +
    • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
    • +
    • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
    • +
    +
    +
    + + + + diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5 new file mode 100644 index 0000000..5543aee --- /dev/null +++ b/docs/html/graph_legend.md5 @@ -0,0 +1 @@ +2949d8d683b49299ad5e82dbf5d1be6c \ No newline at end of file diff --git a/docs/html/graph_legend.svg b/docs/html/graph_legend.svg new file mode 100644 index 0000000..5c7a71a --- /dev/null +++ b/docs/html/graph_legend.svg @@ -0,0 +1,117 @@ + + + + + + +Graph Legend + + + +Node9 + +Inherited + + + +Node10 + +PublicBase + + + +Node10->Node9 + + + + + +Node11 + +Truncated + + + +Node11->Node10 + + + + + +Node13 + +ProtectedBase + + + +Node13->Node9 + + + + + +Node14 + +PrivateBase + + + +Node14->Node9 + + + + + +Node15 + +Undocumented + + + +Node15->Node9 + + + + + +Node16 + +Templ< int > + + + +Node16->Node9 + + + + + +Node17 + +Templ< T > + + + +Node17->Node16 + + +< int > + + + +Node18 + +Used + + + +Node18->Node9 + + +m_usedClass + + + diff --git a/docs/html/index.html b/docs/html/index.html index e4a3f66..6500132 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -5,10 +5,17 @@ -DBC framework: Main Page +DBC Framework: Main Page + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,24 +35,64 @@
    - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    -
    DBC framework Documentation
    +
    DBC Framework Documentation
    +
    - + diff --git a/docs/html/index.qhp b/docs/html/index.qhp index 0c034d8..8e11983 100644 --- a/docs/html/index.qhp +++ b/docs/html/index.qhp @@ -1,11 +1,17 @@ -org.doxygen.Project +ca.himro.dbcframework doc + + +dbc +framework +c++ +qt doxygen -
    +
    @@ -74,17 +80,6 @@
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    @@ -94,140 +89,99 @@
    -
    -
    -
    -
    -
    +
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    +
    -
    -
    +
    -
    -
    -
    -
    -
    -
    +
    +
    +
    -
    +
    +
    +
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    +
    +
    +
    +
    -
    -
    -
    -
    -
    -
    +
    +
    -
    +
    +
    +
    +
    -
    -
    -
    -
    -
    -
    -
    -
    +
    -
    -
    -
    +
    +
    +
    -
    -
    -
    -
    +
    -
    -
    +
    +
    +
    +
    -
    -
    -
    -
    -
    -
    -
    -
    +
    +
    -
    -
    -
    -
    -
    -
    -
    +
    +
    +
    @@ -253,51 +207,30 @@
    -
    -
    +
    -
    -
    +
    -
    -
    +
    -
    -
    -
    -
    -
    +
    -
    -
    -
    +
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    @@ -308,45 +241,35 @@
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    +
    +
    +
    +
    -
    -
    -
    -
    -
    -
    +
    +
    +
    -
    +
    +
    +
    -
    -
    -
    -
    -
    -
    -
    -
    @@ -359,38 +282,33 @@
    -
    -
    -
    -
    -
    -
    +
    +
    -
    +
    +
    +
    +
    -
    -
    -
    -
    -
    -
    +
    +
    +
    -
    -
    -
    -
    +
    -
    -
    +
    +
    +
    +
    @@ -399,24 +317,14 @@
    -
    -
    -
    -
    -
    -
    -
    -
    +
    +
    -
    -
    -
    -
    -
    -
    -
    +
    +
    +
    @@ -427,7 +335,6 @@
    -
    @@ -450,7 +357,6 @@ - @@ -458,7 +364,6 @@ - @@ -466,28 +371,14 @@ - - - - - - - - - - - - - - @@ -497,22 +388,13 @@ - - - - - - - - - @@ -521,30 +403,18 @@ - - - - - - - - - + + + - - - - - - @@ -552,40 +422,23 @@ - - - - - - - - - - - - - - - - -README_8md.html annotated.html bc_s.png bdwn.png @@ -635,21 +488,27 @@ functions_vars.html globals.html globals_enum.html -globals_func.html +graph_legend.html +graph_legend.svg index.html jquery.js main_8cpp.html main_8cpp_source.html md_README.html -namespaceanonymous__namespace_02dbc__parser_8cpp_03.html -namespacemembers.html -namespacemembers_func.html -namespaces.html +menu.js +menudata.js nav_f.png nav_g.png nav_h.png open.png pages.html +search/close.svg +search/mag_sel.svg +search/search.css +search/search.js +search/search_l.png +search/search_m.png +search/search_r.png signal__info_8h.html signal__info_8h_source.html splitbar.png @@ -675,6 +534,7 @@ structRawCanFrame.html structSignalInfo-members.html structSignalInfo.html +svgpan.js sync_off.png sync_on.png tab_a.png diff --git a/docs/html/main_8cpp.html b/docs/html/main_8cpp.html index b2b0c08..bc44619 100644 --- a/docs/html/main_8cpp.html +++ b/docs/html/main_8cpp.html @@ -5,10 +5,17 @@ -DBC framework: main.cpp File Reference +DBC Framework: main.cpp File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    @@ -66,10 +105,6 @@ - - - -

    Functions

    static void PrintTree (const TreeNode *node, int indent)
     
    static void PrintDecodedFrame (const DecodedFrameValue &decoded)
     
    int main (int argc, char *argv[])
     
    @@ -107,88 +142,16 @@ Functions

    Definition at line 97 of file main.cpp.

    -

    References DbcTreeBuilder::Build(), DbcDecodeBuilder::Build(), RawCanFrame::canId, RawCanFrame::data, DbcDecoder::Decode(), DecodeDatabase::frames, RawCanFrame::isExtended, DbcParser::ParseFile(), PrintDecodedFrame(), and PrintTree().

    - -
    -
    - -

    ◆ PrintDecodedFrame()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static void PrintDecodedFrame (const DecodedFrameValue & decoded)
    -
    -static
    -
    -
    - -

    ◆ PrintTree()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    static void PrintTree (const TreeNode * node,
    int indent 
    )
    -
    -static
    -
    + - + diff --git a/docs/html/main_8cpp_source.html b/docs/html/main_8cpp_source.html index dd07911..e15edfa 100644 --- a/docs/html/main_8cpp_source.html +++ b/docs/html/main_8cpp_source.html @@ -5,10 +5,17 @@ -DBC framework: main.cpp Source File +DBC Framework: main.cpp Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    main.cpp
    -Go to the documentation of this file.
    1/**
    -
    2 * @file main.cpp
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#include <iostream>
    13#include <iomanip>
    14#include <memory>
    @@ -69,7 +98,7 @@
    20#include "dbc_decode_builder.h"
    21#include "dbc_decoder.h"
    22
    -
    23static void PrintTree (const TreeNode *node, int indent) {
    +
    23static void PrintTree (const TreeNode *node, int indent) {
    24 if (node == nullptr)
    25 return;
    26
    @@ -77,11 +106,11 @@
    28 std::cout << " ";
    29
    30 switch (node->GetType()) {
    -
    31 case NodeType::Root:
    +
    31 case NodeType::Root:
    32 std::cout << "[root] " << node->GetName() << "\n";
    33 break;
    34
    -
    35 case NodeType::Frame: {
    +
    35 case NodeType::Frame: {
    36 const FrameInfo *frame = node->GetFrame();
    37 std::cout << "[frame] " << node->GetName();
    38
    @@ -98,7 +127,7 @@
    49 break;
    50 }
    51
    -
    52 case NodeType::Signal: {
    +
    52 case NodeType::Signal: {
    53 const SignalInfo *signal = node->GetSignal();
    54 std::cout << "[signal] " << node->GetName();
    55
    @@ -118,10 +147,10 @@
    69 }
    70
    71 for (std::size_t i = 0U; i < node->GetChildCount(); ++i)
    -
    72 PrintTree (node->GetChild (i), indent + 1);
    +
    72 PrintTree (node->GetChild (i), indent + 1);
    73}
    74
    -
    75static void PrintDecodedFrame (const DecodedFrameValue &decoded) {
    +
    75static void PrintDecodedFrame (const DecodedFrameValue &decoded) {
    76 if (!decoded.valid || (decoded.definition == nullptr)) {
    77 std::cout << "No frame definition found.\n";
    78 return;
    @@ -129,8 +158,8 @@
    80
    81 std::cout << "Decoded frame: " << decoded.definition->name << "\n";
    82
    -
    83 for (std::size_t index = 0U; index < decoded.signals.size(); ++index) {
    -
    84 const DecodedSignalValue &signal = decoded.signals[index];
    +
    83 for (std::size_t index = 0U; index < decoded.signals.size(); ++index) {
    +
    84 const DecodedSignalValue &signal = decoded.signals[index];
    85
    86 if ((signal.definition == nullptr) || !signal.valid)
    87 continue;
    @@ -143,7 +172,7 @@
    94 }
    95}
    96
    -
    97int main (int argc, char *argv[]) {
    +
    97int main (int argc, char *argv[]) {
    98 if (argc < 2) {
    99 std::cerr << "Usage: dbc_demo <file.dbc>\n";
    100 return 1;
    @@ -157,7 +186,7 @@
    108 std::unique_ptr<TreeNode> root = treeBuilder.Build (database);
    109
    110 std::cout << "=== Parsed tree ===\n";
    -
    111 PrintTree (root.get(), 0);
    +
    111 PrintTree (root.get(), 0);
    112
    113 DbcDecodeBuilder decodeBuilder;
    114 DecodeDatabase decodeDatabase = decodeBuilder.Build (database);
    @@ -167,15 +196,15 @@
    118 * Replace with live CAN frame or trace record later.
    119 */
    120 RawCanFrame rawFrame;
    -
    121 rawFrame.canId = decodeDatabase.frames.empty() ? 0U : decodeDatabase.frames[0].canId;
    -
    122 rawFrame.isExtended = decodeDatabase.frames.empty() ? false : decodeDatabase.frames[0].isExtended;
    +
    121 rawFrame.canId = decodeDatabase.frames.empty() ? 0U : decodeDatabase.frames[0].canId;
    +
    122 rawFrame.isExtended = decodeDatabase.frames.empty() ? false : decodeDatabase.frames[0].isExtended;
    123 rawFrame.data.resize (8U, 0U);
    124
    125 DbcDecoder decoder;
    126 DecodedFrameValue decoded = decoder.Decode (decodeDatabase, rawFrame);
    127
    128 std::cout << "\n=== Decoded frame ===\n";
    -
    129 PrintDecodedFrame (decoded);
    +
    129 PrintDecodedFrame (decoded);
    130 } catch (const std::exception &ex) {
    131 std::cerr << "Error: " << ex.what() << "\n";
    132 return 2;
    @@ -202,19 +231,14 @@
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    -
    int main(int argc, char *argv[])
    Definition: main.cpp:97
    -
    static void PrintDecodedFrame(const DecodedFrameValue &decoded)
    Definition: main.cpp:75
    -
    static void PrintTree(const TreeNode *node, int indent)
    Definition: main.cpp:23
    Parsed DBC content stored in a simple internal form.
    Definition: dbc_database.h:22
    Runtime decode database with fast lookup by CAN ID.
    -
    std::vector< DecodeFrame > frames
    std::string name
    std::string unit
    std::string name
    Fully decoded frame.
    Definition: dbc_decoder.h:55
    const DecodeFrame * definition
    Definition: dbc_decoder.h:56
    -
    std::vector< DecodedSignalValue > signals
    Definition: dbc_decoder.h:57
    One decoded signal value.
    Definition: dbc_decoder.h:38
    std::int64_t rawValue
    Definition: dbc_decoder.h:40
    @@ -234,13 +258,14 @@
    std::uint32_t length
    Definition: signal_info.h:25
    std::string unit
    Definition: signal_info.h:32
    std::uint32_t startBit
    Definition: signal_info.h:24
    - - -
    +
    - + diff --git a/docs/html/md_README.html b/docs/html/md_README.html index f6dd088..bf84030 100644 --- a/docs/html/md_README.html +++ b/docs/html/md_README.html @@ -5,10 +5,17 @@ -DBC framework: DBC Parser and Runtime Decode Module Documentation +DBC Framework: DBC Parser and Runtime Decode Module Documentation + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,16 +35,53 @@
    - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DBC Parser and Runtime Decode Module Documentation
    @@ -732,9 +777,12 @@ Runtime decode representation

    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.

    + - + diff --git a/docs/html/menu.js b/docs/html/menu.js new file mode 100644 index 0000000..818b859 --- /dev/null +++ b/docs/html/menu.js @@ -0,0 +1,135 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
      '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
    • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
    • '; + } + result+='
    '; + } + return result; + } + var searchBox; + if (searchEnabled) { + if (serverSide) { + searchBox='
    '+ + '
    '+ + '
    '+ + ''+ + '
    '+ + '
    '+ + '
    '+ + '
    '; + } else { + searchBox='
    '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '' + '' + '
    '; + } + } + + $('#main-nav').before('
    '+ + ''+ + ''+ + '
    '); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBox) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBox); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBox); + $('#searchBoxPos2').show(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js index 34f2450..96a64d1 100644 --- a/docs/html/menudata.js +++ b/docs/html/menudata.js @@ -25,11 +25,6 @@ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Related Pages",url:"pages.html"}, -{text:"Namespaces",url:"namespaces.html",children:[ -{text:"Namespace List",url:"namespaces.html"}, -{text:"Namespace Members",url:"namespacemembers.html",children:[ -{text:"All",url:"namespacemembers.html"}, -{text:"Functions",url:"namespacemembers_func.html"}]}]}, {text:"Classes",url:"annotated.html",children:[ {text:"Class List",url:"annotated.html"}, {text:"Class Index",url:"classes.html"}, @@ -39,7 +34,6 @@ var menudata={children:[ {text:"b",url:"functions.html#index_b"}, {text:"c",url:"functions.html#index_c"}, {text:"d",url:"functions.html#index_d"}, -{text:"e",url:"functions.html#index_e"}, {text:"f",url:"functions.html#index_f"}, {text:"g",url:"functions.html#index_g"}, {text:"h",url:"functions.html#index_h"}, @@ -53,23 +47,8 @@ var menudata={children:[ {text:"s",url:"functions.html#index_s"}, {text:"t",url:"functions.html#index_t"}, {text:"u",url:"functions.html#index_u"}, -{text:"v",url:"functions.html#index_v"}, -{text:"~",url:"functions.html#index__7E"}]}, -{text:"Functions",url:"functions_func.html",children:[ -{text:"a",url:"functions_func.html#index_a"}, -{text:"b",url:"functions_func.html#index_b"}, -{text:"d",url:"functions_func.html#index_d"}, -{text:"e",url:"functions_func.html#index_e"}, -{text:"f",url:"functions_func.html#index_f"}, -{text:"g",url:"functions_func.html#index_g"}, -{text:"i",url:"functions_func.html#index_i"}, -{text:"n",url:"functions_func.html#index_n"}, -{text:"o",url:"functions_func.html#index_o"}, -{text:"p",url:"functions_func.html#index_p"}, -{text:"r",url:"functions_func.html#index_r"}, -{text:"s",url:"functions_func.html#index_s"}, -{text:"t",url:"functions_func.html#index_t"}, -{text:"~",url:"functions_func.html#index__7E"}]}, +{text:"v",url:"functions.html#index_v"}]}, +{text:"Functions",url:"functions_func.html"}, {text:"Variables",url:"functions_vars.html",children:[ {text:"b",url:"functions_vars.html#index_b"}, {text:"c",url:"functions_vars.html#index_c"}, @@ -91,5 +70,4 @@ var menudata={children:[ {text:"File List",url:"files.html"}, {text:"File Members",url:"globals.html",children:[ {text:"All",url:"globals.html"}, -{text:"Functions",url:"globals_func.html"}, {text:"Enumerations",url:"globals_enum.html"}]}]}]} diff --git a/docs/html/navtree.css b/docs/html/navtree.css new file mode 100644 index 0000000..20c9e0d --- /dev/null +++ b/docs/html/navtree.css @@ -0,0 +1,147 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#fff; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + background-color: #FAFAFF; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: 280px; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url("splitbar.png"); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/html/navtree.js b/docs/html/navtree.js new file mode 100644 index 0000000..2798368 --- /dev/null +++ b/docs/html/navtree.js @@ -0,0 +1,549 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + var topOffset=5; + if (typeof page_layout!=='undefined' && page_layout==1) { + topOffset+=$('#top').outerHeight(); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/SignalInfo", "md_README.html#autotoc_md18", null ], + [ "FrameInfo", "md_README.html#autotoc_md20", null ], + [ "DbcDatabase", "md_README.html#autotoc_md22", null ], + [ "UI Tree Layer", "md_README.html#autotoc_md24", null ], + [ "TreeNode", "md_README.html#autotoc_md25", null ], + [ "Runtime Decode Layer", "md_README.html#autotoc_md27", null ], + [ "Purpose", "md_README.html#autotoc_md28", null ], + [ "ByteOrder", "md_README.html#autotoc_md30", null ], + [ "ValueType", "md_README.html#autotoc_md32", null ], + [ "DecodeSignal", "md_README.html#autotoc_md34", null ], + [ "DecodeFrame", "md_README.html#autotoc_md36", null ], + [ "FrameKey", "md_README.html#autotoc_md38", null ], + [ "DecodeDatabase", "md_README.html#autotoc_md40", null ], + [ "Decoder Layer", "md_README.html#autotoc_md42", null ], + [ "RawCanFrame", "md_README.html#autotoc_md43", null ], + [ "DecodedSignalValue", "md_README.html#autotoc_md45", null ], + [ "DecodedFrameValue", "md_README.html#autotoc_md47", null ], + [ "DbcDecoder", "md_README.html#autotoc_md49", null ], + [ "Parser Support", "md_README.html#autotoc_md51", null ], + [ "Supported DBC Syntax", "md_README.html#autotoc_md53", null ], + [ "Frame definition", "md_README.html#autotoc_md54", null ], + [ "Signal definition", "md_README.html#autotoc_md56", null ], + [ "Comments", "md_README.html#autotoc_md58", null ], + [ "CAN ID Normalization", "md_README.html#autotoc_md60", null ], + [ "PGN Extraction", "md_README.html#autotoc_md62", null ], + [ "Decode Flow", "md_README.html#autotoc_md64", null ], + [ "Intel and Motorola Extraction", "md_README.html#autotoc_md66", null ], + [ "Example Usage", "md_README.html#autotoc_md68", null ], + [ "Parse DBC", "md_README.html#autotoc_md69", null ], + [ "Build UI tree", "md_README.html#autotoc_md70", null ], + [ "Build runtime decode database", "md_README.html#autotoc_md71", null ], + [ "Decode a raw frame", "md_README.html#autotoc_md72", null ], + [ "Unified Decode Strategy", "md_README.html#autotoc_md74", [ + [ "live path", "md_README.html#autotoc_md75", null ], + [ "trace path", "md_README.html#autotoc_md76", null ] + ] ], + [ "Intended Use in FrameTap", "md_README.html#autotoc_md78", null ], + [ "Why the Tree Is Not Enough", "md_README.html#autotoc_md80", null ], + [ "Why No Abstract Factory Is Used", "md_README.html#autotoc_md82", null ], + [ "Current Limitations", "md_README.html#autotoc_md84", null ], + [ "Recommended Next Steps", "md_README.html#autotoc_md86", [ + [ "Stage 1 - already implemented", "md_README.html#autotoc_md87", null ], + [ "Stage 2", "md_README.html#autotoc_md88", null ], + [ "Stage 3", "md_README.html#autotoc_md89", null ], + [ "Stage 4", "md_README.html#autotoc_md90", null ] + ] ], + [ "Build Integration", "md_README.html#autotoc_md92", null ], + [ "Summary", "md_README.html#autotoc_md94", [ + [ "Parsed representation", "md_README.html#autotoc_md95", null ], + [ "Runtime decode representation", "md_README.html#autotoc_md96", null ] + ] ] + ] ], + [ "Classes", "annotated.html", [ + [ "Class List", "annotated.html", "annotated_dup" ], + [ "Class Index", "classes.html", null ], + [ "Class Members", "functions.html", [ + [ "All", "functions.html", null ], + [ "Functions", "functions_func.html", null ], + [ "Variables", "functions_vars.html", null ] + ] ] + ] ], + [ "Files", "files.html", [ + [ "File List", "files.html", "files_dup" ], + [ "File Members", "globals.html", [ + [ "All", "globals.html", null ], + [ "Enumerations", "globals_enum.html", null ] + ] ] + ] ] + ] ] +]; + +var NAVTREEINDEX = +[ +"annotated.html" +]; + +var SYNCONMSG = 'click to disable panel synchronisation'; +var SYNCOFFMSG = 'click to enable panel synchronisation'; \ No newline at end of file diff --git a/docs/html/navtreeindex0.js b/docs/html/navtreeindex0.js new file mode 100644 index 0000000..aa3896e --- /dev/null +++ b/docs/html/navtreeindex0.js @@ -0,0 +1,200 @@ +var NAVTREEINDEX0 = +{ +"annotated.html":[1,0], +"classDbcDecodeBuilder.html":[1,0,1], +"classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b":[1,0,1,0], +"classDbcDecoder.html":[1,0,2], +"classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7":[1,0,2,1], +"classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da":[1,0,2,0], +"classDbcParser.html":[1,0,3], +"classDbcParser.html#aef72826942c9095d653fafa435855e56":[1,0,3,0], +"classDbcTreeBuilder.html":[1,0,4], +"classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b":[1,0,4,0], +"classTreeNode.html":[1,0,15], +"classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1":[1,0,15,10], +"classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6":[1,0,15,5], +"classTreeNode.html#a6161f2ebb92184eab4215d121870e788":[1,0,15,3], +"classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f":[1,0,15,6], +"classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc":[1,0,15,1], +"classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d":[1,0,15,0], +"classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18":[1,0,15,8], +"classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae":[1,0,15,2], +"classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea":[1,0,15,4], +"classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9":[1,0,15,7], +"classTreeNode.html#afc503b40004764163605d6dbdb4ef811":[1,0,15,9], +"classes.html":[1,1], +"dbc__database_8h.html":[2,0,0], +"dbc__database_8h_source.html":[2,0,0], +"dbc__decode__builder_8cpp.html":[2,0,1], +"dbc__decode__builder_8cpp_source.html":[2,0,1], +"dbc__decode__builder_8h.html":[2,0,2], +"dbc__decode__builder_8h_source.html":[2,0,2], +"dbc__decoder_8cpp.html":[2,0,3], +"dbc__decoder_8cpp_source.html":[2,0,3], +"dbc__decoder_8h.html":[2,0,4], +"dbc__decoder_8h_source.html":[2,0,4], +"dbc__parser_8cpp.html":[2,0,5], +"dbc__parser_8cpp_source.html":[2,0,5], +"dbc__parser_8h.html":[2,0,6], +"dbc__parser_8h_source.html":[2,0,6], +"dbc__tree__builder_8cpp.html":[2,0,7], +"dbc__tree__builder_8cpp_source.html":[2,0,7], +"dbc__tree__builder_8h.html":[2,0,8], +"dbc__tree__builder_8h_source.html":[2,0,8], +"decode__database_8h.html":[2,0,9], +"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b":[2,0,9,5], +"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31":[2,0,9,5,1], +"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5":[2,0,9,5,0], +"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1":[2,0,9,6], +"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379":[2,0,9,6,1], +"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1aa1a914735b205424ba6c40b85528d78a":[2,0,9,6,0], +"decode__database_8h_source.html":[2,0,9], +"files.html":[2,0], +"frame__info_8h.html":[2,0,10], +"frame__info_8h_source.html":[2,0,10], +"functions.html":[1,2,0], +"functions_func.html":[1,2,1], +"functions_vars.html":[1,2,2], +"globals.html":[2,1,0], +"globals_enum.html":[2,1,1], +"index.html":[], +"main_8cpp.html":[2,0,11], +"main_8cpp_source.html":[2,0,11], +"md_README.html":[0], +"md_README.html#autotoc_md1":[0,0], +"md_README.html#autotoc_md10":[0,3,0], +"md_README.html#autotoc_md11":[0,3,1], +"md_README.html#autotoc_md12":[0,3,2], +"md_README.html#autotoc_md13":[0,3,3], +"md_README.html#autotoc_md14":[0,3,4], +"md_README.html#autotoc_md15":[0,3,5], +"md_README.html#autotoc_md17":[0,4], +"md_README.html#autotoc_md18":[0,5], +"md_README.html#autotoc_md20":[0,6], +"md_README.html#autotoc_md22":[0,7], +"md_README.html#autotoc_md24":[0,8], +"md_README.html#autotoc_md25":[0,9], +"md_README.html#autotoc_md27":[0,10], +"md_README.html#autotoc_md28":[0,11], +"md_README.html#autotoc_md3":[0,1], +"md_README.html#autotoc_md30":[0,12], +"md_README.html#autotoc_md32":[0,13], +"md_README.html#autotoc_md34":[0,14], +"md_README.html#autotoc_md36":[0,15], +"md_README.html#autotoc_md38":[0,16], +"md_README.html#autotoc_md4":[0,1,0], +"md_README.html#autotoc_md40":[0,17], +"md_README.html#autotoc_md42":[0,18], +"md_README.html#autotoc_md43":[0,19], +"md_README.html#autotoc_md45":[0,20], +"md_README.html#autotoc_md47":[0,21], +"md_README.html#autotoc_md49":[0,22], +"md_README.html#autotoc_md5":[0,1,1], +"md_README.html#autotoc_md51":[0,23], +"md_README.html#autotoc_md53":[0,24], +"md_README.html#autotoc_md54":[0,25], +"md_README.html#autotoc_md56":[0,26], +"md_README.html#autotoc_md58":[0,27], +"md_README.html#autotoc_md60":[0,28], +"md_README.html#autotoc_md62":[0,29], +"md_README.html#autotoc_md64":[0,30], +"md_README.html#autotoc_md66":[0,31], +"md_README.html#autotoc_md68":[0,32], +"md_README.html#autotoc_md69":[0,33], +"md_README.html#autotoc_md7":[0,2], +"md_README.html#autotoc_md70":[0,34], +"md_README.html#autotoc_md71":[0,35], +"md_README.html#autotoc_md72":[0,36], +"md_README.html#autotoc_md74":[0,37], +"md_README.html#autotoc_md75":[0,37,0], +"md_README.html#autotoc_md76":[0,37,1], +"md_README.html#autotoc_md78":[0,38], +"md_README.html#autotoc_md80":[0,39], +"md_README.html#autotoc_md82":[0,40], +"md_README.html#autotoc_md84":[0,41], +"md_README.html#autotoc_md86":[0,42], +"md_README.html#autotoc_md87":[0,42,0], +"md_README.html#autotoc_md88":[0,42,1], +"md_README.html#autotoc_md89":[0,42,2], +"md_README.html#autotoc_md9":[0,3], +"md_README.html#autotoc_md90":[0,42,3], +"md_README.html#autotoc_md92":[0,43], +"md_README.html#autotoc_md94":[0,44], +"md_README.html#autotoc_md95":[0,44,0], +"md_README.html#autotoc_md96":[0,44,1], +"pages.html":[], +"signal__info_8h.html":[2,0,12], +"signal__info_8h_source.html":[2,0,12], +"structDbcDatabase.html":[1,0,0], +"structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b":[1,0,0,0], +"structDecodeDatabase.html":[1,0,5], +"structDecodeFrame.html":[1,0,8], +"structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23":[1,0,8,4], +"structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d":[1,0,8,5], +"structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22":[1,0,8,7], +"structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41":[1,0,8,2], +"structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060":[1,0,8,3], +"structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf":[1,0,8,1], +"structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14":[1,0,8,8], +"structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579":[1,0,8,0], +"structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9":[1,0,8,6], +"structDecodeSignal.html":[1,0,9], +"structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25":[1,0,9,7], +"structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092":[1,0,9,9], +"structDecodeSignal.html#a428c39913a366a8476dd291061354391":[1,0,9,5], +"structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7":[1,0,9,8], +"structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780":[1,0,9,0], +"structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74":[1,0,9,6], +"structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8":[1,0,9,4], +"structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d":[1,0,9,1], +"structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa":[1,0,9,10], +"structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d":[1,0,9,3], +"structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb":[1,0,9,2], +"structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473":[1,0,9,11], +"structDecodedFrameValue.html":[1,0,6], +"structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0":[1,0,6,2], +"structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c":[1,0,6,0], +"structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8":[1,0,6,1], +"structDecodedSignalValue.html":[1,0,7], +"structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec":[1,0,7,1], +"structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978":[1,0,7,2], +"structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686":[1,0,7,3], +"structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7":[1,0,7,0], +"structFrameInfo.html":[1,0,10], +"structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf":[1,0,10,2], +"structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084":[1,0,10,8], +"structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d":[1,0,10,4], +"structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8":[1,0,10,6], +"structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9":[1,0,10,5], +"structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb":[1,0,10,0], +"structFrameInfo.html#ace75121294f9d89b762080ab5643293c":[1,0,10,7], +"structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943":[1,0,10,3], +"structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e":[1,0,10,1], +"structFrameKey.html":[1,0,11], +"structFrameKeyHasher.html":[1,0,12], +"structRawCanFrame.html":[1,0,13], +"structRawCanFrame.html#a0acb487612104c99c9907344c035df83":[1,0,13,2], +"structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4":[1,0,13,0], +"structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7":[1,0,13,1], +"structSignalInfo.html":[1,0,14], +"structSignalInfo.html#a1008b5201f71848177217bd52fb84baa":[1,0,14,2], +"structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01":[1,0,14,9], +"structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3":[1,0,14,10], +"structSignalInfo.html#a379e422a00cad56f896cacf60455b088":[1,0,14,0], +"structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f":[1,0,14,4], +"structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e":[1,0,14,6], +"structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5":[1,0,14,11], +"structSignalInfo.html#ace290724f9801521609aedaa946d61f1":[1,0,14,1], +"structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b":[1,0,14,7], +"structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52":[1,0,14,8], +"structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499":[1,0,14,5], +"structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c":[1,0,14,3], +"tree__node_8cpp.html":[2,0,13], +"tree__node_8cpp_source.html":[2,0,13], +"tree__node_8h.html":[2,0,14], +"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16":[2,0,14,1], +"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398":[2,0,14,1,2], +"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a3bb3e8c8a24891ba0f7608bcc96f8b0a":[2,0,14,1,1], +"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16afa03eb688ad8aa1db593d33dabd89bad":[2,0,14,1,0], +"tree__node_8h_source.html":[2,0,14] +}; diff --git a/docs/html/pages.html b/docs/html/pages.html index 8f9cce5..1f4374d 100644 --- a/docs/html/pages.html +++ b/docs/html/pages.html @@ -5,10 +5,17 @@ -DBC framework: Related Pages +DBC Framework: Related Pages + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,16 +35,53 @@
    - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    Related Pages
    @@ -47,9 +92,12 @@
    + - + diff --git a/docs/html/resize.js b/docs/html/resize.js new file mode 100644 index 0000000..7fe30d1 --- /dev/null +++ b/docs/html/resize.js @@ -0,0 +1,150 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; + + function readCookie(cookie) + { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + return 0; + } + + function writeCookie(cookie, val, expiration) + { + if (val==undefined) return; + if (expiration == null) { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth-barWidth, null); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height(); + var contentHeight,navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + content.css({height:contentHeight + "px"}); + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + var width=$(window).width(); + if (width!=collapsedWidth) { + if (width=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html new file mode 100644 index 0000000..bb9e364 --- /dev/null +++ b/docs/html/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js new file mode 100644 index 0000000..ca215cf --- /dev/null +++ b/docs/html/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['addchild_0',['AddChild',['../classTreeNode.html#a6161f2ebb92184eab4215d121870e788',1,'TreeNode']]] +]; diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html new file mode 100644 index 0000000..8989416 --- /dev/null +++ b/docs/html/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js new file mode 100644 index 0000000..4506f0c --- /dev/null +++ b/docs/html/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['build_0',['Build',['../classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b',1,'DbcDecodeBuilder::Build()'],['../classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b',1,'DbcTreeBuilder::Build()']]], + ['byteorder_1',['byteOrder',['../structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d',1,'DecodeSignal']]], + ['byteorder_2',['ByteOrder',['../decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b',1,'decode_database.h']]] +]; diff --git a/docs/html/search/all_10.html b/docs/html/search/all_10.html new file mode 100644 index 0000000..a7c1f9c --- /dev/null +++ b/docs/html/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js new file mode 100644 index 0000000..1917cda --- /dev/null +++ b/docs/html/search/all_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unit_0',['unit',['../structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092',1,'DecodeSignal::unit()'],['../structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01',1,'SignalInfo::unit()']]] +]; diff --git a/docs/html/search/all_11.html b/docs/html/search/all_11.html new file mode 100644 index 0000000..8f86146 --- /dev/null +++ b/docs/html/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js new file mode 100644 index 0000000..c0770ac --- /dev/null +++ b/docs/html/search/all_11.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['valid_0',['valid',['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid()'],['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid()']]], + ['valuetype_1',['valueType',['../structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8',1,'DecodeSignal']]], + ['valuetype_2',['ValueType',['../decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1',1,'decode_database.h']]] +]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html new file mode 100644 index 0000000..98e648c --- /dev/null +++ b/docs/html/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js new file mode 100644 index 0000000..ec3952d --- /dev/null +++ b/docs/html/search/all_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['canid_0',['canId',['../structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4',1,'RawCanFrame::canId()'],['../structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf',1,'DecodeFrame::canId()'],['../structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e',1,'FrameInfo::canId()']]], + ['comment_1',['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()']]] +]; diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html new file mode 100644 index 0000000..f4e8da7 --- /dev/null +++ b/docs/html/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js new file mode 100644 index 0000000..68f18d8 --- /dev/null +++ b/docs/html/search/all_3.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['data_0',['data',['../structRawCanFrame.html#a0acb487612104c99c9907344c035df83',1,'RawCanFrame']]], + ['dbc_20parser_20and_20runtime_20decode_20module_20documentation_1',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]], + ['dbc_5fdatabase_2eh_2',['dbc_database.h',['../dbc__database_8h.html',1,'']]], + ['dbc_5fdecode_5fbuilder_2ecpp_3',['dbc_decode_builder.cpp',['../dbc__decode__builder_8cpp.html',1,'']]], + ['dbc_5fdecode_5fbuilder_2eh_4',['dbc_decode_builder.h',['../dbc__decode__builder_8h.html',1,'']]], + ['dbc_5fdecoder_2ecpp_5',['dbc_decoder.cpp',['../dbc__decoder_8cpp.html',1,'']]], + ['dbc_5fdecoder_2eh_6',['dbc_decoder.h',['../dbc__decoder_8h.html',1,'']]], + ['dbc_5fparser_2ecpp_7',['dbc_parser.cpp',['../dbc__parser_8cpp.html',1,'']]], + ['dbc_5fparser_2eh_8',['dbc_parser.h',['../dbc__parser_8h.html',1,'']]], + ['dbc_5ftree_5fbuilder_2ecpp_9',['dbc_tree_builder.cpp',['../dbc__tree__builder_8cpp.html',1,'']]], + ['dbc_5ftree_5fbuilder_2eh_10',['dbc_tree_builder.h',['../dbc__tree__builder_8h.html',1,'']]], + ['dbcdatabase_11',['DbcDatabase',['../structDbcDatabase.html',1,'']]], + ['dbcdecodebuilder_12',['DbcDecodeBuilder',['../classDbcDecodeBuilder.html',1,'']]], + ['dbcdecoder_13',['DbcDecoder',['../classDbcDecoder.html',1,'']]], + ['dbcparser_14',['DbcParser',['../classDbcParser.html',1,'']]], + ['dbctreebuilder_15',['DbcTreeBuilder',['../classDbcTreeBuilder.html',1,'']]], + ['decode_16',['Decode',['../classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7',1,'DbcDecoder']]], + ['decode_5fdatabase_2eh_17',['decode_database.h',['../decode__database_8h.html',1,'']]], + ['decodedatabase_18',['DecodeDatabase',['../structDecodeDatabase.html',1,'']]], + ['decodedframevalue_19',['DecodedFrameValue',['../structDecodedFrameValue.html',1,'']]], + ['decodedsignalvalue_20',['DecodedSignalValue',['../structDecodedSignalValue.html',1,'']]], + ['decodeframe_21',['DecodeFrame',['../structDecodeFrame.html',1,'']]], + ['decodesignal_22',['DecodeSignal',['../structDecodeSignal.html',1,'']]], + ['definition_23',['definition',['../structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7',1,'DecodedSignalValue::definition()'],['../structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c',1,'DecodedFrameValue::definition()']]], + ['dlc_24',['dlc',['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc()'],['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc()']]] +]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html new file mode 100644 index 0000000..678d3a2 --- /dev/null +++ b/docs/html/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js new file mode 100644 index 0000000..741adc5 --- /dev/null +++ b/docs/html/search/all_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['factor_0',['factor',['../structDecodeSignal.html#a428c39913a366a8476dd291061354391',1,'DecodeSignal::factor()'],['../structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499',1,'SignalInfo::factor()']]], + ['findframe_1',['FindFrame',['../classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da',1,'DbcDecoder']]], + ['frame_5finfo_2eh_2',['frame_info.h',['../frame__info_8h.html',1,'']]], + ['frameinfo_3',['FrameInfo',['../structFrameInfo.html',1,'']]], + ['framekey_4',['FrameKey',['../structFrameKey.html',1,'']]], + ['framekeyhasher_5',['FrameKeyHasher',['../structFrameKeyHasher.html',1,'']]], + ['frames_6',['frames',['../structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b',1,'DbcDatabase']]] +]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html new file mode 100644 index 0000000..aa9af78 --- /dev/null +++ b/docs/html/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js new file mode 100644 index 0000000..3319dfe --- /dev/null +++ b/docs/html/search/all_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['getchild_0',['GetChild',['../classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6',1,'TreeNode::GetChild(std::size_t index) const'],['../classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f',1,'TreeNode::GetChild(std::size_t index)']]], + ['getchildcount_1',['GetChildCount',['../classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea',1,'TreeNode']]], + ['getframe_2',['GetFrame',['../classTreeNode.html#afc503b40004764163605d6dbdb4ef811',1,'TreeNode']]], + ['getname_3',['GetName',['../classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18',1,'TreeNode']]], + ['getsignal_4',['GetSignal',['../classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1',1,'TreeNode']]], + ['gettype_5',['GetType',['../classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9',1,'TreeNode']]] +]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html new file mode 100644 index 0000000..d3026a7 --- /dev/null +++ b/docs/html/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js new file mode 100644 index 0000000..34587db --- /dev/null +++ b/docs/html/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['haspgn_0',['hasPgn',['../structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d',1,'DecodeFrame::hasPgn()'],['../structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d',1,'FrameInfo::hasPgn()']]] +]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html new file mode 100644 index 0000000..b2ee042 --- /dev/null +++ b/docs/html/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js new file mode 100644 index 0000000..b82eca0 --- /dev/null +++ b/docs/html/search/all_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['isextended_0',['isExtended',['../structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7',1,'RawCanFrame::isExtended()'],['../structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41',1,'DecodeFrame::isExtended()'],['../structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf',1,'FrameInfo::isExtended()']]], + ['islittleendian_1',['isLittleEndian',['../structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c',1,'SignalInfo']]], + ['issigned_2',['isSigned',['../structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f',1,'SignalInfo']]] +]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html new file mode 100644 index 0000000..40a0b3f --- /dev/null +++ b/docs/html/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js new file mode 100644 index 0000000..12aa6af --- /dev/null +++ b/docs/html/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['length_0',['length',['../structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb',1,'DecodeSignal::length()'],['../structSignalInfo.html#a1008b5201f71848177217bd52fb84baa',1,'SignalInfo::length()']]] +]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html new file mode 100644 index 0000000..7c49144 --- /dev/null +++ b/docs/html/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js new file mode 100644 index 0000000..aeab39d --- /dev/null +++ b/docs/html/search/all_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]], + ['maximum_1',['maximum',['../structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7',1,'DecodeSignal::maximum()'],['../structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52',1,'SignalInfo::maximum()']]], + ['minimum_2',['minimum',['../structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25',1,'DecodeSignal::minimum()'],['../structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b',1,'SignalInfo::minimum()']]] +]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html new file mode 100644 index 0000000..fc9d79c --- /dev/null +++ b/docs/html/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js new file mode 100644 index 0000000..251adad --- /dev/null +++ b/docs/html/search/all_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['name_0',['name',['../structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780',1,'DecodeSignal::name()'],['../structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579',1,'DecodeFrame::name()'],['../structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb',1,'FrameInfo::name()'],['../structSignalInfo.html#a379e422a00cad56f896cacf60455b088',1,'SignalInfo::name()']]], + ['nodetype_1',['NodeType',['../tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16',1,'tree_node.h']]] +]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html new file mode 100644 index 0000000..dafb1fa --- /dev/null +++ b/docs/html/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js new file mode 100644 index 0000000..c896e33 --- /dev/null +++ b/docs/html/search/all_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['offset_0',['offset',['../structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74',1,'DecodeSignal::offset()'],['../structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e',1,'SignalInfo::offset()']]] +]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html new file mode 100644 index 0000000..9df619d --- /dev/null +++ b/docs/html/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js new file mode 100644 index 0000000..badd1ba --- /dev/null +++ b/docs/html/search/all_c.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['parsefile_0',['ParseFile',['../classDbcParser.html#aef72826942c9095d653fafa435855e56',1,'DbcParser']]], + ['pgn_1',['pgn',['../structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23',1,'DecodeFrame::pgn()'],['../structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943',1,'FrameInfo::pgn()']]], + ['physicalvalue_2',['physicalValue',['../structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978',1,'DecodedSignalValue']]], + ['public_3',['public',['../structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8',1,'DecodedFrameValue::public()'],['../structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14',1,'DecodeFrame::public()'],['../structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084',1,'FrameInfo::public()']]] +]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html new file mode 100644 index 0000000..95d8eec --- /dev/null +++ b/docs/html/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js new file mode 100644 index 0000000..55695ce --- /dev/null +++ b/docs/html/search/all_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['rawcanframe_0',['RawCanFrame',['../structRawCanFrame.html',1,'']]], + ['rawvalue_1',['rawValue',['../structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec',1,'DecodedSignalValue']]], + ['receivers_2',['receivers',['../structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa',1,'DecodeSignal::receivers()'],['../structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3',1,'SignalInfo::receivers()']]] +]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html new file mode 100644 index 0000000..a54e120 --- /dev/null +++ b/docs/html/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js new file mode 100644 index 0000000..d56d0c7 --- /dev/null +++ b/docs/html/search/all_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['signal_5finfo_2eh_0',['signal_info.h',['../signal__info_8h.html',1,'']]], + ['signalinfo_1',['SignalInfo',['../structSignalInfo.html',1,'']]], + ['startbit_2',['startBit',['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit()'],['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit()']]] +]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html new file mode 100644 index 0000000..8d0aed3 --- /dev/null +++ b/docs/html/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js new file mode 100644 index 0000000..b7db7b5 --- /dev/null +++ b/docs/html/search/all_f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['transmitter_0',['transmitter',['../structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9',1,'DecodeFrame::transmitter()'],['../structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8',1,'FrameInfo::transmitter()']]], + ['tree_5fnode_2ecpp_1',['tree_node.cpp',['../tree__node_8cpp.html',1,'']]], + ['tree_5fnode_2eh_2',['tree_node.h',['../tree__node_8h.html',1,'']]], + ['treenode_3',['TreeNode',['../classTreeNode.html',1,'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)']]] +]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html new file mode 100644 index 0000000..9d4f871 --- /dev/null +++ b/docs/html/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js new file mode 100644 index 0000000..85200ca --- /dev/null +++ b/docs/html/search/classes_0.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['dbcdatabase_0',['DbcDatabase',['../structDbcDatabase.html',1,'']]], + ['dbcdecodebuilder_1',['DbcDecodeBuilder',['../classDbcDecodeBuilder.html',1,'']]], + ['dbcdecoder_2',['DbcDecoder',['../classDbcDecoder.html',1,'']]], + ['dbcparser_3',['DbcParser',['../classDbcParser.html',1,'']]], + ['dbctreebuilder_4',['DbcTreeBuilder',['../classDbcTreeBuilder.html',1,'']]], + ['decodedatabase_5',['DecodeDatabase',['../structDecodeDatabase.html',1,'']]], + ['decodedframevalue_6',['DecodedFrameValue',['../structDecodedFrameValue.html',1,'']]], + ['decodedsignalvalue_7',['DecodedSignalValue',['../structDecodedSignalValue.html',1,'']]], + ['decodeframe_8',['DecodeFrame',['../structDecodeFrame.html',1,'']]], + ['decodesignal_9',['DecodeSignal',['../structDecodeSignal.html',1,'']]] +]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html new file mode 100644 index 0000000..0557f9f --- /dev/null +++ b/docs/html/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js new file mode 100644 index 0000000..4259dc9 --- /dev/null +++ b/docs/html/search/classes_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['frameinfo_0',['FrameInfo',['../structFrameInfo.html',1,'']]], + ['framekey_1',['FrameKey',['../structFrameKey.html',1,'']]], + ['framekeyhasher_2',['FrameKeyHasher',['../structFrameKeyHasher.html',1,'']]] +]; diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html new file mode 100644 index 0000000..fa20861 --- /dev/null +++ b/docs/html/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js new file mode 100644 index 0000000..ee60254 --- /dev/null +++ b/docs/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rawcanframe_0',['RawCanFrame',['../structRawCanFrame.html',1,'']]] +]; diff --git a/docs/html/search/classes_3.html b/docs/html/search/classes_3.html new file mode 100644 index 0000000..98fbc87 --- /dev/null +++ b/docs/html/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js new file mode 100644 index 0000000..3cc8467 --- /dev/null +++ b/docs/html/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['signalinfo_0',['SignalInfo',['../structSignalInfo.html',1,'']]] +]; diff --git a/docs/html/search/classes_4.html b/docs/html/search/classes_4.html new file mode 100644 index 0000000..3b6c51e --- /dev/null +++ b/docs/html/search/classes_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js new file mode 100644 index 0000000..740b87e --- /dev/null +++ b/docs/html/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['treenode_0',['TreeNode',['../classTreeNode.html',1,'']]] +]; diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg new file mode 100644 index 0000000..a933eea --- /dev/null +++ b/docs/html/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/docs/html/search/enums_0.html b/docs/html/search/enums_0.html new file mode 100644 index 0000000..ec25efd --- /dev/null +++ b/docs/html/search/enums_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js new file mode 100644 index 0000000..f52116f --- /dev/null +++ b/docs/html/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['byteorder_0',['ByteOrder',['../decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b',1,'decode_database.h']]] +]; diff --git a/docs/html/search/enums_1.html b/docs/html/search/enums_1.html new file mode 100644 index 0000000..cc99a33 --- /dev/null +++ b/docs/html/search/enums_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/enums_1.js b/docs/html/search/enums_1.js new file mode 100644 index 0000000..07a6d2a --- /dev/null +++ b/docs/html/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nodetype_0',['NodeType',['../tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16',1,'tree_node.h']]] +]; diff --git a/docs/html/search/enums_2.html b/docs/html/search/enums_2.html new file mode 100644 index 0000000..cd5e771 --- /dev/null +++ b/docs/html/search/enums_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/enums_2.js b/docs/html/search/enums_2.js new file mode 100644 index 0000000..9189d7f --- /dev/null +++ b/docs/html/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['valuetype_0',['ValueType',['../decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1',1,'decode_database.h']]] +]; diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html new file mode 100644 index 0000000..2dbb4c2 --- /dev/null +++ b/docs/html/search/files_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js new file mode 100644 index 0000000..e3df137 --- /dev/null +++ b/docs/html/search/files_0.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['dbc_5fdatabase_2eh_0',['dbc_database.h',['../dbc__database_8h.html',1,'']]], + ['dbc_5fdecode_5fbuilder_2ecpp_1',['dbc_decode_builder.cpp',['../dbc__decode__builder_8cpp.html',1,'']]], + ['dbc_5fdecode_5fbuilder_2eh_2',['dbc_decode_builder.h',['../dbc__decode__builder_8h.html',1,'']]], + ['dbc_5fdecoder_2ecpp_3',['dbc_decoder.cpp',['../dbc__decoder_8cpp.html',1,'']]], + ['dbc_5fdecoder_2eh_4',['dbc_decoder.h',['../dbc__decoder_8h.html',1,'']]], + ['dbc_5fparser_2ecpp_5',['dbc_parser.cpp',['../dbc__parser_8cpp.html',1,'']]], + ['dbc_5fparser_2eh_6',['dbc_parser.h',['../dbc__parser_8h.html',1,'']]], + ['dbc_5ftree_5fbuilder_2ecpp_7',['dbc_tree_builder.cpp',['../dbc__tree__builder_8cpp.html',1,'']]], + ['dbc_5ftree_5fbuilder_2eh_8',['dbc_tree_builder.h',['../dbc__tree__builder_8h.html',1,'']]], + ['decode_5fdatabase_2eh_9',['decode_database.h',['../decode__database_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_1.html b/docs/html/search/files_1.html new file mode 100644 index 0000000..18ccd15 --- /dev/null +++ b/docs/html/search/files_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js new file mode 100644 index 0000000..7cebf32 --- /dev/null +++ b/docs/html/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['frame_5finfo_2eh_0',['frame_info.h',['../frame__info_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_2.html b/docs/html/search/files_2.html new file mode 100644 index 0000000..a4c2be4 --- /dev/null +++ b/docs/html/search/files_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js new file mode 100644 index 0000000..695b4fd --- /dev/null +++ b/docs/html/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]] +]; diff --git a/docs/html/search/files_3.html b/docs/html/search/files_3.html new file mode 100644 index 0000000..3ac4cfb --- /dev/null +++ b/docs/html/search/files_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js new file mode 100644 index 0000000..e805d1d --- /dev/null +++ b/docs/html/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['signal_5finfo_2eh_0',['signal_info.h',['../signal__info_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_4.html b/docs/html/search/files_4.html new file mode 100644 index 0000000..eb19ecf --- /dev/null +++ b/docs/html/search/files_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/files_4.js b/docs/html/search/files_4.js new file mode 100644 index 0000000..b1801c1 --- /dev/null +++ b/docs/html/search/files_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['tree_5fnode_2ecpp_0',['tree_node.cpp',['../tree__node_8cpp.html',1,'']]], + ['tree_5fnode_2eh_1',['tree_node.h',['../tree__node_8h.html',1,'']]] +]; diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html new file mode 100644 index 0000000..3b739c7 --- /dev/null +++ b/docs/html/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js new file mode 100644 index 0000000..ca215cf --- /dev/null +++ b/docs/html/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['addchild_0',['AddChild',['../classTreeNode.html#a6161f2ebb92184eab4215d121870e788',1,'TreeNode']]] +]; diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html new file mode 100644 index 0000000..2cef5e3 --- /dev/null +++ b/docs/html/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js new file mode 100644 index 0000000..1ce5ea1 --- /dev/null +++ b/docs/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['build_0',['Build',['../classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b',1,'DbcDecodeBuilder::Build()'],['../classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b',1,'DbcTreeBuilder::Build()']]] +]; diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html new file mode 100644 index 0000000..3308c65 --- /dev/null +++ b/docs/html/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js new file mode 100644 index 0000000..a362985 --- /dev/null +++ b/docs/html/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['decode_0',['Decode',['../classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7',1,'DbcDecoder']]] +]; diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html new file mode 100644 index 0000000..43ac697 --- /dev/null +++ b/docs/html/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js new file mode 100644 index 0000000..4087d48 --- /dev/null +++ b/docs/html/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['findframe_0',['FindFrame',['../classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da',1,'DbcDecoder']]] +]; diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html new file mode 100644 index 0000000..d12c2df --- /dev/null +++ b/docs/html/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js new file mode 100644 index 0000000..3319dfe --- /dev/null +++ b/docs/html/search/functions_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['getchild_0',['GetChild',['../classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6',1,'TreeNode::GetChild(std::size_t index) const'],['../classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f',1,'TreeNode::GetChild(std::size_t index)']]], + ['getchildcount_1',['GetChildCount',['../classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea',1,'TreeNode']]], + ['getframe_2',['GetFrame',['../classTreeNode.html#afc503b40004764163605d6dbdb4ef811',1,'TreeNode']]], + ['getname_3',['GetName',['../classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18',1,'TreeNode']]], + ['getsignal_4',['GetSignal',['../classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1',1,'TreeNode']]], + ['gettype_5',['GetType',['../classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9',1,'TreeNode']]] +]; diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html new file mode 100644 index 0000000..7266236 --- /dev/null +++ b/docs/html/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js new file mode 100644 index 0000000..514d33b --- /dev/null +++ b/docs/html/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parsefile_0',['ParseFile',['../classDbcParser.html#aef72826942c9095d653fafa435855e56',1,'DbcParser']]] +]; diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html new file mode 100644 index 0000000..7f9fc45 --- /dev/null +++ b/docs/html/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js new file mode 100644 index 0000000..b3a8b4b --- /dev/null +++ b/docs/html/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['treenode_0',['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)']]] +]; diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg new file mode 100644 index 0000000..03626f6 --- /dev/null +++ b/docs/html/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html new file mode 100644 index 0000000..2b9360b --- /dev/null +++ b/docs/html/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/docs/html/search/pages_0.html b/docs/html/search/pages_0.html new file mode 100644 index 0000000..1981712 --- /dev/null +++ b/docs/html/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/pages_0.js b/docs/html/search/pages_0.js new file mode 100644 index 0000000..10cf524 --- /dev/null +++ b/docs/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dbc_20parser_20and_20runtime_20decode_20module_20documentation_0',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]] +]; diff --git a/docs/html/search/search.css b/docs/html/search/search.css new file mode 100644 index 0000000..648a792 --- /dev/null +++ b/docs/html/search/search.css @@ -0,0 +1,263 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 19px; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/html/search/search.js b/docs/html/search/search.js new file mode 100644 index 0000000..607f4e1 --- /dev/null +++ b/docs/html/search/search.js @@ -0,0 +1,802 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var width = 400; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js new file mode 100644 index 0000000..b7fd3e2 --- /dev/null +++ b/docs/html/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['byteorder_0',['byteOrder',['../structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d',1,'DecodeSignal']]] +]; diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html new file mode 100644 index 0000000..5f8e440 --- /dev/null +++ b/docs/html/search/variables_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js new file mode 100644 index 0000000..ec3952d --- /dev/null +++ b/docs/html/search/variables_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['canid_0',['canId',['../structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4',1,'RawCanFrame::canId()'],['../structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf',1,'DecodeFrame::canId()'],['../structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e',1,'FrameInfo::canId()']]], + ['comment_1',['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()']]] +]; diff --git a/docs/html/search/variables_2.html b/docs/html/search/variables_2.html new file mode 100644 index 0000000..77a7f48 --- /dev/null +++ b/docs/html/search/variables_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js new file mode 100644 index 0000000..862409f --- /dev/null +++ b/docs/html/search/variables_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['data_0',['data',['../structRawCanFrame.html#a0acb487612104c99c9907344c035df83',1,'RawCanFrame']]], + ['definition_1',['definition',['../structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7',1,'DecodedSignalValue::definition()'],['../structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c',1,'DecodedFrameValue::definition()']]], + ['dlc_2',['dlc',['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc()'],['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc()']]] +]; diff --git a/docs/html/search/variables_3.html b/docs/html/search/variables_3.html new file mode 100644 index 0000000..3ee62ba --- /dev/null +++ b/docs/html/search/variables_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js new file mode 100644 index 0000000..ac972b6 --- /dev/null +++ b/docs/html/search/variables_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['factor_0',['factor',['../structDecodeSignal.html#a428c39913a366a8476dd291061354391',1,'DecodeSignal::factor()'],['../structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499',1,'SignalInfo::factor()']]], + ['frames_1',['frames',['../structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b',1,'DbcDatabase']]] +]; diff --git a/docs/html/search/variables_4.html b/docs/html/search/variables_4.html new file mode 100644 index 0000000..640713f --- /dev/null +++ b/docs/html/search/variables_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_4.js b/docs/html/search/variables_4.js new file mode 100644 index 0000000..34587db --- /dev/null +++ b/docs/html/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['haspgn_0',['hasPgn',['../structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d',1,'DecodeFrame::hasPgn()'],['../structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d',1,'FrameInfo::hasPgn()']]] +]; diff --git a/docs/html/search/variables_5.html b/docs/html/search/variables_5.html new file mode 100644 index 0000000..7b2ba97 --- /dev/null +++ b/docs/html/search/variables_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_5.js b/docs/html/search/variables_5.js new file mode 100644 index 0000000..b82eca0 --- /dev/null +++ b/docs/html/search/variables_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['isextended_0',['isExtended',['../structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7',1,'RawCanFrame::isExtended()'],['../structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41',1,'DecodeFrame::isExtended()'],['../structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf',1,'FrameInfo::isExtended()']]], + ['islittleendian_1',['isLittleEndian',['../structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c',1,'SignalInfo']]], + ['issigned_2',['isSigned',['../structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f',1,'SignalInfo']]] +]; diff --git a/docs/html/search/variables_6.html b/docs/html/search/variables_6.html new file mode 100644 index 0000000..fb1de8f --- /dev/null +++ b/docs/html/search/variables_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js new file mode 100644 index 0000000..12aa6af --- /dev/null +++ b/docs/html/search/variables_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['length_0',['length',['../structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb',1,'DecodeSignal::length()'],['../structSignalInfo.html#a1008b5201f71848177217bd52fb84baa',1,'SignalInfo::length()']]] +]; diff --git a/docs/html/search/variables_7.html b/docs/html/search/variables_7.html new file mode 100644 index 0000000..cf8dcf4 --- /dev/null +++ b/docs/html/search/variables_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_7.js b/docs/html/search/variables_7.js new file mode 100644 index 0000000..4b85df7 --- /dev/null +++ b/docs/html/search/variables_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['maximum_0',['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()']]] +]; diff --git a/docs/html/search/variables_8.html b/docs/html/search/variables_8.html new file mode 100644 index 0000000..88cbb01 --- /dev/null +++ b/docs/html/search/variables_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_8.js b/docs/html/search/variables_8.js new file mode 100644 index 0000000..53c98f7 --- /dev/null +++ b/docs/html/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['name_0',['name',['../structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780',1,'DecodeSignal::name()'],['../structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579',1,'DecodeFrame::name()'],['../structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb',1,'FrameInfo::name()'],['../structSignalInfo.html#a379e422a00cad56f896cacf60455b088',1,'SignalInfo::name()']]] +]; diff --git a/docs/html/search/variables_9.html b/docs/html/search/variables_9.html new file mode 100644 index 0000000..36c49bd --- /dev/null +++ b/docs/html/search/variables_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_9.js b/docs/html/search/variables_9.js new file mode 100644 index 0000000..c896e33 --- /dev/null +++ b/docs/html/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['offset_0',['offset',['../structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74',1,'DecodeSignal::offset()'],['../structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e',1,'SignalInfo::offset()']]] +]; diff --git a/docs/html/search/variables_a.html b/docs/html/search/variables_a.html new file mode 100644 index 0000000..0005c6a --- /dev/null +++ b/docs/html/search/variables_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_a.js b/docs/html/search/variables_a.js new file mode 100644 index 0000000..3195ea0 --- /dev/null +++ b/docs/html/search/variables_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['pgn_0',['pgn',['../structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23',1,'DecodeFrame::pgn()'],['../structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943',1,'FrameInfo::pgn()']]], + ['physicalvalue_1',['physicalValue',['../structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978',1,'DecodedSignalValue']]], + ['public_2',['public',['../structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8',1,'DecodedFrameValue::public()'],['../structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14',1,'DecodeFrame::public()'],['../structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084',1,'FrameInfo::public()']]] +]; diff --git a/docs/html/search/variables_b.html b/docs/html/search/variables_b.html new file mode 100644 index 0000000..757c068 --- /dev/null +++ b/docs/html/search/variables_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_b.js b/docs/html/search/variables_b.js new file mode 100644 index 0000000..4be5336 --- /dev/null +++ b/docs/html/search/variables_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['rawvalue_0',['rawValue',['../structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec',1,'DecodedSignalValue']]], + ['receivers_1',['receivers',['../structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa',1,'DecodeSignal::receivers()'],['../structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3',1,'SignalInfo::receivers()']]] +]; diff --git a/docs/html/search/variables_c.html b/docs/html/search/variables_c.html new file mode 100644 index 0000000..451a136 --- /dev/null +++ b/docs/html/search/variables_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_c.js b/docs/html/search/variables_c.js new file mode 100644 index 0000000..95f24d0 --- /dev/null +++ b/docs/html/search/variables_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['startbit_0',['startBit',['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit()'],['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit()']]] +]; diff --git a/docs/html/search/variables_d.html b/docs/html/search/variables_d.html new file mode 100644 index 0000000..aea4286 --- /dev/null +++ b/docs/html/search/variables_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_d.js b/docs/html/search/variables_d.js new file mode 100644 index 0000000..9f0de08 --- /dev/null +++ b/docs/html/search/variables_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['transmitter_0',['transmitter',['../structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9',1,'DecodeFrame::transmitter()'],['../structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8',1,'FrameInfo::transmitter()']]] +]; diff --git a/docs/html/search/variables_e.html b/docs/html/search/variables_e.html new file mode 100644 index 0000000..ec3793e --- /dev/null +++ b/docs/html/search/variables_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_e.js b/docs/html/search/variables_e.js new file mode 100644 index 0000000..1917cda --- /dev/null +++ b/docs/html/search/variables_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unit_0',['unit',['../structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092',1,'DecodeSignal::unit()'],['../structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01',1,'SignalInfo::unit()']]] +]; diff --git a/docs/html/search/variables_f.html b/docs/html/search/variables_f.html new file mode 100644 index 0000000..ee82fce --- /dev/null +++ b/docs/html/search/variables_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_f.js b/docs/html/search/variables_f.js new file mode 100644 index 0000000..e8ddaf7 --- /dev/null +++ b/docs/html/search/variables_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['valid_0',['valid',['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid()'],['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid()']]], + ['valuetype_1',['valueType',['../structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8',1,'DecodeSignal']]] +]; diff --git a/docs/html/signal__info_8h.html b/docs/html/signal__info_8h.html index f41b4db..e19351b 100644 --- a/docs/html/signal__info_8h.html +++ b/docs/html/signal__info_8h.html @@ -5,10 +5,17 @@ -DBC framework: signal_info.h File Reference +DBC Framework: signal_info.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    @@ -70,9 +109,13 @@ Classes

    Definition in file signal_info.h.

    + - + diff --git a/docs/html/signal__info_8h.js b/docs/html/signal__info_8h.js new file mode 100644 index 0000000..5b565e1 --- /dev/null +++ b/docs/html/signal__info_8h.js @@ -0,0 +1,4 @@ +var signal__info_8h = +[ + [ "SignalInfo", "structSignalInfo.html", "structSignalInfo" ] +]; \ No newline at end of file diff --git a/docs/html/signal__info_8h_source.html b/docs/html/signal__info_8h_source.html index abdeb3e..95e3958 100644 --- a/docs/html/signal__info_8h_source.html +++ b/docs/html/signal__info_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: signal_info.h Source File +DBC Framework: signal_info.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,62 +35,79 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    signal_info.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file signal_info.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef SIGNAL_INFO_H
    13#define SIGNAL_INFO_H
    14
    15#include <string>
    16#include <vector>
    17#include <cstdint>
    -
    18
    -
    19/**
    -
    20 * @brief Describes one signal inside a DBC frame.
    -
    21 */
    +
    18
    22struct SignalInfo {
    -
    23 std::string name; /**< Signal name. */
    -
    24 std::uint32_t startBit; /**< Start bit in DBC notation. */
    -
    25 std::uint32_t length; /**< Signal length in bits. */
    -
    26 bool isLittleEndian; /**< true for Intel, false for Motorola. */
    -
    27 bool isSigned; /**< true if signal is signed. */
    -
    28 double factor; /**< Scaling factor. */
    -
    29 double offset; /**< Physical offset. */
    -
    30 double minimum; /**< Minimum physical value. */
    -
    31 double maximum; /**< Maximum physical value. */
    -
    32 std::string unit; /**< Physical unit. */
    -
    33 std::vector<std::string> receivers; /**< Signal receivers. */
    -
    34 std::string comment; /**< Optional signal comment. */
    -
    35
    - +
    23 std::string name;
    +
    24 std::uint32_t startBit;
    +
    25 std::uint32_t length;
    + +
    27 bool isSigned;
    +
    28 double factor;
    +
    29 double offset;
    +
    30 double minimum;
    +
    31 double maximum;
    +
    32 std::string unit;
    +
    33 std::vector<std::string> receivers;
    +
    34 std::string comment;
    +
    37 : name()
    38 , startBit (0U)
    39 , length (0U)
    @@ -105,7 +130,6 @@
    std::vector< std::string > receivers
    Definition: signal_info.h:33
    std::string name
    Definition: signal_info.h:23
    bool isSigned
    Definition: signal_info.h:27
    -
    double offset
    Definition: signal_info.h:29
    std::string comment
    Definition: signal_info.h:34
    std::uint32_t startBit
    Definition: signal_info.h:24
    @@ -114,9 +138,13 @@
    double factor
    Definition: signal_info.h:28
    bool isLittleEndian
    Definition: signal_info.h:26
    +
    - + diff --git a/docs/html/structDbcDatabase-members.html b/docs/html/structDbcDatabase-members.html index ad6b28c..ec9b049 100644 --- a/docs/html/structDbcDatabase-members.html +++ b/docs/html/structDbcDatabase-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DbcDatabase Member List
    @@ -53,9 +91,12 @@
    framesDbcDatabase
    + - + diff --git a/docs/html/structDbcDatabase.html b/docs/html/structDbcDatabase.html index 2068a72..3154d21 100644 --- a/docs/html/structDbcDatabase.html +++ b/docs/html/structDbcDatabase.html @@ -5,10 +5,17 @@ -DBC framework: DbcDatabase Struct Reference +DBC Framework: DbcDatabase Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + @@ -90,9 +128,13 @@ Public Attributes
  • dbc_database.h
  • + - + diff --git a/docs/html/structDbcDatabase.js b/docs/html/structDbcDatabase.js new file mode 100644 index 0000000..43ad455 --- /dev/null +++ b/docs/html/structDbcDatabase.js @@ -0,0 +1,4 @@ +var structDbcDatabase = +[ + [ "frames", "structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b", null ] +]; \ No newline at end of file diff --git a/docs/html/structDecodeDatabase-members.html b/docs/html/structDecodeDatabase-members.html index cde9ba8..6c0bf65 100644 --- a/docs/html/structDecodeDatabase-members.html +++ b/docs/html/structDecodeDatabase-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DecodeDatabase Member List
    @@ -51,12 +89,15 @@

    This is the complete list of members for DecodeDatabase, including all inherited members.

    - - + +
    frameIndexByKeyDecodeDatabase
    framesDecodeDatabase
    frameIndexByKey (defined in DecodeDatabase)DecodeDatabase
    frames (defined in DecodeDatabase)DecodeDatabase
    + - + diff --git a/docs/html/structDecodeDatabase.html b/docs/html/structDecodeDatabase.html index 0ac4fbd..d5057a5 100644 --- a/docs/html/structDecodeDatabase.html +++ b/docs/html/structDecodeDatabase.html @@ -5,10 +5,17 @@ -DBC framework: DecodeDatabase Struct Reference +DBC Framework: DecodeDatabase Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    Public Attributes | @@ -69,24 +107,6 @@ Public Attributes

    Definition at line 132 of file decode_database.h.

    Member Data Documentation

    - -

    ◆ frameIndexByKey

    - -
    -
    - - - - -
    std::unordered_map<FrameKey, std::size_t, FrameKeyHasher> DecodeDatabase::frameIndexByKey
    -
    - -

    Definition at line 134 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcDecoder::FindFrame().

    - -
    -

    ◆ frames

    @@ -101,7 +121,21 @@ Public Attributes

    Definition at line 133 of file decode_database.h.

    -

    Referenced by DbcDecodeBuilder::Build(), DbcDecoder::FindFrame(), and main().

    +
    +
    + +

    ◆ frameIndexByKey

    + +
    +
    + + + + +
    std::unordered_map<FrameKey, std::size_t, FrameKeyHasher> DecodeDatabase::frameIndexByKey
    +
    + +

    Definition at line 134 of file decode_database.h.

    @@ -109,9 +143,13 @@ Public Attributes
  • decode_database.h
  • + - + diff --git a/docs/html/structDecodeFrame-members.html b/docs/html/structDecodeFrame-members.html index 4464859..0866aab 100644 --- a/docs/html/structDecodeFrame-members.html +++ b/docs/html/structDecodeFrame-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + + + - + diff --git a/docs/html/structDecodeFrame.html b/docs/html/structDecodeFrame.html index dec3d42..2b943d4 100644 --- a/docs/html/structDecodeFrame.html +++ b/docs/html/structDecodeFrame.html @@ -5,10 +5,17 @@ -DBC framework: DecodeFrame Struct Reference +DBC Framework: DecodeFrame Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,26 +35,55 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DecodeFrame Struct Reference
    @@ -58,11 +95,6 @@

    #include <decode_database.h>

    - - - -

    -Public Member Functions

     DecodeFrame ()
     
    @@ -81,8 +113,8 @@ Public Attributes - - + +

    Public Attributes

    std::string name
     
    std::string comment
     
    std::vector< DecodeSignal > signals
     
    std::vector< DecodeSignal > public
     

    Detailed Description

    Runtime-ready frame definition.

    @@ -117,6 +149,25 @@ Public Attributes

    Member Data Documentation

    + +

    ◆ name

    + +
    +
    + + + + +
    std::string DecodeFrame::name
    +
    +

    Frame name.

    + +

    Definition at line 73 of file decode_database.h.

    + +

    Referenced by DbcDecodeBuilder::Build().

    + +
    +

    ◆ canId

    @@ -134,63 +185,6 @@ Public Attributes

    Referenced by DbcDecodeBuilder::Build().

    -
    - - -

    ◆ comment

    - -
    -
    - - - - -
    std::string DecodeFrame::comment
    -
    -

    Frame comment.

    - -

    Definition at line 80 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build().

    - -
    -
    - -

    ◆ dlc

    - -
    -
    - - - - -
    std::uint8_t DecodeFrame::dlc
    -
    -

    Payload length.

    - -

    Definition at line 76 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build().

    - -
    -
    - -

    ◆ hasPgn

    - -
    -
    - - - - -
    bool DecodeFrame::hasPgn
    -
    -

    true if PGN is valid.

    - -

    Definition at line 78 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build().

    -
    @@ -212,22 +206,22 @@ Public Attributes - -

    ◆ name

    + +

    ◆ dlc

    - +
    std::string DecodeFrame::namestd::uint8_t DecodeFrame::dlc
    -

    Frame name.

    +

    Payload length.

    -

    Definition at line 73 of file decode_database.h.

    +

    Definition at line 76 of file decode_database.h.

    -

    Referenced by DbcDecodeBuilder::Build(), and PrintDecodedFrame().

    +

    Referenced by DbcDecodeBuilder::Build().

    @@ -250,22 +244,22 @@ Public Attributes - -

    ◆ signals

    + +

    ◆ hasPgn

    - +
    std::vector<DecodeSignal> DecodeFrame::signalsbool DecodeFrame::hasPgn
    -

    Signal definitions.

    +

    true if PGN is valid.

    -

    Definition at line 81 of file decode_database.h.

    +

    Definition at line 78 of file decode_database.h.

    -

    Referenced by DbcDecodeBuilder::Build(), and DbcDecoder::Decode().

    +

    Referenced by DbcDecodeBuilder::Build().

    @@ -286,15 +280,55 @@ Public Attributes

    Referenced by DbcDecodeBuilder::Build().

    + + + +

    ◆ comment

    + +
    +
    + + + + +
    std::string DecodeFrame::comment
    +
    +

    Frame comment.

    + +

    Definition at line 80 of file decode_database.h.

    + +

    Referenced by DbcDecodeBuilder::Build().

    + +
    +
    + +

    ◆ public

    + +
    +
    + + + + +
    std::vector<DecodeSignal> DecodeFrame::public
    +
    +

    Signal definitions.

    + +

    Definition at line 81 of file decode_database.h.

    +

    The documentation for this struct was generated from the following file: + - + diff --git a/docs/html/structDecodeFrame.js b/docs/html/structDecodeFrame.js new file mode 100644 index 0000000..a662af7 --- /dev/null +++ b/docs/html/structDecodeFrame.js @@ -0,0 +1,12 @@ +var structDecodeFrame = +[ + [ "name", "structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579", null ], + [ "canId", "structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf", null ], + [ "isExtended", "structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41", null ], + [ "dlc", "structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060", null ], + [ "pgn", "structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23", null ], + [ "hasPgn", "structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d", null ], + [ "transmitter", "structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9", null ], + [ "comment", "structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22", null ], + [ "public", "structDecodeFrame.html#a7f4e71bbdec3f424b625e724e3dfbf14", null ] +]; \ No newline at end of file diff --git a/docs/html/structDecodeSignal-members.html b/docs/html/structDecodeSignal-members.html index 10a0df2..f6fc09b 100644 --- a/docs/html/structDecodeSignal-members.html +++ b/docs/html/structDecodeSignal-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DecodeSignal Member List
    @@ -53,7 +91,7 @@ - + @@ -65,9 +103,12 @@
    byteOrderDecodeSignal
    commentDecodeSignal
    DecodeSignal()DecodeSignalinline
    DecodeSignal() (defined in DecodeSignal)DecodeSignalinline
    factorDecodeSignal
    lengthDecodeSignal
    maximumDecodeSignal
    unitDecodeSignal
    valueTypeDecodeSignal
    + - + diff --git a/docs/html/structDecodeSignal.html b/docs/html/structDecodeSignal.html index 6163042..451312a 100644 --- a/docs/html/structDecodeSignal.html +++ b/docs/html/structDecodeSignal.html @@ -5,10 +5,17 @@ -DBC framework: DecodeSignal Struct Reference +DBC Framework: DecodeSignal Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,26 +35,55 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DecodeSignal Struct Reference
    @@ -58,11 +95,6 @@

    #include <decode_database.h>

    - - - -

    -Public Member Functions

     DecodeSignal ()
     
    @@ -123,120 +155,6 @@ Public Attributes

    Member Data Documentation

    - -

    ◆ byteOrder

    - -
    -
    -

    Public Attributes

    std::string name
    - - - -
    ByteOrder DecodeSignal::byteOrder
    -
    -

    Intel or Motorola.

    - -

    Definition at line 43 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcDecoder::ExtractUnsigned().

    - -
    -
    - -

    ◆ comment

    - -
    -
    - - - - -
    std::string DecodeSignal::comment
    -
    -

    Comment.

    - -

    Definition at line 51 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build().

    - -
    -
    - -

    ◆ factor

    - -
    -
    - - - - -
    double DecodeSignal::factor
    -
    -

    Scaling factor.

    - -

    Definition at line 45 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcDecoder::Decode().

    - -
    -
    - -

    ◆ length

    - -
    -
    - - - - -
    std::uint32_t DecodeSignal::length
    -
    -

    Signal length in bits.

    - -

    Definition at line 42 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), DbcDecoder::Decode(), and DbcDecoder::ExtractUnsigned().

    - -
    -
    - -

    ◆ maximum

    - -
    -
    - - - - -
    double DecodeSignal::maximum
    -
    -

    Maximum physical value.

    - -

    Definition at line 48 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build().

    - -
    -
    - -

    ◆ minimum

    - -
    -
    - - - - -
    double DecodeSignal::minimum
    -
    -

    Minimum physical value.

    - -

    Definition at line 47 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build().

    - -
    -

    ◆ name

    @@ -252,44 +170,6 @@ Public Attributes

    Definition at line 40 of file decode_database.h.

    -

    Referenced by DbcDecodeBuilder::Build(), and PrintDecodedFrame().

    - - - - -

    ◆ offset

    - -
    -
    - - - - -
    double DecodeSignal::offset
    -
    -

    Physical offset.

    - -

    Definition at line 46 of file decode_database.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcDecoder::Decode().

    - -
    -
    - -

    ◆ receivers

    - -
    -
    - - - - -
    std::vector<std::string> DecodeSignal::receivers
    -
    -

    Receivers.

    - -

    Definition at line 50 of file decode_database.h.

    -

    Referenced by DbcDecodeBuilder::Build().

    @@ -309,26 +189,45 @@ Public Attributes

    Definition at line 41 of file decode_database.h.

    -

    Referenced by DbcDecodeBuilder::Build(), and DbcDecoder::ExtractUnsigned().

    +

    Referenced by DbcDecodeBuilder::Build().

    - -

    ◆ unit

    + +

    ◆ length

    - +
    std::string DecodeSignal::unitstd::uint32_t DecodeSignal::length
    -

    Physical unit.

    +

    Signal length in bits.

    -

    Definition at line 49 of file decode_database.h.

    +

    Definition at line 42 of file decode_database.h.

    -

    Referenced by DbcDecodeBuilder::Build(), and PrintDecodedFrame().

    +

    Referenced by DbcDecodeBuilder::Build().

    + +
    +
    + +

    ◆ byteOrder

    + +
    +
    + + + + +
    ByteOrder DecodeSignal::byteOrder
    +
    +

    Intel or Motorola.

    + +

    Definition at line 43 of file decode_database.h.

    + +

    Referenced by DbcDecodeBuilder::Build().

    @@ -347,7 +246,126 @@ Public Attributes

    Definition at line 44 of file decode_database.h.

    -

    Referenced by DbcDecodeBuilder::Build(), and DbcDecoder::Decode().

    +

    Referenced by DbcDecoder::Decode().

    + + + + +

    ◆ factor

    + +
    +
    + + + + +
    double DecodeSignal::factor
    +
    +

    Scaling factor.

    + +

    Definition at line 45 of file decode_database.h.

    + +
    +
    + +

    ◆ offset

    + +
    +
    + + + + +
    double DecodeSignal::offset
    +
    +

    Physical offset.

    + +

    Definition at line 46 of file decode_database.h.

    + +
    +
    + +

    ◆ minimum

    + +
    +
    + + + + +
    double DecodeSignal::minimum
    +
    +

    Minimum physical value.

    + +

    Definition at line 47 of file decode_database.h.

    + +
    +
    + +

    ◆ maximum

    + +
    +
    + + + + +
    double DecodeSignal::maximum
    +
    +

    Maximum physical value.

    + +

    Definition at line 48 of file decode_database.h.

    + +
    +
    + +

    ◆ unit

    + +
    +
    + + + + +
    std::string DecodeSignal::unit
    +
    +

    Physical unit.

    + +

    Definition at line 49 of file decode_database.h.

    + +
    +
    + +

    ◆ receivers

    + +
    +
    + + + + +
    std::vector<std::string> DecodeSignal::receivers
    +
    +

    Receivers.

    + +

    Definition at line 50 of file decode_database.h.

    + +
    +
    + +

    ◆ comment

    + +
    +
    + + + + +
    std::string DecodeSignal::comment
    +
    +

    Comment.

    + +

    Definition at line 51 of file decode_database.h.

    @@ -355,9 +373,13 @@ Public Attributes
  • decode_database.h
  • + - + diff --git a/docs/html/structDecodeSignal.js b/docs/html/structDecodeSignal.js new file mode 100644 index 0000000..10381c9 --- /dev/null +++ b/docs/html/structDecodeSignal.js @@ -0,0 +1,15 @@ +var structDecodeSignal = +[ + [ "name", "structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780", null ], + [ "startBit", "structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d", null ], + [ "length", "structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb", null ], + [ "byteOrder", "structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d", null ], + [ "valueType", "structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8", null ], + [ "factor", "structDecodeSignal.html#a428c39913a366a8476dd291061354391", null ], + [ "offset", "structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74", null ], + [ "minimum", "structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25", null ], + [ "maximum", "structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7", null ], + [ "unit", "structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092", null ], + [ "receivers", "structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa", null ], + [ "comment", "structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473", null ] +]; \ No newline at end of file diff --git a/docs/html/structDecodedFrameValue-members.html b/docs/html/structDecodedFrameValue-members.html index 2573264..8bf0a21 100644 --- a/docs/html/structDecodedFrameValue-members.html +++ b/docs/html/structDecodedFrameValue-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DecodedFrameValue Member List
    @@ -51,14 +89,17 @@

    This is the complete list of members for DecodedFrameValue, including all inherited members.

    - + - +
    DecodedFrameValue()DecodedFrameValueinline
    DecodedFrameValue() (defined in DecodedFrameValue)DecodedFrameValueinline
    definitionDecodedFrameValue
    signalsDecodedFrameValue
    publicDecodedFrameValue
    validDecodedFrameValue
    + - + diff --git a/docs/html/structDecodedFrameValue.html b/docs/html/structDecodedFrameValue.html index 2ce38f5..8c4da38 100644 --- a/docs/html/structDecodedFrameValue.html +++ b/docs/html/structDecodedFrameValue.html @@ -5,10 +5,17 @@ -DBC framework: DecodedFrameValue Struct Reference +DBC Framework: DecodedFrameValue Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,26 +35,55 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DecodedFrameValue Struct Reference
    @@ -58,17 +95,12 @@

    #include <dbc_decoder.h>

    - - - -

    -Public Member Functions

     DecodedFrameValue ()
     
    - - + +

    Public Attributes

    const DecodeFrame * definition
     
    std::vector< DecodedSignalValue > signals
     
    std::vector< DecodedSignalValue > public
     
    bool valid
     
    @@ -120,18 +152,18 @@ Public Attributes

    Definition at line 56 of file dbc_decoder.h.

    -

    Referenced by DbcDecoder::Decode(), and PrintDecodedFrame().

    +

    Referenced by DbcDecoder::Decode().

    - -

    ◆ signals

    + +

    ◆ public

    - +
    std::vector<DecodedSignalValue> DecodedFrameValue::signalsstd::vector<DecodedSignalValue> DecodedFrameValue::public
    @@ -139,8 +171,6 @@ Public Attributes

    Definition at line 57 of file dbc_decoder.h.

    -

    Referenced by DbcDecoder::Decode(), and PrintDecodedFrame().

    -
    @@ -158,7 +188,7 @@ Public Attributes

    Definition at line 58 of file dbc_decoder.h.

    -

    Referenced by DbcDecoder::Decode(), and PrintDecodedFrame().

    +

    Referenced by DbcDecoder::Decode().

    @@ -166,9 +196,13 @@ Public Attributes
  • dbc_decoder.h
  • + - + diff --git a/docs/html/structDecodedFrameValue.js b/docs/html/structDecodedFrameValue.js new file mode 100644 index 0000000..6e26145 --- /dev/null +++ b/docs/html/structDecodedFrameValue.js @@ -0,0 +1,6 @@ +var structDecodedFrameValue = +[ + [ "definition", "structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c", null ], + [ "public", "structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8", null ], + [ "valid", "structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0", null ] +]; \ No newline at end of file diff --git a/docs/html/structDecodedSignalValue-members.html b/docs/html/structDecodedSignalValue-members.html index d0eaab6..fedfc2d 100644 --- a/docs/html/structDecodedSignalValue-members.html +++ b/docs/html/structDecodedSignalValue-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DecodedSignalValue Member List
    @@ -51,15 +89,18 @@

    This is the complete list of members for DecodedSignalValue, including all inherited members.

    - +
    DecodedSignalValue()DecodedSignalValueinline
    DecodedSignalValue() (defined in DecodedSignalValue)DecodedSignalValueinline
    definitionDecodedSignalValue
    physicalValueDecodedSignalValue
    rawValueDecodedSignalValue
    validDecodedSignalValue
    + - + diff --git a/docs/html/structDecodedSignalValue.html b/docs/html/structDecodedSignalValue.html index 0dcf1f8..4b01830 100644 --- a/docs/html/structDecodedSignalValue.html +++ b/docs/html/structDecodedSignalValue.html @@ -5,10 +5,17 @@ -DBC framework: DecodedSignalValue Struct Reference +DBC Framework: DecodedSignalValue Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,26 +35,55 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    DecodedSignalValue Struct Reference
    @@ -58,11 +95,6 @@

    #include <dbc_decoder.h>

    - - - -

    -Public Member Functions

     DecodedSignalValue ()
     
    @@ -122,26 +154,7 @@ Public Attributes

    Definition at line 39 of file dbc_decoder.h.

    -

    Referenced by DbcDecoder::Decode(), and PrintDecodedFrame().

    - - - - -

    ◆ physicalValue

    - -
    -
    -

    Public Attributes

    const DecodeSignal * definition
    - - - -
    double DecodedSignalValue::physicalValue
    -
    -

    Converted physical value.

    - -

    Definition at line 41 of file dbc_decoder.h.

    - -

    Referenced by DbcDecoder::Decode(), and PrintDecodedFrame().

    +

    Referenced by DbcDecoder::Decode().

    @@ -160,7 +173,22 @@ Public Attributes

    Definition at line 40 of file dbc_decoder.h.

    -

    Referenced by DbcDecoder::Decode(), and PrintDecodedFrame().

    + + + +

    ◆ physicalValue

    + +
    +
    + + + + +
    double DecodedSignalValue::physicalValue
    +
    +

    Converted physical value.

    + +

    Definition at line 41 of file dbc_decoder.h.

    @@ -179,7 +207,7 @@ Public Attributes

    Definition at line 42 of file dbc_decoder.h.

    -

    Referenced by DbcDecoder::Decode(), and PrintDecodedFrame().

    +

    Referenced by DbcDecoder::Decode().

    @@ -187,9 +215,13 @@ Public Attributes
  • dbc_decoder.h
  • + - + diff --git a/docs/html/structDecodedSignalValue.js b/docs/html/structDecodedSignalValue.js new file mode 100644 index 0000000..bbf0127 --- /dev/null +++ b/docs/html/structDecodedSignalValue.js @@ -0,0 +1,7 @@ +var structDecodedSignalValue = +[ + [ "definition", "structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7", null ], + [ "rawValue", "structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec", null ], + [ "physicalValue", "structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978", null ], + [ "valid", "structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686", null ] +]; \ No newline at end of file diff --git a/docs/html/structFrameInfo-members.html b/docs/html/structFrameInfo-members.html index 03dbb8d..b55daa1 100644 --- a/docs/html/structFrameInfo-members.html +++ b/docs/html/structFrameInfo-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + + + - + diff --git a/docs/html/structFrameInfo.html b/docs/html/structFrameInfo.html index 770acb0..abfd547 100644 --- a/docs/html/structFrameInfo.html +++ b/docs/html/structFrameInfo.html @@ -5,10 +5,17 @@ -DBC framework: FrameInfo Struct Reference +DBC Framework: FrameInfo Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,26 +35,55 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    FrameInfo Struct Reference
    @@ -58,11 +95,6 @@

    #include <frame_info.h>

    - - - -

    -Public Member Functions

     FrameInfo ()
     
    @@ -81,8 +113,8 @@ Public Attributes - - + +

    Public Attributes

    std::string name
     
    std::string comment
     
    std::vector< SignalInfo > signals
     
    std::vector< SignalInfo > public
     

    Detailed Description

    Describes one CAN frame from a DBC file.

    @@ -117,6 +149,25 @@ Public Attributes

    Member Data Documentation

    + +

    ◆ name

    + +
    +
    + + + + +
    std::string FrameInfo::name
    +
    +

    Frame name.

    + +

    Definition at line 25 of file frame_info.h.

    + +

    Referenced by DbcDecodeBuilder::Build().

    + +
    +

    ◆ canId

    @@ -132,64 +183,7 @@ Public Attributes

    Definition at line 26 of file frame_info.h.

    -

    Referenced by DbcDecodeBuilder::Build(), DbcParser::ParseFrameLine(), and PrintTree().

    - -
    - - -

    ◆ comment

    - -
    -
    - - - - -
    std::string FrameInfo::comment
    -
    -

    Optional frame comment.

    - -

    Definition at line 32 of file frame_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseCommentLine().

    - -
    -
    - -

    ◆ dlc

    - -
    -
    - - - - -
    std::uint8_t FrameInfo::dlc
    -
    -

    Frame payload length.

    - -

    Definition at line 30 of file frame_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), DbcParser::ParseFrameLine(), and PrintTree().

    - -
    -
    - -

    ◆ hasPgn

    - -
    -
    - - - - -
    bool FrameInfo::hasPgn
    -
    -

    true if PGN was derived.

    - -

    Definition at line 29 of file frame_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), DbcParser::ParseFrameLine(), and PrintTree().

    +

    Referenced by DbcDecodeBuilder::Build().

    @@ -208,26 +202,7 @@ Public Attributes

    Definition at line 27 of file frame_info.h.

    -

    Referenced by DbcDecodeBuilder::Build(), DbcParser::ParseFrameLine(), and PrintTree().

    - - - - -

    ◆ name

    - -
    -
    - - - - -
    std::string FrameInfo::name
    -
    -

    Frame name.

    - -

    Definition at line 25 of file frame_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseFrameLine().

    +

    Referenced by DbcDecodeBuilder::Build().

    @@ -246,26 +221,45 @@ Public Attributes

    Definition at line 28 of file frame_info.h.

    -

    Referenced by DbcDecodeBuilder::Build(), DbcParser::ParseFrameLine(), and PrintTree().

    +

    Referenced by DbcDecodeBuilder::Build().

    - -

    ◆ signals

    + +

    ◆ hasPgn

    - +
    std::vector<SignalInfo> FrameInfo::signalsbool FrameInfo::hasPgn
    -

    Signals contained in the frame.

    +

    true if PGN was derived.

    -

    Definition at line 33 of file frame_info.h.

    +

    Definition at line 29 of file frame_info.h.

    -

    Referenced by DbcTreeBuilder::Build(), DbcDecodeBuilder::Build(), DbcParser::FindSignalByName(), and DbcParser::ParseFile().

    +

    Referenced by DbcDecodeBuilder::Build().

    + +
    +
    + +

    ◆ dlc

    + +
    +
    + + + + +
    std::uint8_t FrameInfo::dlc
    +
    +

    Frame payload length.

    + +

    Definition at line 30 of file frame_info.h.

    + +

    Referenced by DbcDecodeBuilder::Build().

    @@ -284,7 +278,43 @@ Public Attributes

    Definition at line 31 of file frame_info.h.

    -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseFrameLine().

    +

    Referenced by DbcDecodeBuilder::Build().

    + + + + +

    ◆ comment

    + +
    +
    + + + + +
    std::string FrameInfo::comment
    +
    +

    Optional frame comment.

    + +

    Definition at line 32 of file frame_info.h.

    + +

    Referenced by DbcDecodeBuilder::Build().

    + +
    +
    + +

    ◆ public

    + +
    +
    + + + + +
    std::vector<SignalInfo> FrameInfo::public
    +
    +

    Signals contained in the frame.

    + +

    Definition at line 33 of file frame_info.h.

    @@ -292,9 +322,13 @@ Public Attributes
  • frame_info.h
  • + - + diff --git a/docs/html/structFrameInfo.js b/docs/html/structFrameInfo.js new file mode 100644 index 0000000..7a9f055 --- /dev/null +++ b/docs/html/structFrameInfo.js @@ -0,0 +1,12 @@ +var structFrameInfo = +[ + [ "name", "structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb", null ], + [ "canId", "structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e", null ], + [ "isExtended", "structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf", null ], + [ "pgn", "structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943", null ], + [ "hasPgn", "structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d", null ], + [ "dlc", "structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9", null ], + [ "transmitter", "structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8", null ], + [ "comment", "structFrameInfo.html#ace75121294f9d89b762080ab5643293c", null ], + [ "public", "structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084", null ] +]; \ No newline at end of file diff --git a/docs/html/structFrameKey-members.html b/docs/html/structFrameKey-members.html index 7310bfc..010c2c0 100644 --- a/docs/html/structFrameKey-members.html +++ b/docs/html/structFrameKey-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    FrameKey Member List
    @@ -51,15 +89,18 @@

    This is the complete list of members for FrameKey, including all inherited members.

    - - - - - + + + + +
    canIdFrameKey
    FrameKey()FrameKeyinline
    FrameKey(std::uint32_t id, bool extended)FrameKeyinline
    isExtendedFrameKey
    operator==(const FrameKey &other) constFrameKeyinline
    canId (defined in FrameKey)FrameKey
    FrameKey() (defined in FrameKey)FrameKeyinline
    FrameKey(std::uint32_t id, bool extended) (defined in FrameKey)FrameKeyinline
    isExtended (defined in FrameKey)FrameKey
    operator==(const FrameKey &other) const (defined in FrameKey)FrameKeyinline
    + - + diff --git a/docs/html/structFrameKey.html b/docs/html/structFrameKey.html index a9e39a4..015887e 100644 --- a/docs/html/structFrameKey.html +++ b/docs/html/structFrameKey.html @@ -5,10 +5,17 @@ -DBC framework: FrameKey Struct Reference +DBC Framework: FrameKey Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    Public Member Functions | @@ -60,8 +98,6 @@ - - @@ -171,8 +207,6 @@ Public Attributes

    Definition at line 113 of file decode_database.h.

    -

    References canId, and isExtended.

    -

    Member Data Documentation

    @@ -190,8 +224,6 @@ Public Attributes

    Definition at line 100 of file decode_database.h.

    -

    Referenced by FrameKeyHasher::operator()(), and operator==().

    - @@ -208,17 +240,19 @@ Public Attributes

    Definition at line 101 of file decode_database.h.

    -

    Referenced by FrameKeyHasher::operator()(), and operator==().

    -
    The documentation for this struct was generated from the following file: + - + diff --git a/docs/html/structFrameKeyHasher-members.html b/docs/html/structFrameKeyHasher-members.html index 4ad2989..1585d35 100644 --- a/docs/html/structFrameKeyHasher-members.html +++ b/docs/html/structFrameKeyHasher-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ @@ -27,23 +35,53 @@ - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    FrameKeyHasher Member List
    @@ -51,11 +89,14 @@

    This is the complete list of members for FrameKeyHasher, including all inherited members.

    Public Member Functions

     FrameKey ()
     
     FrameKey (std::uint32_t id, bool extended)
     
    bool operator== (const FrameKey &other) const
    -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    - +
    operator()(const FrameKey &key) constFrameKeyHasherinline
    operator()(const FrameKey &key) const (defined in FrameKeyHasher)FrameKeyHasherinline
    +
    - + diff --git a/docs/html/structFrameKeyHasher.html b/docs/html/structFrameKeyHasher.html index 9919ed5..e22e46e 100644 --- a/docs/html/structFrameKeyHasher.html +++ b/docs/html/structFrameKeyHasher.html @@ -5,10 +5,17 @@ -DBC framework: FrameKeyHasher Struct Reference +DBC Framework: FrameKeyHasher Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    Public Member Functions | @@ -93,17 +131,19 @@ Public Member Functions

    Definition at line 122 of file decode_database.h.

    -

    References FrameKey::canId, and FrameKey::isExtended.

    -

    The documentation for this struct was generated from the following file:
    + - + diff --git a/docs/html/structRawCanFrame-members.html b/docs/html/structRawCanFrame-members.html index 1d9410a..e3694ff 100644 --- a/docs/html/structRawCanFrame-members.html +++ b/docs/html/structRawCanFrame-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    RawCanFrame Member List
    @@ -54,11 +92,14 @@ canIdRawCanFrame dataRawCanFrame isExtendedRawCanFrame - RawCanFrame()RawCanFrameinline + RawCanFrame() (defined in RawCanFrame)RawCanFrameinline
    + - + diff --git a/docs/html/structRawCanFrame.html b/docs/html/structRawCanFrame.html index 863c3ef..3a7415f 100644 --- a/docs/html/structRawCanFrame.html +++ b/docs/html/structRawCanFrame.html @@ -5,10 +5,17 @@ -DBC framework: RawCanFrame Struct Reference +DBC Framework: RawCanFrame Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,26 +35,55 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    RawCanFrame Struct Reference
    @@ -58,11 +95,6 @@

    #include <dbc_decoder.h>

    - - - -

    -Public Member Functions

     RawCanFrame ()
     
    @@ -120,26 +152,7 @@ Public Attributes

    Definition at line 24 of file dbc_decoder.h.

    -

    Referenced by DbcDecoder::Decode(), and main().

    - - - - -

    ◆ data

    - -
    -
    -

    Public Attributes

    std::uint32_t canId
    - - - -
    std::vector<std::uint8_t> RawCanFrame::data
    -
    -

    Payload bytes.

    - -

    Definition at line 26 of file dbc_decoder.h.

    - -

    Referenced by DbcDecoder::Decode(), and main().

    +

    Referenced by DbcDecoder::Decode().

    @@ -158,7 +171,26 @@ Public Attributes

    Definition at line 25 of file dbc_decoder.h.

    -

    Referenced by DbcDecoder::Decode(), and main().

    +

    Referenced by DbcDecoder::Decode().

    + + + + +

    ◆ data

    + +
    +
    + + + + +
    std::vector<std::uint8_t> RawCanFrame::data
    +
    +

    Payload bytes.

    + +

    Definition at line 26 of file dbc_decoder.h.

    + +

    Referenced by DbcDecoder::Decode().

    @@ -166,9 +198,13 @@ Public Attributes
  • dbc_decoder.h
  • + - + diff --git a/docs/html/structRawCanFrame.js b/docs/html/structRawCanFrame.js new file mode 100644 index 0000000..b430f42 --- /dev/null +++ b/docs/html/structRawCanFrame.js @@ -0,0 +1,6 @@ +var structRawCanFrame = +[ + [ "canId", "structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4", null ], + [ "isExtended", "structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7", null ], + [ "data", "structRawCanFrame.html#a0acb487612104c99c9907344c035df83", null ] +]; \ No newline at end of file diff --git a/docs/html/structSignalInfo-members.html b/docs/html/structSignalInfo-members.html index f1f700a..cbac353 100644 --- a/docs/html/structSignalInfo-members.html +++ b/docs/html/structSignalInfo-members.html @@ -5,10 +5,17 @@ -DBC framework: Member List +DBC Framework: Member List + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,23 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    SignalInfo Member List
    @@ -61,13 +99,16 @@ nameSignalInfo offsetSignalInfo receiversSignalInfo - SignalInfo()SignalInfoinline + SignalInfo() (defined in SignalInfo)SignalInfoinline startBitSignalInfo unitSignalInfo
    + - + diff --git a/docs/html/structSignalInfo.html b/docs/html/structSignalInfo.html index d8517f6..b6dc5ff 100644 --- a/docs/html/structSignalInfo.html +++ b/docs/html/structSignalInfo.html @@ -5,10 +5,17 @@ -DBC framework: SignalInfo Struct Reference +DBC Framework: SignalInfo Struct Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,26 +35,55 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    SignalInfo Struct Reference
    @@ -58,11 +95,6 @@

    #include <signal_info.h>

    - - - -

    -Public Member Functions

     SignalInfo ()
     
    @@ -123,139 +155,6 @@ Public Attributes

    Member Data Documentation

    - -

    ◆ comment

    - -
    -
    -

    Public Attributes

    std::string name
    - - - -
    std::string SignalInfo::comment
    -
    -

    Optional signal comment.

    - -

    Definition at line 34 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseCommentLine().

    - -
    -
    - -

    ◆ factor

    - -
    -
    - - - - -
    double SignalInfo::factor
    -
    -

    Scaling factor.

    - -

    Definition at line 28 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseSignalLine().

    - -
    -
    - -

    ◆ isLittleEndian

    - -
    -
    - - - - -
    bool SignalInfo::isLittleEndian
    -
    -

    true for Intel, false for Motorola.

    - -

    Definition at line 26 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseSignalLine().

    - -
    -
    - -

    ◆ isSigned

    - -
    -
    - - - - -
    bool SignalInfo::isSigned
    -
    -

    true if signal is signed.

    - -

    Definition at line 27 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseSignalLine().

    - -
    -
    - -

    ◆ length

    - -
    -
    - - - - -
    std::uint32_t SignalInfo::length
    -
    -

    Signal length in bits.

    - -

    Definition at line 25 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), DbcParser::ParseSignalLine(), and PrintTree().

    - -
    -
    - -

    ◆ maximum

    - -
    -
    - - - - -
    double SignalInfo::maximum
    -
    -

    Maximum physical value.

    - -

    Definition at line 31 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseSignalLine().

    - -
    -
    - -

    ◆ minimum

    - -
    -
    - - - - -
    double SignalInfo::minimum
    -
    -

    Minimum physical value.

    - -

    Definition at line 30 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseSignalLine().

    - -
    -

    ◆ name

    @@ -271,45 +170,7 @@ Public Attributes

    Definition at line 23 of file signal_info.h.

    -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseSignalLine().

    - - - - -

    ◆ offset

    - -
    -
    - - - - -
    double SignalInfo::offset
    -
    -

    Physical offset.

    - -

    Definition at line 29 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseSignalLine().

    - -
    -
    - -

    ◆ receivers

    - -
    -
    - - - - -
    std::vector<std::string> SignalInfo::receivers
    -
    -

    Signal receivers.

    - -

    Definition at line 33 of file signal_info.h.

    - -

    Referenced by DbcDecodeBuilder::Build(), and DbcParser::ParseSignalLine().

    +

    Referenced by DbcDecodeBuilder::Build().

    @@ -328,7 +189,130 @@ Public Attributes

    Definition at line 24 of file signal_info.h.

    -

    Referenced by DbcDecodeBuilder::Build(), DbcParser::ParseSignalLine(), and PrintTree().

    +

    Referenced by DbcDecodeBuilder::Build().

    + + + + +

    ◆ length

    + +
    +
    + + + + +
    std::uint32_t SignalInfo::length
    +
    +

    Signal length in bits.

    + +

    Definition at line 25 of file signal_info.h.

    + +

    Referenced by DbcDecodeBuilder::Build().

    + +
    +
    + +

    ◆ isLittleEndian

    + +
    +
    + + + + +
    bool SignalInfo::isLittleEndian
    +
    +

    true for Intel, false for Motorola.

    + +

    Definition at line 26 of file signal_info.h.

    + +

    Referenced by DbcDecodeBuilder::Build().

    + +
    +
    + +

    ◆ isSigned

    + +
    +
    + + + + +
    bool SignalInfo::isSigned
    +
    +

    true if signal is signed.

    + +

    Definition at line 27 of file signal_info.h.

    + +
    +
    + +

    ◆ factor

    + +
    +
    + + + + +
    double SignalInfo::factor
    +
    +

    Scaling factor.

    + +

    Definition at line 28 of file signal_info.h.

    + +
    +
    + +

    ◆ offset

    + +
    +
    + + + + +
    double SignalInfo::offset
    +
    +

    Physical offset.

    + +

    Definition at line 29 of file signal_info.h.

    + +
    +
    + +

    ◆ minimum

    + +
    +
    + + + + +
    double SignalInfo::minimum
    +
    +

    Minimum physical value.

    + +

    Definition at line 30 of file signal_info.h.

    + +
    +
    + +

    ◆ maximum

    + +
    +
    + + + + +
    double SignalInfo::maximum
    +
    +

    Maximum physical value.

    + +

    Definition at line 31 of file signal_info.h.

    @@ -347,7 +331,39 @@ Public Attributes

    Definition at line 32 of file signal_info.h.

    -

    Referenced by DbcDecodeBuilder::Build(), DbcParser::ParseSignalLine(), and PrintTree().

    + + + +

    ◆ receivers

    + +
    +
    + + + + +
    std::vector<std::string> SignalInfo::receivers
    +
    +

    Signal receivers.

    + +

    Definition at line 33 of file signal_info.h.

    + +
    +
    + +

    ◆ comment

    + +
    +
    + + + + +
    std::string SignalInfo::comment
    +
    +

    Optional signal comment.

    + +

    Definition at line 34 of file signal_info.h.

    @@ -355,9 +371,13 @@ Public Attributes
  • signal_info.h
  • + - + diff --git a/docs/html/structSignalInfo.js b/docs/html/structSignalInfo.js new file mode 100644 index 0000000..229ec28 --- /dev/null +++ b/docs/html/structSignalInfo.js @@ -0,0 +1,15 @@ +var structSignalInfo = +[ + [ "name", "structSignalInfo.html#a379e422a00cad56f896cacf60455b088", null ], + [ "startBit", "structSignalInfo.html#ace290724f9801521609aedaa946d61f1", null ], + [ "length", "structSignalInfo.html#a1008b5201f71848177217bd52fb84baa", null ], + [ "isLittleEndian", "structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c", null ], + [ "isSigned", "structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f", null ], + [ "factor", "structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499", null ], + [ "offset", "structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e", null ], + [ "minimum", "structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b", null ], + [ "maximum", "structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52", null ], + [ "unit", "structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01", null ], + [ "receivers", "structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3", null ], + [ "comment", "structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5", null ] +]; \ No newline at end of file diff --git a/docs/html/svgpan.js b/docs/html/svgpan.js new file mode 100644 index 0000000..2678d38 --- /dev/null +++ b/docs/html/svgpan.js @@ -0,0 +1,323 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + The code below is based on SVGPan Library 1.2 and was modified for doxygen + to support both zooming and panning via the mouse and via embedded buttons. + + This code is licensed under the following BSD license: + + Copyright 2009-2010 Andrea Leofreddi . All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + The views and conclusions contained in the software and documentation are those of the + authors and should not be interpreted as representing official policies, either expressed + or implied, of Andrea Leofreddi. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +var root = document.documentElement; +var state = 'none'; +var stateOrigin; +var stateTf = root.createSVGMatrix(); +var cursorGrab = ' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move'; +var zoomSteps = 10; +var zoomInFactor; +var zoomOutFactor; +var windowWidth; +var windowHeight; +var svgDoc; +var minZoom; +var maxZoom; +if (!window) window=this; + +/** + * Show the graph in the middle of the view, scaled to fit + */ +function show() +{ + if (window.innerHeight) // Firefox + { + windowWidth = window.innerWidth; + windowHeight = window.innerHeight; + } + else if (document.documentElement.clientWidth) // Chrome/Safari + { + windowWidth = document.documentElement.clientWidth + windowHeight = document.documentElement.clientHeight + } + if (!windowWidth || !windowHeight) // failsafe + { + windowWidth = 800; + windowHeight = 600; + } + minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth); + maxZoom = minZoom+1.5; + zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps); + zoomOutFactor = 1.0/zoomInFactor; + + var g = svgDoc.getElementById('viewport'); + try + { + var bb = g.getBBox(); // this can throw an exception if css { display: none } + var tx = (windowWidth-viewWidth*minZoom+8)/(2*minZoom); + var ty = viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom); + var a = 'scale('+minZoom+') rotate(0) translate('+tx+' '+ty+')'; + g.setAttribute('transform',a); + } + catch(e) {} +} + +/** + * Register handlers + */ +function init(evt) +{ + svgDoc = evt.target.ownerDocument; + try { + if (top.window && top.window.registerShow) { // register show function in html doc for dynamic sections + top.window.registerShow(sectionId,show); + } + } catch(e) { + // ugh, we are not allowed to talk to the parent; can happen with Chrome when viewing pages + // locally, since they treat every local page as having a different origin + } + show(); + + setAttributes(root, { + "onmousedown" : "handleMouseDown(evt)", + "onmousemove" : "handleMouseMove(evt)", + "onmouseup" : "handleMouseUp(evt)" + }); + + if (window.addEventListener) + { + if (navigator.userAgent.toLowerCase().indexOf('webkit') >= 0 || + navigator.userAgent.toLowerCase().indexOf("opera") >= 0 || + navigator.appVersion.indexOf("MSIE") != -1) + { + window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari/IE9 + } + else + { + window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others + } + } +} + +window.onresize=function() +{ + if (svgDoc) { show(); } +} + +/** + * Instance an SVGPoint object with given event coordinates. + */ +function getEventPoint(evt) +{ + var p = root.createSVGPoint(); + p.x = evt.clientX; + p.y = evt.clientY; + return p; +} + +/** + * Sets the current transform matrix of an element. + */ +function setCTM(element, matrix) +{ + var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")"; + element.setAttribute("transform", s); +} + +/** + * Sets attributes of an element. + */ +function setAttributes(element, attributes) +{ + for (i in attributes) + element.setAttributeNS(null, i, attributes[i]); +} + +function doZoom(g,point,zoomFactor) +{ + var p = point.matrixTransform(g.getCTM().inverse()); + var k = root.createSVGMatrix().translate(p.x, p.y).scale(zoomFactor).translate(-p.x, -p.y); + var n = g.getCTM().multiply(k); + var s = Math.max(n.a,n.d); + if (s>maxZoom) n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y); + else if (s'); + d.write('Print SVG'); + d.write(''); + d.write('
    '+xs+'
    '); + d.write(''); + d.write(''); + d.close(); + } catch(e) { + alert('Failed to open popup window needed for printing!\n'+e.message); + } +} +/* @license-end */ diff --git a/docs/html/tabs.css b/docs/html/tabs.css index 720b1c6..fb0977a 100644 --- a/docs/html/tabs.css +++ b/docs/html/tabs.css @@ -1,61 +1 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} - +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/docs/html/tree__node_8cpp.html b/docs/html/tree__node_8cpp.html index 4bb189b..c116bbc 100644 --- a/docs/html/tree__node_8cpp.html +++ b/docs/html/tree__node_8cpp.html @@ -5,10 +5,17 @@ -DBC framework: tree_node.cpp File Reference +DBC Framework: tree_node.cpp File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    tree_node.cpp File Reference
    @@ -59,9 +98,13 @@

    Definition in file tree_node.cpp.

    + - + diff --git a/docs/html/tree__node_8cpp_source.html b/docs/html/tree__node_8cpp_source.html index d71545a..534d18a 100644 --- a/docs/html/tree__node_8cpp_source.html +++ b/docs/html/tree__node_8cpp_source.html @@ -5,10 +5,17 @@ -DBC framework: tree_node.cpp Source File +DBC Framework: tree_node.cpp Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,41 +35,62 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    tree_node.cpp
    -Go to the documentation of this file.
    1/**
    -
    2 * @file tree_node.cpp
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#include "tree_node.h"
    13
    -
    15 : m_type (NodeType::Root)
    +
    15 : m_type (NodeType::Root)
    16 , m_name ("dbc")
    17 , m_children()
    18 , m_frame()
    @@ -69,7 +98,7 @@
    20}
    21
    -
    23 : m_type (NodeType::Frame)
    +
    23 : m_type (NodeType::Frame)
    24 , m_name (frame.name)
    25 , m_children()
    26 , m_frame (new FrameInfo (frame))
    @@ -77,7 +106,7 @@
    28}
    29
    -
    31 : m_type (NodeType::Signal)
    +
    31 : m_type (NodeType::Signal)
    32 , m_name (signal.name)
    33 , m_children()
    34 , m_frame()
    @@ -86,67 +115,63 @@
    37
    38void TreeNode::AddChild (std::unique_ptr<TreeNode> child) {
    39 if (child)
    -
    40 m_children.push_back (std::move (child));
    +
    40 m_children.push_back (std::move (child));
    41}
    42
    43std::size_t TreeNode::GetChildCount() const {
    -
    44 return m_children.size();
    +
    44 return m_children.size();
    45}
    46
    47const TreeNode *TreeNode::GetChild (std::size_t index) const {
    -
    48 if (index >= m_children.size())
    +
    48 if (index >= m_children.size())
    49 return nullptr;
    50
    -
    51 return m_children[index].get();
    +
    51 return m_children[index].get();
    52}
    53
    54TreeNode *TreeNode::GetChild (std::size_t index) {
    -
    55 if (index >= m_children.size())
    +
    55 if (index >= m_children.size())
    56 return nullptr;
    57
    -
    58 return m_children[index].get();
    +
    58 return m_children[index].get();
    59}
    60
    -
    62 return m_type;
    +
    62 return m_type;
    63}
    64
    65const std::string &TreeNode::GetName() const {
    -
    66 return m_name;
    +
    66 return m_name;
    67}
    68
    -
    70 return m_frame.get();
    +
    70 return m_frame.get();
    71}
    72
    -
    74 return m_signal.get();
    +
    74 return m_signal.get();
    75}
    Tree node for later use in model/view or other hierarchy consumers.
    Definition: tree_node.h:35
    -
    NodeType m_type
    Definition: tree_node.h:113
    -
    std::vector< std::unique_ptr< TreeNode > > m_children
    Definition: tree_node.h:115
    const SignalInfo * GetSignal() const
    Get signal payload if node is signal.
    Definition: tree_node.cpp:73
    const TreeNode * GetChild(std::size_t index) const
    Get child by index.
    Definition: tree_node.cpp:47
    void AddChild(std::unique_ptr< TreeNode > child)
    Add child node.
    Definition: tree_node.cpp:38
    -
    std::unique_ptr< FrameInfo > m_frame
    Definition: tree_node.h:116
    TreeNode()
    Create root node.
    Definition: tree_node.cpp:14
    const std::string & GetName() const
    Get display name.
    Definition: tree_node.cpp:65
    std::size_t GetChildCount() const
    Get child count.
    Definition: tree_node.cpp:43
    -
    std::string m_name
    Definition: tree_node.h:114
    -
    std::unique_ptr< SignalInfo > m_signal
    Definition: tree_node.h:117
    NodeType GetType() const
    Get node type.
    Definition: tree_node.cpp:61
    const FrameInfo * GetFrame() const
    Get frame payload if node is frame.
    Definition: tree_node.cpp:69
    Describes one CAN frame from a DBC file.
    Definition: frame_info.h:24
    Describes one signal inside a DBC frame.
    Definition: signal_info.h:22
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    NodeType
    Type of a tree node.
    Definition: tree_node.h:26
    - - -
    +
    - + diff --git a/docs/html/tree__node_8h.html b/docs/html/tree__node_8h.html index ee53ea3..a48d999 100644 --- a/docs/html/tree__node_8h.html +++ b/docs/html/tree__node_8h.html @@ -5,10 +5,17 @@ -DBC framework: tree_node.h File Reference +DBC Framework: tree_node.h File Reference + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,22 +35,53 @@
    - - + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    Classes | @@ -70,9 +109,9 @@ Classes - @@ -104,20 +143,19 @@ Enumerations

    Type of a tree node.

    -

    Enumerations

    enum class  NodeType { Root -, Frame -, Signal +
    enum class  NodeType { Root +, Frame +, Signal }
     Type of a tree node. More...
     
    - - - -
    Enumerator
    Root 
    Frame 
    Signal 

    Definition at line 26 of file tree_node.h.

    + - + diff --git a/docs/html/tree__node_8h.js b/docs/html/tree__node_8h.js new file mode 100644 index 0000000..460c18d --- /dev/null +++ b/docs/html/tree__node_8h.js @@ -0,0 +1,9 @@ +var tree__node_8h = +[ + [ "TreeNode", "classTreeNode.html", "classTreeNode" ], + [ "NodeType", "tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16", [ + [ "Root", "tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16afa03eb688ad8aa1db593d33dabd89bad", null ], + [ "Frame", "tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a3bb3e8c8a24891ba0f7608bcc96f8b0a", null ], + [ "Signal", "tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/html/tree__node_8h_source.html b/docs/html/tree__node_8h_source.html index cf19e10..acb3935 100644 --- a/docs/html/tree__node_8h_source.html +++ b/docs/html/tree__node_8h_source.html @@ -5,10 +5,17 @@ -DBC framework: tree_node.h Source File +DBC Framework: tree_node.h Source File + + + + + + + @@ -18,8 +25,9 @@ -
    DBC framework +
    DBC Framework
    +
    DBC parsing and CAN signal decoding framework
    @@ -27,37 +35,58 @@
    - - + + + + + +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    +
    tree_node.h
    -Go to the documentation of this file.
    1/**
    -
    2 * @file tree_node.h
    -
    3 * @brief
    -
    4 *
    -
    5 * Created: 2026-03-13
    -
    6 * Author: Deeaitch (Dim. Himro)
    -
    7 *
    -
    8 * Licensed under the MIT License.
    -
    9 * See LICENSE file in the project root for full license text.
    -
    10 */
    -
    11
    +Go to the documentation of this file.
    1
    12#ifndef TREE_NODE_H
    13#define TREE_NODE_H
    14
    @@ -68,121 +97,61 @@
    19
    20#include "frame_info.h"
    21#include "signal_info.h"
    -
    22
    -
    23/**
    -
    24 * @brief Type of a tree node.
    -
    25 */
    +
    22
    26enum class NodeType {
    -
    27 Root,
    -
    28 Frame,
    -
    29 Signal
    +
    27 Root,
    +
    28 Frame,
    +
    29 Signal
    30};
    -
    31
    -
    32/**
    -
    33 * @brief Tree node for later use in model/view or other hierarchy consumers.
    -
    34 */
    +
    31
    35class TreeNode {
    -
    36 public:
    -
    37 /**
    -
    38 * @brief Create root node.
    -
    39 */
    +
    36 public:
    40 TreeNode();
    -
    41
    -
    42 /**
    -
    43 * @brief Create frame node.
    -
    44 * @param frame Frame payload.
    -
    45 */
    +
    41
    46 explicit TreeNode (const FrameInfo &frame);
    -
    47
    -
    48 /**
    -
    49 * @brief Create signal node.
    -
    50 * @param signal Signal payload.
    -
    51 */
    +
    47
    52 explicit TreeNode (const SignalInfo &signal);
    53
    -
    54 ~TreeNode() = default;
    +
    54 ~TreeNode() = default;
    55
    -
    56 TreeNode (const TreeNode &) = delete;
    -
    57 TreeNode &operator= (const TreeNode &) = delete;
    +
    56 TreeNode (const TreeNode &) = delete;
    +
    57 TreeNode &operator= (const TreeNode &) = delete;
    58
    -
    59 TreeNode (TreeNode &&) = default;
    - -
    61
    -
    62 /**
    -
    63 * @brief Add child node.
    -
    64 * @param child Child node to add.
    -
    65 */
    +
    59 TreeNode (TreeNode &&) = default;
    +
    60 TreeNode &operator= (TreeNode &&) = default;
    +
    61
    66 void AddChild (std::unique_ptr<TreeNode> child);
    -
    67
    -
    68 /**
    -
    69 * @brief Get child count.
    -
    70 * @return Number of children.
    -
    71 */
    +
    67
    72 std::size_t GetChildCount() const;
    -
    73
    -
    74 /**
    -
    75 * @brief Get child by index.
    -
    76 * @param index Child index.
    -
    77 * @return Child pointer or nullptr if index is invalid.
    -
    78 */
    +
    73
    79 const TreeNode *GetChild (std::size_t index) const;
    -
    80
    -
    81 /**
    -
    82 * @brief Get mutable child by index.
    -
    83 * @param index Child index.
    -
    84 * @return Child pointer or nullptr if index is invalid.
    -
    85 */
    +
    80
    86 TreeNode *GetChild (std::size_t index);
    -
    87
    -
    88 /**
    -
    89 * @brief Get node type.
    -
    90 * @return Node type.
    -
    91 */
    +
    87
    92 NodeType GetType() const;
    -
    93
    -
    94 /**
    -
    95 * @brief Get display name.
    -
    96 * @return Node name.
    -
    97 */
    +
    93
    98 const std::string &GetName() const;
    -
    99
    -
    100 /**
    -
    101 * @brief Get frame payload if node is frame.
    -
    102 * @return Pointer to frame info or nullptr.
    -
    103 */
    +
    99
    104 const FrameInfo *GetFrame() const;
    -
    105
    -
    106 /**
    -
    107 * @brief Get signal payload if node is signal.
    -
    108 * @return Pointer to signal info or nullptr.
    -
    109 */
    +
    105
    110 const SignalInfo *GetSignal() const;
    111
    112 private:
    - -
    114 std::string m_name;
    -
    115 std::vector<std::unique_ptr<TreeNode> > m_children;
    -
    116 std::unique_ptr<FrameInfo> m_frame;
    -
    117 std::unique_ptr<SignalInfo> m_signal;
    +
    113 NodeType m_type;
    +
    114 std::string m_name;
    +
    115 std::vector<std::unique_ptr<TreeNode> > m_children;
    +
    116 std::unique_ptr<FrameInfo> m_frame;
    +
    117 std::unique_ptr<SignalInfo> m_signal;
    118};
    119
    120#endif /* TREE_NODE_H */
    Tree node for later use in model/view or other hierarchy consumers.
    Definition: tree_node.h:35
    -
    NodeType m_type
    Definition: tree_node.h:113
    -
    std::vector< std::unique_ptr< TreeNode > > m_children
    Definition: tree_node.h:115
    const SignalInfo * GetSignal() const
    Get signal payload if node is signal.
    Definition: tree_node.cpp:73
    -
    TreeNode(TreeNode &&)=default
    const TreeNode * GetChild(std::size_t index) const
    Get child by index.
    Definition: tree_node.cpp:47
    -
    TreeNode(const TreeNode &)=delete
    void AddChild(std::unique_ptr< TreeNode > child)
    Add child node.
    Definition: tree_node.cpp:38
    -
    std::unique_ptr< FrameInfo > m_frame
    Definition: tree_node.h:116
    -
    ~TreeNode()=default
    TreeNode()
    Create root node.
    Definition: tree_node.cpp:14
    const std::string & GetName() const
    Get display name.
    Definition: tree_node.cpp:65
    std::size_t GetChildCount() const
    Get child count.
    Definition: tree_node.cpp:43
    -
    std::string m_name
    Definition: tree_node.h:114
    -
    TreeNode & operator=(const TreeNode &)=delete
    -
    std::unique_ptr< SignalInfo > m_signal
    Definition: tree_node.h:117
    NodeType GetType() const
    Get node type.
    Definition: tree_node.cpp:61
    const FrameInfo * GetFrame() const
    Get frame payload if node is frame.
    Definition: tree_node.cpp:69
    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
    @@ -190,13 +159,14 @@
    Describes one CAN frame from a DBC file.
    Definition: frame_info.h:24
    Describes one signal inside a DBC frame.
    Definition: signal_info.h:22
    NodeType
    Type of a tree node.
    Definition: tree_node.h:26
    - - -
    +
    - + diff --git a/main.cpp b/main.cpp index aa70188..6656657 100644 --- a/main.cpp +++ b/main.cpp @@ -87,8 +87,9 @@ static void PrintDecodedFrame (const DecodedFrameValue &decoded) { continue; std::cout << " " << signal.definition->name - << " raw=" << signal.rawValue - << " physical=" << signal.physicalValue + << " raw="; + std::visit ([] (auto rawValue) { std::cout << rawValue; }, signal.rawValue); + std::cout << " physical=" << signal.physicalValue << " " << signal.definition->unit << "\n"; } diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..d23afc7 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,50 @@ +# Decoder regression tests + +Run from the repository root with a C++17 compiler: + +```sh +g++ -std=c++17 -Wall -Wextra -Wpedantic -I. \ + tests/dbc_decoder_test.cpp dbc_decoder.cpp -o /tmp/dbc_decoder_test +/tmp/dbc_decoder_test +``` + +Alternatively, build the standalone qmake project out of source: + +```sh +mkdir -p /tmp/dbc_decoder_test_build +cd /tmp/dbc_decoder_test_build +qmake /absolute/path/to/dbc/tests/dbc_decoder_test.pro +make +./dbc_decoder_test +``` + +The executable returns a nonzero exit code if any case fails. Checks remain +active in release builds and do not depend on `assert` or an external test framework. + +Coverage includes Motorola bit numbering within and across bytes, unaligned +signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary values +(including `INT64_MIN`, `INT64_MAX`, and `UINT64_MAX`), numeric output, invalid lengths, insufficient +payloads, and Intel regression cases. Frame validity means the definition was +found; insufficient payloads are checked through signal validity. + +## Parser regression tests + +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 +boundaries, missing fields, malformed and overflowing numbers, reserved ID bits, +error paths and line numbers, and integration with signals and comments. +Temporary DBC fixtures are created in the system temporary directory and removed +automatically. + +Dispatch tests also verify exact keyword matching, handler construction and reuse, +unknown statements, and independent parsing sessions, including recovery after errors. diff --git a/tests/dbc_decoder_test.cpp b/tests/dbc_decoder_test.cpp new file mode 100644 index 0000000..b16be89 --- /dev/null +++ b/tests/dbc_decoder_test.cpp @@ -0,0 +1,154 @@ +#include "dbc_decoder.h" + +#include +#include +#include + +struct DecodeCase { + const char *name; + ByteOrder byteOrder; + std::uint32_t startBit; + std::uint32_t length; + ValueType valueType; + std::vector data; + bool valid; + std::int64_t rawValue; + double factor; + double offset; + double physicalValue; +}; + +int main() { + const DecodeCase cases[] = { + {"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 unaligned crossing", ByteOrder::Motorola, 3U, 12U, ValueType::Unsigned, + {0xAB, 0xCD}, true, 0xBCD, 1.0, 0.0, 3021.0}, + {"Motorola starts at bit zero", ByteOrder::Motorola, 0U, 2U, ValueType::Unsigned, + {0x01, 0x80}, true, 3, 1.0, 0.0, 3.0}, + {"Motorola second byte", ByteOrder::Motorola, 15U, 16U, ValueType::Unsigned, + {0xFF, 0x12, 0x34}, true, 0x1234, 1.0, 0.0, 4660.0}, + {"Motorola signed scaled", ByteOrder::Motorola, 7U, 16U, ValueType::Signed, + {0xFF, 0xFE}, true, -2, 0.5, 10.0, 9.0}, + {"Motorola 64 bits", ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, + {0, 0, 0, 0, 0, 0, 0x12, 0x34}, true, 0x1234, 1.0, 0.0, 4660.0}, + {"Motorola 64 bits high bit", ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, + {0x40, 0, 0, 0, 0, 0, 0, 0}, true, 0x4000000000000000LL, + 1.0, 0.0, 4611686018427387904.0}, + {"Motorola short payload", ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, + {0x12}, false, 0, 1.0, 0.0, 0.0}, + {"Motorola empty payload", ByteOrder::Motorola, 7U, 8U, ValueType::Unsigned, + {}, false, 0, 1.0, 0.0, 0.0}, + {"Motorola large start", ByteOrder::Motorola, + std::numeric_limits::max(), 8U, ValueType::Unsigned, + {0xFF}, false, 0, 1.0, 0.0, 0.0}, + {"Motorola zero length", ByteOrder::Motorola, 7U, 0U, ValueType::Unsigned, + {0xFF}, false, 0, 1.0, 0.0, 0.0}, + {"Motorola excessive length", ByteOrder::Motorola, 7U, 65U, ValueType::Unsigned, + std::vector (9U, 0xFF), false, 0, 1.0, 0.0, 0.0}, + {"Intel regression", ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, + {0x12, 0x34}, true, 0x3412, 1.0, 0.0, 13330.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} + }; + + int failures = 0; + for (const DecodeCase &test : cases) { + DecodeSignal signal; + signal.name = test.name; + signal.byteOrder = test.byteOrder; + signal.startBit = test.startBit; + signal.length = test.length; + signal.valueType = test.valueType; + signal.factor = test.factor; + signal.offset = test.offset; + + DecodeFrame definition; + definition.canId = 0x123U; + definition.dlc = static_cast (test.data.size()); + definition.signals.push_back (signal); + DecodeDatabase database; + database.frames.push_back (definition); + database.frameIndexByKey.emplace (FrameKey (definition.canId, false), 0U); + + RawCanFrame frame; + frame.canId = definition.canId; + frame.data = test.data; + const DecodedFrameValue result = DbcDecoder().Decode (database, frame); + const bool passed = result.valid && + (result.definition == &database.frames[0]) && + (result.signals.size() == 1U) && + (result.signals[0].definition == &database.frames[0].signals[0]) && + (result.signals[0].valid == test.valid) && + (!test.valid || (((test.valueType == ValueType::Signed) + ? (std::get_if (&result.signals[0].rawValue) && + std::get (result.signals[0].rawValue) == test.rawValue) + : (std::get_if (&result.signals[0].rawValue) && + std::get (result.signals[0].rawValue) == + static_cast (test.rawValue))) && + (result.signals[0].physicalValue == test.physicalValue))); + if (!passed) { + std::cerr << "FAIL: " << test.name << '\n'; + ++failures; + } + } + std::size_t boundaryCases = 0U; + for (ByteOrder order : {ByteOrder::Intel, ByteOrder::Motorola}) { + for (ValueType type : {ValueType::Unsigned, ValueType::Signed}) { + for (std::uint64_t bits : {std::uint64_t (0U), std::uint64_t (0x7FFFFFFFFFFFFFFFULL), + std::uint64_t (0x8000000000000000ULL), + std::uint64_t (0x8000000000000001ULL), + std::uint64_t (0xFFFFFFFFFFFFFFFFULL)}) { + DecodeDatabase database; + DecodeFrame definition; + DecodeSignal signal; + signal.startBit = order == ByteOrder::Intel ? 0U : 7U; + signal.length = 64U; + signal.byteOrder = order; + signal.valueType = type; + signal.factor = 0.5; + signal.offset = 10.0; + definition.signals.push_back (signal); + database.frames.push_back (definition); + database.frameIndexByKey.emplace (FrameKey (0U, false), 0U); + RawCanFrame frame; + for (unsigned byte = 0U; byte < 8U; ++byte) { + const unsigned shift = (order == ByteOrder::Intel ? byte : 7U - byte) * 8U; + frame.data.push_back (static_cast (bits >> shift)); + } + const auto result = DbcDecoder().Decode (database, frame); + const std::int64_t signedExpected = bits <= 0x7FFFFFFFFFFFFFFFULL + ? static_cast (bits) + : std::numeric_limits::min() + + static_cast (bits - 0x8000000000000000ULL); + const auto &decoded = result.signals.at (0U); + const auto expected = type == ValueType::Unsigned + ? std::variant (bits) + : std::variant (signedExpected); + const double physical = (type == ValueType::Unsigned + ? static_cast (bits) : static_cast (signedExpected)) * 0.5 + 10.0; + std::ostringstream actualText; + std::ostringstream expectedText; + std::visit ([&actualText] (auto raw) { actualText << raw; }, decoded.rawValue); + if (type == ValueType::Unsigned) + expectedText << bits; + else + expectedText << signedExpected; + if (!decoded.valid || decoded.rawValue != expected || + decoded.physicalValue != physical || actualText.str() != expectedText.str()) { + std::cerr << "FAIL: 64-bit boundary " << bits << '\n'; + ++failures; + } + ++boundaryCases; + } + } + } + if (failures != 0) + return 1; + std::cout << "All " << sizeof (cases) / sizeof (cases[0]) + boundaryCases << " decoder cases passed.\n"; + return 0; +} diff --git a/tests/dbc_decoder_test.pro b/tests/dbc_decoder_test.pro new file mode 100644 index 0000000..b5e22b4 --- /dev/null +++ b/tests/dbc_decoder_test.pro @@ -0,0 +1,7 @@ +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 diff --git a/tests/dbc_parser_test.cpp b/tests/dbc_parser_test.cpp new file mode 100644 index 0000000..5bee06b --- /dev/null +++ b/tests/dbc_parser_test.cpp @@ -0,0 +1,133 @@ +#include "dbc_parser.h" +#include "dbc_statement_handler.h" + +#include +#include +#include +#include +#include + +struct Fixture { + std::filesystem::path path = std::filesystem::temp_directory_path() / + ("dbc_parser_test_" + std::to_string ( + std::chrono::steady_clock::now().time_since_epoch().count()) + ".dbc"); + ~Fixture() { std::error_code error; std::filesystem::remove (path, error); } + void Write (const std::string &text) const { + std::ofstream output (path); + output << text; + if (!output) + throw std::runtime_error ("Cannot write test fixture."); + } +}; + +class CountingHandler : public DbcStatementHandler { + public: + inline static int instances = 0; + inline static int calls = 0; + CountingHandler() { ++instances; } + void Handle (const std::string &, DbcParseContext &context) const override { + ++calls; + context.database.frames.emplace_back(); + } +}; + +int main() { + Fixture fixture; + int failures = 0; + std::size_t count = 0U; + const auto check = [&] (bool passed, const std::string &name) { + ++count; + if (!passed) { ++failures; std::cerr << "FAIL: " << name << '\n'; } + }; + struct ValidCase { const char *line; std::uint32_t id; bool extended; unsigned length; }; + const ValidCase valid[] = { + {"BO_ 0 Frame: 0 ECU", 0U, false, 0U}, + {"BO_ 2047 Frame: 8 ECU", 2047U, false, 8U}, + {"BO_ 2048 Frame: 64 ECU", 2048U, true, 64U}, + {"BO_ 536870911 Frame: 255 ECU", 0x1FFFFFFFU, true, 255U}, + {"BO_ 2147483649 Frame: 8 ECU", 1U, true, 8U}, + {"BO_ 2684354559 Frame: 8 ECU", 0x1FFFFFFFU, true, 8U}, + {" BO_\t256\tFrame :\t8\tECU \r", 256U, false, 8U} + }; + for (const auto &test : valid) { + fixture.Write (std::string (test.line) + '\n'); + try { + const auto database = DbcParser().ParseFile (fixture.path.string()); + check (database.frames.size() == 1U && database.frames[0].name == "Frame" && + database.frames[0].canId == test.id && + database.frames[0].isExtended == test.extended && + database.frames[0].dlc == test.length && + database.frames[0].transmitter == "ECU", test.line); + } catch (const std::exception &error) { check (false, error.what()); } + } + const char *invalid[] = { + "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 Two Names: 8 ECU", "BO_ -1 Frame: 8 ECU", "BO_ +1 Frame: 8 ECU", + "BO_ 1x Frame: 8 ECU", "BO_ 0x123 Frame: 8 ECU", "BO_ 1.5 Frame: 8 ECU", + "BO_ 4294967296 Frame: 8 ECU", "BO_ 999999999999999999999 Frame: 8 ECU", + "BO_ 536870912 Frame: 8 ECU", "BO_ 1073741824 Frame: 8 ECU", + "BO_ 2684354560 Frame: 8 ECU", "BO_ 4294967295 Frame: 8 ECU", + "BO_ 1 Frame: -1 ECU", "BO_ 1 Frame: +8 ECU", "BO_ 1 Frame: 8x ECU", + "BO_ 1 Frame: 8.5 ECU", "BO_ 1 Frame: 256 ECU", + "BO_ 1 Frame: 4294967296 ECU", "BO_\tinvalid" + }; + for (const auto *line : invalid) { + fixture.Write (std::string ("VERSION \"test\"\n\n") + line + '\n'); + try { + DbcParser().ParseFile (fixture.path.string()); + check (false, line); + } catch (const std::runtime_error &error) { + const std::string prefix = fixture.path.string() + ":3: "; + check (std::string (error.what()).find (prefix) == 0U && + std::string (error.what()).size() > prefix.size(), line); + } + } + fixture.Write ( + "BO_TX_BU_ 256 : ECU;\nBO_ 256 Frame: 8 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" + "BO_ 257 Second: 8 ECU\n"); + const auto database = DbcParser().ParseFile (fixture.path.string()); + check (database.frames.size() == 2U && database.frames[0].signals.size() == 1U && + database.frames[0].comment == "Frame comment" && + database.frames[0].signals[0].comment == "Signal comment", "Integration"); + fixture.Write ("\nSG_ Speed : invalid\n"); + try { + DbcParser().ParseFile (fixture.path.string()); + check (false, "Signal error location"); + } catch (const std::runtime_error &error) { + check (std::string (error.what()).find (fixture.path.string() + ":2: ") == 0U, + "Signal error location"); + } + DbcDatabase dispatchDatabase; + DbcParseContext context {dispatchDatabase, nullptr}; + DbcStatementDispatcher dispatcher; + dispatcher.RegisterType ("TEST_"); + check (dispatcher.Dispatch ("TEST_ first", context) && + dispatcher.Dispatch ("TEST_ second", context) && + CountingHandler::instances == 1 && CountingHandler::calls == 2 && + dispatchDatabase.frames.size() == 2U, "Factory dispatch and handler reuse"); + check (!dispatcher.Dispatch ("TEST_OTHER data", context) && + !dispatcher.Dispatch ("BO_TX_BU_ 1 : ECU;", context) && + !dispatcher.Dispatch ("VAL_ 1 Speed 0 \"Stopped\";", context) && + CountingHandler::calls == 2, "Exact and unknown keyword dispatch"); + const DbcParser parser; + fixture.Write ("BO_ 1 First: 8 ECU\n"); + check (parser.ParseFile (fixture.path.string()).frames.size() == 1U, "First parse"); + fixture.Write ("SG_ Speed : invalid\n"); + try { + parser.ParseFile (fixture.path.string()); + check (false, "Independent parse context"); + } catch (const std::runtime_error &error) { + check (std::string (error.what()).find ("Signal found before any frame") != + std::string::npos, "Independent parse context"); + } + fixture.Write ("BO_ 2 Second: 8 ECU\n"); + const auto recovered = parser.ParseFile (fixture.path.string()); + check (recovered.frames.size() == 1U && recovered.frames[0].canId == 2U, + "Fresh parse after error"); + if (failures != 0) return 1; + std::cout << "All " << count << " parser cases passed.\n"; + return 0; +} diff --git a/tests/dbc_parser_test.pro b/tests/dbc_parser_test.pro new file mode 100644 index 0000000..d6341b3 --- /dev/null +++ b/tests/dbc_parser_test.pro @@ -0,0 +1,7 @@ +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 diff --git a/typefactory.h b/typefactory.h new file mode 100644 index 0000000..4f8909f --- /dev/null +++ b/typefactory.h @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +// Copyright (c) 2026 Dim Himro + +#ifndef TYPEFACTORY_H +#define TYPEFACTORY_H + +#include +#include +#include +#include // std::move + +/** + * @brief Registry-based factory for creating objects by runtime identifier. + * + * Allows registering derived types and instantiating them using a ClassId key. + * + * Notes: + * - Not thread-safe. Register types during initialization phase only. + * - Re-registering the same id overwrites the previous entry ("last wins"). + * - ClassId must be hashable (std::hash specialization must exist). + * + * @tparam ClassId -Unique class identifier type (e.g. std::string, int, enum). + * @tparam BaseClass -Base type for all created objects. + * @tparam Arg - Constructor arguments forwarded to registered derived types (by value). + * + * Usage example: + * @code + * #include + * + * struct Base { + * virtual ~Base() = default; + * virtual int get() = 0; + * }; + * + * struct Derived1 : Base { + * explicit Derived1(int start) : m_start(start) {} + * int get() override { return m_start + 1; } + * int m_start = 0; + * }; + * + * struct Derived2 : Base { + * explicit Derived2(int start) : m_start(start) {} + * int get() override { return m_start + 2; } + * int m_start = 0; + * }; + * + * TypeFactory factory; + * factory.registerType("one"); + * factory.registerType("two"); + * + * auto a = factory.create("one", 10); + * auto b = factory.creator("two")(10); // advanced API: get creator function + * + * (void)a->get(); + * (void)b->get(); + * @endcode + */ +template +class TypeFactory { +public: + using BasePtr = std::shared_ptr; + using CreatorFn = BasePtr (*)(Args...); + + TypeFactory() = default; + + /** + * @brief Registers a Derived type under the given id. + * + * Requirements (checked at compile-time): + * - Derived must inherit from BaseClass + * - Derived must be constructible from Args... + * + * Re-registering the same id overwrites the previous entry ("last wins"). + */ + template + void registerType(const ClassId& id) { + static_assert(std::is_base_of_v, + "Derived must inherit from BaseClass"); + static_assert(std::is_constructible_v, + "Derived must be constructible from Args..."); + + classes.insert_or_assign(id, &instantiate); + } + + /** + * @brief Returns creator function for the given id. + * @throws std::out_of_range when id is not registered. + */ + [[nodiscard]] CreatorFn creator(const ClassId& id) const { + return classes.at(id); + } + + /** + * @brief Creates an instance for the given id using provided arguments. + * @throws std::out_of_range when id is not registered. + */ + [[nodiscard]] BasePtr create(const ClassId& id, Args... args) const { + return creator(id)(std::move(args)...); + } + + /** + * @brief Checks whether an id is registered. + */ + [[nodiscard]] bool contains(const ClassId& id) const { + return classes.find(id) != classes.end(); + } + +protected: + // Protected by design: derived factories may extend/inspect the registry. + std::unordered_map classes; + +private: + template + static BasePtr instantiate(Args... args) { + return std::make_shared(std::move(args)...); + } +}; +#endif // TYPEFACTORY_H