Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0938cb29c | ||
|
|
a533d9aa00 | ||
|
|
e5d818d9b2 | ||
|
|
65142fdfe3 | ||
|
|
f17ddb6aad | ||
|
|
0067cb4ddd | ||
|
|
03dc8f2a13 | ||
|
|
6cd99768ae | ||
|
|
1163277b17 | ||
|
|
b91cf4aae5 | ||
|
|
8d82b13dad |
No files matched your search
@@ -0,0 +1,65 @@
|
|||||||
|
BasedOnStyle: LLVM
|
||||||
|
AccessModifierOffset: -4
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveAssignments: None
|
||||||
|
AlignOperands: Align
|
||||||
|
AllowAllArgumentsOnNextLine: false
|
||||||
|
AllowAllConstructorInitializersOnNextLine: false
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
|
AllowShortBlocksOnASingleLine: Always
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: Always
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterUnion: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: false
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
ColumnLimit: 0
|
||||||
|
CompactNamespaces: false
|
||||||
|
ContinuationIndentWidth: 8
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentWidth: 4
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
|
MaxEmptyLinesToKeep: 2
|
||||||
|
NamespaceIndentation: All
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PointerAlignment: Right
|
||||||
|
ReflowComments: false
|
||||||
|
SpaceAfterCStyleCast: true
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: false
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 0
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInContainerLiterals: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
TabWidth: 4
|
||||||
|
UseTab: Never
|
||||||
@@ -20,7 +20,13 @@ The implementation follows a simple and practical design:
|
|||||||
- Qt is not required at the parser or decoder level
|
- Qt is not required at the parser or decoder level
|
||||||
- the same decode engine can be reused for live traffic and trace replay
|
- the same decode engine can be reused for live traffic and trace replay
|
||||||
|
|
||||||
This is **not a full production-grade DBC implementation yet**, but it is a strong architectural base.
|
The core library uses C++17 and has no Qt dependency. Qt Core and Qt Test are
|
||||||
|
used by the regression tests; the optional adapter requires Qt Core. Live CAN acquisition, trace-file readers,
|
||||||
|
are left to the consuming application. An optional Qt Core model adapter is provided in `qt/`.
|
||||||
|
|
||||||
|
See [changelog.md](changelog.md) for the release and development history,
|
||||||
|
[tests/README.md](tests/README.md) for test instructions, and
|
||||||
|
[generated API documentation](docs/html/index.html) for the API reference.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -49,7 +55,7 @@ DbcTreeBuilder
|
|||||||
↓
|
↓
|
||||||
TreeNode hierarchy
|
TreeNode hierarchy
|
||||||
↓
|
↓
|
||||||
future Qt UI
|
DbcTreeModel → Qt views
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Runtime decode path
|
### 2. Runtime decode path
|
||||||
@@ -105,65 +111,25 @@ This avoids forcing UI-oriented structures into a decode role they were not mean
|
|||||||
|
|
||||||
## Module Layout
|
## Module Layout
|
||||||
|
|
||||||
### Parsed DBC structures
|
```text
|
||||||
|
core/ C++17 parser, statement handlers, metadata, tree, and decoder
|
||||||
|
examples/ Command-line demo (built separately)
|
||||||
|
qt/ Optional read-only Qt Core model adapter
|
||||||
|
tests/ Parser, decoder, tree, and optional model tests
|
||||||
|
docs/ Generated Doxygen documentation
|
||||||
|
dbc.pro Root qmake project: core + tests
|
||||||
|
Doxyfile API documentation configuration
|
||||||
|
```
|
||||||
|
|
||||||
Files:
|
| Component | Source files |
|
||||||
|
| --- | --- |
|
||||||
- `signal_info.h`
|
| Parsed metadata | `core/dbc_database.h`, `core/frame_info.h`, `core/signal_info.h` |
|
||||||
- `frame_info.h`
|
| Parser and dispatch | `core/dbc_parser.*`, `core/dbc_statement_handler.*`, `core/typefactory.h` |
|
||||||
- `dbc_database.h`
|
| UI tree | `core/tree_node.*`, `core/dbc_tree_builder.*` |
|
||||||
|
| Runtime database | `core/decode_database.h`, `core/dbc_decode_builder.*` |
|
||||||
These store a readable representation of the parsed DBC file.
|
| Decoder | `core/dbc_decoder.*` |
|
||||||
|
| Demo | `examples/main.cpp`, `examples/demo.pro` |
|
||||||
### UI tree structures
|
| Build integration | `core/core.pro`, `core/core_files.pri`, `core/core.pri` |
|
||||||
|
|
||||||
Files:
|
|
||||||
|
|
||||||
- `tree_node.h`
|
|
||||||
- `tree_node.cpp`
|
|
||||||
- `dbc_tree_builder.h`
|
|
||||||
- `dbc_tree_builder.cpp`
|
|
||||||
|
|
||||||
These convert parsed DBC content into a tree hierarchy suitable for UI and model/view usage later.
|
|
||||||
|
|
||||||
### Runtime decode structures
|
|
||||||
|
|
||||||
Files:
|
|
||||||
|
|
||||||
- `decode_database.h`
|
|
||||||
- `dbc_decode_builder.h`
|
|
||||||
- `dbc_decode_builder.cpp`
|
|
||||||
|
|
||||||
These convert parsed DBC content into a structure optimized for decoding.
|
|
||||||
|
|
||||||
### Runtime decoder
|
|
||||||
|
|
||||||
Files:
|
|
||||||
|
|
||||||
- `dbc_decoder.h`
|
|
||||||
- `dbc_decoder.cpp`
|
|
||||||
|
|
||||||
These perform actual decoding of raw CAN frames using `DecodeDatabase`.
|
|
||||||
|
|
||||||
### Parser
|
|
||||||
|
|
||||||
Files:
|
|
||||||
|
|
||||||
- `dbc_parser.h`
|
|
||||||
- `dbc_parser.cpp`
|
|
||||||
- `dbc_statement_handler.h`
|
|
||||||
- `dbc_statement_handler.cpp`
|
|
||||||
- `typefactory.h`
|
|
||||||
|
|
||||||
The parser reads files and reports errors; registered statement handlers parse DBC constructs.
|
|
||||||
|
|
||||||
### Demo
|
|
||||||
|
|
||||||
File:
|
|
||||||
|
|
||||||
- `main.cpp`
|
|
||||||
|
|
||||||
Used as a small integration example.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -264,12 +230,13 @@ dbc
|
|||||||
└── Odometer
|
└── Odometer
|
||||||
```
|
```
|
||||||
|
|
||||||
Each node stores either:
|
Frame and signal nodes store copies of the corresponding metadata; the root
|
||||||
|
has no metadata payload. The payload types are:
|
||||||
|
|
||||||
- `FrameInfo`
|
- `FrameInfo`
|
||||||
- `SignalInfo`
|
- `SignalInfo`
|
||||||
|
|
||||||
The tree is intended for browsing and later Qt model integration.
|
The tree supports browsing through the optional `DbcTreeModel` adapter.
|
||||||
|
|
||||||
It is **not** the primary runtime decode structure.
|
It is **not** the primary runtime decode structure.
|
||||||
|
|
||||||
@@ -414,6 +381,7 @@ Fields:
|
|||||||
- `rawValue`
|
- `rawValue`
|
||||||
- `physicalValue`
|
- `physicalValue`
|
||||||
- `valid`
|
- `valid`
|
||||||
|
- `status`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -425,10 +393,14 @@ produce the `int64_t` alternative and unsigned definitions produce the `uint64_t
|
|||||||
alternative. Raw values remain exact across their full 64-bit ranges. Check
|
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.
|
`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:
|
Use `std::get` when the numeric type is known, or `std::get_if` to handle both:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
std::visit([] (auto raw) { std::cout << raw; }, decodedSignal.rawValue);
|
if (const auto *value = std::get_if<std::int64_t>(&decodedSignal.rawValue)) {
|
||||||
|
std::cout << *value;
|
||||||
|
} else {
|
||||||
|
std::cout << std::get<std::uint64_t>(decodedSignal.rawValue);
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
This replaces the previous `int64_t` field: consumers that read or print
|
This replaces the previous `int64_t` field: consumers that read or print
|
||||||
@@ -455,7 +427,14 @@ Fields:
|
|||||||
- `signals`
|
- `signals`
|
||||||
- `valid`
|
- `valid`
|
||||||
|
|
||||||
This is the decoder output for one raw frame.
|
`valid` means a matching frame definition was found. Check each signal's
|
||||||
|
`valid` separately: insufficient payload data can leave individual signals
|
||||||
|
invalid even when the frame is valid. An unknown frame returns `valid == false`.
|
||||||
|
|
||||||
|
The frame and signal `definition` pointers refer into `DecodeDatabase`. Keep
|
||||||
|
that database alive and avoid changes that invalidate its frame or signal
|
||||||
|
storage while using decoded results. The decoder applies factor and offset;
|
||||||
|
it does not clamp physical values to the declared minimum and maximum.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -466,7 +445,7 @@ Main runtime decoder class.
|
|||||||
Responsibilities:
|
Responsibilities:
|
||||||
|
|
||||||
- find a frame definition by CAN ID
|
- find a frame definition by CAN ID
|
||||||
- decode all signals in a frame
|
- decode unconditional signals and the active multiplexed branch
|
||||||
- extract raw values
|
- extract raw values
|
||||||
- sign-extend signed values
|
- sign-extend signed values
|
||||||
- convert raw values into physical values
|
- convert raw values into physical values
|
||||||
@@ -486,6 +465,8 @@ The current parser supports the following DBC elements:
|
|||||||
- `SG_`
|
- `SG_`
|
||||||
- `CM_ BO_`
|
- `CM_ BO_`
|
||||||
- `CM_ SG_`
|
- `CM_ SG_`
|
||||||
|
- `VAL_` signal value descriptions
|
||||||
|
- basic `M` / `mN` multiplexing
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -532,9 +513,8 @@ one-based physical line number, including blank lines:
|
|||||||
example.dbc:3: Invalid CAN ID: invalid
|
example.dbc:3: Invalid CAN ID: invalid
|
||||||
```
|
```
|
||||||
|
|
||||||
This change validates frame definitions. Signal syntax and unsupported DBC
|
Frame and signal definitions are validated as described here; comprehensive
|
||||||
constructs retain their existing behavior; comprehensive validation is still
|
DBC grammar coverage is still planned. File-open errors contain the path but have no line number.
|
||||||
planned. File-open errors contain the path but have no line number.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -562,6 +542,84 @@ Parsed fields:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Signal validation and parse errors
|
||||||
|
|
||||||
|
`SG_` statements are matched completely. Signal names must be nonempty and
|
||||||
|
contain no whitespace. Spaces and tabs are accepted between syntax elements;
|
||||||
|
byte order and signedness remain adjacent (`@0+`, `@0-`, `@1+`, or `@1-`).
|
||||||
|
A quoted unit (which may be empty) and a nonempty comma-separated receiver
|
||||||
|
list are required. Unexpected trailing fields are rejected.
|
||||||
|
|
||||||
|
Start bits must be unsigned decimal integers fitting `uint32_t`; lengths must
|
||||||
|
be within `1..64` bits. Signs, fractional values, numeric suffixes, and overflow
|
||||||
|
are rejected for these fields. Every signal bit must fit within the frame's
|
||||||
|
declared payload length, using Intel increasing bit positions or Motorola
|
||||||
|
sawtooth traversal. This uses the stored payload length without introducing
|
||||||
|
an additional CAN or CAN FD payload limit.
|
||||||
|
|
||||||
|
Factor, offset, minimum, and maximum accept signed decimal numbers, fractions,
|
||||||
|
and scientific notation. The entire numeric token must be valid; hexadecimal
|
||||||
|
numbers, NaN, infinity, conversion overflow, and conversion underflow are
|
||||||
|
rejected. Minimum must not exceed maximum. Zero and negative factors are allowed.
|
||||||
|
|
||||||
|
Basic multiplexing markers `M` and `mN` are supported as described below.
|
||||||
|
Overlapping signals are rejected unless their branch values differ.
|
||||||
|
Duplicate frame/signal name detection remains separate work.
|
||||||
|
|
||||||
|
Invalid signal definitions stop parsing with `path:line: description`, including
|
||||||
|
when the signal exceeds the declared payload length.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Basic multiplexing
|
||||||
|
|
||||||
|
```dbc
|
||||||
|
BO_ 256 Status: 3 ECU
|
||||||
|
SG_ Mode M : 0|8@1+ (1,0) [0|255] "" ECU
|
||||||
|
SG_ Temperature m1 : 8|8@1- (1,0) [-128|127] "C" ECU
|
||||||
|
SG_ Pressure m2 : 8|8@1+ (2,0) [0|510] "kPa" ECU
|
||||||
|
SG_ Counter : 16|8@1+ (1,0) [0|255] "" ECU
|
||||||
|
```
|
||||||
|
|
||||||
|
`SignalInfo` and `DecodeSignal` contain `multiplexing`: a `MultiplexRole`
|
||||||
|
(`Unconditional`, `Selector`, or `Branch`) and an exact `uint64_t` branch `value`.
|
||||||
|
Each frame may have one unsigned selector (`M`); a branch (`mN`) references that
|
||||||
|
selector implicitly. The selector may appear after its branches. `N` must contain
|
||||||
|
only decimal digits, fit `uint64_t`, and fit the selector's bit width. Leading
|
||||||
|
zeros are accepted. A selector without branches is allowed. Signed selectors,
|
||||||
|
missing selectors, multiple selectors, nested/combined markers, and extended
|
||||||
|
`SG_MUL_VAL_` statements are rejected with the originating `path:line`.
|
||||||
|
The dispatcher registers the unsupported statement handler through `TypeFactory`.
|
||||||
|
|
||||||
|
Signal bits may overlap only between branches with different selector values.
|
||||||
|
This validation uses Intel or Motorola bit traversal, including mixed byte orders.
|
||||||
|
It also rejects overlapping unconditional signals. Metadata survives the runtime
|
||||||
|
and tree builders; the optional Qt adapter does not add multiplexing roles yet.
|
||||||
|
|
||||||
|
The shared decoder extracts the selector before processing branches, compares its
|
||||||
|
**raw unsigned value**, and leaves result order equal to definition order. Factor,
|
||||||
|
offset, and `VAL_` descriptions do not influence branch selection. Unconditional
|
||||||
|
signals continue to decode. An unmapped selector value leaves all branches inactive.
|
||||||
|
|
||||||
|
Each result has `SignalDecodeStatus status`:
|
||||||
|
|
||||||
|
| Status | Meaning |
|
||||||
|
| --- | --- |
|
||||||
|
| `Valid` | Raw and physical values are available; `valid == true` |
|
||||||
|
| `Inactive` | Selector is available and chooses another branch |
|
||||||
|
| `SelectorUnavailable` | Branch activation is unknown because selector bytes are missing |
|
||||||
|
| `InsufficientPayload` | Selected or unconditional signal bytes are missing |
|
||||||
|
| `InvalidDefinition` | Invalid bit length or missing/invalid selector in manually built runtime metadata |
|
||||||
|
|
||||||
|
All statuses except `Valid` have `valid == false`; their numeric fields contain
|
||||||
|
no decoded data and `GetValueDescription()` returns nullptr. Check `status` to
|
||||||
|
distinguish inactive branches from errors. Consumers constructing runtime metadata
|
||||||
|
manually must obey the same non-overlap rules as the parser. Extended and nested
|
||||||
|
multiplexing are outside this stage and are explicitly rejected, rather than
|
||||||
|
silently decoded as unconditional signals.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Comments
|
## Comments
|
||||||
|
|
||||||
Frame comment example:
|
Frame comment example:
|
||||||
@@ -624,7 +682,8 @@ RawCanFrame
|
|||||||
↓
|
↓
|
||||||
Find frame in DecodeDatabase
|
Find frame in DecodeDatabase
|
||||||
↓
|
↓
|
||||||
For each signal:
|
Extract multiplexor selector first (when present)
|
||||||
|
For each unconditional or active signal:
|
||||||
extract raw bits
|
extract raw bits
|
||||||
apply sign extension if needed
|
apply sign extension if needed
|
||||||
convert to physical value
|
convert to physical value
|
||||||
@@ -651,34 +710,44 @@ This is one of the main reasons why the runtime decode layer should be explicit
|
|||||||
|
|
||||||
## Example Usage
|
## Example Usage
|
||||||
|
|
||||||
## Parse DBC
|
Include the public headers from the `core/` include directory supplied by
|
||||||
|
`core/core.pri`:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include "dbc_parser.h"
|
||||||
|
#include "dbc_tree_builder.h"
|
||||||
|
#include "dbc_decode_builder.h"
|
||||||
|
#include "dbc_decoder.h"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parse DBC
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
DbcParser parser;
|
DbcParser parser;
|
||||||
DbcDatabase database = parser.ParseFile("example.dbc");
|
DbcDatabase database = parser.ParseFile("example.dbc");
|
||||||
```
|
```
|
||||||
|
|
||||||
## Build UI tree
|
### Build UI tree
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
DbcTreeBuilder treeBuilder;
|
DbcTreeBuilder treeBuilder;
|
||||||
std::unique_ptr<TreeNode> root = treeBuilder.Build(database);
|
std::unique_ptr<TreeNode> root = treeBuilder.Build(database);
|
||||||
```
|
```
|
||||||
|
|
||||||
## Build runtime decode database
|
### Build runtime decode database
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
DbcDecodeBuilder decodeBuilder;
|
DbcDecodeBuilder decodeBuilder;
|
||||||
DecodeDatabase decodeDatabase = decodeBuilder.Build(database);
|
DecodeDatabase decodeDatabase = decodeBuilder.Build(database);
|
||||||
```
|
```
|
||||||
|
|
||||||
## Decode a raw frame
|
### Decode a raw frame
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
RawCanFrame rawFrame;
|
RawCanFrame rawFrame;
|
||||||
rawFrame.canId = 0x123;
|
rawFrame.canId = 256; // EngineData from the DBC example above
|
||||||
rawFrame.isExtended = false;
|
rawFrame.isExtended = false;
|
||||||
rawFrame.data = {0x01, 0x02, 0x03, 0x04};
|
rawFrame.data = {0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||||
|
|
||||||
DbcDecoder decoder;
|
DbcDecoder decoder;
|
||||||
DecodedFrameValue decoded = decoder.Decode(decodeDatabase, rawFrame);
|
DecodedFrameValue decoded = decoder.Decode(decodeDatabase, rawFrame);
|
||||||
@@ -784,9 +853,10 @@ lines:
|
|||||||
- `BO_` → `DbcFrameHandler`
|
- `BO_` → `DbcFrameHandler`
|
||||||
- `SG_` → `DbcSignalHandler`
|
- `SG_` → `DbcSignalHandler`
|
||||||
- `CM_` → `DbcCommentHandler`
|
- `CM_` → `DbcCommentHandler`
|
||||||
|
- `VAL_` → `DbcValueDescriptionHandler`
|
||||||
|
|
||||||
Grammar implementations live in `dbc_statement_handler.cpp`; their interface,
|
Grammar implementations live in `core/dbc_statement_handler.cpp`; their interface,
|
||||||
context, and dispatcher live in `dbc_statement_handler.h`. `typefactory.h`
|
context, and dispatcher live in `core/dbc_statement_handler.h`. `core/typefactory.h`
|
||||||
provides the generic registry and object creation.
|
provides the generic registry and object creation.
|
||||||
|
|
||||||
To add a construct, implement a default-constructible handler deriving from
|
To add a construct, implement a default-constructible handler deriving from
|
||||||
@@ -799,14 +869,14 @@ void Handle(const std::string &line, DbcParseContext &context) const override;
|
|||||||
Register it in the dispatcher constructor:
|
Register it in the dispatcher constructor:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
RegisterType<DbcValueHandler>("VAL_"); // after implementing DbcValueHandler
|
RegisterType<MyCustomHandler>("CUSTOM_"); // after implementing MyCustomHandler
|
||||||
```
|
```
|
||||||
|
|
||||||
Registration creates one handler; replacing a registration replaces that instance.
|
Registration creates one handler; replacing a registration replaces that instance.
|
||||||
Register during initialization before dispatching. A line is routed using its
|
Register during initialization before dispatching. A line is routed using its
|
||||||
full first whitespace-delimited keyword, so `BO_TX_BU_` cannot match `BO_`.
|
full first whitespace-delimited keyword, so `BO_TX_BU_` cannot match `BO_`.
|
||||||
Unregistered keywords remain ignored. Existing `SG_` and `CM_` syntax policies
|
Unregistered keywords remain ignored. `SG_` accepts spaces and tabs after its keyword; `CM_` retains its existing
|
||||||
are preserved, including requiring a literal space after those keywords.
|
policy requiring a literal space.
|
||||||
|
|
||||||
This factory handles statements inside DBC files. A separate format-level
|
This factory handles statements inside DBC files. A separate format-level
|
||||||
factory can be introduced when another file format is implemented. The decoder
|
factory can be introduced when another file format is implemented. The decoder
|
||||||
@@ -814,14 +884,71 @@ and database builders remain independent of statement dispatch.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Signal value descriptions (`VAL_`)
|
||||||
|
|
||||||
|
Signal descriptions attach text to exact raw integer values:
|
||||||
|
|
||||||
|
```dbc
|
||||||
|
BO_ 256 Status: 8 ECU
|
||||||
|
SG_ State : 0|8@1+ (1,0) [0|255] "" ECU
|
||||||
|
VAL_ 256 State 0 "Off" 1 "On" 2 "Error";
|
||||||
|
```
|
||||||
|
|
||||||
|
Each statement must occupy one physical line, contain at least one integer/text
|
||||||
|
pair, and end with a semicolon. Spaces and tabs are accepted between fields;
|
||||||
|
descriptions may contain whitespace, semicolons, and empty text. Inside quoted
|
||||||
|
text, `\"` and `\\` represent a quote and a backslash; other escapes are rejected.
|
||||||
|
Keys are decimal integers in `INT64_MIN..UINT64_MAX`, with an optional minus
|
||||||
|
sign; plus signs, fractions, hexadecimal numbers, exponents, and overflow are
|
||||||
|
rejected. Keys never pass through `double`.
|
||||||
|
|
||||||
|
`VAL_` may appear before or after its frame and signal declarations. References
|
||||||
|
are resolved after reading the file using the same CAN ID normalization as
|
||||||
|
`BO_`, including bit 31 for extended identifiers. Standard and extended frames
|
||||||
|
with the same normalized ID remain distinct. Missing or ambiguous references,
|
||||||
|
malformed statements, and duplicate integer keys produce `path:line: description`
|
||||||
|
errors at the originating `VAL_` line. Distinct keys from multiple statements
|
||||||
|
are merged; `0`, `00`, and `-0` are the same key. Keys need not fit the referenced
|
||||||
|
signal's bit width or signedness; unreachable keys simply cannot match a decode.
|
||||||
|
|
||||||
|
Mappings are available as `SignalInfo::valueDescriptions` and
|
||||||
|
`DecodeSignal::valueDescriptions`, and survive both database builders, including
|
||||||
|
`TreeNode::GetSignal()`. Consumers can look up a decoded result directly:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
const DecodedSignalValue &value = decodedFrame.signals.at(0);
|
||||||
|
if (const std::string *description = value.GetValueDescription()) {
|
||||||
|
std::cout << *description;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`GetValueDescription()` uses the exact raw integer before factor/offset scaling.
|
||||||
|
It returns `nullptr` for an invalid decode or an unknown value; numeric decoding
|
||||||
|
and `physicalValue` are unchanged. A mapped empty string returns a non-null
|
||||||
|
pointer. The pointer belongs to the signal definition and stays valid while that
|
||||||
|
definition and mapping remain alive and unchanged.
|
||||||
|
|
||||||
|
For metadata or standalone raw values, use
|
||||||
|
`FindValueDescription(signal.valueDescriptions, rawValue)`, where `rawValue` is
|
||||||
|
`RawSignalValue` (`std::variant<std::int64_t, std::uint64_t>`). The helper matches
|
||||||
|
nonnegative signed and unsigned values identically and keeps negative values
|
||||||
|
distinct from large unsigned values. Stored keys use negative `int64_t` and
|
||||||
|
nonnegative `uint64_t`; when constructing mappings manually, normalize keys
|
||||||
|
with `NormalizeValueKey()` before insertion.
|
||||||
|
|
||||||
|
Named `VAL_TABLE_` tables, environment-variable mappings, multiline statements,
|
||||||
|
are outside this implementation; the optional Qt adapter exposes signal mappings.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Current Limitations
|
## Current Limitations
|
||||||
|
|
||||||
This is still a minimal implementation.
|
This is still a minimal implementation.
|
||||||
|
|
||||||
Not supported yet:
|
Not supported yet:
|
||||||
|
|
||||||
- multiplexed signals
|
- extended and nested multiplexing (`SG_MUL_VAL_`, `mNM`)
|
||||||
- `VAL_` tables
|
- named `VAL_TABLE_` tables and environment-variable value descriptions
|
||||||
- `BA_` attributes
|
- `BA_` attributes
|
||||||
- `BA_DEF_` definitions
|
- `BA_DEF_` definitions
|
||||||
- advanced comment handling
|
- advanced comment handling
|
||||||
@@ -829,7 +956,19 @@ Not supported yet:
|
|||||||
- full J1939 validation
|
- full J1939 validation
|
||||||
- extensive edge-case handling for unusual DBC formatting
|
- extensive edge-case handling for unusual DBC formatting
|
||||||
|
|
||||||
Motorola extraction is implemented, but it should still be verified carefully against real-world DBC files and expected values.
|
Additional behavior to account for:
|
||||||
|
|
||||||
|
- unregistered DBC keywords are ignored
|
||||||
|
- an `SG_` statement before the first frame is rejected
|
||||||
|
- duplicate frame and signal definitions are not rejected globally; ambiguous
|
||||||
|
`VAL_` references to them are rejected
|
||||||
|
- payload lengths are checked against storage bounds (`0..255`), rather than
|
||||||
|
CAN or CAN FD protocol limits
|
||||||
|
- comment handling is limited to the supported forms and already parsed targets
|
||||||
|
|
||||||
|
Motorola extraction uses DBC sawtooth numbering: a start bit of 7 traverses
|
||||||
|
`7..0, 15..8, 23..16`. Regression tests cover aligned and unaligned signals,
|
||||||
|
byte boundaries, and 64-bit values.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -842,6 +981,7 @@ A practical development order would be:
|
|||||||
- `BO_`
|
- `BO_`
|
||||||
- `SG_`
|
- `SG_`
|
||||||
- `CM_`
|
- `CM_`
|
||||||
|
- `VAL_` signal value descriptions
|
||||||
- normalized CAN ID
|
- normalized CAN ID
|
||||||
- `isExtended`
|
- `isExtended`
|
||||||
- transmitter
|
- transmitter
|
||||||
@@ -855,17 +995,13 @@ A practical development order would be:
|
|||||||
|
|
||||||
Recommended additions:
|
Recommended additions:
|
||||||
|
|
||||||
- parent pointer in `TreeNode`
|
|
||||||
- Qt model adapter
|
|
||||||
- `VAL_` support for enum-style signals
|
|
||||||
- better display strings for UI
|
|
||||||
- selective decoding of only chosen signals
|
- selective decoding of only chosen signals
|
||||||
|
|
||||||
### Stage 3
|
### Stage 3
|
||||||
|
|
||||||
Recommended additions:
|
Recommended additions:
|
||||||
|
|
||||||
- multiplexing support
|
- basic multiplexing (implemented)
|
||||||
- attribute parsing
|
- attribute parsing
|
||||||
- richer J1939 support
|
- richer J1939 support
|
||||||
- CSV export of decoded traces
|
- CSV export of decoded traces
|
||||||
@@ -884,53 +1020,171 @@ Advanced functionality:
|
|||||||
|
|
||||||
## Build Integration
|
## Build Integration
|
||||||
|
|
||||||
The module does not depend on any specific build system.
|
The repository supplies qmake projects. A C++17 compiler is required; the root
|
||||||
|
build also requires Qt Core and Qt Test development packages. Other build
|
||||||
|
systems can compile the sources listed in `core/core_files.pri`; no CMake
|
||||||
|
configuration is currently provided.
|
||||||
|
|
||||||
It can be integrated with:
|
Open `dbc.pro` in Qt Creator to see two subprojects: `core` and `tests`.
|
||||||
|
`core/core.pro` builds the C++17 static library `dbc_core` without a Qt dependency.
|
||||||
|
`tests/tests.pro` builds the QtTest executable `dbc_tests` and links that library.
|
||||||
|
The root project declares `tests.depends = core` for parallel builds.
|
||||||
|
|
||||||
- CMake
|
Build out of source (Qt 6; use `qmake` for Qt 5):
|
||||||
- qmake
|
|
||||||
- Makefile
|
|
||||||
|
|
||||||
Just add the source files to the project.
|
```sh
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
qmake6 ../dbc.pro
|
||||||
|
make -j
|
||||||
|
make check
|
||||||
|
```
|
||||||
|
|
||||||
|
`core/core_files.pri` lists the library sources and headers.
|
||||||
|
Consumers include `core/core.pri` for include paths and library linkage; the test
|
||||||
|
source lists live in `tests/parser_tests.pri` and `tests/decoder_tests.pri`.
|
||||||
|
When building a consumer separately, pass
|
||||||
|
`DBC_CORE_BUILD_DIR=/absolute/path/to/build/core` to qmake.
|
||||||
|
|
||||||
|
### Build core without Qt libraries
|
||||||
|
|
||||||
|
From the repository root:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir -p build/core
|
||||||
|
cd build/core
|
||||||
|
qmake6 ../../core/core.pro
|
||||||
|
make -j
|
||||||
|
```
|
||||||
|
|
||||||
|
qmake is still the build tool; this target does not link Qt libraries.
|
||||||
|
|
||||||
|
### Optional Qt model adapter
|
||||||
|
|
||||||
|
Requires Qt 5.11 or newer (including Qt 6) for `QAbstractItemModelTester`.
|
||||||
|
The adapter itself links only Qt Core. Enable its library and focused QtTest suite:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir -p build-qt
|
||||||
|
cd build-qt
|
||||||
|
qmake6 ../dbc.pro CONFIG+=dbc_qt
|
||||||
|
make -j
|
||||||
|
make check
|
||||||
|
```
|
||||||
|
|
||||||
|
Consumers include `qt/qt.pri` instead of `core/core.pri`, and set
|
||||||
|
`DBC_CORE_BUILD_DIR` and `DBC_QT_BUILD_DIR` to the corresponding library build
|
||||||
|
directories when building separately. A widget application also needs `QT += widgets`. The adapter integration enables
|
||||||
|
`no_keywords`, because core metadata has a `signals` member; use `Q_SIGNALS`,
|
||||||
|
`Q_SLOTS`, and `Q_EMIT` in consuming Qt classes.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include "dbc_parser.h"
|
||||||
|
#include "dbc_tree_builder.h"
|
||||||
|
#include "dbc_tree_model.h"
|
||||||
|
#include <QTreeView>
|
||||||
|
|
||||||
|
// Run after constructing QApplication; view owns the model through QObject.
|
||||||
|
QTreeView view;
|
||||||
|
auto *model = new DbcTreeModel(&view);
|
||||||
|
model->SetTree(DbcTreeBuilder().Build(DbcParser().ParseFile("example.dbc")));
|
||||||
|
view.setModel(model);
|
||||||
|
view.expandAll();
|
||||||
|
view.show();
|
||||||
|
// On reload, pass a newly built tree to SetTree(); to clear:
|
||||||
|
// model->SetTree(nullptr);
|
||||||
|
```
|
||||||
|
|
||||||
|
The root is invisible: frames are top-level rows, signals are their children.
|
||||||
|
Only column zero has children. `parent()` always returns column zero.
|
||||||
|
The model takes exclusive ownership of the tree; do not retain mutable aliases.
|
||||||
|
Metadata is copied by the tree builder, so the parsed database may be destroyed.
|
||||||
|
`TreeNode::GetParent()` is non-owning and `GetRow()` gives the zero-based sibling
|
||||||
|
position (zero for a detached node/root). Nodes cannot be copied or moved;
|
||||||
|
transferring their `unique_ptr` ownership preserves addresses and navigation.
|
||||||
|
|
||||||
|
Call `SetTree()` on the model's thread. It accepts a detached Root or nullptr,
|
||||||
|
uses `beginResetModel()`/`endResetModel()`, and destroys the previous tree during
|
||||||
|
reset. All ordinary QModelIndex values expire on reset and must not be reused;
|
||||||
|
QPersistentModelIndex values are invalidated by Qt. Destroying the model also
|
||||||
|
invalidates indexes. Invalid and foreign indexes return no data/flags/children.
|
||||||
|
Valid items are enabled and selectable, with no editing support.
|
||||||
|
|
||||||
|
| Column (zero-based enum) | Frame display | Signal display |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 0 `Name` | Name | Name |
|
||||||
|
| 1 `CanId` | Normalized hexadecimal ID | Empty |
|
||||||
|
| 2 `PayloadLength` | Bytes | Empty |
|
||||||
|
| 3 `StartBit` | Empty | DBC start bit |
|
||||||
|
| 4 `BitLength` | Empty | Bit count |
|
||||||
|
| 5 `ByteOrder` | Empty | Intel / Motorola |
|
||||||
|
| 6 `Signed` | Empty | Signed / Unsigned |
|
||||||
|
| 7 `Unit` | Empty | Unit |
|
||||||
|
| 8 `Comment` | Comment | Comment |
|
||||||
|
|
||||||
|
Horizontal DisplayRole headers describe these columns; other header requests
|
||||||
|
return invalid QVariant. ToolTipRole returns the comment on every column.
|
||||||
|
Custom roles also apply on every column; inapplicable roles return invalid QVariant:
|
||||||
|
|
||||||
|
| Role | Node types | QVariant content |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `NodeTypeRole` | Frame, signal | int corresponding to NodeType |
|
||||||
|
| `CanIdRole`, `PayloadLengthRole`, `ExtendedRole` | Frame | uint, int, bool |
|
||||||
|
| `StartBitRole`, `BitLengthRole` | Signal | uint |
|
||||||
|
| `LittleEndianRole`, `SignedRole` | Signal | bool |
|
||||||
|
| `UnitRole` | Signal | QString |
|
||||||
|
| `CommentRole` | Frame, signal | QString |
|
||||||
|
| `ValueDescriptionsRole` | Signal | QVariantList of QVariantMap entries |
|
||||||
|
|
||||||
|
Each value-description entry contains `value` (qlonglong for negative keys,
|
||||||
|
qulonglong for nonnegative keys) and `description` (QString). This preserves the
|
||||||
|
full signed/unsigned 64-bit range without converting through double. An unmapped
|
||||||
|
signal returns an empty list. Data comes from `SignalInfo::valueDescriptions`.
|
||||||
|
Unsupported roles return invalid QVariant.
|
||||||
|
|
||||||
|
### Standalone tree tests without Qt
|
||||||
|
|
||||||
|
From the repository root, use only a C++17 compiler:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
c++ -std=c++17 -Icore tests/tree_node_test.cpp core/tree_node.cpp \
|
||||||
|
core/dbc_tree_builder.cpp -o /tmp/dbc_tree_node_test
|
||||||
|
/tmp/dbc_tree_node_test
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build and run the demo
|
||||||
|
|
||||||
|
After building core, run these commands from the repository root:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir -p build/examples
|
||||||
|
cd build/examples
|
||||||
|
qmake6 ../../examples/demo.pro DBC_CORE_BUILD_DIR=../core
|
||||||
|
make -j
|
||||||
|
./dbc_demo /absolute/path/to/example.dbc
|
||||||
|
```
|
||||||
|
|
||||||
|
The demo prints the parsed tree and decodes eight zero bytes using the first
|
||||||
|
frame definition. Replace that sample payload in `examples/main.cpp` to feed
|
||||||
|
live CAN data or trace records.
|
||||||
|
|
||||||
|
### Generate API documentation
|
||||||
|
|
||||||
|
With Doxygen installed, run from the repository root:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
doxygen Doxyfile
|
||||||
|
```
|
||||||
|
|
||||||
|
Open `docs/html/index.html` to view the generated reference.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Summary
|
|
||||||
|
|
||||||
This module is now split into two intentionally separate layers:
|
|
||||||
|
|
||||||
### Parsed representation
|
|
||||||
|
|
||||||
Used for:
|
|
||||||
|
|
||||||
- storing parsed DBC content
|
|
||||||
- browsing
|
|
||||||
- UI tree generation
|
|
||||||
|
|
||||||
### Runtime decode representation
|
|
||||||
|
|
||||||
Used for:
|
|
||||||
|
|
||||||
- fast frame lookup
|
|
||||||
- live CAN decode
|
|
||||||
- trace decode
|
|
||||||
- physical value conversion
|
|
||||||
|
|
||||||
That separation is the main architectural improvement.
|
|
||||||
|
|
||||||
In short, the system now looks like this:
|
|
||||||
|
|
||||||
```text
|
|
||||||
DBC parser → DbcDatabase → DecodeDatabase → DbcDecoder
|
|
||||||
↘ TreeNode → future UI
|
|
||||||
```
|
|
||||||
|
|
||||||
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
|
## Regression tests
|
||||||
|
|
||||||
See [tests/README.md](tests/README.md) for compiler and qmake commands.
|
See [tests/README.md](tests/README.md) for QtTest build and execution commands.
|
||||||
Tests cover frame validation and error locations, Intel and Motorola extraction,
|
Tests cover frame validation and error locations, Intel and Motorola extraction,
|
||||||
signed and unsigned 64-bit boundaries,
|
signal syntax and payload bounds, `VAL_` syntax and reference validation,
|
||||||
physical conversion, numeric output, and invalid signal payloads.
|
raw description lookup and preservation through both builders, statement dispatch, signed and unsigned
|
||||||
|
64-bit boundaries, physical conversion, numeric output, and invalid signal
|
||||||
|
payloads.
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
This changelog summarizes release and development history. Entries are listed
|
||||||
|
newest first. Historical dates follow the commit author dates. `v1.0` is the
|
||||||
|
existing Git tag; subsequent changes are listed as unreleased.
|
||||||
|
|
||||||
|
## Unreleased
|
||||||
|
|
||||||
|
### 2026-10-07
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Basic `M` / `mN` multiplexing metadata in parsed, tree, and runtime definitions.
|
||||||
|
- Deferred selector and overlap validation with source locations: one unsigned
|
||||||
|
selector, representable branch values, and overlaps only between exclusive branches.
|
||||||
|
- Selector-first decoding using exact raw values, preserving definition order and
|
||||||
|
unconditional signals. Explicit statuses distinguish inactive branches, missing
|
||||||
|
selector data, insufficient payloads, and malformed runtime metadata.
|
||||||
|
- Registered `SG_MUL_VAL_` rejection through TypeFactory; extended and nested
|
||||||
|
multiplexing remain unsupported. Added parser/decoder regression coverage and
|
||||||
|
documented supported syntax and consumer behavior.
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Overlapping unconditional signals are now rejected during parsing.
|
||||||
|
|
||||||
|
### 2026-10-06
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Added non-owning TreeNode parent navigation and stable sibling positions;
|
||||||
|
disabled node moves to preserve links while retaining unique_ptr ownership.
|
||||||
|
- Added optional read-only Qt Core DbcTreeModel with documented columns and
|
||||||
|
metadata roles, exact VAL_ entries, exclusive tree ownership, and reset-based
|
||||||
|
reload/clear support. Core remains independent of Qt.
|
||||||
|
- Added QAbstractItemModelTester coverage, navigation/metadata/reset tests,
|
||||||
|
a standalone Qt-free tree test, and adapter build and usage documentation.
|
||||||
|
|
||||||
|
- Added `VAL_` signal value descriptions through the statement dispatcher and
|
||||||
|
factory, with complete syntax validation, exact signed/unsigned 64-bit keys,
|
||||||
|
deferred reference resolution, duplicate detection, and source error locations.
|
||||||
|
Distinct keys from multiple statements merge; standard and extended frames
|
||||||
|
remain distinct under existing CAN ID normalization.
|
||||||
|
- Preserved descriptions in parsed metadata, runtime decode definitions, and UI
|
||||||
|
tree metadata. Added `DecodedSignalValue::GetValueDescription()` and
|
||||||
|
`FindValueDescription()` for raw integer lookup before physical scaling.
|
||||||
|
Unknown values retain normal numeric decoding.
|
||||||
|
- Added regression coverage for syntax, quoting, whitespace, integer boundaries,
|
||||||
|
declaration order, invalid references, duplicates, scaling, and both builders;
|
||||||
|
documented syntax, lookup behavior, and limitations in README.
|
||||||
|
|
||||||
|
### 2026-10-05
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Split the qmake project into a reusable static library in `core/`, a demo in
|
||||||
|
`examples/`, and a combined regression test executable in `tests/`. Added
|
||||||
|
shared `.pri` files and updated build instructions. (`f17ddb6`, #11)
|
||||||
|
- Added `.clang-format` and applied consistent formatting to the source code
|
||||||
|
and tests. (`b91cf4a`, #7)
|
||||||
|
- Replaced lambdas with explicit functions and simpler code in statement
|
||||||
|
handlers, the decoder, the demo, and regression tests. (`03dc8f2`)
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- Added complete validation of `SG_` signal statements, including syntax,
|
||||||
|
receivers, numeric fields, lengths of 1–64 bits, physical ranges, and signal
|
||||||
|
bounds within the declared frame payload for Intel and Motorola bit order.
|
||||||
|
Invalid definitions report the file path and line number. Multiplexing
|
||||||
|
markers are explicitly rejected. Added regression tests and documentation.
|
||||||
|
(`8d82b13`, #6)
|
||||||
|
|
||||||
|
#### Documentation and maintenance
|
||||||
|
|
||||||
|
- Regenerated Doxygen documentation after code changes and the project
|
||||||
|
restructuring. (`6cd9976`, `0067cb4`, `f17ddb6`)
|
||||||
|
- Removed the temporary signal-validation issue document. (`1163277`)
|
||||||
|
|
||||||
|
### 2026-10-01
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Moved DBC statement parsing into `TypeFactory`-registered handlers for
|
||||||
|
`BO_`, `SG_`, and `CM_`, with a shared parse context and keyword dispatcher.
|
||||||
|
Added tests for dispatch and handler replacement, and documented how to
|
||||||
|
register additional handlers. (`88b5883`, #4)
|
||||||
|
- **API change:** `DecodedSignalValue::rawValue` now uses
|
||||||
|
`std::variant<std::int64_t, std::uint64_t>` instead of `int64_t`. Consumers
|
||||||
|
must handle the appropriate variant alternative. Physical values remain
|
||||||
|
`double` and may lose precision for large integers. (`69074e3`, #2)
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- Corrected Motorola signal extraction within bytes and across byte
|
||||||
|
boundaries using DBC sawtooth bit numbering. Added decoder regression
|
||||||
|
tests and build instructions; introduced the `TypeFactory` utility.
|
||||||
|
(`2c057b6`)
|
||||||
|
- Preserved the full unsigned 64-bit raw-value range, including values above
|
||||||
|
`INT64_MAX`, and updated physical conversion and demo output. Added tests
|
||||||
|
for signed and unsigned boundaries and numeric output. (`69074e3`, #2)
|
||||||
|
- Validated `BO_` frame syntax, CAN identifiers, payload lengths, numeric
|
||||||
|
overflow, and unexpected trailing fields. Parsing errors now include the
|
||||||
|
file path and physical line number. Added parser regression tests.
|
||||||
|
(`3bd9339`, #3)
|
||||||
|
|
||||||
|
## v1.0 — 2026-06-14
|
||||||
|
|
||||||
|
Tag `v1.0` points to `38ce043` and includes the initial implementation below.
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- Added source-file headers with author information and MIT license
|
||||||
|
references. (`e2ffa97`)
|
||||||
|
- Added and subsequently simplified the Doxygen configuration.
|
||||||
|
(`e2c07dd`, `4c8af9f`)
|
||||||
|
- Generated API documentation and refreshed the generated documentation.
|
||||||
|
(`dfec39d`, `38ce043`)
|
||||||
|
|
||||||
|
### Initial implementation — 2026-03-13
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Initialized the repository with a README and MIT license. (`4270459`)
|
||||||
|
- Added the DBC parser, frame and signal metadata, a tree representation and
|
||||||
|
builder, a demonstration program, and a qmake project. (`2a90b2d`)
|
||||||
|
- Added runtime decoding through `DbcDecodeBuilder`, `DecodeDatabase`, and
|
||||||
|
`DbcDecoder`, including CAN-frame lookup, Intel and Motorola extraction,
|
||||||
|
signed and unsigned signals, and factor/offset conversion. Updated parser
|
||||||
|
metadata and the demo to support decoding. (`a53a5df`)
|
||||||
|
|
||||||
|
#### Documentation and maintenance
|
||||||
|
|
||||||
|
- Added `.gitignore` and expanded the README with architecture, data
|
||||||
|
structures, parsing behavior, decoding examples, and usage documentation.
|
||||||
|
(`efc57d6`, `f2aa10c`, `cb20f5f`, `f0e7065`)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
INCLUDEPATH += $$PWD
|
||||||
|
DEPENDPATH += $$PWD
|
||||||
|
# Consumers can override this when building separately from the root project.
|
||||||
|
isEmpty(DBC_CORE_BUILD_DIR): DBC_CORE_BUILD_DIR = $$clean_path($$OUT_PWD/../core)
|
||||||
|
LIBS += -L$$DBC_CORE_BUILD_DIR -ldbc_core
|
||||||
|
win32-msvc*: DBC_CORE_LIBRARY = $$DBC_CORE_BUILD_DIR/dbc_core.lib
|
||||||
|
else: DBC_CORE_LIBRARY = $$DBC_CORE_BUILD_DIR/libdbc_core.a
|
||||||
|
PRE_TARGETDEPS += $$DBC_CORE_LIBRARY
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
TEMPLATE = lib
|
||||||
|
TARGET = dbc_core
|
||||||
|
CONFIG += staticlib c++17
|
||||||
|
CONFIG -= qt
|
||||||
|
include(core_files.pri)
|
||||||
|
CONFIG -= debug_and_release debug_and_release_target
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
SOURCES += \
|
||||||
|
$$PWD/dbc_decode_builder.cpp \
|
||||||
|
$$PWD/dbc_decoder.cpp \
|
||||||
|
$$PWD/dbc_parser.cpp \
|
||||||
|
$$PWD/dbc_statement_handler.cpp \
|
||||||
|
$$PWD/dbc_tree_builder.cpp \
|
||||||
|
$$PWD/tree_node.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
$$PWD/multiplexing.h \
|
||||||
|
$$PWD/dbc_database.h \
|
||||||
|
$$PWD/dbc_decode_builder.h \
|
||||||
|
$$PWD/dbc_decoder.h \
|
||||||
|
$$PWD/dbc_parser.h \
|
||||||
|
$$PWD/dbc_statement_handler.h \
|
||||||
|
$$PWD/dbc_tree_builder.h \
|
||||||
|
$$PWD/decode_database.h \
|
||||||
|
$$PWD/frame_info.h \
|
||||||
|
$$PWD/signal_info.h \
|
||||||
|
$$PWD/value_descriptions.h \
|
||||||
|
$$PWD/tree_node.h \
|
||||||
|
$$PWD/typefactory.h
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
/**
|
||||||
|
* @file dbc_decode_builder.cpp
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dbc_decode_builder.h"
|
||||||
|
|
||||||
|
DecodeDatabase DbcDecodeBuilder::Build(const DbcDatabase &source) const {
|
||||||
|
DecodeDatabase result;
|
||||||
|
|
||||||
|
for (std::size_t frameIndex = 0U; frameIndex < source.frames.size(); ++frameIndex) {
|
||||||
|
const FrameInfo &sourceFrame = source.frames[frameIndex];
|
||||||
|
DecodeFrame targetFrame;
|
||||||
|
|
||||||
|
targetFrame.name = sourceFrame.name;
|
||||||
|
targetFrame.canId = sourceFrame.canId;
|
||||||
|
targetFrame.isExtended = sourceFrame.isExtended;
|
||||||
|
targetFrame.dlc = sourceFrame.dlc;
|
||||||
|
targetFrame.pgn = sourceFrame.pgn;
|
||||||
|
targetFrame.hasPgn = sourceFrame.hasPgn;
|
||||||
|
targetFrame.transmitter = sourceFrame.transmitter;
|
||||||
|
targetFrame.comment = sourceFrame.comment;
|
||||||
|
|
||||||
|
for (std::size_t signalIndex = 0U; signalIndex < sourceFrame.signals.size(); ++signalIndex) {
|
||||||
|
const SignalInfo &sourceSignal = sourceFrame.signals[signalIndex];
|
||||||
|
DecodeSignal targetSignal;
|
||||||
|
|
||||||
|
targetSignal.multiplexing = sourceSignal.multiplexing;
|
||||||
|
targetSignal.name = sourceSignal.name;
|
||||||
|
targetSignal.startBit = sourceSignal.startBit;
|
||||||
|
targetSignal.length = sourceSignal.length;
|
||||||
|
targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;
|
||||||
|
targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;
|
||||||
|
targetSignal.factor = sourceSignal.factor;
|
||||||
|
targetSignal.offset = sourceSignal.offset;
|
||||||
|
targetSignal.minimum = sourceSignal.minimum;
|
||||||
|
targetSignal.maximum = sourceSignal.maximum;
|
||||||
|
targetSignal.unit = sourceSignal.unit;
|
||||||
|
targetSignal.receivers = sourceSignal.receivers;
|
||||||
|
targetSignal.comment = sourceSignal.comment;
|
||||||
|
targetSignal.valueDescriptions = sourceSignal.valueDescriptions;
|
||||||
|
|
||||||
|
targetFrame.signals.push_back(targetSignal);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.frames.push_back(targetFrame);
|
||||||
|
result.frameIndexByKey[FrameKey(targetFrame.canId, targetFrame.isExtended)] =
|
||||||
|
result.frames.size() - 1U;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -0,0 +1,193 @@
|
|||||||
|
/**
|
||||||
|
* @file dbc_decoder.cpp
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dbc_decoder.h"
|
||||||
|
|
||||||
|
const DecodeFrame *DbcDecoder::FindFrame(const DecodeDatabase &database,
|
||||||
|
std::uint32_t canId,
|
||||||
|
bool isExtended) const {
|
||||||
|
const FrameKey key(canId, isExtended);
|
||||||
|
const std::unordered_map<FrameKey, std::size_t, FrameKeyHasher>::const_iterator it =
|
||||||
|
database.frameIndexByKey.find(key);
|
||||||
|
|
||||||
|
if (it == database.frameIndexByKey.end())
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
const std::size_t index = it->second;
|
||||||
|
if (index >= database.frames.size())
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return &database.frames[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
DecodedFrameValue DbcDecoder::Decode(const DecodeDatabase &database,
|
||||||
|
const RawCanFrame &frame) const {
|
||||||
|
DecodedFrameValue result;
|
||||||
|
const DecodeFrame *definition = FindFrame(database, frame.canId, frame.isExtended);
|
||||||
|
|
||||||
|
if (definition == nullptr)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
result.definition = definition;
|
||||||
|
result.valid = true;
|
||||||
|
|
||||||
|
const DecodeSignal *selector = nullptr;
|
||||||
|
std::size_t selectorCount = 0U;
|
||||||
|
for (const DecodeSignal &signal : definition->signals) {
|
||||||
|
if (signal.multiplexing.role == MultiplexRole::Selector) {
|
||||||
|
selector = &signal;
|
||||||
|
++selectorCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const bool selectorDefinitionValid = selectorCount == 1U &&
|
||||||
|
selector->valueType == ValueType::Unsigned && selector->length > 0U && selector->length <= 64U;
|
||||||
|
std::uint64_t selectorValue = 0U;
|
||||||
|
const bool selectorAvailable = selectorDefinitionValid && ExtractUnsigned(frame.data, *selector, selectorValue);
|
||||||
|
|
||||||
|
for (std::size_t signalIndex = 0U; signalIndex < definition->signals.size(); ++signalIndex) {
|
||||||
|
const DecodeSignal &signal = definition->signals[signalIndex];
|
||||||
|
DecodedSignalValue decoded;
|
||||||
|
std::uint64_t unsignedValue = 0U;
|
||||||
|
|
||||||
|
decoded.definition = &signal;
|
||||||
|
|
||||||
|
if (signal.length == 0U || signal.length > 64U ||
|
||||||
|
(signal.multiplexing.role != MultiplexRole::Unconditional && !selectorDefinitionValid)) {
|
||||||
|
result.signals.push_back(decoded);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (signal.multiplexing.role == MultiplexRole::Branch) {
|
||||||
|
if (selector->length < 64U && signal.multiplexing.value >= (std::uint64_t(1U) << selector->length)) {
|
||||||
|
result.signals.push_back(decoded);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!selectorAvailable) {
|
||||||
|
decoded.status = SignalDecodeStatus::SelectorUnavailable;
|
||||||
|
result.signals.push_back(decoded);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (signal.multiplexing.value != selectorValue) {
|
||||||
|
decoded.status = SignalDecodeStatus::Inactive;
|
||||||
|
result.signals.push_back(decoded);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ExtractUnsigned(frame.data, signal, unsignedValue)) {
|
||||||
|
decoded.status = SignalDecodeStatus::InsufficientPayload;
|
||||||
|
result.signals.push_back(decoded);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (signal.valueType == ValueType::Signed)
|
||||||
|
decoded.rawValue = SignExtend(unsignedValue, signal.length);
|
||||||
|
else
|
||||||
|
decoded.rawValue = unsignedValue;
|
||||||
|
|
||||||
|
double numericValue;
|
||||||
|
if (const std::int64_t *signedValue = std::get_if<std::int64_t>(&decoded.rawValue))
|
||||||
|
numericValue = static_cast<double>(*signedValue);
|
||||||
|
else
|
||||||
|
numericValue = static_cast<double>(std::get<std::uint64_t>(decoded.rawValue));
|
||||||
|
decoded.physicalValue = numericValue * signal.factor + signal.offset;
|
||||||
|
decoded.valid = true;
|
||||||
|
decoded.status = SignalDecodeStatus::Valid;
|
||||||
|
|
||||||
|
result.signals.push_back(decoded);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DbcDecoder::ExtractUnsigned(const std::vector<std::uint8_t> &data,
|
||||||
|
const DecodeSignal &signal,
|
||||||
|
std::uint64_t &value) {
|
||||||
|
if ((signal.length == 0U) || (signal.length > 64U))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (signal.byteOrder == ByteOrder::Intel)
|
||||||
|
return ExtractIntel(data, signal.startBit, signal.length, value);
|
||||||
|
|
||||||
|
return ExtractMotorola(data, signal.startBit, signal.length, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DbcDecoder::ExtractIntel(const std::vector<std::uint8_t> &data,
|
||||||
|
std::uint32_t startBit,
|
||||||
|
std::uint32_t length,
|
||||||
|
std::uint64_t &value) {
|
||||||
|
value = 0U;
|
||||||
|
|
||||||
|
for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {
|
||||||
|
const std::uint32_t absoluteBit = startBit + bitIndex;
|
||||||
|
const std::uint32_t byteIndex = absoluteBit / 8U;
|
||||||
|
const std::uint32_t bitInByte = absoluteBit % 8U;
|
||||||
|
|
||||||
|
if (byteIndex >= data.size())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const std::uint64_t bitValue =
|
||||||
|
(static_cast<std::uint64_t>((data[byteIndex] >> bitInByte) & 0x01U) << bitIndex);
|
||||||
|
|
||||||
|
value |= bitValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DbcDecoder::ExtractMotorola(const std::vector<std::uint8_t> &data,
|
||||||
|
std::uint32_t startBit,
|
||||||
|
std::uint32_t length,
|
||||||
|
std::uint64_t &value) {
|
||||||
|
/*
|
||||||
|
* DBC Motorola bit numbering:
|
||||||
|
* - 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::size_t byteIndex = startBit / 8U;
|
||||||
|
std::uint32_t bitInByte = startBit % 8U;
|
||||||
|
|
||||||
|
for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {
|
||||||
|
if (byteIndex >= data.size())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
value <<= 1U;
|
||||||
|
value |= static_cast<std::uint64_t>((data[byteIndex] >> bitInByte) & 0x01U);
|
||||||
|
|
||||||
|
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 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<std::int64_t>(value);
|
||||||
|
|
||||||
|
// The complemented magnitude fits int64_t, including for INT64_MIN.
|
||||||
|
return -1 - static_cast<std::int64_t>((~value) & valueMask);
|
||||||
|
}
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
/**
|
||||||
|
* @file dbc_decoder.h
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DBC_DECODER_H
|
||||||
|
#define DBC_DECODER_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <variant>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "decode_database.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Raw CAN frame used for runtime or trace decoding.
|
||||||
|
*/
|
||||||
|
struct RawCanFrame {
|
||||||
|
std::uint32_t canId; /**< Normalized CAN ID. */
|
||||||
|
bool isExtended; /**< true for extended frame. */
|
||||||
|
std::vector<std::uint8_t> data; /**< Payload bytes. */
|
||||||
|
|
||||||
|
RawCanFrame()
|
||||||
|
: canId(0U), isExtended(false), data() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class SignalDecodeStatus {
|
||||||
|
InvalidDefinition,
|
||||||
|
InsufficientPayload,
|
||||||
|
SelectorUnavailable,
|
||||||
|
Inactive,
|
||||||
|
Valid
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief One decoded signal value.
|
||||||
|
*/
|
||||||
|
struct DecodedSignalValue {
|
||||||
|
const DecodeSignal *definition; /**< Signal definition. */
|
||||||
|
RawSignalValue rawValue; /**< Exact signed or unsigned raw value. */
|
||||||
|
double physicalValue; /**< Converted physical value. */
|
||||||
|
bool valid; /**< true if decoding succeeded. */
|
||||||
|
SignalDecodeStatus status = SignalDecodeStatus::InvalidDefinition;
|
||||||
|
|
||||||
|
/** Lookup using the raw integer; nullptr for invalid or unmapped values. */
|
||||||
|
const std::string *GetValueDescription() const {
|
||||||
|
return valid && definition ? FindValueDescription(definition->valueDescriptions, rawValue) : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
DecodedSignalValue()
|
||||||
|
: definition(nullptr), rawValue(std::uint64_t(0U)), physicalValue(0.0), valid(false) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Fully decoded frame.
|
||||||
|
*/
|
||||||
|
struct DecodedFrameValue {
|
||||||
|
const DecodeFrame *definition; /**< Frame definition. */
|
||||||
|
std::vector<DecodedSignalValue> signals; /**< Decoded signal values. */
|
||||||
|
bool valid; /**< true if frame was matched. */
|
||||||
|
|
||||||
|
DecodedFrameValue()
|
||||||
|
: definition(nullptr), signals(), valid(false) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Runtime CAN decoder using prebuilt decode database.
|
||||||
|
*/
|
||||||
|
class DbcDecoder {
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Find frame definition by CAN ID.
|
||||||
|
* @param database Runtime decode database.
|
||||||
|
* @param canId Normalized CAN ID.
|
||||||
|
* @param isExtended true for extended frame.
|
||||||
|
* @return Pointer to frame definition or nullptr.
|
||||||
|
*/
|
||||||
|
const DecodeFrame *FindFrame(const DecodeDatabase &database,
|
||||||
|
std::uint32_t canId,
|
||||||
|
bool isExtended) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Decode one raw CAN frame.
|
||||||
|
* @param database Runtime decode database.
|
||||||
|
* @param frame Raw CAN frame.
|
||||||
|
* @return Decoded frame value.
|
||||||
|
*/
|
||||||
|
DecodedFrameValue Decode(const DecodeDatabase &database,
|
||||||
|
const RawCanFrame &frame) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
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);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* DBC_DECODER_H */
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
/**
|
||||||
|
* @file dbc_parser.cpp
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dbc_parser.h"
|
||||||
|
#include "dbc_statement_handler.h"
|
||||||
|
|
||||||
|
#include <cctype>
|
||||||
|
#include <fstream>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
/**
|
||||||
|
* @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<unsigned char>(text[begin])))
|
||||||
|
++begin;
|
||||||
|
|
||||||
|
std::string::size_type end = text.size();
|
||||||
|
while ((end > begin) &&
|
||||||
|
std::isspace(static_cast<unsigned char>(text[end - 1U])))
|
||||||
|
--end;
|
||||||
|
|
||||||
|
return text.substr(begin, end - begin);
|
||||||
|
}
|
||||||
|
}// namespace
|
||||||
|
|
||||||
|
DbcDatabase DbcParser::ParseFile(const std::string &filePath) const {
|
||||||
|
std::ifstream input(filePath.c_str());
|
||||||
|
if (!input.is_open())
|
||||||
|
throw std::runtime_error("Failed to open DBC file: " + filePath);
|
||||||
|
|
||||||
|
DbcDatabase database;
|
||||||
|
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;
|
||||||
|
|
||||||
|
try {
|
||||||
|
context.lineNumber = lineNumber;
|
||||||
|
dispatcher.Dispatch(line, context);
|
||||||
|
} catch (const std::exception &error) {
|
||||||
|
throw std::runtime_error(filePath + ":" + std::to_string(lineNumber) +
|
||||||
|
": " + error.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
context.ResolveValueDescriptions(filePath);
|
||||||
|
context.ValidateMultiplexing(filePath);
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string DbcParser::Trim(const std::string &text) {
|
||||||
|
return TrimText(text);
|
||||||
|
}
|
||||||
@@ -24,11 +24,12 @@
|
|||||||
* - SG_
|
* - SG_
|
||||||
* - CM_ BO_
|
* - CM_ BO_
|
||||||
* - CM_ SG_
|
* - CM_ SG_
|
||||||
|
* - VAL_ signal value descriptions
|
||||||
*
|
*
|
||||||
* Ignores:
|
* Ignores:
|
||||||
* - attributes
|
* - attributes
|
||||||
* - multiplexing
|
* - multiplexing
|
||||||
* - value tables
|
* - named VAL_TABLE_ tables
|
||||||
*/
|
*/
|
||||||
class DbcParser {
|
class DbcParser {
|
||||||
public:
|
public:
|
||||||
@@ -0,0 +1,495 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
#include "dbc_statement_handler.h"
|
||||||
|
#include <cctype>
|
||||||
|
#include <charconv>
|
||||||
|
#include <cmath>
|
||||||
|
#include <limits>
|
||||||
|
#include <regex>
|
||||||
|
#include <sstream>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
double ParsePhysicalValue(const std::string &text, const char *field) {
|
||||||
|
static const std::regex number(
|
||||||
|
R"(^[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?$)");
|
||||||
|
if (!std::regex_match(text, number))
|
||||||
|
throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
|
||||||
|
std::size_t consumed = 0U;
|
||||||
|
double value;
|
||||||
|
try {
|
||||||
|
value = std::stod(text, &consumed);
|
||||||
|
} catch (const std::exception &) {
|
||||||
|
throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
|
||||||
|
}
|
||||||
|
if (consumed != text.size() || !std::isfinite(value))
|
||||||
|
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<unsigned char>(text[begin])))
|
||||||
|
++begin;
|
||||||
|
|
||||||
|
std::string::size_type end = text.size();
|
||||||
|
while ((end > begin) &&
|
||||||
|
std::isspace(static_cast<unsigned char>(text[end - 1U])))
|
||||||
|
--end;
|
||||||
|
|
||||||
|
return text.substr(begin, end - begin);
|
||||||
|
}
|
||||||
|
FrameInfo *FindFrameById(DbcDatabase &, std::uint32_t, bool);
|
||||||
|
SignalInfo *FindSignalByName(FrameInfo &, const std::string &);
|
||||||
|
}// namespace
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
std::vector<std::string> SplitReceivers(const std::string &text) {
|
||||||
|
std::vector<std::string> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}// namespace
|
||||||
|
|
||||||
|
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<std::uint32_t>::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<std::uint8_t>(ParseDecimal(
|
||||||
|
lengthText, std::numeric_limits<std::uint8_t>::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) {
|
||||||
|
// Match the complete statement before converting any numeric fields.
|
||||||
|
static const std::regex syntax(
|
||||||
|
R"dbc(^SG_[ \t]+([^:]+):[ \t]*([^| \t]+)[ \t]*\|[ \t]*([^@ \t]+)[ \t]*@[ \t]*([01])([+-])[ \t]*\([ \t]*([^, \t]+)[ \t]*,[ \t]*([^ )\t]+)[ \t]*\)[ \t]*\[[ \t]*([^| \t]+)[ \t]*\|[ \t]*([^\] \t]+)[ \t]*\][ \t]*"([^"\r\n]*)"[ \t]+([^ \t,]+(?:[ \t]*,[ \t]*[^ \t,]+)*)[ \t]*$)dbc");
|
||||||
|
std::smatch fields;
|
||||||
|
if (!std::regex_match(line, fields, syntax))
|
||||||
|
throw std::runtime_error("Malformed or unsupported SG_ signal definition.");
|
||||||
|
|
||||||
|
SignalInfo signal;
|
||||||
|
std::istringstream nameFields(fields[1].str());
|
||||||
|
std::string marker;
|
||||||
|
std::string extra;
|
||||||
|
nameFields >> signal.name >> marker;
|
||||||
|
if (signal.name.empty() || (nameFields >> extra))
|
||||||
|
throw std::runtime_error("Invalid signal name or multiplexing marker.");
|
||||||
|
if (marker == "M")
|
||||||
|
signal.multiplexing.role = MultiplexRole::Selector;
|
||||||
|
else if (!marker.empty()) {
|
||||||
|
if (marker[0] != 'm')
|
||||||
|
throw std::runtime_error("Unsupported multiplexing marker.");
|
||||||
|
const std::string value = marker.substr(1U);
|
||||||
|
const std::from_chars_result parsed = std::from_chars(
|
||||||
|
value.data(), value.data() + value.size(), signal.multiplexing.value);
|
||||||
|
if (value.empty() || parsed.ec != std::errc() || parsed.ptr != value.data() + value.size())
|
||||||
|
throw std::runtime_error("Invalid or unsupported multiplexing marker.");
|
||||||
|
signal.multiplexing.role = MultiplexRole::Branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
signal.startBit = ParseDecimal(fields[2].str(),
|
||||||
|
std::numeric_limits<std::uint32_t>::max(), "signal start bit");
|
||||||
|
signal.length = ParseDecimal(fields[3].str(), 64U, "signal length");
|
||||||
|
if (signal.length == 0U)
|
||||||
|
throw std::runtime_error("Signal length must be within 1..64 bits.");
|
||||||
|
signal.isLittleEndian = fields[4].str() == "1";
|
||||||
|
signal.isSigned = fields[5].str() == "-";
|
||||||
|
|
||||||
|
signal.factor = ParsePhysicalValue(fields[6].str(), "signal factor");
|
||||||
|
signal.offset = ParsePhysicalValue(fields[7].str(), "signal offset");
|
||||||
|
signal.minimum = ParsePhysicalValue(fields[8].str(), "signal minimum");
|
||||||
|
signal.maximum = ParsePhysicalValue(fields[9].str(), "signal maximum");
|
||||||
|
if (signal.minimum > signal.maximum)
|
||||||
|
throw std::runtime_error("Signal minimum exceeds maximum.");
|
||||||
|
signal.unit = fields[10].str();
|
||||||
|
signal.receivers = SplitReceivers(fields[11].str());
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}// namespace
|
||||||
|
|
||||||
|
void DbcFrameHandler::Handle(const std::string &line, DbcParseContext &context) const {
|
||||||
|
context.database.frames.push_back(ParseFrameLine(line));
|
||||||
|
context.currentFrame = &context.database.frames.back();
|
||||||
|
context.signalLines.emplace_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcSignalHandler::Handle(const std::string &line, DbcParseContext &context) const {
|
||||||
|
if (context.currentFrame == nullptr)
|
||||||
|
throw std::runtime_error("Signal found before any frame definition.");
|
||||||
|
SignalInfo signal = ParseSignalLine(line);
|
||||||
|
const std::uint64_t payloadBits = static_cast<std::uint64_t>(context.currentFrame->dlc) * 8U;
|
||||||
|
std::uint64_t bit = signal.startBit;
|
||||||
|
for (std::uint32_t index = 0U; index < signal.length; ++index) {
|
||||||
|
if (bit >= payloadBits)
|
||||||
|
throw std::runtime_error("Signal exceeds the frame payload length.");
|
||||||
|
if (signal.isLittleEndian)
|
||||||
|
++bit;
|
||||||
|
else
|
||||||
|
bit = (bit % 8U == 0U) ? bit + 15U : bit - 1U;
|
||||||
|
}
|
||||||
|
context.currentFrame->signals.push_back(std::move(signal));
|
||||||
|
context.signalLines.back().push_back(context.lineNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcCommentHandler::Handle(const std::string &line, DbcParseContext &context) const {
|
||||||
|
if (line.compare(0U, 4U, "CM_ ") == 0)
|
||||||
|
ParseCommentLine(line, context.database);
|
||||||
|
}
|
||||||
|
|
||||||
|
DbcStatementDispatcher::DbcStatementDispatcher() {
|
||||||
|
RegisterType<DbcUnsupportedMultiplexingHandler>("SG_MUL_VAL_");
|
||||||
|
RegisterType<DbcFrameHandler>("BO_");
|
||||||
|
RegisterType<DbcSignalHandler>("SG_");
|
||||||
|
RegisterType<DbcCommentHandler>("CM_");
|
||||||
|
RegisterType<DbcValueDescriptionHandler>("VAL_");
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcValueDescriptionHandler::Handle(const std::string &line, DbcParseContext &context) const {
|
||||||
|
static const std::regex header(R"(^VAL_[ \t]+([^ \t]+)[ \t]+([^ \t;]+)[ \t]+(.*)$)");
|
||||||
|
static const std::regex pair(R"dbc(^([^ \t]+)[ \t]+"((?:[^"\\]|\\["\\])*)")dbc");
|
||||||
|
std::smatch fields;
|
||||||
|
if (!std::regex_match(line, fields, header))
|
||||||
|
throw std::runtime_error("Malformed or unsupported VAL_ statement.");
|
||||||
|
const auto rawId = ParseDecimal(fields[1].str(), std::numeric_limits<std::uint32_t>::max(), "VAL_ CAN ID");
|
||||||
|
if ((rawId & 0x60000000U) != 0U)
|
||||||
|
throw std::runtime_error("VAL_ CAN ID exceeds the 29-bit identifier range.");
|
||||||
|
PendingValueDescriptions pending;
|
||||||
|
NormalizeCanId(rawId, pending.canId, pending.isExtended);
|
||||||
|
pending.signalName = fields[2].str();
|
||||||
|
pending.lineNumber = context.lineNumber;
|
||||||
|
std::string rest = fields[3].str();
|
||||||
|
while (rest != ";") {
|
||||||
|
if (!std::regex_search(rest, fields, pair))
|
||||||
|
throw std::runtime_error("Malformed VAL_ value/description pair or missing semicolon.");
|
||||||
|
const std::string number = fields[1].str();
|
||||||
|
RawSignalValue key;
|
||||||
|
if (!number.empty() && number[0] == '-') {
|
||||||
|
std::int64_t value = 0;
|
||||||
|
const auto parsed = std::from_chars(number.data(), number.data() + number.size(), value);
|
||||||
|
if (parsed.ec != std::errc() || parsed.ptr != number.data() + number.size())
|
||||||
|
throw std::runtime_error("Invalid VAL_ integer: " + number);
|
||||||
|
key = NormalizeValueKey(RawSignalValue(value));
|
||||||
|
} else {
|
||||||
|
std::uint64_t value = 0;
|
||||||
|
const auto parsed = std::from_chars(number.data(), number.data() + number.size(), value);
|
||||||
|
if (number.empty() || parsed.ec != std::errc() || parsed.ptr != number.data() + number.size())
|
||||||
|
throw std::runtime_error("Invalid VAL_ integer: " + number);
|
||||||
|
key = value;
|
||||||
|
}
|
||||||
|
std::string description;
|
||||||
|
const std::string quoted = fields[2].str();
|
||||||
|
for (std::size_t i = 0; i < quoted.size(); ++i) {
|
||||||
|
if (quoted[i] == '\\')
|
||||||
|
++i;
|
||||||
|
description += quoted[i];
|
||||||
|
}
|
||||||
|
if (!pending.descriptions.emplace(key, description).second)
|
||||||
|
throw std::runtime_error("Duplicate VAL_ value key: " + number);
|
||||||
|
const auto consumed = static_cast<std::size_t>(fields.length());
|
||||||
|
rest.erase(0, consumed);
|
||||||
|
if (!rest.empty() && rest[0] != ';' && rest[0] != ' ' && rest[0] != '\t')
|
||||||
|
throw std::runtime_error("Missing whitespace between VAL_ pairs.");
|
||||||
|
rest = TrimText(rest);
|
||||||
|
}
|
||||||
|
if (pending.descriptions.empty())
|
||||||
|
throw std::runtime_error("VAL_ requires at least one value/description pair.");
|
||||||
|
context.pendingValues.push_back(std::move(pending));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcParseContext::ResolveValueDescriptions(const std::string &filePath) {
|
||||||
|
for (const auto &pending: pendingValues) {
|
||||||
|
try {
|
||||||
|
FrameInfo *frame = nullptr;
|
||||||
|
for (auto &candidate: database.frames) {
|
||||||
|
if (candidate.canId == pending.canId && candidate.isExtended == pending.isExtended) {
|
||||||
|
if (frame)
|
||||||
|
throw std::runtime_error("Ambiguous VAL_ frame reference.");
|
||||||
|
frame = &candidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!frame)
|
||||||
|
throw std::runtime_error("Unresolved VAL_ frame reference.");
|
||||||
|
SignalInfo *signal = nullptr;
|
||||||
|
for (auto &candidate: frame->signals) {
|
||||||
|
if (candidate.name == pending.signalName) {
|
||||||
|
if (signal)
|
||||||
|
throw std::runtime_error("Ambiguous VAL_ signal reference: " + pending.signalName);
|
||||||
|
signal = &candidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!signal)
|
||||||
|
throw std::runtime_error("Unresolved VAL_ signal reference: " + pending.signalName);
|
||||||
|
for (const auto &entry: pending.descriptions) {
|
||||||
|
if (!signal->valueDescriptions.insert(entry).second)
|
||||||
|
throw std::runtime_error("Duplicate VAL_ value key for signal: " + pending.signalName);
|
||||||
|
}
|
||||||
|
} catch (const std::exception &error) {
|
||||||
|
throw std::runtime_error(filePath + ":" + std::to_string(pending.lineNumber) + ": " + error.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcUnsupportedMultiplexingHandler::Handle(const std::string &, DbcParseContext &) const {
|
||||||
|
throw std::runtime_error("Extended and nested multiplexing are unsupported.");
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
std::vector<std::uint64_t> SignalBits(const SignalInfo &signal) {
|
||||||
|
std::vector<std::uint64_t> bits;
|
||||||
|
std::uint64_t bit = signal.startBit;
|
||||||
|
for (std::uint32_t index = 0U; index < signal.length; ++index) {
|
||||||
|
bits.push_back(bit);
|
||||||
|
if (signal.isLittleEndian)
|
||||||
|
++bit;
|
||||||
|
else
|
||||||
|
bit = bit % 8U == 0U ? bit + 15U : bit - 1U;
|
||||||
|
}
|
||||||
|
return bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SignalsOverlap(const SignalInfo &first, const SignalInfo &second) {
|
||||||
|
const std::vector<std::uint64_t> firstBits = SignalBits(first);
|
||||||
|
const std::vector<std::uint64_t> secondBits = SignalBits(second);
|
||||||
|
for (const std::uint64_t firstBit : firstBits) {
|
||||||
|
for (const std::uint64_t secondBit : secondBits) {
|
||||||
|
if (firstBit == secondBit)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbcParseContext::ValidateMultiplexing(const std::string &filePath) const {
|
||||||
|
for (std::size_t frameIndex = 0U; frameIndex < database.frames.size(); ++frameIndex) {
|
||||||
|
const FrameInfo &frame = database.frames[frameIndex];
|
||||||
|
const SignalInfo *selector = nullptr;
|
||||||
|
for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
|
||||||
|
const SignalInfo &signal = frame.signals[index];
|
||||||
|
if (signal.multiplexing.role != MultiplexRole::Selector)
|
||||||
|
continue;
|
||||||
|
if (selector != nullptr || signal.isSigned)
|
||||||
|
throw std::runtime_error(filePath + ":" + std::to_string(signalLines[frameIndex][index]) +
|
||||||
|
": Multiplexing requires one unsigned selector per frame.");
|
||||||
|
selector = &signal;
|
||||||
|
}
|
||||||
|
for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
|
||||||
|
const SignalInfo &signal = frame.signals[index];
|
||||||
|
std::string error;
|
||||||
|
if (signal.multiplexing.role == MultiplexRole::Branch) {
|
||||||
|
if (selector == nullptr)
|
||||||
|
error = "Multiplexed branch has no selector.";
|
||||||
|
else if (selector->length < 64U && signal.multiplexing.value >= (std::uint64_t(1U) << selector->length))
|
||||||
|
error = "Branch value exceeds selector raw range.";
|
||||||
|
}
|
||||||
|
for (std::size_t previous = 0U; previous < index && error.empty(); ++previous) {
|
||||||
|
const SignalInfo &other = frame.signals[previous];
|
||||||
|
const bool exclusive = signal.multiplexing.role == MultiplexRole::Branch &&
|
||||||
|
other.multiplexing.role == MultiplexRole::Branch &&
|
||||||
|
signal.multiplexing.value != other.multiplexing.value;
|
||||||
|
if (!exclusive && SignalsOverlap(signal, other))
|
||||||
|
error = "Signals overlap without mutually exclusive multiplexing conditions.";
|
||||||
|
}
|
||||||
|
if (!error.empty())
|
||||||
|
throw std::runtime_error(filePath + ":" + std::to_string(signalLines[frameIndex][index]) + ": " + error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
#ifndef DBC_STATEMENT_HANDLER_H
|
||||||
|
#define DBC_STATEMENT_HANDLER_H
|
||||||
|
|
||||||
|
#include "dbc_database.h"
|
||||||
|
#include "typefactory.h"
|
||||||
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
struct PendingValueDescriptions {
|
||||||
|
std::uint32_t canId;
|
||||||
|
bool isExtended;
|
||||||
|
std::string signalName;
|
||||||
|
ValueDescriptions descriptions;
|
||||||
|
std::size_t lineNumber;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Mutable state belonging to one file parse. Handlers do not retain it. */
|
||||||
|
struct DbcParseContext {
|
||||||
|
DbcDatabase &database;
|
||||||
|
FrameInfo *currentFrame = nullptr;
|
||||||
|
std::size_t lineNumber = 0U;
|
||||||
|
std::vector<PendingValueDescriptions> pendingValues = {};
|
||||||
|
|
||||||
|
std::vector<std::vector<std::size_t>> signalLines = {};
|
||||||
|
void ValidateMultiplexing(const std::string &filePath) const;
|
||||||
|
|
||||||
|
void ResolveValueDescriptions(const std::string &filePath);
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
|
};
|
||||||
|
|
||||||
|
class DbcValueDescriptionHandler : public DbcStatementHandler {
|
||||||
|
public:
|
||||||
|
void Handle(const std::string &line, DbcParseContext &context) const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class DbcUnsupportedMultiplexingHandler : public DbcStatementHandler {
|
||||||
|
public:
|
||||||
|
void Handle(const std::string &line, DbcParseContext &context) const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Exact-key dispatch to handlers created once per registration via TypeFactory. */
|
||||||
|
class DbcStatementDispatcher {
|
||||||
|
public:
|
||||||
|
DbcStatementDispatcher();
|
||||||
|
|
||||||
|
template<class Handler>
|
||||||
|
void RegisterType(const std::string &keyword) {
|
||||||
|
m_factory.registerType<Handler>(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<std::string, DbcStatementHandler> m_factory;
|
||||||
|
std::unordered_map<std::string, std::shared_ptr<DbcStatementHandler>> m_handlers;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* DBC_STATEMENT_HANDLER_H */
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* @file dbc_tree_builder.cpp
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dbc_tree_builder.h"
|
||||||
|
|
||||||
|
std::unique_ptr<TreeNode> DbcTreeBuilder::Build(const DbcDatabase &database) const {
|
||||||
|
std::unique_ptr<TreeNode> root(new TreeNode());
|
||||||
|
|
||||||
|
for (std::size_t frameIndex = 0U; frameIndex < database.frames.size(); ++frameIndex) {
|
||||||
|
const FrameInfo &frame = database.frames[frameIndex];
|
||||||
|
std::unique_ptr<TreeNode> frameNode(new TreeNode(frame));
|
||||||
|
|
||||||
|
for (std::size_t signalIndex = 0U; signalIndex < frame.signals.size(); ++signalIndex) {
|
||||||
|
const SignalInfo &signal = frame.signals[signalIndex];
|
||||||
|
std::unique_ptr<TreeNode> signalNode(new TreeNode(signal));
|
||||||
|
frameNode->AddChild(std::move(signalNode));
|
||||||
|
}
|
||||||
|
|
||||||
|
root->AddChild(std::move(frameNode));
|
||||||
|
}
|
||||||
|
|
||||||
|
return root;
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
/**
|
||||||
|
* @file decode_database.h
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DECODE_DATABASE_H
|
||||||
|
#define DECODE_DATABASE_H
|
||||||
|
|
||||||
|
#include "value_descriptions.h"
|
||||||
|
#include "multiplexing.h"
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Signal byte order used for runtime decoding.
|
||||||
|
*/
|
||||||
|
enum class ByteOrder {
|
||||||
|
Intel,
|
||||||
|
Motorola
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Signal numeric type.
|
||||||
|
*/
|
||||||
|
enum class ValueType {
|
||||||
|
Unsigned,
|
||||||
|
Signed
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Runtime-ready signal definition.
|
||||||
|
*/
|
||||||
|
struct DecodeSignal {
|
||||||
|
Multiplexing multiplexing;
|
||||||
|
std::string name; /**< Signal name. */
|
||||||
|
std::uint32_t startBit; /**< DBC start bit. */
|
||||||
|
std::uint32_t length; /**< Signal length in bits. */
|
||||||
|
ByteOrder byteOrder; /**< Intel or Motorola. */
|
||||||
|
ValueType valueType; /**< Signed or unsigned. */
|
||||||
|
double factor; /**< Scaling factor. */
|
||||||
|
double offset; /**< Physical offset. */
|
||||||
|
double minimum; /**< Minimum physical value. */
|
||||||
|
double maximum; /**< Maximum physical value. */
|
||||||
|
std::string unit; /**< Physical unit. */
|
||||||
|
std::vector<std::string> receivers; /**< Receivers. */
|
||||||
|
ValueDescriptions valueDescriptions; /**< Raw integer state descriptions. */
|
||||||
|
std::string comment; /**< Comment. */
|
||||||
|
|
||||||
|
DecodeSignal()
|
||||||
|
: name(), startBit(0U), length(0U), byteOrder(ByteOrder::Intel), valueType(ValueType::Unsigned), factor(1.0), offset(0.0), minimum(0.0), maximum(0.0), unit(), receivers(), comment() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Runtime-ready frame definition.
|
||||||
|
*/
|
||||||
|
struct DecodeFrame {
|
||||||
|
std::string name; /**< Frame name. */
|
||||||
|
std::uint32_t canId; /**< Normalized CAN ID. */
|
||||||
|
bool isExtended; /**< true for extended frame. */
|
||||||
|
std::uint8_t dlc; /**< Payload length. */
|
||||||
|
std::uint32_t pgn; /**< PGN if available. */
|
||||||
|
bool hasPgn; /**< true if PGN is valid. */
|
||||||
|
std::string transmitter; /**< Transmitter ECU. */
|
||||||
|
std::string comment; /**< Frame comment. */
|
||||||
|
std::vector<DecodeSignal> signals; /**< Signal definitions. */
|
||||||
|
|
||||||
|
DecodeFrame()
|
||||||
|
: name(), canId(0U), isExtended(false), dlc(0U), pgn(0U), hasPgn(false), transmitter(), comment(), signals() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Key for fast frame lookup.
|
||||||
|
*/
|
||||||
|
struct FrameKey {
|
||||||
|
std::uint32_t canId;
|
||||||
|
bool isExtended;
|
||||||
|
|
||||||
|
FrameKey()
|
||||||
|
: canId(0U), isExtended(false) {
|
||||||
|
}
|
||||||
|
|
||||||
|
FrameKey(std::uint32_t id, bool extended)
|
||||||
|
: canId(id), isExtended(extended) {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const FrameKey &other) const {
|
||||||
|
return (canId == other.canId) && (isExtended == other.isExtended);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hasher for frame key.
|
||||||
|
*/
|
||||||
|
struct FrameKeyHasher {
|
||||||
|
std::size_t operator()(const FrameKey &key) const {
|
||||||
|
const std::size_t a = static_cast<std::size_t>(key.canId);
|
||||||
|
const std::size_t b = key.isExtended ? 1U : 0U;
|
||||||
|
return (a * 1315423911U) ^ b;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Runtime decode database with fast lookup by CAN ID.
|
||||||
|
*/
|
||||||
|
struct DecodeDatabase {
|
||||||
|
std::vector<DecodeFrame> frames;
|
||||||
|
std::unordered_map<FrameKey, std::size_t, FrameKeyHasher> frameIndexByKey;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* DECODE_DATABASE_H */
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* @file frame_info.h
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FRAME_INFO_H
|
||||||
|
#define FRAME_INFO_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "signal_info.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Describes one CAN frame from a DBC file.
|
||||||
|
*/
|
||||||
|
struct FrameInfo {
|
||||||
|
std::string name; /**< Frame name. */
|
||||||
|
std::uint32_t canId; /**< Normalized CAN identifier. */
|
||||||
|
bool isExtended; /**< true for extended frame. */
|
||||||
|
std::uint32_t pgn; /**< J1939 PGN if applicable. */
|
||||||
|
bool hasPgn; /**< true if PGN was derived. */
|
||||||
|
std::uint8_t dlc; /**< Frame payload length. */
|
||||||
|
std::string transmitter; /**< Transmitter ECU name. */
|
||||||
|
std::string comment; /**< Optional frame comment. */
|
||||||
|
std::vector<SignalInfo> signals; /**< Signals contained in the frame. */
|
||||||
|
|
||||||
|
FrameInfo()
|
||||||
|
: name(), canId(0U), isExtended(false), pgn(0U), hasPgn(false), dlc(0U), transmitter(), comment(), signals() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FRAME_INFO_H */
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
#ifndef MULTIPLEXING_H
|
||||||
|
#define MULTIPLEXING_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
enum class MultiplexRole {
|
||||||
|
Unconditional,
|
||||||
|
Selector,
|
||||||
|
Branch
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Basic multiplexing: one unsigned selector per frame, one raw value per branch. */
|
||||||
|
struct Multiplexing {
|
||||||
|
MultiplexRole role = MultiplexRole::Unconditional;
|
||||||
|
std::uint64_t value = 0U;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* @file signal_info.h
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SIGNAL_INFO_H
|
||||||
|
#define SIGNAL_INFO_H
|
||||||
|
|
||||||
|
#include "value_descriptions.h"
|
||||||
|
#include "multiplexing.h"
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Describes one signal inside a DBC frame.
|
||||||
|
*/
|
||||||
|
struct SignalInfo {
|
||||||
|
Multiplexing multiplexing;
|
||||||
|
std::string name; /**< Signal name. */
|
||||||
|
std::uint32_t startBit; /**< Start bit in DBC notation. */
|
||||||
|
std::uint32_t length; /**< Signal length in bits. */
|
||||||
|
bool isLittleEndian; /**< true for Intel, false for Motorola. */
|
||||||
|
bool isSigned; /**< true if signal is signed. */
|
||||||
|
double factor; /**< Scaling factor. */
|
||||||
|
double offset; /**< Physical offset. */
|
||||||
|
double minimum; /**< Minimum physical value. */
|
||||||
|
double maximum; /**< Maximum physical value. */
|
||||||
|
std::string unit; /**< Physical unit. */
|
||||||
|
std::vector<std::string> receivers; /**< Signal receivers. */
|
||||||
|
ValueDescriptions valueDescriptions; /**< Raw integer state descriptions. */
|
||||||
|
std::string comment; /**< Optional signal comment. */
|
||||||
|
|
||||||
|
SignalInfo()
|
||||||
|
: name(), startBit(0U), length(0U), isLittleEndian(true), isSigned(false), factor(1.0), offset(0.0), minimum(0.0), maximum(0.0), unit(), receivers(), comment() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* SIGNAL_INFO_H */
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/**
|
||||||
|
* @file tree_node.cpp
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* Created: 2026-03-13
|
||||||
|
* Author: Deeaitch (Dim. Himro)
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License.
|
||||||
|
* See LICENSE file in the project root for full license text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tree_node.h"
|
||||||
|
|
||||||
|
TreeNode::TreeNode()
|
||||||
|
: m_type(NodeType::Root), m_name("dbc"), m_children(), m_frame(), m_signal() {
|
||||||
|
}
|
||||||
|
|
||||||
|
TreeNode::TreeNode(const FrameInfo &frame)
|
||||||
|
: m_type(NodeType::Frame), m_name(frame.name), m_children(), m_frame(new FrameInfo(frame)), m_signal() {
|
||||||
|
}
|
||||||
|
|
||||||
|
TreeNode::TreeNode(const SignalInfo &signal)
|
||||||
|
: m_type(NodeType::Signal), m_name(signal.name), m_children(), m_frame(), m_signal(new SignalInfo(signal)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void TreeNode::AddChild(std::unique_ptr<TreeNode> child) {
|
||||||
|
if (child) {
|
||||||
|
m_children.push_back(std::move(child));
|
||||||
|
m_children.back()->m_parent = this;
|
||||||
|
m_children.back()->m_row = m_children.size() - 1U;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t TreeNode::GetChildCount() const {
|
||||||
|
return m_children.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
const TreeNode *TreeNode::GetChild(std::size_t index) const {
|
||||||
|
if (index >= m_children.size())
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return m_children[index].get();
|
||||||
|
}
|
||||||
|
|
||||||
|
TreeNode *TreeNode::GetChild(std::size_t index) {
|
||||||
|
if (index >= m_children.size())
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return m_children[index].get();
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeType TreeNode::GetType() const {
|
||||||
|
return m_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string &TreeNode::GetName() const {
|
||||||
|
return m_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
const FrameInfo *TreeNode::GetFrame() const {
|
||||||
|
return m_frame.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
const SignalInfo *TreeNode::GetSignal() const {
|
||||||
|
return m_signal.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
const TreeNode *TreeNode::GetParent() const {
|
||||||
|
return m_parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t TreeNode::GetRow() const {
|
||||||
|
return m_row;
|
||||||
|
}
|
||||||
@@ -12,10 +12,10 @@
|
|||||||
#ifndef TREE_NODE_H
|
#ifndef TREE_NODE_H
|
||||||
#define TREE_NODE_H
|
#define TREE_NODE_H
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
|
||||||
#include <cstddef>
|
|
||||||
|
|
||||||
#include "frame_info.h"
|
#include "frame_info.h"
|
||||||
#include "signal_info.h"
|
#include "signal_info.h"
|
||||||
@@ -56,8 +56,8 @@ class TreeNode {
|
|||||||
TreeNode(const TreeNode &) = delete;
|
TreeNode(const TreeNode &) = delete;
|
||||||
TreeNode &operator=(const TreeNode &) = delete;
|
TreeNode &operator=(const TreeNode &) = delete;
|
||||||
|
|
||||||
TreeNode (TreeNode &&) = default;
|
TreeNode(TreeNode &&) = delete;
|
||||||
TreeNode &operator= (TreeNode &&) = default;
|
TreeNode &operator=(TreeNode &&) = delete;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Add child node.
|
* @brief Add child node.
|
||||||
@@ -65,6 +65,12 @@ class TreeNode {
|
|||||||
*/
|
*/
|
||||||
void AddChild(std::unique_ptr<TreeNode> child);
|
void AddChild(std::unique_ptr<TreeNode> child);
|
||||||
|
|
||||||
|
/** Non-owning parent; nullptr for a detached node or the root. */
|
||||||
|
const TreeNode *GetParent() const;
|
||||||
|
|
||||||
|
/** Zero-based sibling position; zero for a detached node or the root. */
|
||||||
|
std::size_t GetRow() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get child count.
|
* @brief Get child count.
|
||||||
* @return Number of children.
|
* @return Number of children.
|
||||||
@@ -110,6 +116,8 @@ class TreeNode {
|
|||||||
const SignalInfo *GetSignal() const;
|
const SignalInfo *GetSignal() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
TreeNode *m_parent = nullptr;
|
||||||
|
std::size_t m_row = 0U;
|
||||||
NodeType m_type;
|
NodeType m_type;
|
||||||
std::string m_name;
|
std::string m_name;
|
||||||
std::vector<std::unique_ptr<TreeNode>> m_children;
|
std::vector<std::unique_ptr<TreeNode>> m_children;
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
#ifndef VALUE_DESCRIPTIONS_H
|
||||||
|
#define VALUE_DESCRIPTIONS_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
#include <variant>
|
||||||
|
|
||||||
|
using RawSignalValue = std::variant<std::int64_t, std::uint64_t>;
|
||||||
|
|
||||||
|
/** Canonical keys: negative int64_t, nonnegative uint64_t. */
|
||||||
|
inline RawSignalValue NormalizeValueKey(const RawSignalValue &value) {
|
||||||
|
if (const auto *number = std::get_if<std::int64_t>(&value)) {
|
||||||
|
if (*number >= 0)
|
||||||
|
return static_cast<std::uint64_t>(*number);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
using ValueDescriptions = std::map<RawSignalValue, std::string>;
|
||||||
|
|
||||||
|
/** Returns a borrowed string, or nullptr; never converts integers to double. */
|
||||||
|
inline const std::string *FindValueDescription(const ValueDescriptions &descriptions,
|
||||||
|
const RawSignalValue &rawValue) {
|
||||||
|
const auto found = descriptions.find(NormalizeValueKey(rawValue));
|
||||||
|
return found == descriptions.end() ? nullptr : &found->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,26 +1,12 @@
|
|||||||
TEMPLATE = app
|
TEMPLATE = subdirs
|
||||||
CONFIG += console c++17
|
SUBDIRS += core tests
|
||||||
CONFIG -= app_bundle
|
core.subdir = core
|
||||||
CONFIG -= qt
|
tests.subdir = tests
|
||||||
|
tests.depends = core
|
||||||
SOURCES += \
|
contains(CONFIG, dbc_qt) {
|
||||||
dbc_decode_builder.cpp \
|
SUBDIRS += qt model_tests
|
||||||
dbc_decoder.cpp \
|
qt.subdir = qt
|
||||||
dbc_parser.cpp \
|
qt.depends = core
|
||||||
dbc_statement_handler.cpp \
|
model_tests.file = tests/model_tests.pro
|
||||||
dbc_tree_builder.cpp \
|
model_tests.depends = qt
|
||||||
main.cpp \
|
}
|
||||||
tree_node.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
dbc_database.h \
|
|
||||||
dbc_decode_builder.h \
|
|
||||||
dbc_decoder.h \
|
|
||||||
dbc_parser.h \
|
|
||||||
dbc_statement_handler.h \
|
|
||||||
typefactory.h \
|
|
||||||
dbc_tree_builder.h \
|
|
||||||
decode_database.h \
|
|
||||||
frame_info.h \
|
|
||||||
signal_info.h \
|
|
||||||
tree_node.h
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file dbc_decode_builder.cpp
|
|
||||||
* @brief
|
|
||||||
*
|
|
||||||
* Created: 2026-03-13
|
|
||||||
* Author: Deeaitch (Dim. Himro)
|
|
||||||
*
|
|
||||||
* Licensed under the MIT License.
|
|
||||||
* See LICENSE file in the project root for full license text.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "dbc_decode_builder.h"
|
|
||||||
|
|
||||||
DecodeDatabase DbcDecodeBuilder::Build (const DbcDatabase &source) const {
|
|
||||||
DecodeDatabase result;
|
|
||||||
|
|
||||||
for (std::size_t frameIndex = 0U; frameIndex < source.frames.size(); ++frameIndex) {
|
|
||||||
const FrameInfo &sourceFrame = source.frames[frameIndex];
|
|
||||||
DecodeFrame targetFrame;
|
|
||||||
|
|
||||||
targetFrame.name = sourceFrame.name;
|
|
||||||
targetFrame.canId = sourceFrame.canId;
|
|
||||||
targetFrame.isExtended = sourceFrame.isExtended;
|
|
||||||
targetFrame.dlc = sourceFrame.dlc;
|
|
||||||
targetFrame.pgn = sourceFrame.pgn;
|
|
||||||
targetFrame.hasPgn = sourceFrame.hasPgn;
|
|
||||||
targetFrame.transmitter = sourceFrame.transmitter;
|
|
||||||
targetFrame.comment = sourceFrame.comment;
|
|
||||||
|
|
||||||
for (std::size_t signalIndex = 0U; signalIndex < sourceFrame.signals.size(); ++signalIndex) {
|
|
||||||
const SignalInfo &sourceSignal = sourceFrame.signals[signalIndex];
|
|
||||||
DecodeSignal targetSignal;
|
|
||||||
|
|
||||||
targetSignal.name = sourceSignal.name;
|
|
||||||
targetSignal.startBit = sourceSignal.startBit;
|
|
||||||
targetSignal.length = sourceSignal.length;
|
|
||||||
targetSignal.byteOrder = sourceSignal.isLittleEndian ? ByteOrder::Intel : ByteOrder::Motorola;
|
|
||||||
targetSignal.valueType = sourceSignal.isSigned ? ValueType::Signed : ValueType::Unsigned;
|
|
||||||
targetSignal.factor = sourceSignal.factor;
|
|
||||||
targetSignal.offset = sourceSignal.offset;
|
|
||||||
targetSignal.minimum = sourceSignal.minimum;
|
|
||||||
targetSignal.maximum = sourceSignal.maximum;
|
|
||||||
targetSignal.unit = sourceSignal.unit;
|
|
||||||
targetSignal.receivers = sourceSignal.receivers;
|
|
||||||
targetSignal.comment = sourceSignal.comment;
|
|
||||||
|
|
||||||
targetFrame.signals.push_back (targetSignal);
|
|
||||||
}
|
|
||||||
|
|
||||||
result.frames.push_back (targetFrame);
|
|
||||||
result.frameIndexByKey[FrameKey (targetFrame.canId, targetFrame.isExtended)] =
|
|
||||||
result.frames.size() - 1U;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file dbc_decoder.cpp
|
|
||||||
* @brief
|
|
||||||
*
|
|
||||||
* Created: 2026-03-13
|
|
||||||
* Author: Deeaitch (Dim. Himro)
|
|
||||||
*
|
|
||||||
* Licensed under the MIT License.
|
|
||||||
* See LICENSE file in the project root for full license text.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "dbc_decoder.h"
|
|
||||||
|
|
||||||
const DecodeFrame *DbcDecoder::FindFrame (const DecodeDatabase &database,
|
|
||||||
std::uint32_t canId,
|
|
||||||
bool isExtended) const {
|
|
||||||
const FrameKey key (canId, isExtended);
|
|
||||||
const std::unordered_map<FrameKey, std::size_t, FrameKeyHasher>::const_iterator it =
|
|
||||||
database.frameIndexByKey.find (key);
|
|
||||||
|
|
||||||
if (it == database.frameIndexByKey.end())
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
const std::size_t index = it->second;
|
|
||||||
if (index >= database.frames.size())
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
return &database.frames[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
DecodedFrameValue DbcDecoder::Decode (const DecodeDatabase &database,
|
|
||||||
const RawCanFrame &frame) const {
|
|
||||||
DecodedFrameValue result;
|
|
||||||
const DecodeFrame *definition = FindFrame (database, frame.canId, frame.isExtended);
|
|
||||||
|
|
||||||
if (definition == nullptr)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
result.definition = definition;
|
|
||||||
result.valid = true;
|
|
||||||
|
|
||||||
for (std::size_t signalIndex = 0U; signalIndex < definition->signals.size(); ++signalIndex) {
|
|
||||||
const DecodeSignal &signal = definition->signals[signalIndex];
|
|
||||||
DecodedSignalValue decoded;
|
|
||||||
std::uint64_t unsignedValue = 0U;
|
|
||||||
|
|
||||||
decoded.definition = &signal;
|
|
||||||
|
|
||||||
if (!ExtractUnsigned (frame.data, signal, unsignedValue)) {
|
|
||||||
decoded.valid = false;
|
|
||||||
result.signals.push_back (decoded);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (signal.valueType == ValueType::Signed)
|
|
||||||
decoded.rawValue = SignExtend (unsignedValue, signal.length);
|
|
||||||
else
|
|
||||||
decoded.rawValue = unsignedValue;
|
|
||||||
|
|
||||||
decoded.physicalValue =
|
|
||||||
std::visit ([&signal] (auto rawValue) {
|
|
||||||
return (static_cast<double> (rawValue) * signal.factor) + signal.offset;
|
|
||||||
}, decoded.rawValue);
|
|
||||||
decoded.valid = true;
|
|
||||||
|
|
||||||
result.signals.push_back (decoded);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DbcDecoder::ExtractUnsigned (const std::vector<std::uint8_t> &data,
|
|
||||||
const DecodeSignal &signal,
|
|
||||||
std::uint64_t &value) {
|
|
||||||
if ((signal.length == 0U) || (signal.length > 64U))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (signal.byteOrder == ByteOrder::Intel)
|
|
||||||
return ExtractIntel (data, signal.startBit, signal.length, value);
|
|
||||||
|
|
||||||
return ExtractMotorola (data, signal.startBit, signal.length, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DbcDecoder::ExtractIntel (const std::vector<std::uint8_t> &data,
|
|
||||||
std::uint32_t startBit,
|
|
||||||
std::uint32_t length,
|
|
||||||
std::uint64_t &value) {
|
|
||||||
value = 0U;
|
|
||||||
|
|
||||||
for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {
|
|
||||||
const std::uint32_t absoluteBit = startBit + bitIndex;
|
|
||||||
const std::uint32_t byteIndex = absoluteBit / 8U;
|
|
||||||
const std::uint32_t bitInByte = absoluteBit % 8U;
|
|
||||||
|
|
||||||
if (byteIndex >= data.size())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
const std::uint64_t bitValue =
|
|
||||||
(static_cast<std::uint64_t> ((data[byteIndex] >> bitInByte) & 0x01U) << bitIndex);
|
|
||||||
|
|
||||||
value |= bitValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DbcDecoder::ExtractMotorola (const std::vector<std::uint8_t> &data,
|
|
||||||
std::uint32_t startBit,
|
|
||||||
std::uint32_t length,
|
|
||||||
std::uint64_t &value) {
|
|
||||||
/*
|
|
||||||
* DBC Motorola bit numbering:
|
|
||||||
* - 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::size_t byteIndex = startBit / 8U;
|
|
||||||
std::uint32_t bitInByte = startBit % 8U;
|
|
||||||
|
|
||||||
for (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {
|
|
||||||
if (byteIndex >= data.size())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
value <<= 1U;
|
|
||||||
value |= static_cast<std::uint64_t> ((data[byteIndex] >> bitInByte) & 0x01U);
|
|
||||||
|
|
||||||
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 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<std::int64_t> (value);
|
|
||||||
|
|
||||||
// The complemented magnitude fits int64_t, including for INT64_MIN.
|
|
||||||
return -1 - static_cast<std::int64_t> ((~value) & valueMask);
|
|
||||||
}
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file dbc_decoder.h
|
|
||||||
* @brief
|
|
||||||
*
|
|
||||||
* Created: 2026-03-13
|
|
||||||
* Author: Deeaitch (Dim. Himro)
|
|
||||||
*
|
|
||||||
* Licensed under the MIT License.
|
|
||||||
* See LICENSE file in the project root for full license text.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef DBC_DECODER_H
|
|
||||||
#define DBC_DECODER_H
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <cstdint>
|
|
||||||
#include <variant>
|
|
||||||
|
|
||||||
#include "decode_database.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Raw CAN frame used for runtime or trace decoding.
|
|
||||||
*/
|
|
||||||
struct RawCanFrame {
|
|
||||||
std::uint32_t canId; /**< Normalized CAN ID. */
|
|
||||||
bool isExtended; /**< true for extended frame. */
|
|
||||||
std::vector<std::uint8_t> data; /**< Payload bytes. */
|
|
||||||
|
|
||||||
RawCanFrame()
|
|
||||||
: canId (0U)
|
|
||||||
, isExtended (false)
|
|
||||||
, data() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief One decoded signal value.
|
|
||||||
*/
|
|
||||||
struct DecodedSignalValue {
|
|
||||||
const DecodeSignal *definition; /**< Signal definition. */
|
|
||||||
std::variant<std::int64_t, std::uint64_t> rawValue; /**< Exact signed or unsigned raw value. */
|
|
||||||
double physicalValue; /**< Converted physical value. */
|
|
||||||
bool valid; /**< true if decoding succeeded. */
|
|
||||||
|
|
||||||
DecodedSignalValue()
|
|
||||||
: definition (nullptr)
|
|
||||||
, rawValue (std::uint64_t (0U))
|
|
||||||
, physicalValue (0.0)
|
|
||||||
, valid (false) {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Fully decoded frame.
|
|
||||||
*/
|
|
||||||
struct DecodedFrameValue {
|
|
||||||
const DecodeFrame *definition; /**< Frame definition. */
|
|
||||||
std::vector<DecodedSignalValue> signals; /**< Decoded signal values. */
|
|
||||||
bool valid; /**< true if frame was matched. */
|
|
||||||
|
|
||||||
DecodedFrameValue()
|
|
||||||
: definition (nullptr)
|
|
||||||
, signals()
|
|
||||||
, valid (false) {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Runtime CAN decoder using prebuilt decode database.
|
|
||||||
*/
|
|
||||||
class DbcDecoder {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* @brief Find frame definition by CAN ID.
|
|
||||||
* @param database Runtime decode database.
|
|
||||||
* @param canId Normalized CAN ID.
|
|
||||||
* @param isExtended true for extended frame.
|
|
||||||
* @return Pointer to frame definition or nullptr.
|
|
||||||
*/
|
|
||||||
const DecodeFrame *FindFrame (const DecodeDatabase &database,
|
|
||||||
std::uint32_t canId,
|
|
||||||
bool isExtended) const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Decode one raw CAN frame.
|
|
||||||
* @param database Runtime decode database.
|
|
||||||
* @param frame Raw CAN frame.
|
|
||||||
* @return Decoded frame value.
|
|
||||||
*/
|
|
||||||
DecodedFrameValue Decode (const DecodeDatabase &database,
|
|
||||||
const RawCanFrame &frame) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
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);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* DBC_DECODER_H */
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file dbc_parser.cpp
|
|
||||||
* @brief
|
|
||||||
*
|
|
||||||
* Created: 2026-03-13
|
|
||||||
* Author: Deeaitch (Dim. Himro)
|
|
||||||
*
|
|
||||||
* Licensed under the MIT License.
|
|
||||||
* See LICENSE file in the project root for full license text.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "dbc_parser.h"
|
|
||||||
#include "dbc_statement_handler.h"
|
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <cctype>
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
/**
|
|
||||||
* @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<unsigned char> (text[begin])))
|
|
||||||
++begin;
|
|
||||||
|
|
||||||
std::string::size_type end = text.size();
|
|
||||||
while ((end > begin) &&
|
|
||||||
std::isspace (static_cast<unsigned char> (text[end - 1U])))
|
|
||||||
--end;
|
|
||||||
|
|
||||||
return text.substr (begin, end - begin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DbcDatabase DbcParser::ParseFile (const std::string &filePath) const {
|
|
||||||
std::ifstream input (filePath.c_str());
|
|
||||||
if (!input.is_open())
|
|
||||||
throw std::runtime_error ("Failed to open DBC file: " + filePath);
|
|
||||||
|
|
||||||
DbcDatabase database;
|
|
||||||
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;
|
|
||||||
|
|
||||||
try {
|
|
||||||
dispatcher.Dispatch (line, context);
|
|
||||||
} catch (const std::exception &error) {
|
|
||||||
throw std::runtime_error (filePath + ":" + std::to_string (lineNumber) +
|
|
||||||
": " + error.what());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return database;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DbcParser::Trim (const std::string &text) {
|
|
||||||
return TrimText (text);
|
|
||||||
}
|
|
||||||
@@ -1,358 +0,0 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
|
||||||
#include "dbc_statement_handler.h"
|
|
||||||
#include <sstream>
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <cctype>
|
|
||||||
#include <charconv>
|
|
||||||
#include <limits>
|
|
||||||
|
|
||||||
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<unsigned char> (text[begin])))
|
|
||||||
++begin;
|
|
||||||
|
|
||||||
std::string::size_type end = text.size();
|
|
||||||
while ((end > begin) &&
|
|
||||||
std::isspace (static_cast<unsigned char> (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<std::string> SplitReceivers (const std::string &text) {
|
|
||||||
std::vector<std::string> 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<std::uint32_t>::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<std::uint8_t> (ParseDecimal (
|
|
||||||
lengthText, std::numeric_limits<std::uint8_t>::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::uint32_t> (
|
|
||||||
std::stoul (TrimText (rest.substr (0U, pipePos)))
|
|
||||||
);
|
|
||||||
|
|
||||||
signal.length = static_cast<std::uint32_t> (
|
|
||||||
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<DbcFrameHandler> ("BO_");
|
|
||||||
RegisterType<DbcSignalHandler> ("SG_");
|
|
||||||
RegisterType<DbcCommentHandler> ("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;
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
|
||||||
#ifndef DBC_STATEMENT_HANDLER_H
|
|
||||||
#define DBC_STATEMENT_HANDLER_H
|
|
||||||
|
|
||||||
#include "dbc_database.h"
|
|
||||||
#include "typefactory.h"
|
|
||||||
#include <string>
|
|
||||||
#include <unordered_map>
|
|
||||||
|
|
||||||
/** 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 <class Handler>
|
|
||||||
void RegisterType (const std::string &keyword) {
|
|
||||||
m_factory.registerType<Handler> (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<std::string, DbcStatementHandler> m_factory;
|
|
||||||
std::unordered_map<std::string, std::shared_ptr<DbcStatementHandler> > m_handlers;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* DBC_STATEMENT_HANDLER_H */
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file dbc_tree_builder.cpp
|
|
||||||
* @brief
|
|
||||||
*
|
|
||||||
* Created: 2026-03-13
|
|
||||||
* Author: Deeaitch (Dim. Himro)
|
|
||||||
*
|
|
||||||
* Licensed under the MIT License.
|
|
||||||
* See LICENSE file in the project root for full license text.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "dbc_tree_builder.h"
|
|
||||||
|
|
||||||
std::unique_ptr<TreeNode> DbcTreeBuilder::Build (const DbcDatabase &database) const {
|
|
||||||
std::unique_ptr<TreeNode> root (new TreeNode());
|
|
||||||
|
|
||||||
for (std::size_t frameIndex = 0U; frameIndex < database.frames.size(); ++frameIndex) {
|
|
||||||
const FrameInfo &frame = database.frames[frameIndex];
|
|
||||||
std::unique_ptr<TreeNode> frameNode (new TreeNode (frame));
|
|
||||||
|
|
||||||
for (std::size_t signalIndex = 0U; signalIndex < frame.signals.size(); ++signalIndex) {
|
|
||||||
const SignalInfo &signal = frame.signals[signalIndex];
|
|
||||||
std::unique_ptr<TreeNode> signalNode (new TreeNode (signal));
|
|
||||||
frameNode->AddChild (std::move (signalNode));
|
|
||||||
}
|
|
||||||
|
|
||||||
root->AddChild (std::move (frameNode));
|
|
||||||
}
|
|
||||||
|
|
||||||
return root;
|
|
||||||
}
|
|
||||||
@@ -1,137 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file decode_database.h
|
|
||||||
* @brief
|
|
||||||
*
|
|
||||||
* Created: 2026-03-13
|
|
||||||
* Author: Deeaitch (Dim. Himro)
|
|
||||||
*
|
|
||||||
* Licensed under the MIT License.
|
|
||||||
* See LICENSE file in the project root for full license text.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef DECODE_DATABASE_H
|
|
||||||
#define DECODE_DATABASE_H
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
#include <unordered_map>
|
|
||||||
#include <cstdint>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Signal byte order used for runtime decoding.
|
|
||||||
*/
|
|
||||||
enum class ByteOrder {
|
|
||||||
Intel,
|
|
||||||
Motorola
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Signal numeric type.
|
|
||||||
*/
|
|
||||||
enum class ValueType {
|
|
||||||
Unsigned,
|
|
||||||
Signed
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Runtime-ready signal definition.
|
|
||||||
*/
|
|
||||||
struct DecodeSignal {
|
|
||||||
std::string name; /**< Signal name. */
|
|
||||||
std::uint32_t startBit; /**< DBC start bit. */
|
|
||||||
std::uint32_t length; /**< Signal length in bits. */
|
|
||||||
ByteOrder byteOrder; /**< Intel or Motorola. */
|
|
||||||
ValueType valueType; /**< Signed or unsigned. */
|
|
||||||
double factor; /**< Scaling factor. */
|
|
||||||
double offset; /**< Physical offset. */
|
|
||||||
double minimum; /**< Minimum physical value. */
|
|
||||||
double maximum; /**< Maximum physical value. */
|
|
||||||
std::string unit; /**< Physical unit. */
|
|
||||||
std::vector<std::string> receivers; /**< Receivers. */
|
|
||||||
std::string comment; /**< Comment. */
|
|
||||||
|
|
||||||
DecodeSignal()
|
|
||||||
: name()
|
|
||||||
, startBit (0U)
|
|
||||||
, length (0U)
|
|
||||||
, byteOrder (ByteOrder::Intel)
|
|
||||||
, valueType (ValueType::Unsigned)
|
|
||||||
, factor (1.0)
|
|
||||||
, offset (0.0)
|
|
||||||
, minimum (0.0)
|
|
||||||
, maximum (0.0)
|
|
||||||
, unit()
|
|
||||||
, receivers()
|
|
||||||
, comment() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Runtime-ready frame definition.
|
|
||||||
*/
|
|
||||||
struct DecodeFrame {
|
|
||||||
std::string name; /**< Frame name. */
|
|
||||||
std::uint32_t canId; /**< Normalized CAN ID. */
|
|
||||||
bool isExtended; /**< true for extended frame. */
|
|
||||||
std::uint8_t dlc; /**< Payload length. */
|
|
||||||
std::uint32_t pgn; /**< PGN if available. */
|
|
||||||
bool hasPgn; /**< true if PGN is valid. */
|
|
||||||
std::string transmitter; /**< Transmitter ECU. */
|
|
||||||
std::string comment; /**< Frame comment. */
|
|
||||||
std::vector<DecodeSignal> signals; /**< Signal definitions. */
|
|
||||||
|
|
||||||
DecodeFrame()
|
|
||||||
: name()
|
|
||||||
, canId (0U)
|
|
||||||
, isExtended (false)
|
|
||||||
, dlc (0U)
|
|
||||||
, pgn (0U)
|
|
||||||
, hasPgn (false)
|
|
||||||
, transmitter()
|
|
||||||
, comment()
|
|
||||||
, signals() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Key for fast frame lookup.
|
|
||||||
*/
|
|
||||||
struct FrameKey {
|
|
||||||
std::uint32_t canId;
|
|
||||||
bool isExtended;
|
|
||||||
|
|
||||||
FrameKey()
|
|
||||||
: canId (0U)
|
|
||||||
, isExtended (false) {
|
|
||||||
}
|
|
||||||
|
|
||||||
FrameKey (std::uint32_t id, bool extended)
|
|
||||||
: canId (id)
|
|
||||||
, isExtended (extended) {
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator== (const FrameKey &other) const {
|
|
||||||
return (canId == other.canId) && (isExtended == other.isExtended);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Hasher for frame key.
|
|
||||||
*/
|
|
||||||
struct FrameKeyHasher {
|
|
||||||
std::size_t operator() (const FrameKey &key) const {
|
|
||||||
const std::size_t a = static_cast<std::size_t> (key.canId);
|
|
||||||
const std::size_t b = key.isExtended ? 1U : 0U;
|
|
||||||
return (a * 1315423911U) ^ b;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Runtime decode database with fast lookup by CAN ID.
|
|
||||||
*/
|
|
||||||
struct DecodeDatabase {
|
|
||||||
std::vector<DecodeFrame> frames;
|
|
||||||
std::unordered_map<FrameKey, std::size_t, FrameKeyHasher> frameIndexByKey;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* DECODE_DATABASE_H */
|
|
||||||
@@ -1,37 +1,37 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
|
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
|
||||||
<tagfile doxygen_version="1.9.4">
|
<tagfile doxygen_version="1.9.8">
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_database.h</name>
|
<name>dbc_database.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__database_8h.html</filename>
|
<filename>dbc__database_8h.html</filename>
|
||||||
<includes id="frame__info_8h" name="frame_info.h" local="yes" imported="no">frame_info.h</includes>
|
<includes id="frame__info_8h" name="frame_info.h" local="yes" import="no" module="no" objc="no">frame_info.h</includes>
|
||||||
<class kind="struct">DbcDatabase</class>
|
<class kind="struct">DbcDatabase</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_decode_builder.cpp</name>
|
<name>dbc_decode_builder.cpp</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__decode__builder_8cpp.html</filename>
|
<filename>dbc__decode__builder_8cpp.html</filename>
|
||||||
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" imported="no">dbc_decode_builder.h</includes>
|
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" import="no" module="no" objc="no">dbc_decode_builder.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_decode_builder.h</name>
|
<name>dbc_decode_builder.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__decode__builder_8h.html</filename>
|
<filename>dbc__decode__builder_8h.html</filename>
|
||||||
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" imported="no">dbc_database.h</includes>
|
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
||||||
<includes id="decode__database_8h" name="decode_database.h" local="yes" imported="no">decode_database.h</includes>
|
<includes id="decode__database_8h" name="decode_database.h" local="yes" import="no" module="no" objc="no">decode_database.h</includes>
|
||||||
<class kind="class">DbcDecodeBuilder</class>
|
<class kind="class">DbcDecodeBuilder</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_decoder.cpp</name>
|
<name>dbc_decoder.cpp</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__decoder_8cpp.html</filename>
|
<filename>dbc__decoder_8cpp.html</filename>
|
||||||
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" imported="no">dbc_decoder.h</includes>
|
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" import="no" module="no" objc="no">dbc_decoder.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_decoder.h</name>
|
<name>dbc_decoder.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__decoder_8h.html</filename>
|
<filename>dbc__decoder_8h.html</filename>
|
||||||
<includes id="decode__database_8h" name="decode_database.h" local="yes" imported="no">decode_database.h</includes>
|
<includes id="decode__database_8h" name="decode_database.h" local="yes" import="no" module="no" objc="no">decode_database.h</includes>
|
||||||
<class kind="struct">RawCanFrame</class>
|
<class kind="struct">RawCanFrame</class>
|
||||||
<class kind="struct">DecodedSignalValue</class>
|
<class kind="struct">DecodedSignalValue</class>
|
||||||
<class kind="struct">DecodedFrameValue</class>
|
<class kind="struct">DecodedFrameValue</class>
|
||||||
@@ -39,34 +39,34 @@
|
|||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_parser.cpp</name>
|
<name>dbc_parser.cpp</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__parser_8cpp.html</filename>
|
<filename>dbc__parser_8cpp.html</filename>
|
||||||
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" imported="no">dbc_parser.h</includes>
|
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" import="no" module="no" objc="no">dbc_parser.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_parser.h</name>
|
<name>dbc_parser.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__parser_8h.html</filename>
|
<filename>dbc__parser_8h.html</filename>
|
||||||
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" imported="no">dbc_database.h</includes>
|
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
||||||
<class kind="class">DbcParser</class>
|
<class kind="class">DbcParser</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_tree_builder.cpp</name>
|
<name>dbc_tree_builder.cpp</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__tree__builder_8cpp.html</filename>
|
<filename>dbc__tree__builder_8cpp.html</filename>
|
||||||
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" imported="no">dbc_tree_builder.h</includes>
|
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" import="no" module="no" objc="no">dbc_tree_builder.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>dbc_tree_builder.h</name>
|
<name>dbc_tree_builder.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>dbc__tree__builder_8h.html</filename>
|
<filename>dbc__tree__builder_8h.html</filename>
|
||||||
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" imported="no">dbc_database.h</includes>
|
<includes id="dbc__database_8h" name="dbc_database.h" local="yes" import="no" module="no" objc="no">dbc_database.h</includes>
|
||||||
<includes id="tree__node_8h" name="tree_node.h" local="yes" imported="no">tree_node.h</includes>
|
<includes id="tree__node_8h" name="tree_node.h" local="yes" import="no" module="no" objc="no">tree_node.h</includes>
|
||||||
<class kind="class">DbcTreeBuilder</class>
|
<class kind="class">DbcTreeBuilder</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>decode_database.h</name>
|
<name>decode_database.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>decode__database_8h.html</filename>
|
<filename>decode__database_8h.html</filename>
|
||||||
<class kind="struct">DecodeSignal</class>
|
<class kind="struct">DecodeSignal</class>
|
||||||
<class kind="struct">DecodeFrame</class>
|
<class kind="struct">DecodeFrame</class>
|
||||||
@@ -94,38 +94,29 @@
|
|||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>frame_info.h</name>
|
<name>frame_info.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>frame__info_8h.html</filename>
|
<filename>frame__info_8h.html</filename>
|
||||||
<includes id="signal__info_8h" name="signal_info.h" local="yes" imported="no">signal_info.h</includes>
|
<includes id="signal__info_8h" name="signal_info.h" local="yes" import="no" module="no" objc="no">signal_info.h</includes>
|
||||||
<class kind="struct">FrameInfo</class>
|
<class kind="struct">FrameInfo</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
|
||||||
<name>main.cpp</name>
|
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
|
||||||
<filename>main_8cpp.html</filename>
|
|
||||||
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" imported="no">dbc_parser.h</includes>
|
|
||||||
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" imported="no">dbc_tree_builder.h</includes>
|
|
||||||
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" imported="no">dbc_decode_builder.h</includes>
|
|
||||||
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" imported="no">dbc_decoder.h</includes>
|
|
||||||
</compound>
|
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>signal_info.h</name>
|
<name>signal_info.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>signal__info_8h.html</filename>
|
<filename>signal__info_8h.html</filename>
|
||||||
<class kind="struct">SignalInfo</class>
|
<class kind="struct">SignalInfo</class>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>tree_node.cpp</name>
|
<name>tree_node.cpp</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>tree__node_8cpp.html</filename>
|
<filename>tree__node_8cpp.html</filename>
|
||||||
<includes id="tree__node_8h" name="tree_node.h" local="yes" imported="no">tree_node.h</includes>
|
<includes id="tree__node_8h" name="tree_node.h" local="yes" import="no" module="no" objc="no">tree_node.h</includes>
|
||||||
</compound>
|
</compound>
|
||||||
<compound kind="file">
|
<compound kind="file">
|
||||||
<name>tree_node.h</name>
|
<name>tree_node.h</name>
|
||||||
<path>/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/</path>
|
<path>core/</path>
|
||||||
<filename>tree__node_8h.html</filename>
|
<filename>tree__node_8h.html</filename>
|
||||||
<includes id="frame__info_8h" name="frame_info.h" local="yes" imported="no">frame_info.h</includes>
|
<includes id="frame__info_8h" name="frame_info.h" local="yes" import="no" module="no" objc="no">frame_info.h</includes>
|
||||||
<includes id="signal__info_8h" name="signal_info.h" local="yes" imported="no">signal_info.h</includes>
|
<includes id="signal__info_8h" name="signal_info.h" local="yes" import="no" module="no" objc="no">signal_info.h</includes>
|
||||||
<class kind="class">TreeNode</class>
|
<class kind="class">TreeNode</class>
|
||||||
<member kind="enumeration">
|
<member kind="enumeration">
|
||||||
<type></type>
|
<type></type>
|
||||||
@@ -138,6 +129,20 @@
|
|||||||
<enumvalue file="tree__node_8h.html" anchor="acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398">Signal</enumvalue>
|
<enumvalue file="tree__node_8h.html" anchor="acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398">Signal</enumvalue>
|
||||||
</member>
|
</member>
|
||||||
</compound>
|
</compound>
|
||||||
|
<compound kind="file">
|
||||||
|
<name>examples/main.cpp</name>
|
||||||
|
<path>examples/</path>
|
||||||
|
<filename>examples_2main_8cpp.html</filename>
|
||||||
|
<includes id="dbc__decode__builder_8h" name="dbc_decode_builder.h" local="yes" import="no" module="no" objc="no">dbc_decode_builder.h</includes>
|
||||||
|
<includes id="dbc__decoder_8h" name="dbc_decoder.h" local="yes" import="no" module="no" objc="no">dbc_decoder.h</includes>
|
||||||
|
<includes id="dbc__parser_8h" name="dbc_parser.h" local="yes" import="no" module="no" objc="no">dbc_parser.h</includes>
|
||||||
|
<includes id="dbc__tree__builder_8h" name="dbc_tree_builder.h" local="yes" import="no" module="no" objc="no">dbc_tree_builder.h</includes>
|
||||||
|
</compound>
|
||||||
|
<compound kind="class">
|
||||||
|
<name>DbcCommentHandler</name>
|
||||||
|
<filename>classDbcCommentHandler.html</filename>
|
||||||
|
<base>DbcStatementHandler</base>
|
||||||
|
</compound>
|
||||||
<compound kind="struct">
|
<compound kind="struct">
|
||||||
<name>DbcDatabase</name>
|
<name>DbcDatabase</name>
|
||||||
<filename>structDbcDatabase.html</filename>
|
<filename>structDbcDatabase.html</filename>
|
||||||
@@ -178,6 +183,15 @@
|
|||||||
<arglist>(const DecodeDatabase &database, const RawCanFrame &frame) const</arglist>
|
<arglist>(const DecodeDatabase &database, const RawCanFrame &frame) const</arglist>
|
||||||
</member>
|
</member>
|
||||||
</compound>
|
</compound>
|
||||||
|
<compound kind="class">
|
||||||
|
<name>DbcFrameHandler</name>
|
||||||
|
<filename>classDbcFrameHandler.html</filename>
|
||||||
|
<base>DbcStatementHandler</base>
|
||||||
|
</compound>
|
||||||
|
<compound kind="struct">
|
||||||
|
<name>DbcParseContext</name>
|
||||||
|
<filename>structDbcParseContext.html</filename>
|
||||||
|
</compound>
|
||||||
<compound kind="class">
|
<compound kind="class">
|
||||||
<name>DbcParser</name>
|
<name>DbcParser</name>
|
||||||
<filename>classDbcParser.html</filename>
|
<filename>classDbcParser.html</filename>
|
||||||
@@ -189,6 +203,26 @@
|
|||||||
<arglist>(const std::string &filePath) const</arglist>
|
<arglist>(const std::string &filePath) const</arglist>
|
||||||
</member>
|
</member>
|
||||||
</compound>
|
</compound>
|
||||||
|
<compound kind="class">
|
||||||
|
<name>DbcSignalHandler</name>
|
||||||
|
<filename>classDbcSignalHandler.html</filename>
|
||||||
|
<base>DbcStatementHandler</base>
|
||||||
|
</compound>
|
||||||
|
<compound kind="class">
|
||||||
|
<name>DbcStatementDispatcher</name>
|
||||||
|
<filename>classDbcStatementDispatcher.html</filename>
|
||||||
|
<member kind="function">
|
||||||
|
<type>bool</type>
|
||||||
|
<name>Dispatch</name>
|
||||||
|
<anchorfile>classDbcStatementDispatcher.html</anchorfile>
|
||||||
|
<anchor>a495c2d5c7ebb8103b1987cdd87c142ed</anchor>
|
||||||
|
<arglist>(const std::string &line, DbcParseContext &context) const</arglist>
|
||||||
|
</member>
|
||||||
|
</compound>
|
||||||
|
<compound kind="class">
|
||||||
|
<name>DbcStatementHandler</name>
|
||||||
|
<filename>classDbcStatementHandler.html</filename>
|
||||||
|
</compound>
|
||||||
<compound kind="class">
|
<compound kind="class">
|
||||||
<name>DbcTreeBuilder</name>
|
<name>DbcTreeBuilder</name>
|
||||||
<filename>classDbcTreeBuilder.html</filename>
|
<filename>classDbcTreeBuilder.html</filename>
|
||||||
@@ -240,10 +274,10 @@
|
|||||||
<arglist></arglist>
|
<arglist></arglist>
|
||||||
</member>
|
</member>
|
||||||
<member kind="variable">
|
<member kind="variable">
|
||||||
<type>std::int64_t</type>
|
<type>std::variant< std::int64_t, std::uint64_t ></type>
|
||||||
<name>rawValue</name>
|
<name>rawValue</name>
|
||||||
<anchorfile>structDecodedSignalValue.html</anchorfile>
|
<anchorfile>structDecodedSignalValue.html</anchorfile>
|
||||||
<anchor>a5138b825940e34689f7b3891627ee9ec</anchor>
|
<anchor>a95db4f7f93b5f311e8f272833e45055e</anchor>
|
||||||
<arglist></arglist>
|
<arglist></arglist>
|
||||||
</member>
|
</member>
|
||||||
<member kind="variable">
|
<member kind="variable">
|
||||||
@@ -685,9 +719,49 @@
|
|||||||
<arglist>() const</arglist>
|
<arglist>() const</arglist>
|
||||||
</member>
|
</member>
|
||||||
</compound>
|
</compound>
|
||||||
|
<compound kind="class">
|
||||||
|
<name>TypeFactory</name>
|
||||||
|
<filename>classTypeFactory.html</filename>
|
||||||
|
<templarg>class ClassId</templarg>
|
||||||
|
<templarg>class BaseClass</templarg>
|
||||||
|
<templarg>class... Args</templarg>
|
||||||
|
<member kind="function">
|
||||||
|
<type>void</type>
|
||||||
|
<name>registerType</name>
|
||||||
|
<anchorfile>classTypeFactory.html</anchorfile>
|
||||||
|
<anchor>ad6d85795285ee21193ac03e1b24762d3</anchor>
|
||||||
|
<arglist>(const ClassId &id)</arglist>
|
||||||
|
</member>
|
||||||
|
<member kind="function">
|
||||||
|
<type>CreatorFn</type>
|
||||||
|
<name>creator</name>
|
||||||
|
<anchorfile>classTypeFactory.html</anchorfile>
|
||||||
|
<anchor>ad82f537569ece3d3a4a376523fa94473</anchor>
|
||||||
|
<arglist>(const ClassId &id) const</arglist>
|
||||||
|
</member>
|
||||||
|
<member kind="function">
|
||||||
|
<type>BasePtr</type>
|
||||||
|
<name>create</name>
|
||||||
|
<anchorfile>classTypeFactory.html</anchorfile>
|
||||||
|
<anchor>a3f43b03d6e3a0fd503fdec01ecf62e9f</anchor>
|
||||||
|
<arglist>(const ClassId &id, Args... args) const</arglist>
|
||||||
|
</member>
|
||||||
|
<member kind="function">
|
||||||
|
<type>bool</type>
|
||||||
|
<name>contains</name>
|
||||||
|
<anchorfile>classTypeFactory.html</anchorfile>
|
||||||
|
<anchor>a1a119ad2956abe146213c6ca124d8dd4</anchor>
|
||||||
|
<arglist>(const ClassId &id) const</arglist>
|
||||||
|
</member>
|
||||||
|
</compound>
|
||||||
<compound kind="page">
|
<compound kind="page">
|
||||||
<name>md_README</name>
|
<name>md_README</name>
|
||||||
<title>DBC Parser and Runtime Decode Module Documentation</title>
|
<title>DBC Parser and Runtime Decode Module Documentation</title>
|
||||||
<filename>md_README.html</filename>
|
<filename>md_README.html</filename>
|
||||||
</compound>
|
</compound>
|
||||||
|
<compound kind="page">
|
||||||
|
<name>md_tests_2README</name>
|
||||||
|
<title>QtTest regression tests</title>
|
||||||
|
<filename>md_tests_2README.html</filename>
|
||||||
|
</compound>
|
||||||
</tagfile>
|
</tagfile>
|
||||||
@@ -1,10 +1,25 @@
|
|||||||
/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/core/dbc_statement_handler.h:38: warning: Compound DbcCommentHandler 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/core/dbc_statement_handler.h:22: warning: Compound DbcFrameHandler 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/core/dbc_statement_handler.h:30: warning: Compound DbcSignalHandler 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/core/dbc_statement_handler.h:16: warning: Compound DbcStatementHandler 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/examples/main.cpp:101: warning: Member main(int argc, char *argv[]) (function) of file examples/main.cpp is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:100: warning: Member canId (variable) of struct FrameKey is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:40: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcCommentHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:101: warning: Member isExtended (variable) of struct FrameKey is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:24: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcFrameHandler is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/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/core/dbc_statement_handler.h:12: warning: Member database (variable) of struct DbcParseContext is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tree_node.h:59: warning: Member TreeNode(TreeNode &&)=default (function) of class TreeNode is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:13: warning: Member currentFrame (variable) of struct DbcParseContext is not documented.
|
||||||
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tree_node.h:60: warning: Member operator=(TreeNode &&)=default (function) of class TreeNode is not documented.
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:32: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcSignalHandler is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:52: warning: Member RegisterType(const std::string &keyword) (function) of class DbcStatementDispatcher is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/dbc_statement_handler.h:19: warning: Member Handle(const std::string &line, DbcParseContext &context) const =0 (function) of class DbcStatementHandler is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:112: warning: Member frames (variable) of struct DecodeDatabase is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:113: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:88: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:92: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:81: warning: Member canId (variable) of struct FrameKey is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:82: warning: Member isExtended (variable) of struct FrameKey is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/decode_database.h:101: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h:59: warning: Member TreeNode(TreeNode &&)=default (function) of class TreeNode is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/tree_node.h:60: warning: Member operator=(TreeNode &&)=default (function) of class TreeNode is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:61: warning: Member BasePtr (typedef) of class TypeFactory is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:62: warning: Member CreatorFn (typedef) of class TypeFactory is not documented.
|
||||||
|
/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/core/typefactory.h:110: warning: Member classes (variable) of class TypeFactory is not documented.
|
||||||
|
error: failed to run qhelpgenerator on index.qhp
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: Class List</title>
|
<title>DBC Framework: Class List</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -88,22 +95,29 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
|
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
|
||||||
<table class="directory">
|
<table class="directory">
|
||||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDbcDatabase.html" target="_self">DbcDatabase</a></td><td class="desc">Parsed DBC content stored in a simple internal form </td></tr>
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcCommentHandler.html" target="_self">DbcCommentHandler</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDecodeBuilder.html" target="_self">DbcDecodeBuilder</a></td><td class="desc">Converts parsed DBC data into runtime decode database </td></tr>
|
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDbcDatabase.html" target="_self">DbcDatabase</a></td><td class="desc">Parsed DBC content stored in a simple internal form </td></tr>
|
||||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDecoder.html" target="_self">DbcDecoder</a></td><td class="desc">Runtime CAN decoder using prebuilt decode database </td></tr>
|
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDecodeBuilder.html" target="_self">DbcDecodeBuilder</a></td><td class="desc">Converts parsed DBC data into runtime decode database </td></tr>
|
||||||
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcParser.html" target="_self">DbcParser</a></td><td class="desc">Minimal DBC parser </td></tr>
|
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcDecoder.html" target="_self">DbcDecoder</a></td><td class="desc">Runtime CAN decoder using prebuilt decode database </td></tr>
|
||||||
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcTreeBuilder.html" target="_self">DbcTreeBuilder</a></td><td class="desc">Builds a simple tree from parsed DBC database </td></tr>
|
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcFrameHandler.html" target="_self">DbcFrameHandler</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Runtime decode database with fast lookup by CAN ID </td></tr>
|
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDbcParseContext.html" target="_self">DbcParseContext</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedFrameValue.html" target="_self">DecodedFrameValue</a></td><td class="desc">Fully decoded frame </td></tr>
|
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcParser.html" target="_self">DbcParser</a></td><td class="desc">Minimal DBC parser </td></tr>
|
||||||
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedSignalValue.html" target="_self">DecodedSignalValue</a></td><td class="desc">One decoded signal value </td></tr>
|
<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcSignalHandler.html" target="_self">DbcSignalHandler</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeFrame.html" target="_self">DecodeFrame</a></td><td class="desc">Runtime-ready frame definition </td></tr>
|
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcStatementDispatcher.html" target="_self">DbcStatementDispatcher</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeSignal.html" target="_self">DecodeSignal</a></td><td class="desc">Runtime-ready signal definition </td></tr>
|
<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcStatementHandler.html" target="_self">DbcStatementHandler</a></td><td class="desc"></td></tr>
|
||||||
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameInfo.html" target="_self">FrameInfo</a></td><td class="desc">Describes one CAN frame from a DBC file </td></tr>
|
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDbcTreeBuilder.html" target="_self">DbcTreeBuilder</a></td><td class="desc">Builds a simple tree from parsed DBC database </td></tr>
|
||||||
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Key for fast frame lookup </td></tr>
|
<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeDatabase.html" target="_self">DecodeDatabase</a></td><td class="desc">Runtime decode database with fast lookup by CAN ID </td></tr>
|
||||||
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKeyHasher.html" target="_self">FrameKeyHasher</a></td><td class="desc">Hasher for frame key </td></tr>
|
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedFrameValue.html" target="_self">DecodedFrameValue</a></td><td class="desc">Fully decoded frame </td></tr>
|
||||||
<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structRawCanFrame.html" target="_self">RawCanFrame</a></td><td class="desc">Raw CAN frame used for runtime or trace decoding </td></tr>
|
<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodedSignalValue.html" target="_self">DecodedSignalValue</a></td><td class="desc">One decoded signal value </td></tr>
|
||||||
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalInfo.html" target="_self">SignalInfo</a></td><td class="desc">Describes one signal inside a DBC frame </td></tr>
|
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeFrame.html" target="_self">DecodeFrame</a></td><td class="desc">Runtime-ready frame definition </td></tr>
|
||||||
<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTreeNode.html" target="_self">TreeNode</a></td><td class="desc">Tree node for later use in model/view or other hierarchy consumers </td></tr>
|
<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structDecodeSignal.html" target="_self">DecodeSignal</a></td><td class="desc">Runtime-ready signal definition </td></tr>
|
||||||
|
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameInfo.html" target="_self">FrameInfo</a></td><td class="desc">Describes one CAN frame from a DBC file </td></tr>
|
||||||
|
<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKey.html" target="_self">FrameKey</a></td><td class="desc">Key for fast frame lookup </td></tr>
|
||||||
|
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFrameKeyHasher.html" target="_self">FrameKeyHasher</a></td><td class="desc">Hasher for frame key </td></tr>
|
||||||
|
<tr id="row_19_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structRawCanFrame.html" target="_self">RawCanFrame</a></td><td class="desc">Raw CAN frame used for runtime or trace decoding </td></tr>
|
||||||
|
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structSignalInfo.html" target="_self">SignalInfo</a></td><td class="desc">Describes one signal inside a DBC frame </td></tr>
|
||||||
|
<tr id="row_21_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTreeNode.html" target="_self">TreeNode</a></td><td class="desc">Tree node for later use in model/view or other hierarchy consumers </td></tr>
|
||||||
|
<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTypeFactory.html" target="_self">TypeFactory</a></td><td class="desc">Registry-based factory for creating objects by runtime identifier </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div><!-- directory -->
|
</div><!-- directory -->
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
@@ -111,7 +125,7 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
var annotated_dup =
|
var annotated_dup =
|
||||||
[
|
[
|
||||||
|
[ "DbcCommentHandler", "classDbcCommentHandler.html", null ],
|
||||||
[ "DbcDatabase", "structDbcDatabase.html", "structDbcDatabase" ],
|
[ "DbcDatabase", "structDbcDatabase.html", "structDbcDatabase" ],
|
||||||
[ "DbcDecodeBuilder", "classDbcDecodeBuilder.html", "classDbcDecodeBuilder" ],
|
[ "DbcDecodeBuilder", "classDbcDecodeBuilder.html", "classDbcDecodeBuilder" ],
|
||||||
[ "DbcDecoder", "classDbcDecoder.html", "classDbcDecoder" ],
|
[ "DbcDecoder", "classDbcDecoder.html", "classDbcDecoder" ],
|
||||||
|
[ "DbcFrameHandler", "classDbcFrameHandler.html", null ],
|
||||||
|
[ "DbcParseContext", "structDbcParseContext.html", null ],
|
||||||
[ "DbcParser", "classDbcParser.html", "classDbcParser" ],
|
[ "DbcParser", "classDbcParser.html", "classDbcParser" ],
|
||||||
|
[ "DbcSignalHandler", "classDbcSignalHandler.html", null ],
|
||||||
|
[ "DbcStatementDispatcher", "classDbcStatementDispatcher.html", "classDbcStatementDispatcher" ],
|
||||||
|
[ "DbcStatementHandler", "classDbcStatementHandler.html", null ],
|
||||||
[ "DbcTreeBuilder", "classDbcTreeBuilder.html", "classDbcTreeBuilder" ],
|
[ "DbcTreeBuilder", "classDbcTreeBuilder.html", "classDbcTreeBuilder" ],
|
||||||
[ "DecodeDatabase", "structDecodeDatabase.html", null ],
|
[ "DecodeDatabase", "structDecodeDatabase.html", null ],
|
||||||
[ "DecodedFrameValue", "structDecodedFrameValue.html", "structDecodedFrameValue" ],
|
[ "DecodedFrameValue", "structDecodedFrameValue.html", "structDecodedFrameValue" ],
|
||||||
@@ -15,5 +21,6 @@ var annotated_dup =
|
|||||||
[ "FrameKeyHasher", "structFrameKeyHasher.html", null ],
|
[ "FrameKeyHasher", "structFrameKeyHasher.html", null ],
|
||||||
[ "RawCanFrame", "structRawCanFrame.html", "structRawCanFrame" ],
|
[ "RawCanFrame", "structRawCanFrame.html", "structRawCanFrame" ],
|
||||||
[ "SignalInfo", "structSignalInfo.html", "structSignalInfo" ],
|
[ "SignalInfo", "structSignalInfo.html", "structSignalInfo" ],
|
||||||
[ "TreeNode", "classTreeNode.html", "classTreeNode" ]
|
[ "TreeNode", "classTreeNode.html", "classTreeNode" ],
|
||||||
|
[ "TypeFactory", "classTypeFactory.html", "classTypeFactory" ]
|
||||||
];
|
];
|
||||||
|
After Width: | Height: | Size: 635 B |
@@ -0,0 +1,110 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: Member List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcCommentHandler.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">DbcCommentHandler Member List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>This is the complete list of members for <a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a>, including all inherited members.</p>
|
||||||
|
<table class="directory">
|
||||||
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &line, DbcParseContext &context) const override (defined in <a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a>)</td><td class="entry"><a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
|
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
|
</table></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: DbcCommentHandler Class Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcCommentHandler.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#pub-methods">Public Member Functions</a> |
|
||||||
|
<a href="classDbcCommentHandler-members.html">List of all members</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">DbcCommentHandler Class Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
|
||||||
|
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcCommentHandler:</div>
|
||||||
|
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
|
||||||
|
</div>
|
||||||
|
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
|
||||||
|
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcCommentHandler__inherit__graph.svg" width="204" height="210"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||||
|
</div>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
|
Public Member Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:aa4fce77b585a441d251d8535ef7a51a6" id="r_aa4fce77b585a441d251d8535ef7a51a6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcCommentHandler.html#aa4fce77b585a441d251d8535ef7a51a6">Handle</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const override</td></tr>
|
||||||
|
<tr class="separator:aa4fce77b585a441d251d8535ef7a51a6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock">
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00038">38</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
|
||||||
|
</div><h2 class="groupheader">Member Function Documentation</h2>
|
||||||
|
<a id="aa4fce77b585a441d251d8535ef7a51a6" name="aa4fce77b585a441d251d8535ef7a51a6"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#aa4fce77b585a441d251d8535ef7a51a6">◆ </a></span>Handle()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">void DbcCommentHandler::Handle </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const std::string & </td>
|
||||||
|
<td class="paramname"><em>line</em>, </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="paramkey"></td>
|
||||||
|
<td></td>
|
||||||
|
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> & </td>
|
||||||
|
<td class="paramname"><em>context</em> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>)</td>
|
||||||
|
<td></td><td> const</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Implements <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>.</p>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00303">303</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr/>The documentation for this class was generated from the following files:<ul>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<map id="DbcCommentHandler" name="DbcCommentHandler">
|
||||||
|
<area shape="rect" id="Node000001" title=" " alt="" coords="25,139,179,204"/>
|
||||||
|
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="5,5,199,91"/>
|
||||||
|
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,104,105,138,99,138,99,104"/>
|
||||||
|
</map>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
031e88596ad00375d87ac04af33f405c
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: DbcCommentHandler Pages: 1 -->
|
||||||
|
<svg width="153pt" height="157pt"
|
||||||
|
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
|
||||||
|
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
|
||||||
|
<style type="text/css"><![CDATA[
|
||||||
|
.node, .edge {opacity: 0.7;}
|
||||||
|
.node.selected, .edge.selected {opacity: 1;}
|
||||||
|
.edge:hover path { stroke: red; }
|
||||||
|
.edge:hover polygon { stroke: red; fill: red; }
|
||||||
|
]]></style>
|
||||||
|
<script type="application/ecmascript" xlink:href="svg.min.js"/>
|
||||||
|
<svg id="graph" class="graph">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
|
||||||
|
<title>DbcCommentHandler</title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title=" ">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="130.5,-49 14.5,-49 14.5,0 130.5,0 130.5,-49"/>
|
||||||
|
<text text-anchor="start" x="19.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcCommentHandler</text>
|
||||||
|
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="31.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="14.5,-31.5 14.5,-31.5 130.5,-31.5 130.5,-31.5 14.5,-31.5"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="14.5,-16.5 14.5,-16.5 130.5,-16.5 130.5,-16.5 14.5,-16.5"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="14.5,0 14.5,-49 130.5,-49 130.5,0 14.5,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
|
||||||
|
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
|
||||||
|
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2->Node1 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node2->Node1</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<style type='text/css'>
|
||||||
|
<![CDATA[
|
||||||
|
[data-mouse-over-selected='false'] { opacity: 0.7; }
|
||||||
|
[data-mouse-over-selected='true'] { opacity: 1.0; }
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
<script type="application/ecmascript"><![CDATA[
|
||||||
|
document.addEventListener('DOMContentLoaded', (event) => {
|
||||||
|
highlightEdges();
|
||||||
|
highlightAdjacentNodes();
|
||||||
|
});
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: DbcCommentHandler Pages: 1 -->
|
||||||
|
<svg width="153pt" height="157pt"
|
||||||
|
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
|
||||||
|
<title>DbcCommentHandler</title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title=" ">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="130.5,-49 14.5,-49 14.5,0 130.5,0 130.5,-49"/>
|
||||||
|
<text text-anchor="start" x="19.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcCommentHandler</text>
|
||||||
|
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="31.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="14.5,-31.5 14.5,-31.5 130.5,-31.5 130.5,-31.5 14.5,-31.5"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="14.5,-16.5 14.5,-16.5 130.5,-16.5 130.5,-16.5 14.5,-16.5"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="14.5,0 14.5,-49 130.5,-49 130.5,0 14.5,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
|
||||||
|
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
|
||||||
|
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2->Node1 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node2->Node1</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: Member List</title>
|
<title>DBC Framework: Member List</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: DbcDecodeBuilder Class Reference</title>
|
<title>DBC Framework: DbcDecodeBuilder Class Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -97,8 +104,8 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
|
|||||||
<table class="memberdecls">
|
<table class="memberdecls">
|
||||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
Public Member Functions</h2></td></tr>
|
Public Member Functions</h2></td></tr>
|
||||||
<tr class="memitem:a2bc6386dfb5e58976c42e22c19ec471b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &source) const</td></tr>
|
<tr class="memitem:a2bc6386dfb5e58976c42e22c19ec471b" id="r_a2bc6386dfb5e58976c42e22c19ec471b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &source) const</td></tr>
|
||||||
<tr class="memdesc:a2bc6386dfb5e58976c42e22c19ec471b"><td class="mdescLeft"> </td><td class="mdescRight">Build runtime decode database. <a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">More...</a><br /></td></tr>
|
<tr class="memdesc:a2bc6386dfb5e58976c42e22c19ec471b"><td class="mdescLeft"> </td><td class="mdescRight">Build runtime decode database. <br /></td></tr>
|
||||||
<tr class="separator:a2bc6386dfb5e58976c42e22c19ec471b"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a2bc6386dfb5e58976c42e22c19ec471b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
@@ -107,7 +114,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8h_source.html#l00021">21</a> of file <a class="el" href="dbc__decode__builder_8h_source.html">dbc_decode_builder.h</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8h_source.html#l00021">21</a> of file <a class="el" href="dbc__decode__builder_8h_source.html">dbc_decode_builder.h</a>.</p>
|
||||||
</div><h2 class="groupheader">Member Function Documentation</h2>
|
</div><h2 class="groupheader">Member Function Documentation</h2>
|
||||||
<a id="a2bc6386dfb5e58976c42e22c19ec471b" name="a2bc6386dfb5e58976c42e22c19ec471b"></a>
|
<a id="a2bc6386dfb5e58976c42e22c19ec471b" name="a2bc6386dfb5e58976c42e22c19ec471b"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a2bc6386dfb5e58976c42e22c19ec471b">◆ </a></span>Build()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a2bc6386dfb5e58976c42e22c19ec471b">◆ </a></span>Build()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -133,7 +140,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8cpp_source.html#l00014">14</a> of file <a class="el" href="dbc__decode__builder_8cpp_source.html">dbc_decode_builder.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="dbc__decode__builder_8cpp_source.html#l00014">14</a> of file <a class="el" href="dbc__decode__builder_8cpp_source.html">dbc_decode_builder.cpp</a>.</p>
|
||||||
|
|
||||||
<p class="reference">References <a class="el" href="decode__database_8h_source.html#l00043">DecodeSignal::byteOrder</a>, <a class="el" href="decode__database_8h_source.html#l00074">DecodeFrame::canId</a>, <a class="el" href="frame__info_8h_source.html#l00026">FrameInfo::canId</a>, <a class="el" href="decode__database_8h_source.html#l00080">DecodeFrame::comment</a>, <a class="el" href="frame__info_8h_source.html#l00032">FrameInfo::comment</a>, <a class="el" href="decode__database_8h_source.html#l00076">DecodeFrame::dlc</a>, <a class="el" href="frame__info_8h_source.html#l00030">FrameInfo::dlc</a>, <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>, <a class="el" href="decode__database_8h_source.html#l00078">DecodeFrame::hasPgn</a>, <a class="el" href="frame__info_8h_source.html#l00029">FrameInfo::hasPgn</a>, <a class="el" href="decode__database_8h_source.html#l00075">DecodeFrame::isExtended</a>, <a class="el" href="frame__info_8h_source.html#l00027">FrameInfo::isExtended</a>, <a class="el" href="signal__info_8h_source.html#l00026">SignalInfo::isLittleEndian</a>, <a class="el" href="decode__database_8h_source.html#l00042">DecodeSignal::length</a>, <a class="el" href="signal__info_8h_source.html#l00025">SignalInfo::length</a>, <a class="el" href="decode__database_8h_source.html#l00040">DecodeSignal::name</a>, <a class="el" href="decode__database_8h_source.html#l00073">DecodeFrame::name</a>, <a class="el" href="frame__info_8h_source.html#l00025">FrameInfo::name</a>, <a class="el" href="signal__info_8h_source.html#l00023">SignalInfo::name</a>, <a class="el" href="decode__database_8h_source.html#l00077">DecodeFrame::pgn</a>, <a class="el" href="frame__info_8h_source.html#l00028">FrameInfo::pgn</a>, <a class="el" href="decode__database_8h_source.html#l00041">DecodeSignal::startBit</a>, <a class="el" href="signal__info_8h_source.html#l00024">SignalInfo::startBit</a>, <a class="el" href="decode__database_8h_source.html#l00079">DecodeFrame::transmitter</a>, and <a class="el" href="frame__info_8h_source.html#l00031">FrameInfo::transmitter</a>.</p>
|
<p class="reference">References <a class="el" href="decode__database_8h_source.html#l00043">DecodeSignal::byteOrder</a>, <a class="el" href="decode__database_8h_source.html#l00063">DecodeFrame::canId</a>, <a class="el" href="frame__info_8h_source.html#l00026">FrameInfo::canId</a>, <a class="el" href="decode__database_8h_source.html#l00051">DecodeSignal::comment</a>, <a class="el" href="decode__database_8h_source.html#l00069">DecodeFrame::comment</a>, <a class="el" href="frame__info_8h_source.html#l00032">FrameInfo::comment</a>, <a class="el" href="signal__info_8h_source.html#l00034">SignalInfo::comment</a>, <a class="el" href="decode__database_8h_source.html#l00065">DecodeFrame::dlc</a>, <a class="el" href="frame__info_8h_source.html#l00030">FrameInfo::dlc</a>, <a class="el" href="decode__database_8h_source.html#l00045">DecodeSignal::factor</a>, <a class="el" href="signal__info_8h_source.html#l00028">SignalInfo::factor</a>, <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>, <a class="el" href="decode__database_8h_source.html#l00067">DecodeFrame::hasPgn</a>, <a class="el" href="frame__info_8h_source.html#l00029">FrameInfo::hasPgn</a>, <a class="el" href="decode__database_8h_source.html#l00064">DecodeFrame::isExtended</a>, <a class="el" href="frame__info_8h_source.html#l00027">FrameInfo::isExtended</a>, <a class="el" href="signal__info_8h_source.html#l00026">SignalInfo::isLittleEndian</a>, <a class="el" href="signal__info_8h_source.html#l00027">SignalInfo::isSigned</a>, <a class="el" href="decode__database_8h_source.html#l00042">DecodeSignal::length</a>, <a class="el" href="signal__info_8h_source.html#l00025">SignalInfo::length</a>, <a class="el" href="decode__database_8h_source.html#l00048">DecodeSignal::maximum</a>, <a class="el" href="signal__info_8h_source.html#l00031">SignalInfo::maximum</a>, <a class="el" href="decode__database_8h_source.html#l00047">DecodeSignal::minimum</a>, <a class="el" href="signal__info_8h_source.html#l00030">SignalInfo::minimum</a>, <a class="el" href="decode__database_8h_source.html#l00040">DecodeSignal::name</a>, <a class="el" href="decode__database_8h_source.html#l00062">DecodeFrame::name</a>, <a class="el" href="frame__info_8h_source.html#l00025">FrameInfo::name</a>, <a class="el" href="signal__info_8h_source.html#l00023">SignalInfo::name</a>, <a class="el" href="decode__database_8h_source.html#l00046">DecodeSignal::offset</a>, <a class="el" href="signal__info_8h_source.html#l00029">SignalInfo::offset</a>, <a class="el" href="decode__database_8h_source.html#l00066">DecodeFrame::pgn</a>, <a class="el" href="frame__info_8h_source.html#l00028">FrameInfo::pgn</a>, <a class="el" href="decode__database_8h_source.html#l00050">DecodeSignal::receivers</a>, <a class="el" href="signal__info_8h_source.html#l00033">SignalInfo::receivers</a>, <a class="el" href="decode__database_8h_source.html#l00041">DecodeSignal::startBit</a>, <a class="el" href="signal__info_8h_source.html#l00024">SignalInfo::startBit</a>, <a class="el" href="decode__database_8h_source.html#l00068">DecodeFrame::transmitter</a>, <a class="el" href="frame__info_8h_source.html#l00031">FrameInfo::transmitter</a>, <a class="el" href="decode__database_8h_source.html#l00049">DecodeSignal::unit</a>, <a class="el" href="signal__info_8h_source.html#l00032">SignalInfo::unit</a>, and <a class="el" href="decode__database_8h_source.html#l00044">DecodeSignal::valueType</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -147,7 +154,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></li>
|
<li class="navelem"><a class="el" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: Member List</title>
|
<title>DBC Framework: Member List</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -96,7 +103,7 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: DbcDecoder Class Reference</title>
|
<title>DBC Framework: DbcDecoder Class Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -97,20 +104,20 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
|
|||||||
<table class="memberdecls">
|
<table class="memberdecls">
|
||||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
Public Member Functions</h2></td></tr>
|
Public Member Functions</h2></td></tr>
|
||||||
<tr class="memitem:ab2cfb2fb711c95d3a29365546b89f3da"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &database, std::uint32_t canId, bool isExtended) const</td></tr>
|
<tr class="memitem:ab2cfb2fb711c95d3a29365546b89f3da" id="r_ab2cfb2fb711c95d3a29365546b89f3da"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structDecodeFrame.html">DecodeFrame</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &database, std::uint32_t canId, bool isExtended) const</td></tr>
|
||||||
<tr class="memdesc:ab2cfb2fb711c95d3a29365546b89f3da"><td class="mdescLeft"> </td><td class="mdescRight">Find frame definition by CAN ID. <a href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">More...</a><br /></td></tr>
|
<tr class="memdesc:ab2cfb2fb711c95d3a29365546b89f3da"><td class="mdescLeft"> </td><td class="mdescRight">Find frame definition by CAN ID. <br /></td></tr>
|
||||||
<tr class="separator:ab2cfb2fb711c95d3a29365546b89f3da"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:ab2cfb2fb711c95d3a29365546b89f3da"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &database, const <a class="el" href="structRawCanFrame.html">RawCanFrame</a> &frame) const</td></tr>
|
<tr class="memitem:a345951ffe5d943a70d3a1ea1f39e74f7" id="r_a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (const <a class="el" href="structDecodeDatabase.html">DecodeDatabase</a> &database, const <a class="el" href="structRawCanFrame.html">RawCanFrame</a> &frame) const</td></tr>
|
||||||
<tr class="memdesc:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="mdescLeft"> </td><td class="mdescRight">Decode one raw CAN frame. <a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">More...</a><br /></td></tr>
|
<tr class="memdesc:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="mdescLeft"> </td><td class="mdescRight">Decode one raw CAN frame. <br /></td></tr>
|
||||||
<tr class="separator:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a345951ffe5d943a70d3a1ea1f39e74f7"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
<div class="textblock"><p>Runtime CAN decoder using prebuilt decode database. </p>
|
<div class="textblock"><p>Runtime CAN decoder using prebuilt decode database. </p>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8h_source.html#l00070">70</a> of file <a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8h_source.html#l00064">64</a> of file <a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>.</p>
|
||||||
</div><h2 class="groupheader">Member Function Documentation</h2>
|
</div><h2 class="groupheader">Member Function Documentation</h2>
|
||||||
<a id="ab2cfb2fb711c95d3a29365546b89f3da" name="ab2cfb2fb711c95d3a29365546b89f3da"></a>
|
<a id="ab2cfb2fb711c95d3a29365546b89f3da" name="ab2cfb2fb711c95d3a29365546b89f3da"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#ab2cfb2fb711c95d3a29365546b89f3da">◆ </a></span>FindFrame()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#ab2cfb2fb711c95d3a29365546b89f3da">◆ </a></span>FindFrame()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -159,7 +166,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="a345951ffe5d943a70d3a1ea1f39e74f7" name="a345951ffe5d943a70d3a1ea1f39e74f7"></a>
|
<a id="a345951ffe5d943a70d3a1ea1f39e74f7" name="a345951ffe5d943a70d3a1ea1f39e74f7"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a345951ffe5d943a70d3a1ea1f39e74f7">◆ </a></span>Decode()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a345951ffe5d943a70d3a1ea1f39e74f7">◆ </a></span>Decode()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -196,7 +203,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00031">31</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="dbc__decoder_8cpp_source.html#l00031">31</a> of file <a class="el" href="dbc__decoder_8cpp_source.html">dbc_decoder.cpp</a>.</p>
|
||||||
|
|
||||||
<p class="reference">References <a class="el" href="dbc__decoder_8h_source.html#l00024">RawCanFrame::canId</a>, <a class="el" href="dbc__decoder_8h_source.html#l00026">RawCanFrame::data</a>, <a class="el" href="dbc__decoder_8h_source.html#l00039">DecodedSignalValue::definition</a>, <a class="el" href="dbc__decoder_8h_source.html#l00056">DecodedFrameValue::definition</a>, <a class="el" href="dbc__decoder_8cpp_source.html#l00014">FindFrame()</a>, <a class="el" href="dbc__decoder_8h_source.html#l00025">RawCanFrame::isExtended</a>, <a class="el" href="dbc__decoder_8h_source.html#l00042">DecodedSignalValue::valid</a>, <a class="el" href="dbc__decoder_8h_source.html#l00058">DecodedFrameValue::valid</a>, and <a class="el" href="decode__database_8h_source.html#l00044">DecodeSignal::valueType</a>.</p>
|
<p class="reference">References <a class="el" href="dbc__decoder_8h_source.html#l00025">RawCanFrame::canId</a>, <a class="el" href="dbc__decoder_8h_source.html#l00027">RawCanFrame::data</a>, <a class="el" href="dbc__decoder_8h_source.html#l00038">DecodedSignalValue::definition</a>, <a class="el" href="dbc__decoder_8h_source.html#l00052">DecodedFrameValue::definition</a>, <a class="el" href="decode__database_8h_source.html#l00045">DecodeSignal::factor</a>, <a class="el" href="dbc__decoder_8cpp_source.html#l00014">FindFrame()</a>, <a class="el" href="dbc__decoder_8h_source.html#l00026">RawCanFrame::isExtended</a>, <a class="el" href="decode__database_8h_source.html#l00042">DecodeSignal::length</a>, <a class="el" href="decode__database_8h_source.html#l00046">DecodeSignal::offset</a>, <a class="el" href="dbc__decoder_8h_source.html#l00040">DecodedSignalValue::physicalValue</a>, <a class="el" href="dbc__decoder_8h_source.html#l00039">DecodedSignalValue::rawValue</a>, <a class="el" href="dbc__decoder_8h_source.html#l00041">DecodedSignalValue::valid</a>, <a class="el" href="dbc__decoder_8h_source.html#l00054">DecodedFrameValue::valid</a>, and <a class="el" href="decode__database_8h_source.html#l00044">DecodeSignal::valueType</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -210,7 +217,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></li>
|
<li class="navelem"><a class="el" href="classDbcDecoder.html">DbcDecoder</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: Member List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcFrameHandler.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">DbcFrameHandler Member List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>This is the complete list of members for <a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a>, including all inherited members.</p>
|
||||||
|
<table class="directory">
|
||||||
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &line, DbcParseContext &context) const override (defined in <a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a>)</td><td class="entry"><a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
|
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
|
</table></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: DbcFrameHandler Class Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcFrameHandler.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#pub-methods">Public Member Functions</a> |
|
||||||
|
<a href="classDbcFrameHandler-members.html">List of all members</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">DbcFrameHandler Class Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
|
||||||
|
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcFrameHandler:</div>
|
||||||
|
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
|
||||||
|
</div>
|
||||||
|
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
|
||||||
|
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcFrameHandler__inherit__graph.svg" width="204" height="210"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||||
|
</div>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
|
Public Member Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:a0d3f43bbcc5e191460bc31827e74ce89" id="r_a0d3f43bbcc5e191460bc31827e74ce89"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcFrameHandler.html#a0d3f43bbcc5e191460bc31827e74ce89">Handle</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const override</td></tr>
|
||||||
|
<tr class="separator:a0d3f43bbcc5e191460bc31827e74ce89"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock">
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00022">22</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
|
||||||
|
</div><h2 class="groupheader">Member Function Documentation</h2>
|
||||||
|
<a id="a0d3f43bbcc5e191460bc31827e74ce89" name="a0d3f43bbcc5e191460bc31827e74ce89"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a0d3f43bbcc5e191460bc31827e74ce89">◆ </a></span>Handle()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">void DbcFrameHandler::Handle </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const std::string & </td>
|
||||||
|
<td class="paramname"><em>line</em>, </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="paramkey"></td>
|
||||||
|
<td></td>
|
||||||
|
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> & </td>
|
||||||
|
<td class="paramname"><em>context</em> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>)</td>
|
||||||
|
<td></td><td> const</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Implements <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>.</p>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00281">281</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr/>The documentation for this class was generated from the following files:<ul>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<map id="DbcFrameHandler" name="DbcFrameHandler">
|
||||||
|
<area shape="rect" id="Node000001" title=" " alt="" coords="37,139,167,204"/>
|
||||||
|
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="5,5,199,91"/>
|
||||||
|
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,104,105,138,99,138,99,104"/>
|
||||||
|
</map>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
e01f0e1a340a0e632ef160180de2de74
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: DbcFrameHandler Pages: 1 -->
|
||||||
|
<svg width="153pt" height="157pt"
|
||||||
|
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
|
||||||
|
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
|
||||||
|
<style type="text/css"><![CDATA[
|
||||||
|
.node, .edge {opacity: 0.7;}
|
||||||
|
.node.selected, .edge.selected {opacity: 1;}
|
||||||
|
.edge:hover path { stroke: red; }
|
||||||
|
.edge:hover polygon { stroke: red; fill: red; }
|
||||||
|
]]></style>
|
||||||
|
<script type="application/ecmascript" xlink:href="svg.min.js"/>
|
||||||
|
<svg id="graph" class="graph">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
|
||||||
|
<title>DbcFrameHandler</title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title=" ">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="121.5,-49 23.5,-49 23.5,0 121.5,0 121.5,-49"/>
|
||||||
|
<text text-anchor="start" x="28.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcFrameHandler</text>
|
||||||
|
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="36" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="23.5,-31.5 23.5,-31.5 121.5,-31.5 121.5,-31.5 23.5,-31.5"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="23.5,-16.5 23.5,-16.5 121.5,-16.5 121.5,-16.5 23.5,-16.5"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="23.5,0 23.5,-49 121.5,-49 121.5,0 23.5,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
|
||||||
|
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
|
||||||
|
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2->Node1 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node2->Node1</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<style type='text/css'>
|
||||||
|
<![CDATA[
|
||||||
|
[data-mouse-over-selected='false'] { opacity: 0.7; }
|
||||||
|
[data-mouse-over-selected='true'] { opacity: 1.0; }
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
<script type="application/ecmascript"><![CDATA[
|
||||||
|
document.addEventListener('DOMContentLoaded', (event) => {
|
||||||
|
highlightEdges();
|
||||||
|
highlightAdjacentNodes();
|
||||||
|
});
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: DbcFrameHandler Pages: 1 -->
|
||||||
|
<svg width="153pt" height="157pt"
|
||||||
|
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
|
||||||
|
<title>DbcFrameHandler</title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title=" ">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="121.5,-49 23.5,-49 23.5,0 121.5,0 121.5,-49"/>
|
||||||
|
<text text-anchor="start" x="28.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcFrameHandler</text>
|
||||||
|
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="36" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="23.5,-31.5 23.5,-31.5 121.5,-31.5 121.5,-31.5 23.5,-31.5"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="23.5,-16.5 23.5,-16.5 121.5,-16.5 121.5,-16.5 23.5,-16.5"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="23.5,0 23.5,-49 121.5,-49 121.5,0 23.5,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
|
||||||
|
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
|
||||||
|
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2->Node1 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node2->Node1</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: Member List</title>
|
<title>DBC Framework: Member List</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: DbcParser Class Reference</title>
|
<title>DBC Framework: DbcParser Class Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -97,8 +104,8 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
|
|||||||
<table class="memberdecls">
|
<table class="memberdecls">
|
||||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
Public Member Functions</h2></td></tr>
|
Public Member Functions</h2></td></tr>
|
||||||
<tr class="memitem:aef72826942c9095d653fafa435855e56"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDbcDatabase.html">DbcDatabase</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a> (const std::string &filePath) const</td></tr>
|
<tr class="memitem:aef72826942c9095d653fafa435855e56" id="r_aef72826942c9095d653fafa435855e56"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDbcDatabase.html">DbcDatabase</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a> (const std::string &filePath) const</td></tr>
|
||||||
<tr class="memdesc:aef72826942c9095d653fafa435855e56"><td class="mdescLeft"> </td><td class="mdescRight">Parse DBC file. <a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">More...</a><br /></td></tr>
|
<tr class="memdesc:aef72826942c9095d653fafa435855e56"><td class="mdescLeft"> </td><td class="mdescRight">Parse DBC file. <br /></td></tr>
|
||||||
<tr class="separator:aef72826942c9095d653fafa435855e56"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:aef72826942c9095d653fafa435855e56"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
@@ -115,10 +122,10 @@ Public Member Functions</h2></td></tr>
|
|||||||
<li>value tables </li>
|
<li>value tables </li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="dbc__parser_8h_source.html#l00035">35</a> of file <a class="el" href="dbc__parser_8h_source.html">dbc_parser.h</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="dbc__parser_8h_source.html#l00033">33</a> of file <a class="el" href="dbc__parser_8h_source.html">dbc_parser.h</a>.</p>
|
||||||
</div><h2 class="groupheader">Member Function Documentation</h2>
|
</div><h2 class="groupheader">Member Function Documentation</h2>
|
||||||
<a id="aef72826942c9095d653fafa435855e56" name="aef72826942c9095d653fafa435855e56"></a>
|
<a id="aef72826942c9095d653fafa435855e56" name="aef72826942c9095d653fafa435855e56"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#aef72826942c9095d653fafa435855e56">◆ </a></span>ParseFile()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#aef72826942c9095d653fafa435855e56">◆ </a></span>ParseFile()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -143,14 +150,14 @@ Public Member Functions</h2></td></tr>
|
|||||||
<dl class="section return"><dt>Returns</dt><dd>Parsed database. </dd></dl>
|
<dl class="section return"><dt>Returns</dt><dd>Parsed database. </dd></dl>
|
||||||
<dl class="exception"><dt>Exceptions</dt><dd>
|
<dl class="exception"><dt>Exceptions</dt><dd>
|
||||||
<table class="exception">
|
<table class="exception">
|
||||||
<tr><td class="paramname">std::runtime_error</td><td>on file or parse errors. </td></tr>
|
<tr><td class="paramname">std::runtime_error</td><td>on file or parse errors. Line parse errors include the file path and one-based line number. </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="dbc__parser_8cpp_source.html#l00040">40</a> of file <a class="el" href="dbc__parser_8cpp_source.html">dbc_parser.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="dbc__parser_8cpp_source.html#l00040">40</a> of file <a class="el" href="dbc__parser_8cpp_source.html">dbc_parser.cpp</a>.</p>
|
||||||
|
|
||||||
<p class="reference">References <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>.</p>
|
<p class="reference">References <a class="el" href="dbc__statement__handler_8cpp_source.html#l00314">DbcStatementDispatcher::Dispatch()</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -164,7 +171,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="classDbcParser.html">DbcParser</a></li>
|
<li class="navelem"><a class="el" href="classDbcParser.html">DbcParser</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: Member List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcSignalHandler.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">DbcSignalHandler Member List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>This is the complete list of members for <a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a>, including all inherited members.</p>
|
||||||
|
<table class="directory">
|
||||||
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &line, DbcParseContext &context) const override (defined in <a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a>)</td><td class="entry"><a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
|
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
|
</table></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: DbcSignalHandler Class Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcSignalHandler.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#pub-methods">Public Member Functions</a> |
|
||||||
|
<a href="classDbcSignalHandler-members.html">List of all members</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">DbcSignalHandler Class Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
|
||||||
|
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcSignalHandler:</div>
|
||||||
|
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
|
||||||
|
</div>
|
||||||
|
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
|
||||||
|
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcSignalHandler__inherit__graph.svg" width="204" height="210"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||||
|
</div>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
|
Public Member Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:ad7d891ec1414fb645f85ccd410f2737b" id="r_ad7d891ec1414fb645f85ccd410f2737b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcSignalHandler.html#ad7d891ec1414fb645f85ccd410f2737b">Handle</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const override</td></tr>
|
||||||
|
<tr class="separator:ad7d891ec1414fb645f85ccd410f2737b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock">
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00030">30</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
|
||||||
|
</div><h2 class="groupheader">Member Function Documentation</h2>
|
||||||
|
<a id="ad7d891ec1414fb645f85ccd410f2737b" name="ad7d891ec1414fb645f85ccd410f2737b"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#ad7d891ec1414fb645f85ccd410f2737b">◆ </a></span>Handle()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">void DbcSignalHandler::Handle </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const std::string & </td>
|
||||||
|
<td class="paramname"><em>line</em>, </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="paramkey"></td>
|
||||||
|
<td></td>
|
||||||
|
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> & </td>
|
||||||
|
<td class="paramname"><em>context</em> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>)</td>
|
||||||
|
<td></td><td> const</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Implements <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>.</p>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00286">286</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr/>The documentation for this class was generated from the following files:<ul>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<map id="DbcSignalHandler" name="DbcSignalHandler">
|
||||||
|
<area shape="rect" id="Node000001" title=" " alt="" coords="37,139,167,204"/>
|
||||||
|
<area shape="rect" id="Node000002" href="$classDbcStatementHandler.html" title=" " alt="" coords="5,5,199,91"/>
|
||||||
|
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="105,104,105,138,99,138,99,104"/>
|
||||||
|
</map>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
9f75986e6e276d126dcdd20bd25bc7f7
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: DbcSignalHandler Pages: 1 -->
|
||||||
|
<svg width="153pt" height="157pt"
|
||||||
|
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
|
||||||
|
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
|
||||||
|
<style type="text/css"><![CDATA[
|
||||||
|
.node, .edge {opacity: 0.7;}
|
||||||
|
.node.selected, .edge.selected {opacity: 1;}
|
||||||
|
.edge:hover path { stroke: red; }
|
||||||
|
.edge:hover polygon { stroke: red; fill: red; }
|
||||||
|
]]></style>
|
||||||
|
<script type="application/ecmascript" xlink:href="svg.min.js"/>
|
||||||
|
<svg id="graph" class="graph">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
|
||||||
|
<title>DbcSignalHandler</title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title=" ">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="121.5,-49 23.5,-49 23.5,0 121.5,0 121.5,-49"/>
|
||||||
|
<text text-anchor="start" x="28.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
|
||||||
|
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="36" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="23.5,-31.5 23.5,-31.5 121.5,-31.5 121.5,-31.5 23.5,-31.5"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="23.5,-16.5 23.5,-16.5 121.5,-16.5 121.5,-16.5 23.5,-16.5"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="23.5,0 23.5,-49 121.5,-49 121.5,0 23.5,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
|
||||||
|
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
|
||||||
|
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2->Node1 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node2->Node1</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<style type='text/css'>
|
||||||
|
<![CDATA[
|
||||||
|
[data-mouse-over-selected='false'] { opacity: 0.7; }
|
||||||
|
[data-mouse-over-selected='true'] { opacity: 1.0; }
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
<script type="application/ecmascript"><![CDATA[
|
||||||
|
document.addEventListener('DOMContentLoaded', (event) => {
|
||||||
|
highlightEdges();
|
||||||
|
highlightAdjacentNodes();
|
||||||
|
});
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: DbcSignalHandler Pages: 1 -->
|
||||||
|
<svg width="153pt" height="157pt"
|
||||||
|
viewBox="0.00 0.00 153.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
|
||||||
|
<title>DbcSignalHandler</title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title=" ">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="121.5,-49 23.5,-49 23.5,0 121.5,0 121.5,-49"/>
|
||||||
|
<text text-anchor="start" x="28.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
|
||||||
|
<text text-anchor="start" x="70.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="36" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="57.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="23.5,-31.5 23.5,-31.5 121.5,-31.5 121.5,-31.5 23.5,-31.5"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="23.5,-16.5 23.5,-16.5 121.5,-16.5 121.5,-16.5 23.5,-16.5"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="23.5,0 23.5,-49 121.5,-49 121.5,0 23.5,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:href="classDbcStatementHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="145,-149 0,-149 0,-85 145,-85 145,-149"/>
|
||||||
|
<text text-anchor="start" x="18.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
|
||||||
|
<text text-anchor="start" x="71" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-92" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-132 0.5,-132 145.5,-132 145.5,-132 0.5,-132"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-117 0.5,-117 145.5,-117 145.5,-117 0.5,-117"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="0,-85 0,-149 145,-149 145,-85 0,-85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2->Node1 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node2->Node1</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M72.5,-74.77C72.5,-66.03 72.5,-57.09 72.5,-49.27"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="69,-74.85 72.5,-84.86 76,-74.86 69,-74.85"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,111 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: Member List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcStatementDispatcher.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">DbcStatementDispatcher Member List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>This is the complete list of members for <a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a>, including all inherited members.</p>
|
||||||
|
<table class="directory">
|
||||||
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DbcStatementDispatcher</b>() (defined in <a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a>)</td><td class="entry"><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></td><td class="entry"></td></tr>
|
||||||
|
<tr class="odd"><td class="entry"><a class="el" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(const std::string &line, DbcParseContext &context) const</td><td class="entry"><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></td><td class="entry"></td></tr>
|
||||||
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RegisterType</b>(const std::string &keyword) (defined in <a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a>)</td><td class="entry"><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||||
|
</table></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,212 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: DbcStatementDispatcher Class Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcStatementDispatcher.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#pub-methods">Public Member Functions</a> |
|
||||||
|
<a href="classDbcStatementDispatcher-members.html">List of all members</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">DbcStatementDispatcher Class Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><code>#include <<a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>></code></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
|
Public Member Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:a2c6e9a614ed747275d43bcccc50d0b2d" id="r_a2c6e9a614ed747275d43bcccc50d0b2d"><td class="memTemplParams" colspan="2">template<class Handler > </td></tr>
|
||||||
|
<tr class="memitem:a2c6e9a614ed747275d43bcccc50d0b2d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classDbcStatementDispatcher.html#a2c6e9a614ed747275d43bcccc50d0b2d">RegisterType</a> (const std::string &keyword)</td></tr>
|
||||||
|
<tr class="separator:a2c6e9a614ed747275d43bcccc50d0b2d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a495c2d5c7ebb8103b1987cdd87c142ed" id="r_a495c2d5c7ebb8103b1987cdd87c142ed"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const</td></tr>
|
||||||
|
<tr class="separator:a495c2d5c7ebb8103b1987cdd87c142ed"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p>Exact-key dispatch to handlers created once per registration via <a class="el" href="classTypeFactory.html" title="Registry-based factory for creating objects by runtime identifier.">TypeFactory</a>. </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00047">47</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
|
||||||
|
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
||||||
|
<a id="a2f064359b59d8644b8a8196653d47482" name="a2f064359b59d8644b8a8196653d47482"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a2f064359b59d8644b8a8196653d47482">◆ </a></span>DbcStatementDispatcher()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">DbcStatementDispatcher::DbcStatementDispatcher </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramname"></td><td>)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">308</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h2 class="groupheader">Member Function Documentation</h2>
|
||||||
|
<a id="a2c6e9a614ed747275d43bcccc50d0b2d" name="a2c6e9a614ed747275d43bcccc50d0b2d"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a2c6e9a614ed747275d43bcccc50d0b2d">◆ </a></span>RegisterType()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class Handler > </div>
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">void DbcStatementDispatcher::RegisterType </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const std::string & </td>
|
||||||
|
<td class="paramname"><em>keyword</em></td><td>)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00052">52</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="a495c2d5c7ebb8103b1987cdd87c142ed" name="a495c2d5c7ebb8103b1987cdd87c142ed"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a495c2d5c7ebb8103b1987cdd87c142ed">◆ </a></span>Dispatch()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">bool DbcStatementDispatcher::Dispatch </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const std::string & </td>
|
||||||
|
<td class="paramname"><em>line</em>, </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="paramkey"></td>
|
||||||
|
<td></td>
|
||||||
|
<td class="paramtype"><a class="el" href="structDbcParseContext.html">DbcParseContext</a> & </td>
|
||||||
|
<td class="paramname"><em>context</em> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>)</td>
|
||||||
|
<td></td><td> const</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
<p>Returns false for an unregistered keyword; input must be trimmed. </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00314">314</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
|
||||||
|
|
||||||
|
<p class="reference">Referenced by <a class="el" href="dbc__parser_8cpp_source.html#l00040">DbcParser::ParseFile()</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr/>The documentation for this class was generated from the following files:<ul>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
var classDbcStatementDispatcher =
|
||||||
|
[
|
||||||
|
[ "Dispatch", "classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed", null ]
|
||||||
|
];
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: Member List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcStatementHandler.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">DbcStatementHandler Member List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>This is the complete list of members for <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>, including all inherited members.</p>
|
||||||
|
<table class="directory">
|
||||||
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(const std::string &line, DbcParseContext &context) const =0 (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
|
||||||
|
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~DbcStatementHandler</b>()=default (defined in <a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a>)</td><td class="entry"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
|
||||||
|
</table></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: DbcStatementHandler Class Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classDbcStatementHandler.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#pub-methods">Public Member Functions</a> |
|
||||||
|
<a href="classDbcStatementHandler-members.html">List of all members</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">DbcStatementHandler Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
|
||||||
|
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for DbcStatementHandler:</div>
|
||||||
|
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
|
||||||
|
</div>
|
||||||
|
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
|
||||||
|
<div class="center"><iframe scrolling="no" frameborder="0" src="classDbcStatementHandler__inherit__graph.svg" width="648" height="250"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||||
|
</div>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
|
Public Member Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:a3de86e1e27e9bcb0fe6f1460a8ba5739" id="r_a3de86e1e27e9bcb0fe6f1460a8ba5739"><td class="memItemLeft" align="right" valign="top"><a id="a3de86e1e27e9bcb0fe6f1460a8ba5739" name="a3de86e1e27e9bcb0fe6f1460a8ba5739"></a>
|
||||||
|
virtual void </td><td class="memItemRight" valign="bottom"><b>Handle</b> (const std::string &line, <a class="el" href="structDbcParseContext.html">DbcParseContext</a> &context) const =0</td></tr>
|
||||||
|
<tr class="separator:a3de86e1e27e9bcb0fe6f1460a8ba5739"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock">
|
||||||
|
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00016">16</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
|
||||||
|
</div><hr/>The documentation for this class was generated from the following file:<ul>
|
||||||
|
<li><a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<map id="DbcStatementHandler" name="DbcStatementHandler">
|
||||||
|
<area shape="rect" id="Node000001" title=" " alt="" coords="241,5,435,91"/>
|
||||||
|
<area shape="rect" id="Node000002" title=" " alt="" coords="5,139,153,244"/>
|
||||||
|
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="245,99,167,141,155,148,152,143,165,136,243,95"/>
|
||||||
|
<area shape="rect" id="Node000003" href="$classDbcCommentHandler.html" title=" " alt="" coords="178,159,333,224"/>
|
||||||
|
<area shape="poly" id="edge2_Node000001_Node000003" title=" " alt="" coords="309,104,276,160,272,157,304,101"/>
|
||||||
|
<area shape="rect" id="Node000004" href="$classDbcFrameHandler.html" title=" " alt="" coords="357,159,487,224"/>
|
||||||
|
<area shape="poly" id="edge3_Node000001_Node000004" title=" " alt="" coords="372,101,405,157,401,160,367,104"/>
|
||||||
|
<area shape="rect" id="Node000005" href="$classDbcSignalHandler.html" title=" " alt="" coords="511,159,642,224"/>
|
||||||
|
<area shape="poly" id="edge4_Node000001_Node000005" title=" " alt="" coords="429,95,501,136,532,156,529,161,498,141,427,100"/>
|
||||||
|
</map>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
318e71b72eb76e120faf9a4f760373e7
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: DbcStatementHandler Pages: 1 -->
|
||||||
|
<svg width="486pt" height="187pt"
|
||||||
|
viewBox="0.00 0.00 485.50 187.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
|
||||||
|
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
|
||||||
|
<style type="text/css"><![CDATA[
|
||||||
|
.node, .edge {opacity: 0.7;}
|
||||||
|
.node.selected, .edge.selected {opacity: 1;}
|
||||||
|
.edge:hover path { stroke: red; }
|
||||||
|
.edge:hover polygon { stroke: red; fill: red; }
|
||||||
|
]]></style>
|
||||||
|
<script type="application/ecmascript" xlink:href="svg.min.js"/>
|
||||||
|
<svg id="graph" class="graph">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 183)">
|
||||||
|
<title>DbcStatementHandler</title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title=" ">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="322,-179 177,-179 177,-115 322,-115 322,-179"/>
|
||||||
|
<text text-anchor="start" x="195.5" y="-167" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
|
||||||
|
<text text-anchor="start" x="248" y="-152" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="181.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="194.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
|
||||||
|
<text text-anchor="start" x="181.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="194.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="177.5,-162 177.5,-162 322.5,-162 322.5,-162 177.5,-162"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="177.5,-147 177.5,-147 322.5,-147 322.5,-147 177.5,-147"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="177,-115 177,-179 322,-179 322,-115 177,-115"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="111,-79 0,-79 0,0 111,0 111,-79"/>
|
||||||
|
<text text-anchor="start" x="15" y="-66.5" font-family="Helvetica,sans-Serif" font-size="10.00">CountingHandler</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">instances</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">calls</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">CountingHandler()</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-61.5 0.5,-61.5 111.5,-61.5 111.5,-61.5 0.5,-61.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-31.5 0.5,-31.5 15.5,-31.5 15.5,-31.5 0.5,-31.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="15.5,-31.5 15.5,-31.5 111.5,-31.5 111.5,-31.5 15.5,-31.5"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="0,0 0,-79 111,-79 111,0 0,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node2 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node1->Node2</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M179.14,-110.36C160,-100.42 139.36,-89.47 120.5,-79 117.4,-77.28 114.24,-75.5 111.05,-73.68"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="177.61,-113.51 188.1,-115 180.83,-107.29 177.61,-113.51"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node3 -->
|
||||||
|
<g id="Node000003" class="node">
|
||||||
|
<title>Node3</title>
|
||||||
|
<g id="a_Node000003"><a xlink:href="classDbcCommentHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="245.5,-64 129.5,-64 129.5,-15 245.5,-15 245.5,-64"/>
|
||||||
|
<text text-anchor="start" x="134.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcCommentHandler</text>
|
||||||
|
<text text-anchor="start" x="185.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="146.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="172.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="129.5,-46.5 129.5,-46.5 245.5,-46.5 245.5,-46.5 129.5,-46.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="129.5,-31.5 129.5,-31.5 245.5,-31.5 245.5,-31.5 129.5,-31.5"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="129.5,-15 129.5,-64 245.5,-64 245.5,-15 129.5,-15"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node3 -->
|
||||||
|
<g id="edge2_Node000001_Node000003" class="edge">
|
||||||
|
<title>Node1->Node3</title>
|
||||||
|
<g id="a_edge2_Node000001_Node000003"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M225.95,-105.93C217.71,-91.9 208.72,-76.61 201.51,-64.33"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="223.15,-108.07 231.23,-114.92 229.18,-104.52 223.15,-108.07"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node4 -->
|
||||||
|
<g id="Node000004" class="node">
|
||||||
|
<title>Node4</title>
|
||||||
|
<g id="a_Node000004"><a xlink:href="classDbcFrameHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="361.5,-64 263.5,-64 263.5,-15 361.5,-15 361.5,-64"/>
|
||||||
|
<text text-anchor="start" x="268.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcFrameHandler</text>
|
||||||
|
<text text-anchor="start" x="310.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="276" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="297.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="263.5,-46.5 263.5,-46.5 361.5,-46.5 361.5,-46.5 263.5,-46.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="263.5,-31.5 263.5,-31.5 361.5,-31.5 361.5,-31.5 263.5,-31.5"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="263.5,-15 263.5,-64 361.5,-64 361.5,-15 263.5,-15"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node4 -->
|
||||||
|
<g id="edge3_Node000001_Node000004" class="edge">
|
||||||
|
<title>Node1->Node4</title>
|
||||||
|
<g id="a_edge3_Node000001_Node000004"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M273.19,-106.33C281.63,-92.19 290.87,-76.72 298.27,-64.33"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="270.18,-104.54 268.06,-114.92 276.19,-108.13 270.18,-104.54"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node5 -->
|
||||||
|
<g id="Node000005" class="node">
|
||||||
|
<title>Node5</title>
|
||||||
|
<g id="a_Node000005"><a xlink:href="classDbcSignalHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="477.5,-64 379.5,-64 379.5,-15 477.5,-15 477.5,-64"/>
|
||||||
|
<text text-anchor="start" x="384.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
|
||||||
|
<text text-anchor="start" x="426.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="392" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="413.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="379.5,-46.5 379.5,-46.5 477.5,-46.5 477.5,-46.5 379.5,-46.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="379.5,-31.5 379.5,-31.5 477.5,-31.5 477.5,-31.5 379.5,-31.5"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="379.5,-15 379.5,-64 477.5,-64 477.5,-15 379.5,-15"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node5 -->
|
||||||
|
<g id="edge4_Node000001_Node000005" class="edge">
|
||||||
|
<title>Node1->Node5</title>
|
||||||
|
<g id="a_edge4_Node000001_Node000005"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M316.97,-109.9C334.55,-100.14 353.37,-89.4 370.5,-79 378.14,-74.36 386.22,-69.18 393.83,-64.17"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="314.96,-107 307.9,-114.9 318.34,-113.13 314.96,-107"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<style type='text/css'>
|
||||||
|
<![CDATA[
|
||||||
|
[data-mouse-over-selected='false'] { opacity: 0.7; }
|
||||||
|
[data-mouse-over-selected='true'] { opacity: 1.0; }
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
<script type="application/ecmascript"><![CDATA[
|
||||||
|
document.addEventListener('DOMContentLoaded', (event) => {
|
||||||
|
highlightEdges();
|
||||||
|
highlightAdjacentNodes();
|
||||||
|
});
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.8 KiB |
@@ -0,0 +1,131 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: DbcStatementHandler Pages: 1 -->
|
||||||
|
<svg width="486pt" height="187pt"
|
||||||
|
viewBox="0.00 0.00 485.50 187.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 183)">
|
||||||
|
<title>DbcStatementHandler</title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title=" ">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="322,-179 177,-179 177,-115 322,-115 322,-179"/>
|
||||||
|
<text text-anchor="start" x="195.5" y="-167" font-family="Helvetica,sans-Serif" font-size="10.00">DbcStatementHandler</text>
|
||||||
|
<text text-anchor="start" x="248" y="-152" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="181.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="194.5" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00">~DbcStatementHandler()</text>
|
||||||
|
<text text-anchor="start" x="181.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="194.5" y="-122" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="177.5,-162 177.5,-162 322.5,-162 322.5,-162 177.5,-162"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="177.5,-147 177.5,-147 322.5,-147 322.5,-147 177.5,-147"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="177,-115 177,-179 322,-179 322,-115 177,-115"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="111,-79 0,-79 0,0 111,0 111,-79"/>
|
||||||
|
<text text-anchor="start" x="15" y="-66.5" font-family="Helvetica,sans-Serif" font-size="10.00">CountingHandler</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">instances</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00">calls</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">CountingHandler()</text>
|
||||||
|
<text text-anchor="start" x="4.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="17.5" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-61.5 0.5,-61.5 111.5,-61.5 111.5,-61.5 0.5,-61.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="0.5,-31.5 0.5,-31.5 15.5,-31.5 15.5,-31.5 0.5,-31.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="15.5,-31.5 15.5,-31.5 111.5,-31.5 111.5,-31.5 15.5,-31.5"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="0,0 0,-79 111,-79 111,0 0,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node2 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node1->Node2</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M179.14,-110.36C160,-100.42 139.36,-89.47 120.5,-79 117.4,-77.28 114.24,-75.5 111.05,-73.68"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="177.61,-113.51 188.1,-115 180.83,-107.29 177.61,-113.51"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node3 -->
|
||||||
|
<g id="Node000003" class="node">
|
||||||
|
<title>Node3</title>
|
||||||
|
<g id="a_Node000003"><a xlink:href="classDbcCommentHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="245.5,-64 129.5,-64 129.5,-15 245.5,-15 245.5,-64"/>
|
||||||
|
<text text-anchor="start" x="134.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcCommentHandler</text>
|
||||||
|
<text text-anchor="start" x="185.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="146.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="172.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="129.5,-46.5 129.5,-46.5 245.5,-46.5 245.5,-46.5 129.5,-46.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="129.5,-31.5 129.5,-31.5 245.5,-31.5 245.5,-31.5 129.5,-31.5"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="129.5,-15 129.5,-64 245.5,-64 245.5,-15 129.5,-15"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node3 -->
|
||||||
|
<g id="edge2_Node000001_Node000003" class="edge">
|
||||||
|
<title>Node1->Node3</title>
|
||||||
|
<g id="a_edge2_Node000001_Node000003"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M225.95,-105.93C217.71,-91.9 208.72,-76.61 201.51,-64.33"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="223.15,-108.07 231.23,-114.92 229.18,-104.52 223.15,-108.07"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node4 -->
|
||||||
|
<g id="Node000004" class="node">
|
||||||
|
<title>Node4</title>
|
||||||
|
<g id="a_Node000004"><a xlink:href="classDbcFrameHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="361.5,-64 263.5,-64 263.5,-15 361.5,-15 361.5,-64"/>
|
||||||
|
<text text-anchor="start" x="268.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcFrameHandler</text>
|
||||||
|
<text text-anchor="start" x="310.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="276" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="297.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="263.5,-46.5 263.5,-46.5 361.5,-46.5 361.5,-46.5 263.5,-46.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="263.5,-31.5 263.5,-31.5 361.5,-31.5 361.5,-31.5 263.5,-31.5"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="263.5,-15 263.5,-64 361.5,-64 361.5,-15 263.5,-15"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node4 -->
|
||||||
|
<g id="edge3_Node000001_Node000004" class="edge">
|
||||||
|
<title>Node1->Node4</title>
|
||||||
|
<g id="a_edge3_Node000001_Node000004"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M273.19,-106.33C281.63,-92.19 290.87,-76.72 298.27,-64.33"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="270.18,-104.54 268.06,-114.92 276.19,-108.13 270.18,-104.54"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node5 -->
|
||||||
|
<g id="Node000005" class="node">
|
||||||
|
<title>Node5</title>
|
||||||
|
<g id="a_Node000005"><a xlink:href="classDbcSignalHandler.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="477.5,-64 379.5,-64 379.5,-15 477.5,-15 477.5,-64"/>
|
||||||
|
<text text-anchor="start" x="384.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">DbcSignalHandler</text>
|
||||||
|
<text text-anchor="start" x="426.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
|
||||||
|
<text text-anchor="start" x="392" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="413.5" y="-21.5" font-family="Helvetica,sans-Serif" font-size="10.00">Handle()</text>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="379.5,-46.5 379.5,-46.5 477.5,-46.5 477.5,-46.5 379.5,-46.5"/>
|
||||||
|
<polygon fill="#bfbfbf" stroke="#bfbfbf" points="379.5,-31.5 379.5,-31.5 477.5,-31.5 477.5,-31.5 379.5,-31.5"/>
|
||||||
|
<polygon fill="none" stroke="#bfbfbf" points="379.5,-15 379.5,-64 477.5,-64 477.5,-15 379.5,-15"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node5 -->
|
||||||
|
<g id="edge4_Node000001_Node000005" class="edge">
|
||||||
|
<title>Node1->Node5</title>
|
||||||
|
<g id="a_edge4_Node000001_Node000005"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="#63b8ff" d="M316.97,-109.9C334.55,-100.14 353.37,-89.4 370.5,-79 378.14,-74.36 386.22,-69.18 393.83,-64.17"/>
|
||||||
|
<polygon fill="none" stroke="#63b8ff" points="314.96,-107 307.9,-114.9 318.34,-113.13 314.96,-107"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.0 KiB |
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: Member List</title>
|
<title>DBC Framework: Member List</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: DbcTreeBuilder Class Reference</title>
|
<title>DBC Framework: DbcTreeBuilder Class Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -97,8 +104,8 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
|
|||||||
<table class="memberdecls">
|
<table class="memberdecls">
|
||||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
Public Member Functions</h2></td></tr>
|
Public Member Functions</h2></td></tr>
|
||||||
<tr class="memitem:a7e57d067d831b14b383947fd125edd4b"><td class="memItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classTreeNode.html">TreeNode</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &database) const</td></tr>
|
<tr class="memitem:a7e57d067d831b14b383947fd125edd4b" id="r_a7e57d067d831b14b383947fd125edd4b"><td class="memItemLeft" align="right" valign="top">std::unique_ptr< <a class="el" href="classTreeNode.html">TreeNode</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a> (const <a class="el" href="structDbcDatabase.html">DbcDatabase</a> &database) const</td></tr>
|
||||||
<tr class="memdesc:a7e57d067d831b14b383947fd125edd4b"><td class="mdescLeft"> </td><td class="mdescRight">Build tree representation of parsed DBC data. <a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">More...</a><br /></td></tr>
|
<tr class="memdesc:a7e57d067d831b14b383947fd125edd4b"><td class="mdescLeft"> </td><td class="mdescRight">Build tree representation of parsed DBC data. <br /></td></tr>
|
||||||
<tr class="separator:a7e57d067d831b14b383947fd125edd4b"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a7e57d067d831b14b383947fd125edd4b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
@@ -107,7 +114,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<p class="definition">Definition at line <a class="el" href="dbc__tree__builder_8h_source.html#l00023">23</a> of file <a class="el" href="dbc__tree__builder_8h_source.html">dbc_tree_builder.h</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="dbc__tree__builder_8h_source.html#l00023">23</a> of file <a class="el" href="dbc__tree__builder_8h_source.html">dbc_tree_builder.h</a>.</p>
|
||||||
</div><h2 class="groupheader">Member Function Documentation</h2>
|
</div><h2 class="groupheader">Member Function Documentation</h2>
|
||||||
<a id="a7e57d067d831b14b383947fd125edd4b" name="a7e57d067d831b14b383947fd125edd4b"></a>
|
<a id="a7e57d067d831b14b383947fd125edd4b" name="a7e57d067d831b14b383947fd125edd4b"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a7e57d067d831b14b383947fd125edd4b">◆ </a></span>Build()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a7e57d067d831b14b383947fd125edd4b">◆ </a></span>Build()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -147,7 +154,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="classDbcTreeBuilder.html">DbcTreeBuilder</a></li>
|
<li class="navelem"><a class="el" href="classDbcTreeBuilder.html">DbcTreeBuilder</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: Member List</title>
|
<title>DBC Framework: Member List</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -110,7 +117,7 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: TreeNode Class Reference</title>
|
<title>DBC Framework: TreeNode Class Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -97,50 +104,50 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable
|
|||||||
<table class="memberdecls">
|
<table class="memberdecls">
|
||||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
Public Member Functions</h2></td></tr>
|
Public Member Functions</h2></td></tr>
|
||||||
<tr class="memitem:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">TreeNode</a> ()</td></tr>
|
<tr class="memitem:a984a98d5ccf7ef1f5a18094c6821f35d" id="r_a984a98d5ccf7ef1f5a18094c6821f35d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">TreeNode</a> ()</td></tr>
|
||||||
<tr class="memdesc:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="mdescLeft"> </td><td class="mdescRight">Create root node. <a href="classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d">More...</a><br /></td></tr>
|
<tr class="memdesc:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="mdescLeft"> </td><td class="mdescRight">Create root node. <br /></td></tr>
|
||||||
<tr class="separator:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a984a98d5ccf7ef1f5a18094c6821f35d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">TreeNode</a> (const <a class="el" href="structFrameInfo.html">FrameInfo</a> &frame)</td></tr>
|
<tr class="memitem:a8e38dd591d8801d7ee3a7dbad90c67fc" id="r_a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">TreeNode</a> (const <a class="el" href="structFrameInfo.html">FrameInfo</a> &frame)</td></tr>
|
||||||
<tr class="memdesc:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="mdescLeft"> </td><td class="mdescRight">Create frame node. <a href="classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc">More...</a><br /></td></tr>
|
<tr class="memdesc:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="mdescLeft"> </td><td class="mdescRight">Create frame node. <br /></td></tr>
|
||||||
<tr class="separator:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a8e38dd591d8801d7ee3a7dbad90c67fc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:ab9f00f5253d56461bb2d420fd639c5ae"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">TreeNode</a> (const <a class="el" href="structSignalInfo.html">SignalInfo</a> &signal)</td></tr>
|
<tr class="memitem:ab9f00f5253d56461bb2d420fd639c5ae" id="r_ab9f00f5253d56461bb2d420fd639c5ae"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">TreeNode</a> (const <a class="el" href="structSignalInfo.html">SignalInfo</a> &signal)</td></tr>
|
||||||
<tr class="memdesc:ab9f00f5253d56461bb2d420fd639c5ae"><td class="mdescLeft"> </td><td class="mdescRight">Create signal node. <a href="classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae">More...</a><br /></td></tr>
|
<tr class="memdesc:ab9f00f5253d56461bb2d420fd639c5ae"><td class="mdescLeft"> </td><td class="mdescRight">Create signal node. <br /></td></tr>
|
||||||
<tr class="separator:ab9f00f5253d56461bb2d420fd639c5ae"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:ab9f00f5253d56461bb2d420fd639c5ae"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a4d3054a033accf3e38ea132002fc35ff"><td class="memItemLeft" align="right" valign="top"><a id="a4d3054a033accf3e38ea132002fc35ff" name="a4d3054a033accf3e38ea132002fc35ff"></a>
|
<tr class="memitem:a4d3054a033accf3e38ea132002fc35ff" id="r_a4d3054a033accf3e38ea132002fc35ff"><td class="memItemLeft" align="right" valign="top"><a id="a4d3054a033accf3e38ea132002fc35ff" name="a4d3054a033accf3e38ea132002fc35ff"></a>
|
||||||
 </td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (const <a class="el" href="classTreeNode.html">TreeNode</a> &)=delete</td></tr>
|
 </td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (const <a class="el" href="classTreeNode.html">TreeNode</a> &)=delete</td></tr>
|
||||||
<tr class="separator:a4d3054a033accf3e38ea132002fc35ff"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a4d3054a033accf3e38ea132002fc35ff"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:ad6ce97dcf532b452d520452b6d000daa"><td class="memItemLeft" align="right" valign="top"><a id="ad6ce97dcf532b452d520452b6d000daa" name="ad6ce97dcf532b452d520452b6d000daa"></a>
|
<tr class="memitem:ad6ce97dcf532b452d520452b6d000daa" id="r_ad6ce97dcf532b452d520452b6d000daa"><td class="memItemLeft" align="right" valign="top"><a id="ad6ce97dcf532b452d520452b6d000daa" name="ad6ce97dcf532b452d520452b6d000daa"></a>
|
||||||
<a class="el" href="classTreeNode.html">TreeNode</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classTreeNode.html">TreeNode</a> &)=delete</td></tr>
|
<a class="el" href="classTreeNode.html">TreeNode</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classTreeNode.html">TreeNode</a> &)=delete</td></tr>
|
||||||
<tr class="separator:ad6ce97dcf532b452d520452b6d000daa"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:ad6ce97dcf532b452d520452b6d000daa"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a35724af755b5d0c43de40a723ef81ec1"><td class="memItemLeft" align="right" valign="top"><a id="a35724af755b5d0c43de40a723ef81ec1" name="a35724af755b5d0c43de40a723ef81ec1"></a>
|
<tr class="memitem:a35724af755b5d0c43de40a723ef81ec1" id="r_a35724af755b5d0c43de40a723ef81ec1"><td class="memItemLeft" align="right" valign="top"><a id="a35724af755b5d0c43de40a723ef81ec1" name="a35724af755b5d0c43de40a723ef81ec1"></a>
|
||||||
 </td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &&)=default</td></tr>
|
 </td><td class="memItemRight" valign="bottom"><b>TreeNode</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &&)=default</td></tr>
|
||||||
<tr class="separator:a35724af755b5d0c43de40a723ef81ec1"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a35724af755b5d0c43de40a723ef81ec1"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a88fbcbec9c64d888b19c5edb95059a95"><td class="memItemLeft" align="right" valign="top"><a id="a88fbcbec9c64d888b19c5edb95059a95" name="a88fbcbec9c64d888b19c5edb95059a95"></a>
|
<tr class="memitem:a88fbcbec9c64d888b19c5edb95059a95" id="r_a88fbcbec9c64d888b19c5edb95059a95"><td class="memItemLeft" align="right" valign="top"><a id="a88fbcbec9c64d888b19c5edb95059a95" name="a88fbcbec9c64d888b19c5edb95059a95"></a>
|
||||||
<a class="el" href="classTreeNode.html">TreeNode</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &&)=default</td></tr>
|
<a class="el" href="classTreeNode.html">TreeNode</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classTreeNode.html">TreeNode</a> &&)=default</td></tr>
|
||||||
<tr class="separator:a88fbcbec9c64d888b19c5edb95059a95"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a88fbcbec9c64d888b19c5edb95059a95"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a6161f2ebb92184eab4215d121870e788"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a6161f2ebb92184eab4215d121870e788">AddChild</a> (std::unique_ptr< <a class="el" href="classTreeNode.html">TreeNode</a> > child)</td></tr>
|
<tr class="memitem:a6161f2ebb92184eab4215d121870e788" id="r_a6161f2ebb92184eab4215d121870e788"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a6161f2ebb92184eab4215d121870e788">AddChild</a> (std::unique_ptr< <a class="el" href="classTreeNode.html">TreeNode</a> > child)</td></tr>
|
||||||
<tr class="memdesc:a6161f2ebb92184eab4215d121870e788"><td class="mdescLeft"> </td><td class="mdescRight">Add child node. <a href="classTreeNode.html#a6161f2ebb92184eab4215d121870e788">More...</a><br /></td></tr>
|
<tr class="memdesc:a6161f2ebb92184eab4215d121870e788"><td class="mdescLeft"> </td><td class="mdescRight">Add child node. <br /></td></tr>
|
||||||
<tr class="separator:a6161f2ebb92184eab4215d121870e788"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a6161f2ebb92184eab4215d121870e788"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:abdd82460187dca8d3e5d66f5d5c529ea"><td class="memItemLeft" align="right" valign="top">std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">GetChildCount</a> () const</td></tr>
|
<tr class="memitem:abdd82460187dca8d3e5d66f5d5c529ea" id="r_abdd82460187dca8d3e5d66f5d5c529ea"><td class="memItemLeft" align="right" valign="top">std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">GetChildCount</a> () const</td></tr>
|
||||||
<tr class="memdesc:abdd82460187dca8d3e5d66f5d5c529ea"><td class="mdescLeft"> </td><td class="mdescRight">Get child count. <a href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">More...</a><br /></td></tr>
|
<tr class="memdesc:abdd82460187dca8d3e5d66f5d5c529ea"><td class="mdescLeft"> </td><td class="mdescRight">Get child count. <br /></td></tr>
|
||||||
<tr class="separator:abdd82460187dca8d3e5d66f5d5c529ea"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:abdd82460187dca8d3e5d66f5d5c529ea"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a4727ff801a2d1b9323c5ae50a35457a6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classTreeNode.html">TreeNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">GetChild</a> (std::size_t index) const</td></tr>
|
<tr class="memitem:a4727ff801a2d1b9323c5ae50a35457a6" id="r_a4727ff801a2d1b9323c5ae50a35457a6"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classTreeNode.html">TreeNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">GetChild</a> (std::size_t index) const</td></tr>
|
||||||
<tr class="memdesc:a4727ff801a2d1b9323c5ae50a35457a6"><td class="mdescLeft"> </td><td class="mdescRight">Get child by index. <a href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">More...</a><br /></td></tr>
|
<tr class="memdesc:a4727ff801a2d1b9323c5ae50a35457a6"><td class="mdescLeft"> </td><td class="mdescRight">Get child by index. <br /></td></tr>
|
||||||
<tr class="separator:a4727ff801a2d1b9323c5ae50a35457a6"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a4727ff801a2d1b9323c5ae50a35457a6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classTreeNode.html">TreeNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f">GetChild</a> (std::size_t index)</td></tr>
|
<tr class="memitem:a81047bd7d2a4cc96b9ef5e20d0d63b5f" id="r_a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classTreeNode.html">TreeNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f">GetChild</a> (std::size_t index)</td></tr>
|
||||||
<tr class="memdesc:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="mdescLeft"> </td><td class="mdescRight">Get mutable child by index. <a href="classTreeNode.html#a81047bd7d2a4cc96b9ef5e20d0d63b5f">More...</a><br /></td></tr>
|
<tr class="memdesc:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="mdescLeft"> </td><td class="mdescRight">Get mutable child by index. <br /></td></tr>
|
||||||
<tr class="separator:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a81047bd7d2a4cc96b9ef5e20d0d63b5f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16">NodeType</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">GetType</a> () const</td></tr>
|
<tr class="memitem:afa2f4b0aafa12d3d41ed00df8e0250c9" id="r_afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16">NodeType</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">GetType</a> () const</td></tr>
|
||||||
<tr class="memdesc:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="mdescLeft"> </td><td class="mdescRight">Get node type. <a href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">More...</a><br /></td></tr>
|
<tr class="memdesc:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="mdescLeft"> </td><td class="mdescRight">Get node type. <br /></td></tr>
|
||||||
<tr class="separator:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:afa2f4b0aafa12d3d41ed00df8e0250c9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a> () const</td></tr>
|
<tr class="memitem:aaac5b8d9dc9e5ae1f367d1adbcf20e18" id="r_aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a> () const</td></tr>
|
||||||
<tr class="memdesc:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="mdescLeft"> </td><td class="mdescRight">Get display name. <a href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">More...</a><br /></td></tr>
|
<tr class="memdesc:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="mdescLeft"> </td><td class="mdescRight">Get display name. <br /></td></tr>
|
||||||
<tr class="separator:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:aaac5b8d9dc9e5ae1f367d1adbcf20e18"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:afc503b40004764163605d6dbdb4ef811"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structFrameInfo.html">FrameInfo</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">GetFrame</a> () const</td></tr>
|
<tr class="memitem:afc503b40004764163605d6dbdb4ef811" id="r_afc503b40004764163605d6dbdb4ef811"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structFrameInfo.html">FrameInfo</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">GetFrame</a> () const</td></tr>
|
||||||
<tr class="memdesc:afc503b40004764163605d6dbdb4ef811"><td class="mdescLeft"> </td><td class="mdescRight">Get frame payload if node is frame. <a href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">More...</a><br /></td></tr>
|
<tr class="memdesc:afc503b40004764163605d6dbdb4ef811"><td class="mdescLeft"> </td><td class="mdescRight">Get frame payload if node is frame. <br /></td></tr>
|
||||||
<tr class="separator:afc503b40004764163605d6dbdb4ef811"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:afc503b40004764163605d6dbdb4ef811"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
<tr class="memitem:a226518612d0d00b5988a2c44fc21d3f1"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structSignalInfo.html">SignalInfo</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">GetSignal</a> () const</td></tr>
|
<tr class="memitem:a226518612d0d00b5988a2c44fc21d3f1" id="r_a226518612d0d00b5988a2c44fc21d3f1"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structSignalInfo.html">SignalInfo</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">GetSignal</a> () const</td></tr>
|
||||||
<tr class="memdesc:a226518612d0d00b5988a2c44fc21d3f1"><td class="mdescLeft"> </td><td class="mdescRight">Get signal payload if node is signal. <a href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">More...</a><br /></td></tr>
|
<tr class="memdesc:a226518612d0d00b5988a2c44fc21d3f1"><td class="mdescLeft"> </td><td class="mdescRight">Get signal payload if node is signal. <br /></td></tr>
|
||||||
<tr class="separator:a226518612d0d00b5988a2c44fc21d3f1"><td class="memSeparator" colspan="2"> </td></tr>
|
<tr class="separator:a226518612d0d00b5988a2c44fc21d3f1"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
@@ -149,7 +156,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8h_source.html#l00035">35</a> of file <a class="el" href="tree__node_8h_source.html">tree_node.h</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8h_source.html#l00035">35</a> of file <a class="el" href="tree__node_8h_source.html">tree_node.h</a>.</p>
|
||||||
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
||||||
<a id="a984a98d5ccf7ef1f5a18094c6821f35d" name="a984a98d5ccf7ef1f5a18094c6821f35d"></a>
|
<a id="a984a98d5ccf7ef1f5a18094c6821f35d" name="a984a98d5ccf7ef1f5a18094c6821f35d"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a984a98d5ccf7ef1f5a18094c6821f35d">◆ </a></span>TreeNode() <span class="overload">[1/3]</span></h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a984a98d5ccf7ef1f5a18094c6821f35d">◆ </a></span>TreeNode() <span class="overload">[1/3]</span></h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -170,7 +177,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="a8e38dd591d8801d7ee3a7dbad90c67fc" name="a8e38dd591d8801d7ee3a7dbad90c67fc"></a>
|
<a id="a8e38dd591d8801d7ee3a7dbad90c67fc" name="a8e38dd591d8801d7ee3a7dbad90c67fc"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a8e38dd591d8801d7ee3a7dbad90c67fc">◆ </a></span>TreeNode() <span class="overload">[2/3]</span></h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a8e38dd591d8801d7ee3a7dbad90c67fc">◆ </a></span>TreeNode() <span class="overload">[2/3]</span></h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -201,12 +208,12 @@ Public Member Functions</h2></td></tr>
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00022">22</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00018">18</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="ab9f00f5253d56461bb2d420fd639c5ae" name="ab9f00f5253d56461bb2d420fd639c5ae"></a>
|
<a id="ab9f00f5253d56461bb2d420fd639c5ae" name="ab9f00f5253d56461bb2d420fd639c5ae"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#ab9f00f5253d56461bb2d420fd639c5ae">◆ </a></span>TreeNode() <span class="overload">[3/3]</span></h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#ab9f00f5253d56461bb2d420fd639c5ae">◆ </a></span>TreeNode() <span class="overload">[3/3]</span></h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -237,13 +244,13 @@ Public Member Functions</h2></td></tr>
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00030">30</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00022">22</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="groupheader">Member Function Documentation</h2>
|
<h2 class="groupheader">Member Function Documentation</h2>
|
||||||
<a id="a6161f2ebb92184eab4215d121870e788" name="a6161f2ebb92184eab4215d121870e788"></a>
|
<a id="a6161f2ebb92184eab4215d121870e788" name="a6161f2ebb92184eab4215d121870e788"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a6161f2ebb92184eab4215d121870e788">◆ </a></span>AddChild()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a6161f2ebb92184eab4215d121870e788">◆ </a></span>AddChild()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -266,12 +273,12 @@ Public Member Functions</h2></td></tr>
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00038">38</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00026">26</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="abdd82460187dca8d3e5d66f5d5c529ea" name="abdd82460187dca8d3e5d66f5d5c529ea"></a>
|
<a id="abdd82460187dca8d3e5d66f5d5c529ea" name="abdd82460187dca8d3e5d66f5d5c529ea"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#abdd82460187dca8d3e5d66f5d5c529ea">◆ </a></span>GetChildCount()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#abdd82460187dca8d3e5d66f5d5c529ea">◆ </a></span>GetChildCount()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -288,12 +295,12 @@ Public Member Functions</h2></td></tr>
|
|||||||
<p>Get child count. </p>
|
<p>Get child count. </p>
|
||||||
<dl class="section return"><dt>Returns</dt><dd>Number of children. </dd></dl>
|
<dl class="section return"><dt>Returns</dt><dd>Number of children. </dd></dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00043">43</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00031">31</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="a4727ff801a2d1b9323c5ae50a35457a6" name="a4727ff801a2d1b9323c5ae50a35457a6"></a>
|
<a id="a4727ff801a2d1b9323c5ae50a35457a6" name="a4727ff801a2d1b9323c5ae50a35457a6"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a4727ff801a2d1b9323c5ae50a35457a6">◆ </a></span>GetChild() <span class="overload">[1/2]</span></h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a4727ff801a2d1b9323c5ae50a35457a6">◆ </a></span>GetChild() <span class="overload">[1/2]</span></h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -317,12 +324,12 @@ Public Member Functions</h2></td></tr>
|
|||||||
</dl>
|
</dl>
|
||||||
<dl class="section return"><dt>Returns</dt><dd>Child pointer or nullptr if index is invalid. </dd></dl>
|
<dl class="section return"><dt>Returns</dt><dd>Child pointer or nullptr if index is invalid. </dd></dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00047">47</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00035">35</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="a81047bd7d2a4cc96b9ef5e20d0d63b5f" name="a81047bd7d2a4cc96b9ef5e20d0d63b5f"></a>
|
<a id="a81047bd7d2a4cc96b9ef5e20d0d63b5f" name="a81047bd7d2a4cc96b9ef5e20d0d63b5f"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a81047bd7d2a4cc96b9ef5e20d0d63b5f">◆ </a></span>GetChild() <span class="overload">[2/2]</span></h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a81047bd7d2a4cc96b9ef5e20d0d63b5f">◆ </a></span>GetChild() <span class="overload">[2/2]</span></h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -346,12 +353,12 @@ Public Member Functions</h2></td></tr>
|
|||||||
</dl>
|
</dl>
|
||||||
<dl class="section return"><dt>Returns</dt><dd>Child pointer or nullptr if index is invalid. </dd></dl>
|
<dl class="section return"><dt>Returns</dt><dd>Child pointer or nullptr if index is invalid. </dd></dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00054">54</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00042">42</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="afa2f4b0aafa12d3d41ed00df8e0250c9" name="afa2f4b0aafa12d3d41ed00df8e0250c9"></a>
|
<a id="afa2f4b0aafa12d3d41ed00df8e0250c9" name="afa2f4b0aafa12d3d41ed00df8e0250c9"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#afa2f4b0aafa12d3d41ed00df8e0250c9">◆ </a></span>GetType()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#afa2f4b0aafa12d3d41ed00df8e0250c9">◆ </a></span>GetType()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -368,12 +375,12 @@ Public Member Functions</h2></td></tr>
|
|||||||
<p>Get node type. </p>
|
<p>Get node type. </p>
|
||||||
<dl class="section return"><dt>Returns</dt><dd>Node type. </dd></dl>
|
<dl class="section return"><dt>Returns</dt><dd>Node type. </dd></dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00061">61</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00049">49</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="aaac5b8d9dc9e5ae1f367d1adbcf20e18" name="aaac5b8d9dc9e5ae1f367d1adbcf20e18"></a>
|
<a id="aaac5b8d9dc9e5ae1f367d1adbcf20e18" name="aaac5b8d9dc9e5ae1f367d1adbcf20e18"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#aaac5b8d9dc9e5ae1f367d1adbcf20e18">◆ </a></span>GetName()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#aaac5b8d9dc9e5ae1f367d1adbcf20e18">◆ </a></span>GetName()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -390,12 +397,12 @@ Public Member Functions</h2></td></tr>
|
|||||||
<p>Get display name. </p>
|
<p>Get display name. </p>
|
||||||
<dl class="section return"><dt>Returns</dt><dd>Node name. </dd></dl>
|
<dl class="section return"><dt>Returns</dt><dd>Node name. </dd></dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00065">65</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00053">53</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="afc503b40004764163605d6dbdb4ef811" name="afc503b40004764163605d6dbdb4ef811"></a>
|
<a id="afc503b40004764163605d6dbdb4ef811" name="afc503b40004764163605d6dbdb4ef811"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#afc503b40004764163605d6dbdb4ef811">◆ </a></span>GetFrame()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#afc503b40004764163605d6dbdb4ef811">◆ </a></span>GetFrame()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -412,12 +419,12 @@ Public Member Functions</h2></td></tr>
|
|||||||
<p>Get frame payload if node is frame. </p>
|
<p>Get frame payload if node is frame. </p>
|
||||||
<dl class="section return"><dt>Returns</dt><dd>Pointer to frame info or nullptr. </dd></dl>
|
<dl class="section return"><dt>Returns</dt><dd>Pointer to frame info or nullptr. </dd></dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00069">69</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00057">57</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a id="a226518612d0d00b5988a2c44fc21d3f1" name="a226518612d0d00b5988a2c44fc21d3f1"></a>
|
<a id="a226518612d0d00b5988a2c44fc21d3f1" name="a226518612d0d00b5988a2c44fc21d3f1"></a>
|
||||||
<h2 class="memtitle"><span class="permalink"><a href="#a226518612d0d00b5988a2c44fc21d3f1">◆ </a></span>GetSignal()</h2>
|
<h2 class="memtitle"><span class="permalink"><a href="#a226518612d0d00b5988a2c44fc21d3f1">◆ </a></span>GetSignal()</h2>
|
||||||
|
|
||||||
<div class="memitem">
|
<div class="memitem">
|
||||||
<div class="memproto">
|
<div class="memproto">
|
||||||
@@ -434,7 +441,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<p>Get signal payload if node is signal. </p>
|
<p>Get signal payload if node is signal. </p>
|
||||||
<dl class="section return"><dt>Returns</dt><dd>Pointer to signal info or nullptr. </dd></dl>
|
<dl class="section return"><dt>Returns</dt><dd>Pointer to signal info or nullptr. </dd></dl>
|
||||||
|
|
||||||
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00073">73</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
<p class="definition">Definition at line <a class="el" href="tree__node_8cpp_source.html#l00061">61</a> of file <a class="el" href="tree__node_8cpp_source.html">tree_node.cpp</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -448,7 +455,7 @@ Public Member Functions</h2></td></tr>
|
|||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="classTreeNode.html">TreeNode</a></li>
|
<li class="navelem"><a class="el" href="classTreeNode.html">TreeNode</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -0,0 +1,116 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: Member List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classTypeFactory.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">TypeFactory< ClassId, BaseClass, Args > Member List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>This is the complete list of members for <a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a>, including all inherited members.</p>
|
||||||
|
<table class="directory">
|
||||||
|
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>BasePtr</b> typedef (defined in <a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"></td></tr>
|
||||||
|
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>classes</b> (defined in <a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
||||||
|
<tr class="even"><td class="entry"><a class="el" href="classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4">contains</a>(const ClassId &id) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||||
|
<tr class="odd"><td class="entry"><a class="el" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">create</a>(const ClassId &id, Args... args) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||||
|
<tr class="even"><td class="entry"><a class="el" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">creator</a>(const ClassId &id) const</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||||
|
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>CreatorFn</b> typedef (defined in <a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"></td></tr>
|
||||||
|
<tr class="even"><td class="entry"><a class="el" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a>(const ClassId &id)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||||
|
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>TypeFactory</b>()=default (defined in <a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a>)</td><td class="entry"><a class="el" href="classTypeFactory.html">TypeFactory< ClassId, BaseClass, Args ></a></td><td class="entry"></td></tr>
|
||||||
|
</table></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,432 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: TypeFactory< ClassId, BaseClass, Args > Class Template Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('classTypeFactory.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#pub-types">Public Types</a> |
|
||||||
|
<a href="#pub-methods">Public Member Functions</a> |
|
||||||
|
<a href="#pro-attribs">Protected Attributes</a> |
|
||||||
|
<a href="classTypeFactory-members.html">List of all members</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">TypeFactory< ClassId, BaseClass, Args > Class Template Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>Registry-based factory for creating objects by runtime identifier.
|
||||||
|
<a href="classTypeFactory.html#details">More...</a></p>
|
||||||
|
|
||||||
|
<p><code>#include <<a class="el" href="typefactory_8h_source.html">typefactory.h</a>></code></p>
|
||||||
|
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
|
||||||
|
<img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for TypeFactory< ClassId, BaseClass, Args >:</div>
|
||||||
|
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
|
||||||
|
</div>
|
||||||
|
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
|
||||||
|
<div class="center"><iframe scrolling="no" frameborder="0" src="classTypeFactory__inherit__graph.svg" width="286" height="408"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||||
|
</div>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
|
||||||
|
Public Types</h2></td></tr>
|
||||||
|
<tr class="memitem:a33b404da3e19ea7e1245b8a4975721bf" id="r_a33b404da3e19ea7e1245b8a4975721bf"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a33b404da3e19ea7e1245b8a4975721bf">BasePtr</a> = std::shared_ptr< BaseClass ></td></tr>
|
||||||
|
<tr class="separator:a33b404da3e19ea7e1245b8a4975721bf"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a650022aac1e2f30af5bc554a5663939f" id="r_a650022aac1e2f30af5bc554a5663939f"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a650022aac1e2f30af5bc554a5663939f">CreatorFn</a> = BasePtr(*)(Args...)</td></tr>
|
||||||
|
<tr class="separator:a650022aac1e2f30af5bc554a5663939f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table><table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||||||
|
Public Member Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:ad6d85795285ee21193ac03e1b24762d3" id="r_ad6d85795285ee21193ac03e1b24762d3"><td class="memTemplParams" colspan="2">template<class Derived > </td></tr>
|
||||||
|
<tr class="memitem:ad6d85795285ee21193ac03e1b24762d3"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a> (const ClassId &id)</td></tr>
|
||||||
|
<tr class="memdesc:ad6d85795285ee21193ac03e1b24762d3"><td class="mdescLeft"> </td><td class="mdescRight">Registers a Derived type under the given id. <br /></td></tr>
|
||||||
|
<tr class="separator:ad6d85795285ee21193ac03e1b24762d3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ad82f537569ece3d3a4a376523fa94473" id="r_ad82f537569ece3d3a4a376523fa94473"><td class="memItemLeft" align="right" valign="top">CreatorFn </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">creator</a> (const ClassId &id) const</td></tr>
|
||||||
|
<tr class="memdesc:ad82f537569ece3d3a4a376523fa94473"><td class="mdescLeft"> </td><td class="mdescRight">Returns creator function for the given id. <br /></td></tr>
|
||||||
|
<tr class="separator:ad82f537569ece3d3a4a376523fa94473"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a3f43b03d6e3a0fd503fdec01ecf62e9f" id="r_a3f43b03d6e3a0fd503fdec01ecf62e9f"><td class="memItemLeft" align="right" valign="top">BasePtr </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">create</a> (const ClassId &id, Args... args) const</td></tr>
|
||||||
|
<tr class="memdesc:a3f43b03d6e3a0fd503fdec01ecf62e9f"><td class="mdescLeft"> </td><td class="mdescRight">Creates an instance for the given id using provided arguments. <br /></td></tr>
|
||||||
|
<tr class="separator:a3f43b03d6e3a0fd503fdec01ecf62e9f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a1a119ad2956abe146213c6ca124d8dd4" id="r_a1a119ad2956abe146213c6ca124d8dd4"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4">contains</a> (const ClassId &id) const</td></tr>
|
||||||
|
<tr class="memdesc:a1a119ad2956abe146213c6ca124d8dd4"><td class="mdescLeft"> </td><td class="mdescRight">Checks whether an id is registered. <br /></td></tr>
|
||||||
|
<tr class="separator:a1a119ad2956abe146213c6ca124d8dd4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table><table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
|
||||||
|
Protected Attributes</h2></td></tr>
|
||||||
|
<tr class="memitem:a5f119fe61c1cb9f4725ce746e4a047b3" id="r_a5f119fe61c1cb9f4725ce746e4a047b3"><td class="memItemLeft" align="right" valign="top">std::unordered_map< ClassId, CreatorFn > </td><td class="memItemRight" valign="bottom"><a class="el" href="classTypeFactory.html#a5f119fe61c1cb9f4725ce746e4a047b3">classes</a></td></tr>
|
||||||
|
<tr class="separator:a5f119fe61c1cb9f4725ce746e4a047b3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><div class="compoundTemplParams">template<class ClassId, class BaseClass, class... Args><br />
|
||||||
|
class TypeFactory< ClassId, BaseClass, Args ></div><p>Registry-based factory for creating objects by runtime identifier. </p>
|
||||||
|
<p>Allows registering derived types and instantiating them using a ClassId key.</p>
|
||||||
|
<p>Notes:</p><ul>
|
||||||
|
<li>Not thread-safe. Register types during initialization phase only.</li>
|
||||||
|
<li>Re-registering the same id overwrites the previous entry ("last wins").</li>
|
||||||
|
<li>ClassId must be hashable (std::hash<ClassId> specialization must exist).</li>
|
||||||
|
</ul>
|
||||||
|
<dl class="tparams"><dt>Template Parameters</dt><dd>
|
||||||
|
<table class="tparams">
|
||||||
|
<tr><td class="paramname">ClassId</td><td>-Unique class identifier type (e.g. std::string, int, enum). </td></tr>
|
||||||
|
<tr><td class="paramname">BaseClass</td><td>-Base type for all created objects. </td></tr>
|
||||||
|
<tr><td class="paramname">Arg</td><td>- Constructor arguments forwarded to registered derived types (by value).</td></tr>
|
||||||
|
</table>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<p>Usage example: </p><div class="fragment"><div class="line"><span class="preprocessor">#include <string></span></div>
|
||||||
|
<div class="line"> </div>
|
||||||
|
<div class="line"><span class="keyword">struct </span>Base {</div>
|
||||||
|
<div class="line"> <span class="keyword">virtual</span> ~Base() = <span class="keywordflow">default</span>;</div>
|
||||||
|
<div class="line"> <span class="keyword">virtual</span> <span class="keywordtype">int</span> get() = 0;</div>
|
||||||
|
<div class="line">};</div>
|
||||||
|
<div class="line"> </div>
|
||||||
|
<div class="line"><span class="keyword">struct </span>Derived1 : Base {</div>
|
||||||
|
<div class="line"> <span class="keyword">explicit</span> Derived1(<span class="keywordtype">int</span> start) : m_start(start) {}</div>
|
||||||
|
<div class="line"> <span class="keywordtype">int</span> get()<span class="keyword"> override </span>{ <span class="keywordflow">return</span> m_start + 1; }</div>
|
||||||
|
<div class="line"> <span class="keywordtype">int</span> m_start = 0;</div>
|
||||||
|
<div class="line">};</div>
|
||||||
|
<div class="line"> </div>
|
||||||
|
<div class="line"><span class="keyword">struct </span>Derived2 : Base {</div>
|
||||||
|
<div class="line"> <span class="keyword">explicit</span> Derived2(<span class="keywordtype">int</span> start) : m_start(start) {}</div>
|
||||||
|
<div class="line"> <span class="keywordtype">int</span> get()<span class="keyword"> override </span>{ <span class="keywordflow">return</span> m_start + 2; }</div>
|
||||||
|
<div class="line"> <span class="keywordtype">int</span> m_start = 0;</div>
|
||||||
|
<div class="line">};</div>
|
||||||
|
<div class="line"> </div>
|
||||||
|
<div class="line"><a class="code hl_class" href="classTypeFactory.html">TypeFactory<std::string, Base, int></a> factory;</div>
|
||||||
|
<div class="line">factory.<a class="code hl_function" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a><Derived1>(<span class="stringliteral">"one"</span>);</div>
|
||||||
|
<div class="line">factory.<a class="code hl_function" href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">registerType</a><Derived2>(<span class="stringliteral">"two"</span>);</div>
|
||||||
|
<div class="line"> </div>
|
||||||
|
<div class="line"><span class="keyword">auto</span> a = factory.<a class="code hl_function" href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">create</a>(<span class="stringliteral">"one"</span>, 10);</div>
|
||||||
|
<div class="line"><span class="keyword">auto</span> b = factory.<a class="code hl_function" href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">creator</a>(<span class="stringliteral">"two"</span>)(10); <span class="comment">// advanced API: get creator function</span></div>
|
||||||
|
<div class="line"> </div>
|
||||||
|
<div class="line">(void)a->get();</div>
|
||||||
|
<div class="line">(void)b->get();</div>
|
||||||
|
<div class="ttc" id="aclassTypeFactory_html"><div class="ttname"><a href="classTypeFactory.html">TypeFactory</a></div><div class="ttdoc">Registry-based factory for creating objects by runtime identifier.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00059">typefactory.h:59</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTypeFactory_html_a3f43b03d6e3a0fd503fdec01ecf62e9f"><div class="ttname"><a href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">TypeFactory::create</a></div><div class="ttdeci">BasePtr create(const ClassId &id, Args... args) const</div><div class="ttdoc">Creates an instance for the given id using provided arguments.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00097">typefactory.h:97</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTypeFactory_html_ad6d85795285ee21193ac03e1b24762d3"><div class="ttname"><a href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">TypeFactory::registerType</a></div><div class="ttdeci">void registerType(const ClassId &id)</div><div class="ttdoc">Registers a Derived type under the given id.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00076">typefactory.h:76</a></div></div>
|
||||||
|
<div class="ttc" id="aclassTypeFactory_html_ad82f537569ece3d3a4a376523fa94473"><div class="ttname"><a href="classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473">TypeFactory::creator</a></div><div class="ttdeci">CreatorFn creator(const ClassId &id) const</div><div class="ttdoc">Returns creator function for the given id.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00089">typefactory.h:89</a></div></div>
|
||||||
|
</div><!-- fragment -->
|
||||||
|
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00059">59</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
|
||||||
|
</div><h2 class="groupheader">Member Typedef Documentation</h2>
|
||||||
|
<a id="a33b404da3e19ea7e1245b8a4975721bf" name="a33b404da3e19ea7e1245b8a4975721bf"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a33b404da3e19ea7e1245b8a4975721bf">◆ </a></span>BasePtr</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class ClassId , class BaseClass , class... Args> </div>
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">using <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::BasePtr = std::shared_ptr<BaseClass></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00061">61</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="a650022aac1e2f30af5bc554a5663939f" name="a650022aac1e2f30af5bc554a5663939f"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a650022aac1e2f30af5bc554a5663939f">◆ </a></span>CreatorFn</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class ClassId , class BaseClass , class... Args> </div>
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">using <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::CreatorFn = BasePtr (*)(Args...)</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00062">62</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h2 class="groupheader">Member Function Documentation</h2>
|
||||||
|
<a id="ad6d85795285ee21193ac03e1b24762d3" name="ad6d85795285ee21193ac03e1b24762d3"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#ad6d85795285ee21193ac03e1b24762d3">◆ </a></span>registerType()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class ClassId , class BaseClass , class... Args> </div>
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class Derived > </div>
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">void <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::registerType </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const ClassId & </td>
|
||||||
|
<td class="paramname"><em>id</em></td><td>)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Registers a Derived type under the given id. </p>
|
||||||
|
<p>Requirements (checked at compile-time):</p><ul>
|
||||||
|
<li>Derived must inherit from BaseClass</li>
|
||||||
|
<li>Derived must be constructible from Args...</li>
|
||||||
|
</ul>
|
||||||
|
<p>Re-registering the same id overwrites the previous entry ("last wins"). </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00076">76</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="ad82f537569ece3d3a4a376523fa94473" name="ad82f537569ece3d3a4a376523fa94473"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#ad82f537569ece3d3a4a376523fa94473">◆ </a></span>creator()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class ClassId , class BaseClass , class... Args> </div>
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">CreatorFn <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::creator </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const ClassId & </td>
|
||||||
|
<td class="paramname"><em>id</em></td><td>)</td>
|
||||||
|
<td> const</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Returns creator function for the given id. </p>
|
||||||
|
<dl class="exception"><dt>Exceptions</dt><dd>
|
||||||
|
<table class="exception">
|
||||||
|
<tr><td class="paramname">std::out_of_range</td><td>when id is not registered. </td></tr>
|
||||||
|
</table>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00089">89</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
|
||||||
|
|
||||||
|
<p class="reference">Referenced by <a class="el" href="typefactory_8h_source.html#l00097">TypeFactory< ClassId, BaseClass, Args >::create()</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="a3f43b03d6e3a0fd503fdec01ecf62e9f" name="a3f43b03d6e3a0fd503fdec01ecf62e9f"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a3f43b03d6e3a0fd503fdec01ecf62e9f">◆ </a></span>create()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class ClassId , class BaseClass , class... Args> </div>
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">BasePtr <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::create </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const ClassId & </td>
|
||||||
|
<td class="paramname"><em>id</em>, </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="paramkey"></td>
|
||||||
|
<td></td>
|
||||||
|
<td class="paramtype">Args... </td>
|
||||||
|
<td class="paramname"><em>args</em> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>)</td>
|
||||||
|
<td></td><td> const</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Creates an instance for the given id using provided arguments. </p>
|
||||||
|
<dl class="exception"><dt>Exceptions</dt><dd>
|
||||||
|
<table class="exception">
|
||||||
|
<tr><td class="paramname">std::out_of_range</td><td>when id is not registered. </td></tr>
|
||||||
|
</table>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00097">97</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
|
||||||
|
|
||||||
|
<p class="reference">References <a class="el" href="typefactory_8h_source.html#l00089">TypeFactory< ClassId, BaseClass, Args >::creator()</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="a1a119ad2956abe146213c6ca124d8dd4" name="a1a119ad2956abe146213c6ca124d8dd4"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a1a119ad2956abe146213c6ca124d8dd4">◆ </a></span>contains()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class ClassId , class BaseClass , class... Args> </div>
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">bool <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::contains </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">const ClassId & </td>
|
||||||
|
<td class="paramname"><em>id</em></td><td>)</td>
|
||||||
|
<td> const</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Checks whether an id is registered. </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00104">104</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h2 class="groupheader">Member Data Documentation</h2>
|
||||||
|
<a id="a5f119fe61c1cb9f4725ce746e4a047b3" name="a5f119fe61c1cb9f4725ce746e4a047b3"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a5f119fe61c1cb9f4725ce746e4a047b3">◆ </a></span>classes</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<div class="memtemplate">
|
||||||
|
template<class ClassId , class BaseClass , class... Args> </div>
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">std::unordered_map<ClassId, CreatorFn> <a class="el" href="classTypeFactory.html">TypeFactory</a>< ClassId, BaseClass, Args >::classes</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p class="definition">Definition at line <a class="el" href="typefactory_8h_source.html#l00110">110</a> of file <a class="el" href="typefactory_8h_source.html">typefactory.h</a>.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr/>The documentation for this class was generated from the following file:<ul>
|
||||||
|
<li><a class="el" href="typefactory_8h_source.html">typefactory.h</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="classTypeFactory.html">TypeFactory</a></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
var classTypeFactory =
|
||||||
|
[
|
||||||
|
[ "registerType", "classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3", null ],
|
||||||
|
[ "creator", "classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473", null ],
|
||||||
|
[ "create", "classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f", null ],
|
||||||
|
[ "contains", "classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4", null ]
|
||||||
|
];
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<map id="TypeFactory< ClassId, BaseClass, Args >" name="TypeFactory< ClassId, BaseClass, Args >">
|
||||||
|
<area shape="rect" id="Node000001" title="Registry-based factory for creating objects by runtime identifier." alt="" coords="15,5,173,165"/>
|
||||||
|
<area shape="rect" id="Node000002" href="$classTypeFactory.html" title=" " alt="" coords="5,243,183,403"/>
|
||||||
|
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="97,179,97,242,91,242,91,179"/>
|
||||||
|
</map>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
2bdf782ef56b34458cf192f8210c073e
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: TypeFactory< ClassId, BaseClass, Args > Pages: 1 -->
|
||||||
|
<svg width="214pt" height="306pt"
|
||||||
|
viewBox="0.00 0.00 213.50 306.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
|
||||||
|
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
|
||||||
|
<style type="text/css"><![CDATA[
|
||||||
|
.node, .edge {opacity: 0.7;}
|
||||||
|
.node.selected, .edge.selected {opacity: 1;}
|
||||||
|
.edge:hover path { stroke: red; }
|
||||||
|
.edge:hover polygon { stroke: red; fill: red; }
|
||||||
|
]]></style>
|
||||||
|
<script type="application/ecmascript" xlink:href="svg.min.js"/>
|
||||||
|
<svg id="graph" class="graph">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 302)">
|
||||||
|
<title>TypeFactory< ClassId, BaseClass, Args ></title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title="Registry-based factory for creating objects by runtime identifier.">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="125.5,-298 7.5,-298 7.5,-178 125.5,-178 125.5,-298"/>
|
||||||
|
<text text-anchor="start" x="12.5" y="-286" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory< ClassId,</text>
|
||||||
|
<text text-anchor="start" x="20" y="-275" font-family="Helvetica,sans-Serif" font-size="10.00"> BaseClass, Args ></text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">#</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">classes</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-245" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-245" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory()</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-230" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-230" font-family="Helvetica,sans-Serif" font-size="10.00">registerType()</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-215" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-215" font-family="Helvetica,sans-Serif" font-size="10.00">creator()</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">create()</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-185" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-185" font-family="Helvetica,sans-Serif" font-size="10.00">contains()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="7.5,-270 7.5,-270 125.5,-270 125.5,-270 7.5,-270"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="7.5,-255 7.5,-255 36.5,-255 36.5,-255 7.5,-255"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="36.5,-255 36.5,-255 125.5,-255 125.5,-255 36.5,-255"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="7.5,-178 7.5,-298 125.5,-298 125.5,-178 7.5,-178"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:href="classTypeFactory.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="133,-120 0,-120 0,0 133,0 133,-120"/>
|
||||||
|
<text text-anchor="start" x="5.5" y="-108" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory< std::string,</text>
|
||||||
|
<text text-anchor="start" x="5.5" y="-97" font-family="Helvetica,sans-Serif" font-size="10.00"> DbcStatementHandler ></text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-82" font-family="Helvetica,sans-Serif" font-size="10.00">#</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-82" font-family="Helvetica,sans-Serif" font-size="10.00">classes</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-67" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-67" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory()</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-52" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-52" font-family="Helvetica,sans-Serif" font-size="10.00">registerType()</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00">creator()</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-22" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-22" font-family="Helvetica,sans-Serif" font-size="10.00">create()</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">contains()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="0.5,-92 0.5,-92 133.5,-92 133.5,-92 0.5,-92"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="0.5,-77 0.5,-77 37.5,-77 37.5,-77 0.5,-77"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="37.5,-77 37.5,-77 133.5,-77 133.5,-77 37.5,-77"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="0,0 0,-120 133,-120 133,0 0,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node2 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node1->Node2</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="orange" d="M66.5,-167.73C66.5,-152.02 66.5,-135.48 66.5,-120.24"/>
|
||||||
|
<polygon fill="orange" stroke="orange" points="63,-167.9 66.5,-177.9 70,-167.9 63,-167.9"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
<text text-anchor="start" x="66.5" y="-152" font-family="Helvetica,sans-Serif" font-size="10.00" fill="grey"> < std::string, DbcStatement</text>
|
||||||
|
<text text-anchor="middle" x="136" y="-141" font-family="Helvetica,sans-Serif" font-size="10.00" fill="grey">Handler ></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<style type='text/css'>
|
||||||
|
<![CDATA[
|
||||||
|
[data-mouse-over-selected='false'] { opacity: 0.7; }
|
||||||
|
[data-mouse-over-selected='true'] { opacity: 1.0; }
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
<script type="application/ecmascript"><![CDATA[
|
||||||
|
document.addEventListener('DOMContentLoaded', (event) => {
|
||||||
|
highlightEdges();
|
||||||
|
highlightAdjacentNodes();
|
||||||
|
});
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.3 KiB |
@@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.42.4 (0)
|
||||||
|
-->
|
||||||
|
<!-- Title: TypeFactory< ClassId, BaseClass, Args > Pages: 1 -->
|
||||||
|
<svg width="214pt" height="306pt"
|
||||||
|
viewBox="0.00 0.00 213.50 306.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 302)">
|
||||||
|
<title>TypeFactory< ClassId, BaseClass, Args ></title>
|
||||||
|
<!-- Node1 -->
|
||||||
|
<g id="Node000001" class="node">
|
||||||
|
<title>Node1</title>
|
||||||
|
<g id="a_Node000001"><a xlink:title="Registry-based factory for creating objects by runtime identifier.">
|
||||||
|
<polygon fill="#999999" stroke="transparent" points="125.5,-298 7.5,-298 7.5,-178 125.5,-178 125.5,-298"/>
|
||||||
|
<text text-anchor="start" x="12.5" y="-286" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory< ClassId,</text>
|
||||||
|
<text text-anchor="start" x="20" y="-275" font-family="Helvetica,sans-Serif" font-size="10.00"> BaseClass, Args ></text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">#</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">classes</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-245" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-245" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory()</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-230" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-230" font-family="Helvetica,sans-Serif" font-size="10.00">registerType()</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-215" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-215" font-family="Helvetica,sans-Serif" font-size="10.00">creator()</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">create()</text>
|
||||||
|
<text text-anchor="start" x="18.5" y="-185" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="38.5" y="-185" font-family="Helvetica,sans-Serif" font-size="10.00">contains()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="7.5,-270 7.5,-270 125.5,-270 125.5,-270 7.5,-270"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="7.5,-255 7.5,-255 36.5,-255 36.5,-255 7.5,-255"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="36.5,-255 36.5,-255 125.5,-255 125.5,-255 36.5,-255"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="7.5,-178 7.5,-298 125.5,-298 125.5,-178 7.5,-178"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node2 -->
|
||||||
|
<g id="Node000002" class="node">
|
||||||
|
<title>Node2</title>
|
||||||
|
<g id="a_Node000002"><a xlink:href="classTypeFactory.html" target="_top" xlink:title=" ">
|
||||||
|
<polygon fill="white" stroke="transparent" points="133,-120 0,-120 0,0 133,0 133,-120"/>
|
||||||
|
<text text-anchor="start" x="5.5" y="-108" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory< std::string,</text>
|
||||||
|
<text text-anchor="start" x="5.5" y="-97" font-family="Helvetica,sans-Serif" font-size="10.00"> DbcStatementHandler ></text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-82" font-family="Helvetica,sans-Serif" font-size="10.00">#</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-82" font-family="Helvetica,sans-Serif" font-size="10.00">classes</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-67" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-67" font-family="Helvetica,sans-Serif" font-size="10.00">TypeFactory()</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-52" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-52" font-family="Helvetica,sans-Serif" font-size="10.00">registerType()</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00">creator()</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-22" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-22" font-family="Helvetica,sans-Serif" font-size="10.00">create()</text>
|
||||||
|
<text text-anchor="start" x="15.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">+</text>
|
||||||
|
<text text-anchor="start" x="39.5" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">contains()</text>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="0.5,-92 0.5,-92 133.5,-92 133.5,-92 0.5,-92"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="0.5,-77 0.5,-77 37.5,-77 37.5,-77 0.5,-77"/>
|
||||||
|
<polygon fill="#666666" stroke="#666666" points="37.5,-77 37.5,-77 133.5,-77 133.5,-77 37.5,-77"/>
|
||||||
|
<polygon fill="none" stroke="#666666" points="0,0 0,-120 133,-120 133,0 0,0"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<!-- Node1->Node2 -->
|
||||||
|
<g id="edge1_Node000001_Node000002" class="edge">
|
||||||
|
<title>Node1->Node2</title>
|
||||||
|
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||||
|
<path fill="none" stroke="orange" d="M66.5,-167.73C66.5,-152.02 66.5,-135.48 66.5,-120.24"/>
|
||||||
|
<polygon fill="orange" stroke="orange" points="63,-167.9 66.5,-177.9 70,-167.9 63,-167.9"/>
|
||||||
|
</a>
|
||||||
|
</g>
|
||||||
|
<text text-anchor="start" x="66.5" y="-152" font-family="Helvetica,sans-Serif" font-size="10.00" fill="grey"> < std::string, DbcStatement</text>
|
||||||
|
<text text-anchor="middle" x="136" y="-141" font-family="Helvetica,sans-Serif" font-size="10.00" fill="grey">Handler ></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.6 KiB |
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: Class Index</title>
|
<title>DBC Framework: Class Index</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); })
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -90,7 +97,7 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); })
|
|||||||
<div class="classindex">
|
<div class="classindex">
|
||||||
<dl class="classindex even">
|
<dl class="classindex even">
|
||||||
<dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt>
|
<dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt>
|
||||||
<dd><a class="el" href="structDbcDatabase.html">DbcDatabase</a></dd><dd><a class="el" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></dd><dd><a class="el" href="classDbcDecoder.html">DbcDecoder</a></dd><dd><a class="el" href="classDbcParser.html">DbcParser</a></dd><dd><a class="el" href="classDbcTreeBuilder.html">DbcTreeBuilder</a></dd><dd><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a></dd><dd><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a></dd><dd><a class="el" href="structDecodedSignalValue.html">DecodedSignalValue</a></dd><dd><a class="el" href="structDecodeFrame.html">DecodeFrame</a></dd><dd><a class="el" href="structDecodeSignal.html">DecodeSignal</a></dd></dl>
|
<dd><a class="el" href="classDbcCommentHandler.html">DbcCommentHandler</a></dd><dd><a class="el" href="structDbcDatabase.html">DbcDatabase</a></dd><dd><a class="el" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></dd><dd><a class="el" href="classDbcDecoder.html">DbcDecoder</a></dd><dd><a class="el" href="classDbcFrameHandler.html">DbcFrameHandler</a></dd><dd><a class="el" href="structDbcParseContext.html">DbcParseContext</a></dd><dd><a class="el" href="classDbcParser.html">DbcParser</a></dd><dd><a class="el" href="classDbcSignalHandler.html">DbcSignalHandler</a></dd><dd><a class="el" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></dd><dd><a class="el" href="classDbcStatementHandler.html">DbcStatementHandler</a></dd><dd><a class="el" href="classDbcTreeBuilder.html">DbcTreeBuilder</a></dd><dd><a class="el" href="structDecodeDatabase.html">DecodeDatabase</a></dd><dd><a class="el" href="structDecodedFrameValue.html">DecodedFrameValue</a></dd><dd><a class="el" href="structDecodedSignalValue.html">DecodedSignalValue</a></dd><dd><a class="el" href="structDecodeFrame.html">DecodeFrame</a></dd><dd><a class="el" href="structDecodeSignal.html">DecodeSignal</a></dd></dl>
|
||||||
<dl class="classindex odd">
|
<dl class="classindex odd">
|
||||||
<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt>
|
<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt>
|
||||||
<dd><a class="el" href="structFrameInfo.html">FrameInfo</a></dd><dd><a class="el" href="structFrameKey.html">FrameKey</a></dd><dd><a class="el" href="structFrameKeyHasher.html">FrameKeyHasher</a></dd></dl>
|
<dd><a class="el" href="structFrameInfo.html">FrameInfo</a></dd><dd><a class="el" href="structFrameKey.html">FrameKey</a></dd><dd><a class="el" href="structFrameKeyHasher.html">FrameKeyHasher</a></dd></dl>
|
||||||
@@ -102,14 +109,14 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); })
|
|||||||
<dd><a class="el" href="structSignalInfo.html">SignalInfo</a></dd></dl>
|
<dd><a class="el" href="structSignalInfo.html">SignalInfo</a></dd></dl>
|
||||||
<dl class="classindex even">
|
<dl class="classindex even">
|
||||||
<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
|
<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
|
||||||
<dd><a class="el" href="classTreeNode.html">TreeNode</a></dd></dl>
|
<dd><a class="el" href="classTreeNode.html">TreeNode</a></dd><dd><a class="el" href="classTypeFactory.html">TypeFactory</a></dd></dl>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_database.h File Reference</title>
|
<title>DBC Framework: dbc_database.h File Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__database_8h.html',''); initResiza
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -112,8 +119,8 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_database.h Source File</title>
|
<title>DBC Framework: dbc_database.h Source File</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -51,6 +51,11 @@ $(function() {
|
|||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
<div id="nav-tree">
|
<div id="nav-tree">
|
||||||
@@ -77,9 +82,16 @@ $(document).ready(function(){initNavTree('dbc__database_8h_source.html',''); ini
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -94,21 +106,23 @@ $(document).ready(function(){initNavTree('dbc__database_8h_source.html',''); ini
|
|||||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
|
||||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include "<a class="code" href="frame__info_8h.html">frame_info.h</a>"</span></div>
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include "<a class="code" href="frame__info_8h.html">frame_info.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00022" data-start="{" data-end="};">
|
||||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="structDbcDatabase.html"> 22</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> {</div>
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="structDbcDatabase.html"> 22</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> {</div>
|
||||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b"> 23</a></span> std::vector<FrameInfo> <a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>; </div>
|
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b"> 23</a></span> std::vector<FrameInfo> <a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>; </div>
|
||||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span>};</div>
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span>};</div>
|
||||||
|
</div>
|
||||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
|
||||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DATABASE_H */</span><span class="preprocessor"></span></div>
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DATABASE_H */</span><span class="preprocessor"></span></div>
|
||||||
<div class="ttc" id="aframe__info_8h_html"><div class="ttname"><a href="frame__info_8h.html">frame_info.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="aframe__info_8h_html"><div class="ttname"><a href="frame__info_8h.html">frame_info.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
||||||
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector< FrameInfo > frames</div><div class="ttdef"><b>Definition:</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
|
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector< FrameInfo > frames</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_decode_builder.cpp File Reference</title>
|
<title>DBC Framework: dbc_decode_builder.cpp File Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp.html',''); i
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -102,8 +109,8 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp.html',''); i
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_decode_builder.cpp Source File</title>
|
<title>DBC Framework: dbc_decode_builder.cpp Source File</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -51,6 +51,11 @@ $(function() {
|
|||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
<div id="nav-tree">
|
<div id="nav-tree">
|
||||||
@@ -77,9 +82,16 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp_source.html'
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -89,6 +101,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp_source.html'
|
|||||||
<a href="dbc__decode__builder_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
<a href="dbc__decode__builder_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
||||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include "<a class="code" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a>"</span></div>
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include "<a class="code" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00014" data-start="{" data-end="}">
|
||||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b"> 14</a></span><a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> <a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &source)<span class="keyword"> const </span>{</div>
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b"> 14</a></span><a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> <a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &source)<span class="keyword"> const </span>{</div>
|
||||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> result;</div>
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> result;</div>
|
||||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
|
||||||
@@ -132,63 +145,64 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp_source.html'
|
|||||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
|
||||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> result;</div>
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> result;</div>
|
||||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div>
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div>
|
||||||
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
|
</div>
|
||||||
|
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
|
||||||
<div class="ttc" id="adbc__decode__builder_8h_html"><div class="ttname"><a href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="adbc__decode__builder_8h_html"><div class="ttname"><a href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
||||||
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector< FrameInfo > frames</div><div class="ttdef"><b>Definition:</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
|
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector< FrameInfo > frames</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00132">decode_database.h:132</a></div></div>
|
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00111">decode_database.h:111</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00072">decode_database.h:72</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00061">decode_database.h:61</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html_a1d3c54055c0cbceb73adf551f7067f23"><div class="ttname"><a href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">DecodeFrame::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00077">decode_database.h:77</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html_a1d3c54055c0cbceb73adf551f7067f23"><div class="ttname"><a href="structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23">DecodeFrame::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00066">decode_database.h:66</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html_a2551102670c4a540fced4c71da0b369d"><div class="ttname"><a href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">DecodeFrame::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00078">decode_database.h:78</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html_a2551102670c4a540fced4c71da0b369d"><div class="ttname"><a href="structDecodeFrame.html#a2551102670c4a540fced4c71da0b369d">DecodeFrame::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00067">decode_database.h:67</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html_a25819ef907a32391af5c9f7cae9cdb22"><div class="ttname"><a href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">DecodeFrame::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00080">decode_database.h:80</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html_a25819ef907a32391af5c9f7cae9cdb22"><div class="ttname"><a href="structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22">DecodeFrame::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00069">decode_database.h:69</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html_a3ee2348d781f8f15aaf87e8dcf57ec41"><div class="ttname"><a href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">DecodeFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00075">decode_database.h:75</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html_a3ee2348d781f8f15aaf87e8dcf57ec41"><div class="ttname"><a href="structDecodeFrame.html#a3ee2348d781f8f15aaf87e8dcf57ec41">DecodeFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00064">decode_database.h:64</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00076">decode_database.h:76</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00074">decode_database.h:74</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00063">decode_database.h:63</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00073">decode_database.h:73</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00062">decode_database.h:62</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html_ad78241dc40c793aabb8495b6989b81a9"><div class="ttname"><a href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">DecodeFrame::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00079">decode_database.h:79</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html_ad78241dc40c793aabb8495b6989b81a9"><div class="ttname"><a href="structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9">DecodeFrame::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00068">decode_database.h:68</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00039">decode_database.h:39</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00039">decode_database.h:39</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a0fb84e19a0ab3bd50b6f65c1075ebc25"><div class="ttname"><a href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">DecodeSignal::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a0fb84e19a0ab3bd50b6f65c1075ebc25"><div class="ttname"><a href="structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25">DecodeSignal::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00047">decode_database.h:47</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a38eed9ca7581423fd8bfbedcffc12092"><div class="ttname"><a href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">DecodeSignal::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a38eed9ca7581423fd8bfbedcffc12092"><div class="ttname"><a href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">DecodeSignal::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a4a6ba87142a9badbf0ca830e9e709cb7"><div class="ttname"><a href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">DecodeSignal::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a4a6ba87142a9badbf0ca830e9e709cb7"><div class="ttname"><a href="structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7">DecodeSignal::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00048">decode_database.h:48</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00040">decode_database.h:40</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00040">decode_database.h:40</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_abdbae62a64d2df716bf60c6b67b30eaa"><div class="ttname"><a href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">DecodeSignal::receivers</a></div><div class="ttdeci">std::vector< std::string > receivers</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00050">decode_database.h:50</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_abdbae62a64d2df716bf60c6b67b30eaa"><div class="ttname"><a href="structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa">DecodeSignal::receivers</a></div><div class="ttdeci">std::vector< std::string > receivers</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00050">decode_database.h:50</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00042">decode_database.h:42</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00042">decode_database.h:42</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_ae28c905d4a2bc86419c2a8361bfea473"><div class="ttname"><a href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">DecodeSignal::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00051">decode_database.h:51</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_ae28c905d4a2bc86419c2a8361bfea473"><div class="ttname"><a href="structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473">DecodeSignal::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00051">decode_database.h:51</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html_a34b726afaad2ac5c697fdb2ac070cdaf"><div class="ttname"><a href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">FrameInfo::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00027">frame_info.h:27</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html_a34b726afaad2ac5c697fdb2ac070cdaf"><div class="ttname"><a href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">FrameInfo::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00027">frame_info.h:27</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html_a4737a5420213ad4304724e39f3a4e55d"><div class="ttname"><a href="structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d">FrameInfo::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00029">frame_info.h:29</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html_a4737a5420213ad4304724e39f3a4e55d"><div class="ttname"><a href="structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d">FrameInfo::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00029">frame_info.h:29</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html_a92749ec3798d4211a505860fb389a9e8"><div class="ttname"><a href="structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8">FrameInfo::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00031">frame_info.h:31</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html_a92749ec3798d4211a505860fb389a9e8"><div class="ttname"><a href="structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8">FrameInfo::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00031">frame_info.h:31</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html_aa2b198ea0f55e560c123d35e7b3ecab9"><div class="ttname"><a href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">FrameInfo::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00030">frame_info.h:30</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html_aa2b198ea0f55e560c123d35e7b3ecab9"><div class="ttname"><a href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">FrameInfo::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00030">frame_info.h:30</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html_abb53a7f93ed7abc0ea1ae4a8ccafcdcb"><div class="ttname"><a href="structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb">FrameInfo::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00025">frame_info.h:25</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html_abb53a7f93ed7abc0ea1ae4a8ccafcdcb"><div class="ttname"><a href="structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb">FrameInfo::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00025">frame_info.h:25</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html_ace75121294f9d89b762080ab5643293c"><div class="ttname"><a href="structFrameInfo.html#ace75121294f9d89b762080ab5643293c">FrameInfo::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00032">frame_info.h:32</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html_ace75121294f9d89b762080ab5643293c"><div class="ttname"><a href="structFrameInfo.html#ace75121294f9d89b762080ab5643293c">FrameInfo::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00032">frame_info.h:32</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html_aee518b33f1000bf0b7f6e4a87474c943"><div class="ttname"><a href="structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943">FrameInfo::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00028">frame_info.h:28</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html_aee518b33f1000bf0b7f6e4a87474c943"><div class="ttname"><a href="structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943">FrameInfo::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00028">frame_info.h:28</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html_af470b0742c05bfbffc31c51a68f5c05e"><div class="ttname"><a href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">FrameInfo::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00026">frame_info.h:26</a></div></div>
|
<div class="ttc" id="astructFrameInfo_html_af470b0742c05bfbffc31c51a68f5c05e"><div class="ttname"><a href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">FrameInfo::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00026">frame_info.h:26</a></div></div>
|
||||||
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00099">decode_database.h:99</a></div></div>
|
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00080">decode_database.h:80</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html"><div class="ttname"><a href="structSignalInfo.html">SignalInfo</a></div><div class="ttdoc">Describes one signal inside a DBC frame.</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00022">signal_info.h:22</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html"><div class="ttname"><a href="structSignalInfo.html">SignalInfo</a></div><div class="ttdoc">Describes one signal inside a DBC frame.</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00022">signal_info.h:22</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_a1008b5201f71848177217bd52fb84baa"><div class="ttname"><a href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">SignalInfo::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00025">signal_info.h:25</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_a1008b5201f71848177217bd52fb84baa"><div class="ttname"><a href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">SignalInfo::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00025">signal_info.h:25</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_a1f214f03e94ef5794de2d3367bfcbd01"><div class="ttname"><a href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">SignalInfo::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00032">signal_info.h:32</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_a1f214f03e94ef5794de2d3367bfcbd01"><div class="ttname"><a href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">SignalInfo::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00032">signal_info.h:32</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_a2c95562fd0b29327a7fd7b1e6feee7f3"><div class="ttname"><a href="structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3">SignalInfo::receivers</a></div><div class="ttdeci">std::vector< std::string > receivers</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00033">signal_info.h:33</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_a2c95562fd0b29327a7fd7b1e6feee7f3"><div class="ttname"><a href="structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3">SignalInfo::receivers</a></div><div class="ttdeci">std::vector< std::string > receivers</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00033">signal_info.h:33</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_a379e422a00cad56f896cacf60455b088"><div class="ttname"><a href="structSignalInfo.html#a379e422a00cad56f896cacf60455b088">SignalInfo::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00023">signal_info.h:23</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_a379e422a00cad56f896cacf60455b088"><div class="ttname"><a href="structSignalInfo.html#a379e422a00cad56f896cacf60455b088">SignalInfo::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00023">signal_info.h:23</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_a52a52b320eef92fbcb4626307f9a498f"><div class="ttname"><a href="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f">SignalInfo::isSigned</a></div><div class="ttdeci">bool isSigned</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00027">signal_info.h:27</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_a52a52b320eef92fbcb4626307f9a498f"><div class="ttname"><a href="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f">SignalInfo::isSigned</a></div><div class="ttdeci">bool isSigned</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00027">signal_info.h:27</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_ab7d0769f47aa540656b22e4e49db517e"><div class="ttname"><a href="structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e">SignalInfo::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00029">signal_info.h:29</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_ab7d0769f47aa540656b22e4e49db517e"><div class="ttname"><a href="structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e">SignalInfo::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00029">signal_info.h:29</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_ac99ba7563a5dad01e39c4257216953f5"><div class="ttname"><a href="structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5">SignalInfo::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00034">signal_info.h:34</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_ac99ba7563a5dad01e39c4257216953f5"><div class="ttname"><a href="structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5">SignalInfo::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00034">signal_info.h:34</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_ace290724f9801521609aedaa946d61f1"><div class="ttname"><a href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">SignalInfo::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00024">signal_info.h:24</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_ace290724f9801521609aedaa946d61f1"><div class="ttname"><a href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">SignalInfo::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00024">signal_info.h:24</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_ada7bf94fbeaa26bd08c73982b5af255b"><div class="ttname"><a href="structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b">SignalInfo::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00030">signal_info.h:30</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_ada7bf94fbeaa26bd08c73982b5af255b"><div class="ttname"><a href="structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b">SignalInfo::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00030">signal_info.h:30</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_adf1c4331b9eabced0d7fdda40ff0eb52"><div class="ttname"><a href="structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52">SignalInfo::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00031">signal_info.h:31</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_adf1c4331b9eabced0d7fdda40ff0eb52"><div class="ttname"><a href="structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52">SignalInfo::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00031">signal_info.h:31</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_ae4f78d99a2750aa564d7eba860171499"><div class="ttname"><a href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">SignalInfo::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00028">signal_info.h:28</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_ae4f78d99a2750aa564d7eba860171499"><div class="ttname"><a href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">SignalInfo::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00028">signal_info.h:28</a></div></div>
|
||||||
<div class="ttc" id="astructSignalInfo_html_af363b1563fb4c7cc8973f9a80c06846c"><div class="ttname"><a href="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c">SignalInfo::isLittleEndian</a></div><div class="ttdeci">bool isLittleEndian</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00026">signal_info.h:26</a></div></div>
|
<div class="ttc" id="astructSignalInfo_html_af363b1563fb4c7cc8973f9a80c06846c"><div class="ttname"><a href="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c">SignalInfo::isLittleEndian</a></div><div class="ttdeci">bool isLittleEndian</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00026">signal_info.h:26</a></div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_decode_builder.h File Reference</title>
|
<title>DBC Framework: dbc_decode_builder.h File Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8h.html',''); ini
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -112,8 +119,8 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_decode_builder.h Source File</title>
|
<title>DBC Framework: dbc_decode_builder.h Source File</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -51,6 +51,11 @@ $(function() {
|
|||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
<div id="nav-tree">
|
<div id="nav-tree">
|
||||||
@@ -77,9 +82,16 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8h_source.html','
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -93,25 +105,27 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8h_source.html','
|
|||||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include "<a class="code" href="dbc__database_8h.html">dbc_database.h</a>"</span></div>
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include "<a class="code" href="dbc__database_8h.html">dbc_database.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include "<a class="code" href="decode__database_8h.html">decode_database.h</a>"</span></div>
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include "<a class="code" href="decode__database_8h.html">decode_database.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00021" data-start="{" data-end="};">
|
||||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="classDbcDecodeBuilder.html"> 21</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a> {</div>
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="classDbcDecodeBuilder.html"> 21</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a> {</div>
|
||||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">public</span>:</div>
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">public</span>:</div>
|
||||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> <a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &source) <span class="keyword">const</span>;</div>
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> <a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &source) <span class="keyword">const</span>;</div>
|
||||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>};</div>
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>};</div>
|
||||||
|
</div>
|
||||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
|
||||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DECODE_BUILDER_H */</span><span class="preprocessor"></span></div>
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DECODE_BUILDER_H */</span><span class="preprocessor"></span></div>
|
||||||
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
|
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
|
||||||
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
|
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
|
||||||
<div class="ttc" id="adbc__database_8h_html"><div class="ttname"><a href="dbc__database_8h.html">dbc_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="adbc__database_8h_html"><div class="ttname"><a href="dbc__database_8h.html">dbc_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
<div class="ttc" id="adecode__database_8h_html"><div class="ttname"><a href="decode__database_8h.html">decode_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="adecode__database_8h_html"><div class="ttname"><a href="decode__database_8h.html">decode_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00132">decode_database.h:132</a></div></div>
|
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00111">decode_database.h:111</a></div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_decoder.cpp File Reference</title>
|
<title>DBC Framework: dbc_decoder.cpp File Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp.html',''); initResiz
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -102,8 +109,8 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp.html',''); initResiz
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_decoder.cpp Source File</title>
|
<title>DBC Framework: dbc_decoder.cpp Source File</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -51,6 +51,11 @@ $(function() {
|
|||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
<div id="nav-tree">
|
<div id="nav-tree">
|
||||||
@@ -77,9 +82,16 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp_source.html',''); in
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -89,6 +101,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp_source.html',''); in
|
|||||||
<a href="dbc__decoder_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
<a href="dbc__decoder_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
||||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include "<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>"</span></div>
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include "<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00014" data-start="{" data-end="}">
|
||||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da"> 14</a></span><span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_function" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &database,</div>
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da"> 14</a></span><span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_function" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &database,</div>
|
||||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> std::uint32_t canId,</div>
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> std::uint32_t canId,</div>
|
||||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordtype">bool</span> isExtended)<span class="keyword"> const </span>{</div>
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordtype">bool</span> isExtended)<span class="keyword"> const </span>{</div>
|
||||||
@@ -105,7 +118,9 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp_source.html',''); in
|
|||||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
|
||||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordflow">return</span> &database.frames[index];</div>
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordflow">return</span> &database.frames[index];</div>
|
||||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>}</div>
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>}</div>
|
||||||
|
</div>
|
||||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00031" data-start="{" data-end="}">
|
||||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7"> 31</a></span><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> <a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &database,</div>
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7"> 31</a></span><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> <a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &database,</div>
|
||||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &frame)<span class="keyword"> const </span>{</div>
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &frame)<span class="keyword"> const </span>{</div>
|
||||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result;</div>
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result;</div>
|
||||||
@@ -131,140 +146,142 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp_source.html',''); in
|
|||||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div>
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div>
|
||||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
|
||||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> == ValueType::Signed)</div>
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> == ValueType::Signed)</div>
|
||||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec">rawValue</a> = SignExtend (unsignedValue, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>);</div>
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a> = SignExtend(unsignedValue, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>);</div>
|
||||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">else</span></div>
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">else</span></div>
|
||||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec">rawValue</a> = <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span> (unsignedValue);</div>
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a> = unsignedValue;</div>
|
||||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
|
||||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> =</div>
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">double</span> numericValue;</div>
|
||||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> (<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span> (decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec">rawValue</a>) * signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a>) + signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a>;</div>
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *signedValue = std::get_if<std::int64_t>(&decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a>))</div>
|
||||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> = <span class="keyword">true</span>;</div>
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> numericValue = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(*signedValue);</div>
|
||||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">else</span></div>
|
||||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> result.signals.push_back (decoded);</div>
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> numericValue = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(std::get<std::uint64_t>(decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a>));</div>
|
||||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> }</div>
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> = numericValue * signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> + signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a>;</div>
|
||||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> decoded.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> = <span class="keyword">true</span>;</div>
|
||||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">return</span> result;</div>
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
|
||||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>}</div>
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> result.signals.push_back(decoded);</div>
|
||||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> }</div>
|
||||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keywordtype">bool</span> DbcDecoder::ExtractUnsigned (<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
|
||||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &signal,</div>
|
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> result;</div>
|
||||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> std::uint64_t &value) {</div>
|
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span>}</div>
|
||||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span> ((signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> == 0U) || (signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> > 64U))</div>
|
</div>
|
||||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
|
||||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
|
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keywordtype">bool</span> DbcDecoder::ExtractUnsigned(<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
||||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> == ByteOrder::Intel)</div>
|
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &signal,</div>
|
||||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> ExtractIntel (data, signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a>, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>, value);</div>
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> std::uint64_t &value) {</div>
|
||||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span> ((signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> == 0U) || (signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> > 64U))</div>
|
||||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">return</span> ExtractMotorola (data, signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a>, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>, value);</div>
|
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>}</div>
|
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
|
||||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
|
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">if</span> (signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> == ByteOrder::Intel)</div>
|
||||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keywordtype">bool</span> DbcDecoder::ExtractIntel (<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> ExtractIntel(data, signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a>, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>, value);</div>
|
||||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> std::uint32_t startBit,</div>
|
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
|
||||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> std::uint32_t length,</div>
|
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">return</span> ExtractMotorola(data, signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a>, signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a>, value);</div>
|
||||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> std::uint64_t &value) {</div>
|
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>}</div>
|
||||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> value = 0U;</div>
|
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
|
||||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keywordtype">bool</span> DbcDecoder::ExtractIntel(<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
||||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">for</span> (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {</div>
|
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> std::uint32_t startBit,</div>
|
||||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">const</span> std::uint32_t absoluteBit = startBit + bitIndex;</div>
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> std::uint32_t length,</div>
|
||||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">const</span> std::uint32_t byteIndex = absoluteBit / 8U;</div>
|
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> std::uint64_t &value) {</div>
|
||||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">const</span> std::uint32_t bitInByte = absoluteBit % 8U;</div>
|
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> value = 0U;</div>
|
||||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
|
||||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> (byteIndex >= data.size())</div>
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">for</span> (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {</div>
|
||||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">const</span> std::uint32_t absoluteBit = startBit + bitIndex;</div>
|
||||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">const</span> std::uint32_t byteIndex = absoluteBit / 8U;</div>
|
||||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">const</span> std::uint64_t bitValue =</div>
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">const</span> std::uint32_t bitInByte = absoluteBit % 8U;</div>
|
||||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> (<span class="keyword">static_cast<</span>std::uint64_t<span class="keyword">></span> ((data[byteIndex] >> bitInByte) & 0x01U) << bitIndex);</div>
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
|
||||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (byteIndex >= data.size())</div>
|
||||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> value |= bitValue;</div>
|
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> }</div>
|
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
|
||||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
|
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">const</span> std::uint64_t bitValue =</div>
|
||||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> (<span class="keyword">static_cast<</span>std::uint64_t<span class="keyword">></span>((data[byteIndex] >> bitInByte) & 0x01U) << bitIndex);</div>
|
||||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span>}</div>
|
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
|
||||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
|
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> value |= bitValue;</div>
|
||||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="keywordtype">bool</span> DbcDecoder::ExtractMotorola (<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
|
||||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> std::uint32_t startBit,</div>
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
|
||||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> std::uint32_t length,</div>
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> std::uint64_t &value) {</div>
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span>}</div>
|
||||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="comment">/*</span></div>
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
|
||||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"> * DBC Motorola bit numbering:</span></div>
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keywordtype">bool</span> DbcDecoder::ExtractMotorola(<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
||||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment"> * - startBit points to the most significant bit of the signal</span></div>
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> std::uint32_t startBit,</div>
|
||||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment"> * - inside a byte, bit numbering goes 7..0</span></div>
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> std::uint32_t length,</div>
|
||||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment"> * - crossing byte boundary moves to the next byte, bit 7</span></div>
|
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> std::uint64_t &value) {</div>
|
||||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment"> */</span></div>
|
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="comment">/*</span></div>
|
||||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
|
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment"> * DBC Motorola bit numbering:</span></div>
|
||||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> value = 0U;</div>
|
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment"> * - startBit points to the most significant bit of the signal</span></div>
|
||||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
|
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment"> * - inside a byte, bit numbering goes 7..0</span></div>
|
||||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> std::int32_t currentBit = <span class="keyword">static_cast<</span>std::int32_t<span class="keyword">></span> (startBit);</div>
|
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment"> * - crossing byte boundary moves to the next byte, bit 7</span></div>
|
||||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
|
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment"> * Example: a signal starting at 7 follows 7..0, 15..8, 23..16.</span></div>
|
||||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">for</span> (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {</div>
|
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment"> */</span></div>
|
||||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> (currentBit < 0)</div>
|
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
|
||||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> value = 0U;</div>
|
||||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
|
||||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">const</span> std::uint32_t absoluteBit = <span class="keyword">static_cast<</span>std::uint32_t<span class="keyword">></span> (currentBit);</div>
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> std::size_t byteIndex = startBit / 8U;</div>
|
||||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">const</span> std::uint32_t byteIndex = absoluteBit / 8U;</div>
|
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> std::uint32_t bitInByte = startBit % 8U;</div>
|
||||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">const</span> std::uint32_t bitFromMsb = absoluteBit % 8U;</div>
|
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
|
||||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">const</span> std::uint32_t bitInByte = 7U - bitFromMsb;</div>
|
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">for</span> (std::uint32_t bitIndex = 0U; bitIndex < length; ++bitIndex) {</div>
|
||||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
|
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span> (byteIndex >= data.size())</div>
|
||||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span> (byteIndex >= data.size())</div>
|
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
|
||||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
|
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> value <<= 1U;</div>
|
||||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> value <<= 1U;</div>
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> value |= <span class="keyword">static_cast<</span>std::uint64_t<span class="keyword">></span>((data[byteIndex] >> bitInByte) & 0x01U);</div>
|
||||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> value |= <span class="keyword">static_cast<</span>std::uint64_t<span class="keyword">></span> ((data[byteIndex] >> bitInByte) & 0x01U);</div>
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
|
||||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (bitInByte == 0U) {</div>
|
||||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span> ((absoluteBit % 8U) == 7U)</div>
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> ++byteIndex;</div>
|
||||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> currentBit = <span class="keyword">static_cast<</span>std::int32_t<span class="keyword">></span> ((byteIndex + 1U) * 8U);</div>
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> bitInByte = 7U;</div>
|
||||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">else</span></div>
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> } <span class="keywordflow">else</span></div>
|
||||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> --currentBit;</div>
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> --bitInByte;</div>
|
||||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div>
|
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> }</div>
|
||||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
|
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
|
||||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span>}</div>
|
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span>}</div>
|
||||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
|
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
|
||||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span>std::int64_t DbcDecoder::SignExtend (std::uint64_t value, std::uint32_t bitLength) {</div>
|
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>std::int64_t DbcDecoder::SignExtend(std::uint64_t value, std::uint32_t bitLength) {</div>
|
||||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span> ((bitLength == 0U) || (bitLength >= 64U))</div>
|
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span> ((bitLength == 0U) || (bitLength > 64U))</div>
|
||||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span> (value);</div>
|
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">return</span> 0;</div>
|
||||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
|
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
|
||||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">const</span> std::uint64_t signMask = (<span class="keyword">static_cast<</span>std::uint64_t<span class="keyword">></span> (1U) << (bitLength - 1U));</div>
|
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">const</span> std::uint64_t signMask = std::uint64_t(1U) << (bitLength - 1U);</div>
|
||||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">const</span> std::uint64_t valueMask = (<span class="keyword">static_cast<</span>std::uint64_t<span class="keyword">></span> (1U) << bitLength) - 1U;</div>
|
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">const</span> std::uint64_t valueMask = (bitLength == 64U)</div>
|
||||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> ? ~std::uint64_t(0U)</div>
|
||||||
|
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> : (std::uint64_t(1U) << bitLength) - 1U;</div>
|
||||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> value &= valueMask;</div>
|
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> value &= valueMask;</div>
|
||||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
|
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
|
||||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> ((value & signMask) == 0U)</div>
|
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> ((value & signMask) == 0U)</div>
|
||||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span>(value);</div>
|
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span>(value);</div>
|
||||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
|
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
|
||||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span> (value | (~valueMask));</div>
|
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// The complemented magnitude fits int64_t, including for INT64_MIN.</span></div>
|
||||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span>}</div>
|
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span> -1 - <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span>((~value) & valueMask);</div>
|
||||||
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span>}</div>
|
||||||
<div class="ttc" id="aclassDbcDecoder_html_ab2cfb2fb711c95d3a29365546b89f3da"><div class="ttname"><a href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a></div><div class="ttdeci">const DecodeFrame * FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8cpp_source.html#l00014">dbc_decoder.cpp:14</a></div></div>
|
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcDecoder_html_ab2cfb2fb711c95d3a29365546b89f3da"><div class="ttname"><a href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a></div><div class="ttdeci">const DecodeFrame * FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00014">dbc_decoder.cpp:14</a></div></div>
|
||||||
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00132">decode_database.h:132</a></div></div>
|
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00111">decode_database.h:111</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00072">decode_database.h:72</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00061">decode_database.h:61</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00039">decode_database.h:39</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00039">decode_database.h:39</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00042">decode_database.h:42</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00042">decode_database.h:42</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00055">dbc_decoder.h:55</a></div></div>
|
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00051">dbc_decoder.h:51</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00058">dbc_decoder.h:58</a></div></div>
|
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00054">dbc_decoder.h:54</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00056">dbc_decoder.h:56</a></div></div>
|
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00052">dbc_decoder.h:52</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00038">dbc_decoder.h:38</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00037">dbc_decoder.h:37</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html_a5138b825940e34689f7b3891627ee9ec"><div class="ttname"><a href="structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec">DecodedSignalValue::rawValue</a></div><div class="ttdeci">std::int64_t rawValue</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00040">dbc_decoder.h:40</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00040">dbc_decoder.h:40</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00041">dbc_decoder.h:41</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html_a95db4f7f93b5f311e8f272833e45055e"><div class="ttname"><a href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">DecodedSignalValue::rawValue</a></div><div class="ttdeci">std::variant< std::int64_t, std::uint64_t > rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00039">dbc_decoder.h:39</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00042">dbc_decoder.h:42</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00041">dbc_decoder.h:41</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00039">dbc_decoder.h:39</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00038">dbc_decoder.h:38</a></div></div>
|
||||||
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00099">decode_database.h:99</a></div></div>
|
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00080">decode_database.h:80</a></div></div>
|
||||||
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00023">dbc_decoder.h:23</a></div></div>
|
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
|
||||||
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector< std::uint8_t > data</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
|
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector< std::uint8_t > data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
|
||||||
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
|
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
|
||||||
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
|
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_decoder.h File Reference</title>
|
<title>DBC Framework: dbc_decoder.h File Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h.html',''); initResizab
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -91,8 +98,9 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h.html',''); initResizab
|
|||||||
|
|
||||||
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
|
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
|
||||||
<a href="#details">More...</a></p>
|
<a href="#details">More...</a></p>
|
||||||
<div class="textblock"><code>#include <vector></code><br />
|
<div class="textblock"><code>#include <cstdint></code><br />
|
||||||
<code>#include <cstdint></code><br />
|
<code>#include <variant></code><br />
|
||||||
|
<code>#include <vector></code><br />
|
||||||
<code>#include "<a class="el" href="decode__database_8h_source.html">decode_database.h</a>"</code><br />
|
<code>#include "<a class="el" href="decode__database_8h_source.html">decode_database.h</a>"</code><br />
|
||||||
</div>
|
</div>
|
||||||
<p><a href="dbc__decoder_8h_source.html">Go to the source code of this file.</a></p>
|
<p><a href="dbc__decoder_8h_source.html">Go to the source code of this file.</a></p>
|
||||||
@@ -122,8 +130,8 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_decoder.h Source File</title>
|
<title>DBC Framework: dbc_decoder.h Source File</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -51,6 +51,11 @@ $(function() {
|
|||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
<div id="nav-tree">
|
<div id="nav-tree">
|
||||||
@@ -77,9 +82,16 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h_source.html',''); init
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -90,100 +102,102 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h_source.html',''); init
|
|||||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#ifndef DBC_DECODER_H</span></div>
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#ifndef DBC_DECODER_H</span></div>
|
||||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#define DBC_DECODER_H</span></div>
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#define DBC_DECODER_H</span></div>
|
||||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
|
||||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <vector></span></div>
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <cstdint></span></div>
|
||||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <cstdint></span></div>
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <variant></span></div>
|
||||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include <vector></span></div>
|
||||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include "<a class="code" href="decode__database_8h.html">decode_database.h</a>"</span></div>
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
|
||||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include "<a class="code" href="decode__database_8h.html">decode_database.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="structRawCanFrame.html"> 23</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> {</div>
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
|
||||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4"> 24</a></span> std::uint32_t <a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a>; </div>
|
<div class="foldopen" id="foldopen00024" data-start="{" data-end="};">
|
||||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7"> 25</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a>; </div>
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="structRawCanFrame.html"> 24</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> {</div>
|
||||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83"> 26</a></span> std::vector<std::uint8_t> <a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>; </div>
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4"> 25</a></span> std::uint32_t <a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a>; </div>
|
||||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a>()</div>
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7"> 26</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a>; </div>
|
||||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> : <a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> (0U)</div>
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83"> 27</a></span> std::vector<std::uint8_t> <a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>; </div>
|
||||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> , <a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> (false)</div>
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a>()</div>
|
||||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> , <a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>() {</div>
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> : <a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a>(0U), <a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a>(false), <a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>() {</div>
|
||||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> }</div>
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> }</div>
|
||||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>};</div>
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>};</div>
|
||||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
|
</div>
|
||||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html"> 38</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> {</div>
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
|
||||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7"> 39</a></span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> *<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>; </div>
|
<div class="foldopen" id="foldopen00037" data-start="{" data-end="};">
|
||||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec"> 40</a></span> std::int64_t <a class="code hl_variable" href="structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec">rawValue</a>; </div>
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html"> 37</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> {</div>
|
||||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978"> 41</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a>; </div>
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7"> 38</a></span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> *<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>; </div>
|
||||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686"> 42</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>; </div>
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e"> 39</a></span> std::variant<std::int64_t, std::uint64_t> <a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a>; </div>
|
||||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a>()</div>
|
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978"> 40</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a>; </div>
|
||||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> : <a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a> (nullptr)</div>
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686"> 41</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>; </div>
|
||||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> , <a class="code hl_variable" href="structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec">rawValue</a> (0)</div>
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a>()</div>
|
||||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> , <a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a> (0.0)</div>
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> : <a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>(nullptr), <a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a>(std::uint64_t(0U)), <a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a>(0.0), <a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>(false) {</div>
|
||||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> , <a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a> (false) {</div>
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> }</div>
|
||||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> }</div>
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span>};</div>
|
||||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>};</div>
|
</div>
|
||||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
|
||||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html"> 55</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> {</div>
|
<div class="foldopen" id="foldopen00051" data-start="{" data-end="};">
|
||||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c"> 56</a></span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>; </div>
|
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html"> 51</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> {</div>
|
||||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8"> 57</a></span> std::vector<DecodedSignalValue> signals; </div>
|
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c"> 52</a></span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>; </div>
|
||||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0"> 58</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>; </div>
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#adae123ac7fbb4a5c314b64b01109f4a8"> 53</a></span> std::vector<DecodedSignalValue> signals; </div>
|
||||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a>()</div>
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0"> 54</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>; </div>
|
||||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> : <a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> (nullptr)</div>
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a>()</div>
|
||||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> , signals()</div>
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> : <a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>(nullptr), signals(), <a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a>(false) {</div>
|
||||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> , <a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> (false) {</div>
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div>
|
||||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> }</div>
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>};</div>
|
||||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span>};</div>
|
</div>
|
||||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
|
||||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="classDbcDecoder.html"> 70</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a> {</div>
|
<div class="foldopen" id="foldopen00064" data-start="{" data-end="};">
|
||||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">public</span>:</div>
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="classDbcDecoder.html"> 64</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a> {</div>
|
||||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_function" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &database,</div>
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keyword">public</span>:</div>
|
||||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> std::uint32_t canId,</div>
|
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> *<a class="code hl_function" href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">FindFrame</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &database,</div>
|
||||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">bool</span> isExtended) <span class="keyword">const</span>;</div>
|
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> std::uint32_t canId,</div>
|
||||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
|
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">bool</span> isExtended) <span class="keyword">const</span>;</div>
|
||||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> <a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a> (<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &database,</div>
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
|
||||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &frame) <span class="keyword">const</span>;</div>
|
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> <a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> &database,</div>
|
||||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
|
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">const</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> &frame) <span class="keyword">const</span>;</div>
|
||||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">private</span>:</div>
|
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
|
||||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractUnsigned (<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keyword">private</span>:</div>
|
||||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &signal,</div>
|
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractUnsigned(<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
||||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> std::uint64_t &value);</div>
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> &signal,</div>
|
||||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
|
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> std::uint64_t &value);</div>
|
||||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractIntel (<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
|
||||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> std::uint32_t startBit,</div>
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractIntel(<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
||||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> std::uint32_t length,</div>
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> std::uint32_t startBit,</div>
|
||||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> std::uint64_t &value);</div>
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> std::uint32_t length,</div>
|
||||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> std::uint64_t &value);</div>
|
||||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractMotorola (<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
|
||||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> std::uint32_t startBit,</div>
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> ExtractMotorola(<span class="keyword">const</span> std::vector<std::uint8_t> &data,</div>
|
||||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> std::uint32_t length,</div>
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> std::uint32_t startBit,</div>
|
||||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> std::uint64_t &value);</div>
|
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> std::uint32_t length,</div>
|
||||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
|
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> std::uint64_t &value);</div>
|
||||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">static</span> std::int64_t SignExtend (std::uint64_t value, std::uint32_t bitLength);</div>
|
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
|
||||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span>};</div>
|
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">static</span> std::int64_t SignExtend(std::uint64_t value, std::uint32_t bitLength);</div>
|
||||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
|
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>};</div>
|
||||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DECODER_H */</span><span class="preprocessor"></span></div>
|
</div>
|
||||||
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00070">dbc_decoder.h:70</a></div></div>
|
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
|
||||||
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_DECODER_H */</span><span class="preprocessor"></span></div>
|
||||||
<div class="ttc" id="aclassDbcDecoder_html_ab2cfb2fb711c95d3a29365546b89f3da"><div class="ttname"><a href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a></div><div class="ttdeci">const DecodeFrame * FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8cpp_source.html#l00014">dbc_decoder.cpp:14</a></div></div>
|
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcDecoder_html_ab2cfb2fb711c95d3a29365546b89f3da"><div class="ttname"><a href="classDbcDecoder.html#ab2cfb2fb711c95d3a29365546b89f3da">DbcDecoder::FindFrame</a></div><div class="ttdeci">const DecodeFrame * FindFrame(const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const</div><div class="ttdoc">Find frame definition by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00014">dbc_decoder.cpp:14</a></div></div>
|
||||||
<div class="ttc" id="adecode__database_8h_html"><div class="ttname"><a href="decode__database_8h.html">decode_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="adecode__database_8h_html"><div class="ttname"><a href="decode__database_8h.html">decode_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00132">decode_database.h:132</a></div></div>
|
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00111">decode_database.h:111</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00072">decode_database.h:72</a></div></div>
|
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00061">decode_database.h:61</a></div></div>
|
||||||
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition:</b> <a href="decode__database_8h_source.html#l00039">decode_database.h:39</a></div></div>
|
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00039">decode_database.h:39</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00055">dbc_decoder.h:55</a></div></div>
|
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00051">dbc_decoder.h:51</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00058">dbc_decoder.h:58</a></div></div>
|
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00054">dbc_decoder.h:54</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00056">dbc_decoder.h:56</a></div></div>
|
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00052">dbc_decoder.h:52</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00038">dbc_decoder.h:38</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00037">dbc_decoder.h:37</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html_a5138b825940e34689f7b3891627ee9ec"><div class="ttname"><a href="structDecodedSignalValue.html#a5138b825940e34689f7b3891627ee9ec">DecodedSignalValue::rawValue</a></div><div class="ttdeci">std::int64_t rawValue</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00040">dbc_decoder.h:40</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00040">dbc_decoder.h:40</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00041">dbc_decoder.h:41</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html_a95db4f7f93b5f311e8f272833e45055e"><div class="ttname"><a href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">DecodedSignalValue::rawValue</a></div><div class="ttdeci">std::variant< std::int64_t, std::uint64_t > rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00039">dbc_decoder.h:39</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00042">dbc_decoder.h:42</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00041">dbc_decoder.h:41</a></div></div>
|
||||||
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00039">dbc_decoder.h:39</a></div></div>
|
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00038">dbc_decoder.h:38</a></div></div>
|
||||||
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00023">dbc_decoder.h:23</a></div></div>
|
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
|
||||||
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector< std::uint8_t > data</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
|
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector< std::uint8_t > data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
|
||||||
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
|
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
|
||||||
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition:</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
|
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -0,0 +1,290 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: dbc_decoder_test.cpp Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('dbc__decoder__test_8cpp_source.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">dbc_decoder_test.cpp</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include "<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>"</span></div>
|
||||||
|
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||||
|
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include <QtTest></span></div>
|
||||||
|
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <limits></span></div>
|
||||||
|
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include <sstream></span></div>
|
||||||
|
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
|
||||||
|
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="keyword">struct </span>DecodeCase {</div>
|
||||||
|
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *name;</div>
|
||||||
|
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> byteOrder;</div>
|
||||||
|
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> std::uint32_t startBit;</div>
|
||||||
|
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> std::uint32_t length;</div>
|
||||||
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> valueType;</div>
|
||||||
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> std::vector<std::uint8_t> data;</div>
|
||||||
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keywordtype">bool</span> valid;</div>
|
||||||
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> std::int64_t rawValue;</div>
|
||||||
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordtype">double</span> factor;</div>
|
||||||
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordtype">double</span> offset;</div>
|
||||||
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordtype">double</span> physicalValue;</div>
|
||||||
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span>};</div>
|
||||||
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
|
||||||
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span>Q_DECLARE_METATYPE(DecodeCase)</div>
|
||||||
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
|
||||||
|
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="keyword">class </span>DbcDecoderTest : <span class="keyword">public</span> QObject {</div>
|
||||||
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> Q_OBJECT</div>
|
||||||
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">private</span> Q_SLOTS:</div>
|
||||||
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">void</span> decode_data();</div>
|
||||||
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">void</span> decode();</div>
|
||||||
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">void</span> boundaries();</div>
|
||||||
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>};</div>
|
||||||
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
|
||||||
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keywordtype">void</span> DbcDecoderTest::decode_data() {</div>
|
||||||
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> QTest::addColumn<DecodeCase>(<span class="stringliteral">"test"</span>);</div>
|
||||||
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">const</span> DecodeCase cases[] = {</div>
|
||||||
|
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> {<span class="stringliteral">"Motorola reproduction"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||||
|
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> {<span class="stringliteral">"Motorola within byte"</span>, ByteOrder::Motorola, 5U, 4U, ValueType::Unsigned, {0xAC}, <span class="keyword">true</span>, 11, 1.0, 0.0, 11.0},</div>
|
||||||
|
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> {<span class="stringliteral">"Motorola unaligned crossing"</span>, ByteOrder::Motorola, 3U, 12U, ValueType::Unsigned, {0xAB, 0xCD}, <span class="keyword">true</span>, 0xBCD, 1.0, 0.0, 3021.0},</div>
|
||||||
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> {<span class="stringliteral">"Motorola starts at bit zero"</span>, ByteOrder::Motorola, 0U, 2U, ValueType::Unsigned, {0x01, 0x80}, <span class="keyword">true</span>, 3, 1.0, 0.0, 3.0},</div>
|
||||||
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> {<span class="stringliteral">"Motorola second byte"</span>, ByteOrder::Motorola, 15U, 16U, ValueType::Unsigned, {0xFF, 0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||||
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> {<span class="stringliteral">"Motorola signed scaled"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Signed, {0xFF, 0xFE}, <span class="keyword">true</span>, -2, 0.5, 10.0, 9.0},</div>
|
||||||
|
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> {<span class="stringliteral">"Motorola 64 bits"</span>, ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0, 0, 0, 0, 0, 0, 0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||||
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> {<span class="stringliteral">"Motorola 64 bits high bit"</span>, ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0x40, 0, 0, 0, 0, 0, 0, 0}, <span class="keyword">true</span>, 0x4000000000000000LL, 1.0, 0.0, 4611686018427387904.0},</div>
|
||||||
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> {<span class="stringliteral">"Motorola short payload"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> {<span class="stringliteral">"Motorola empty payload"</span>, ByteOrder::Motorola, 7U, 8U, ValueType::Unsigned, {}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> {<span class="stringliteral">"Motorola large start"</span>, ByteOrder::Motorola, std::numeric_limits<std::uint32_t>::max(), 8U, ValueType::Unsigned, {0xFF}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> {<span class="stringliteral">"Motorola zero length"</span>, ByteOrder::Motorola, 7U, 0U, ValueType::Unsigned, {0xFF}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> {<span class="stringliteral">"Motorola excessive length"</span>, ByteOrder::Motorola, 7U, 65U, ValueType::Unsigned,</div>
|
||||||
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> std::vector<std::uint8_t>(9U, 0xFF), <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||||
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> {<span class="stringliteral">"Intel regression"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12, 0x34}, <span class="keyword">true</span>, 0x3412, 1.0, 0.0, 13330.0},</div>
|
||||||
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> {<span class="stringliteral">"Intel signed regression"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Signed, {0xFE, 0xFF}, <span class="keyword">true</span>, -2, 0.5, 10.0, 9.0},</div>
|
||||||
|
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> {<span class="stringliteral">"Intel short payload"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0}};</div>
|
||||||
|
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
|
||||||
|
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: cases)</div>
|
||||||
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> QTest::newRow(test.name) << test;</div>
|
||||||
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>}</div>
|
||||||
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
|
||||||
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keywordtype">void</span> DbcDecoderTest::decode() {</div>
|
||||||
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> QFETCH(DecodeCase, test);</div>
|
||||||
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
|
||||||
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a> = test.name;</div>
|
||||||
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = test.byteOrder;</div>
|
||||||
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = test.startBit;</div>
|
||||||
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = test.length;</div>
|
||||||
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = test.valueType;</div>
|
||||||
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = test.factor;</div>
|
||||||
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = test.offset;</div>
|
||||||
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
|
||||||
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
|
||||||
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = 0x123U;</div>
|
||||||
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(test.data.size());</div>
|
||||||
|
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> definition.signals.push_back(signal);</div>
|
||||||
|
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
|
||||||
|
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> database.frames.push_back(definition);</div>
|
||||||
|
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>, <span class="keyword">false</span>), 0U);</div>
|
||||||
|
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
|
||||||
|
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
||||||
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>;</div>
|
||||||
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = test.data;</div>
|
||||||
|
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
|
||||||
|
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> passed = result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> &&</div>
|
||||||
|
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> (result.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == &database.frames[0]) &&</div>
|
||||||
|
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> (result.signals.size() == 1U) &&</div>
|
||||||
|
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> (result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == &database.frames[0].signals[0]) &&</div>
|
||||||
|
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> (result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> == test.valid) &&</div>
|
||||||
|
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> (!test.valid || (((test.valueType == ValueType::Signed)</div>
|
||||||
|
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> ? (std::get_if<std::int64_t>(&result.signals[0].rawValue) &&</div>
|
||||||
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> std::get<std::int64_t>(result.signals[0].rawValue) == test.rawValue)</div>
|
||||||
|
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> : (std::get_if<std::uint64_t>(&result.signals[0].rawValue) &&</div>
|
||||||
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> std::get<std::uint64_t>(result.signals[0].rawValue) ==</div>
|
||||||
|
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> static_cast<std::uint64_t>(test.rawValue))) &&</div>
|
||||||
|
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> (result.signals[0].physicalValue == test.physicalValue)));</div>
|
||||||
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> QVERIFY2(passed, test.name);</div>
|
||||||
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span>}</div>
|
||||||
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
|
||||||
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="keywordtype">void</span> DbcDecoderTest::boundaries() {</div>
|
||||||
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> order: {ByteOrder::Intel, ByteOrder::Motorola}) {</div>
|
||||||
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> type: {ValueType::Unsigned, ValueType::Signed}) {</div>
|
||||||
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">for</span> (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),</div>
|
||||||
|
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> std::uint64_t(0x8000000000000000ULL),</div>
|
||||||
|
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> std::uint64_t(0x8000000000000001ULL),</div>
|
||||||
|
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> std::uint64_t(0xFFFFFFFFFFFFFFFFULL)}) {</div>
|
||||||
|
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
|
||||||
|
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
|
||||||
|
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
|
||||||
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = order == ByteOrder::Intel ? 0U : 7U;</div>
|
||||||
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = 64U;</div>
|
||||||
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = order;</div>
|
||||||
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = type;</div>
|
||||||
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = 0.5;</div>
|
||||||
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = 10.0;</div>
|
||||||
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> definition.signals.push_back(signal);</div>
|
||||||
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> database.frames.push_back(definition);</div>
|
||||||
|
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(0U, <span class="keyword">false</span>), 0U);</div>
|
||||||
|
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
||||||
|
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0U; <span class="keywordtype">byte</span> < 8U; ++byte) {</div>
|
||||||
|
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> shift = (order == ByteOrder::Intel ? byte : 7U - byte) * 8U;</div>
|
||||||
|
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.push_back(<span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(bits >> shift));</div>
|
||||||
|
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> }</div>
|
||||||
|
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">const</span> <span class="keyword">auto</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
|
||||||
|
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">const</span> std::int64_t signedExpected = bits <= 0x7FFFFFFFFFFFFFFFULL</div>
|
||||||
|
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> ? <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span>(bits)</div>
|
||||||
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> : std::numeric_limits<std::int64_t>::min() +</div>
|
||||||
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> static_cast<std::int64_t>(bits - 0x8000000000000000ULL);</div>
|
||||||
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">const</span> <span class="keyword">auto</span> &decoded = result.signals.at(0U);</div>
|
||||||
|
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">const</span> <span class="keyword">auto</span> expected = type == ValueType::Unsigned</div>
|
||||||
|
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> ? std::variant<std::int64_t, std::uint64_t>(bits)</div>
|
||||||
|
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> : std::variant<std::int64_t, std::uint64_t>(signedExpected);</div>
|
||||||
|
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">const</span> <span class="keywordtype">double</span> physical = (type == ValueType::Unsigned</div>
|
||||||
|
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> ? <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(bits)</div>
|
||||||
|
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> : static_cast<double>(signedExpected)) *</div>
|
||||||
|
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> 0.5 +</div>
|
||||||
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> 10.0;</div>
|
||||||
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> std::ostringstream actualText;</div>
|
||||||
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> std::ostringstream expectedText;</div>
|
||||||
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *signedValue = std::get_if<std::int64_t>(&decoded.rawValue))</div>
|
||||||
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> actualText << *signedValue;</div>
|
||||||
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">else</span></div>
|
||||||
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> actualText << std::get<std::uint64_t>(decoded.rawValue);</div>
|
||||||
|
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (type == ValueType::Unsigned)</div>
|
||||||
|
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> expectedText << bits;</div>
|
||||||
|
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">else</span></div>
|
||||||
|
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> expectedText << signedExpected;</div>
|
||||||
|
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> QVERIFY2(decoded.valid && decoded.rawValue == expected &&</div>
|
||||||
|
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> decoded.physicalValue == physical && actualText.str() == expectedText.str(),</div>
|
||||||
|
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> expectedText.str().c_str());</div>
|
||||||
|
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> }</div>
|
||||||
|
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div>
|
||||||
|
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
|
||||||
|
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
|
||||||
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
|
||||||
|
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keywordtype">int</span> RunDecoderTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
|
||||||
|
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> DbcDecoderTest tests;</div>
|
||||||
|
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span> QTest::qExec(&tests, argc, argv);</div>
|
||||||
|
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span>}</div>
|
||||||
|
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
|
||||||
|
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="preprocessor">#include "dbc_decoder_test.moc"</span></div>
|
||||||
|
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
||||||
|
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
|
<div class="ttc" id="adecode__database_8h_html_aaeb92d42f5a6e27b8ba19f18d69d142b"><div class="ttname"><a href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a></div><div class="ttdeci">ByteOrder</div><div class="ttdoc">Signal byte order used for runtime decoding.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00023">decode_database.h:23</a></div></div>
|
||||||
|
<div class="ttc" id="adecode__database_8h_html_ad9971b6ef33e02ba2c75d19c1d2518a1"><div class="ttname"><a href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a></div><div class="ttdeci">ValueType</div><div class="ttdoc">Signal numeric type.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00031">decode_database.h:31</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00111">decode_database.h:111</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeFrame_html"><div class="ttname"><a href="structDecodeFrame.html">DecodeFrame</a></div><div class="ttdoc">Runtime-ready frame definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00061">decode_database.h:61</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeFrame_html_a51111ac13988be372d5673d12cf3e060"><div class="ttname"><a href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">DecodeFrame::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00065">decode_database.h:65</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeFrame_html_a52e10215388db7df8b541b9d9909edcf"><div class="ttname"><a href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">DecodeFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00063">decode_database.h:63</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html"><div class="ttname"><a href="structDecodeSignal.html">DecodeSignal</a></div><div class="ttdoc">Runtime-ready signal definition.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00039">decode_database.h:39</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_a428c39913a366a8476dd291061354391"><div class="ttname"><a href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">DecodeSignal::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00045">decode_database.h:45</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00040">decode_database.h:40</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_a92db637af4e224a0ae70173050dc3f74"><div class="ttname"><a href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">DecodeSignal::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00046">decode_database.h:46</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_a9d37638129263b8902ba5be59baf39a8"><div class="ttname"><a href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">DecodeSignal::valueType</a></div><div class="ttdeci">ValueType valueType</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00044">decode_database.h:44</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_aaf5d7527ddf65b6355c2b4f3626df22d"><div class="ttname"><a href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">DecodeSignal::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00041">decode_database.h:41</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_abdc4c4bb4a67a6d61d6ca81e8a52833d"><div class="ttname"><a href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">DecodeSignal::byteOrder</a></div><div class="ttdeci">ByteOrder byteOrder</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00043">decode_database.h:43</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodeSignal_html_acd4ef5ee30421d117b5756854302debb"><div class="ttname"><a href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">DecodeSignal::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00042">decode_database.h:42</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00051">dbc_decoder.h:51</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00054">dbc_decoder.h:54</a></div></div>
|
||||||
|
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00052">dbc_decoder.h:52</a></div></div>
|
||||||
|
<div class="ttc" id="astructFrameKey_html"><div class="ttname"><a href="structFrameKey.html">FrameKey</a></div><div class="ttdoc">Key for fast frame lookup.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00080">decode_database.h:80</a></div></div>
|
||||||
|
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
|
||||||
|
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector< std::uint8_t > data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
|
||||||
|
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">tests</a></li><li class="navelem"><b>dbc_decoder_test.cpp</b></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_parser.cpp File Reference</title>
|
<title>DBC Framework: dbc_parser.cpp File Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp.html',''); initResiza
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -90,10 +97,10 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp.html',''); initResiza
|
|||||||
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
|
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
|
||||||
<a href="#details">More...</a></p>
|
<a href="#details">More...</a></p>
|
||||||
<div class="textblock"><code>#include "<a class="el" href="dbc__parser_8h_source.html">dbc_parser.h</a>"</code><br />
|
<div class="textblock"><code>#include "<a class="el" href="dbc__parser_8h_source.html">dbc_parser.h</a>"</code><br />
|
||||||
<code>#include <fstream></code><br />
|
<code>#include "dbc_statement_handler.h"</code><br />
|
||||||
<code>#include <sstream></code><br />
|
|
||||||
<code>#include <stdexcept></code><br />
|
|
||||||
<code>#include <cctype></code><br />
|
<code>#include <cctype></code><br />
|
||||||
|
<code>#include <fstream></code><br />
|
||||||
|
<code>#include <stdexcept></code><br />
|
||||||
</div>
|
</div>
|
||||||
<p><a href="dbc__parser_8cpp_source.html">Go to the source code of this file.</a></p>
|
<p><a href="dbc__parser_8cpp_source.html">Go to the source code of this file.</a></p>
|
||||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
@@ -106,8 +113,8 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp.html',''); initResiza
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_parser.cpp Source File</title>
|
<title>DBC Framework: dbc_parser.cpp Source File</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -51,6 +51,11 @@ $(function() {
|
|||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
<div id="nav-tree">
|
<div id="nav-tree">
|
||||||
@@ -77,9 +82,16 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp_source.html',''); ini
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -88,11 +100,11 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp_source.html',''); ini
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<a href="dbc__parser_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
<a href="dbc__parser_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
||||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include "<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>"</span></div>
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include "<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include "dbc_statement_handler.h"</span></div>
|
||||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include <fstream></span></div>
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
|
||||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <sstream></span></div>
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <cctype></span></div>
|
||||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <stdexcept></span></div>
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <fstream></span></div>
|
||||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include <cctype></span></div>
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include <stdexcept></span></div>
|
||||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
|
||||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span>{</div>
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span>{</div>
|
||||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> std::string TrimText(<span class="keyword">const</span> std::string &text) {</div>
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> std::string TrimText(<span class="keyword">const</span> std::string &text) {</div>
|
||||||
@@ -108,358 +120,54 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp_source.html',''); ini
|
|||||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
|
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
|
||||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">return</span> text.substr(begin, end - begin);</div>
|
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">return</span> text.substr(begin, end - begin);</div>
|
||||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> }</div>
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> }</div>
|
||||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>}</div>
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>}<span class="comment">// namespace</span></div>
|
||||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00040" data-start="{" data-end="}">
|
||||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="classDbcParser.html#aef72826942c9095d653fafa435855e56"> 40</a></span><a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> <a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a>(<span class="keyword">const</span> std::string &filePath)<span class="keyword"> const </span>{</div>
|
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="classDbcParser.html#aef72826942c9095d653fafa435855e56"> 40</a></span><a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> <a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a>(<span class="keyword">const</span> std::string &filePath)<span class="keyword"> const </span>{</div>
|
||||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> std::ifstream input(filePath.c_str());</div>
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> std::ifstream input(filePath.c_str());</div>
|
||||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">if</span> (!input.is_open())</div>
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">if</span> (!input.is_open())</div>
|
||||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Failed to open DBC file: "</span> + filePath);</div>
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Failed to open DBC file: "</span> + filePath);</div>
|
||||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
|
||||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> database;</div>
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> database;</div>
|
||||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> *currentFrame = <span class="keyword">nullptr</span>;</div>
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{database, <span class="keyword">nullptr</span>};</div>
|
||||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
|
||||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> std::string line;</div>
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
|
||||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">while</span> (std::getline (input, line)) {</div>
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> std::size_t lineNumber = 0U;</div>
|
||||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> line = Trim (line);</div>
|
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> std::string line;</div>
|
||||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">if</span> (line.empty())</div>
|
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">while</span> (std::getline(input, line)) {</div>
|
||||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">continue</span>;</div>
|
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> ++lineNumber;</div>
|
||||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> line = Trim(line);</div>
|
||||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (IsFrameLine (line)) {</div>
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (line.empty())</div>
|
||||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> frame = ParseFrameLine (line);</div>
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">continue</span>;</div>
|
||||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.push_back (frame);</div>
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
|
||||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> currentFrame = &database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.back();</div>
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">try</span> {</div>
|
||||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsSignalLine (line)) {</div>
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(line, context);</div>
|
||||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span> (currentFrame == <span class="keyword">nullptr</span>)</div>
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) {</div>
|
||||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">throw</span> std::runtime_error (<span class="stringliteral">"Signal found before any frame definition."</span>);</div>
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">throw</span> std::runtime_error(filePath + <span class="stringliteral">":"</span> + std::to_string(lineNumber) +</div>
|
||||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="stringliteral">": "</span> + error.what());</div>
|
||||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> signal = ParseSignalLine (line);</div>
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> }</div>
|
||||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> currentFrame->signals.push_back (signal);</div>
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> }</div>
|
||||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsCommentLine (line))</div>
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
|
||||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> ParseCommentLine (line, database);</div>
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">return</span> database;</div>
|
||||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>}</div>
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>}</div>
|
||||||
|
</div>
|
||||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
|
||||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">return</span> database;</div>
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>std::string DbcParser::Trim(<span class="keyword">const</span> std::string &text) {</div>
|
||||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>}</div>
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">return</span> TrimText(text);</div>
|
||||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
|
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>}</div>
|
||||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keywordtype">bool</span> DbcParser::IsFrameLine (<span class="keyword">const</span> std::string &line) {</div>
|
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
||||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> (line.size() >= 4U) && (line.compare (0U, 4U, <span class="stringliteral">"BO_ "</span>) == 0);</div>
|
<div class="ttc" id="aclassDbcStatementDispatcher_html"><div class="ttname"><a href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00047">dbc_statement_handler.h:47</a></div></div>
|
||||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>}</div>
|
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &line, DbcParseContext &context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00314">dbc_statement_handler.cpp:314</a></div></div>
|
||||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
|
|
||||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keywordtype">bool</span> DbcParser::IsSignalLine (<span class="keyword">const</span> std::string &line) {</div>
|
|
||||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">return</span> (line.size() >= 4U) && (line.compare (0U, 4U, <span class="stringliteral">"SG_ "</span>) == 0);</div>
|
|
||||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span>}</div>
|
|
||||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
|
|
||||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="keywordtype">bool</span> DbcParser::IsCommentLine (<span class="keyword">const</span> std::string &line) {</div>
|
|
||||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">return</span> (line.size() >= 4U) && (line.compare (0U, 4U, <span class="stringliteral">"CM_ "</span>) == 0);</div>
|
|
||||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span>}</div>
|
|
||||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
|
|
||||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>std::string DbcParser::Trim (<span class="keyword">const</span> std::string &text) {</div>
|
|
||||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">return</span> TrimText (text);</div>
|
|
||||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>}</div>
|
|
||||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
|
|
||||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>std::vector<std::string> DbcParser::SplitReceivers (<span class="keyword">const</span> std::string &text) {</div>
|
|
||||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> std::vector<std::string> receivers;</div>
|
|
||||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> std::string token;</div>
|
|
||||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> std::istringstream stream (text);</div>
|
|
||||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
|
|
||||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">while</span> (std::getline (stream, token, <span class="charliteral">','</span>)) {</div>
|
|
||||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> token = TrimText (token);</div>
|
|
||||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">if</span> (!token.empty())</div>
|
|
||||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> receivers.push_back (token);</div>
|
|
||||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
|
|
||||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
|
|
||||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> receivers;</div>
|
|
||||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}</div>
|
|
||||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
|
|
||||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keywordtype">void</span> DbcParser::NormalizeCanId (std::uint32_t rawCanId,</div>
|
|
||||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> std::uint32_t &normalizedCanId,</div>
|
|
||||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">bool</span> &isExtended) {</div>
|
|
||||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">/*</span></div>
|
|
||||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="comment"> * DBC commonly stores extended identifiers with bit 31 set.</span></div>
|
|
||||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="comment"> * Example:</span></div>
|
|
||||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment"> * raw id = 0x80000000 | actual_29_bit_id</span></div>
|
|
||||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment"> */</span></div>
|
|
||||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> ((rawCanId & 0x80000000U) != 0U) {</div>
|
|
||||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> isExtended = <span class="keyword">true</span>;</div>
|
|
||||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> normalizedCanId = (rawCanId & 0x1FFFFFFFU);</div>
|
|
||||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> } <span class="keywordflow">else</span> {</div>
|
|
||||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> isExtended = (rawCanId > 0x7FFU);</div>
|
|
||||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> normalizedCanId = rawCanId;</div>
|
|
||||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> }</div>
|
|
||||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span>}</div>
|
|
||||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
|
|
||||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>std::uint32_t DbcParser::TryExtractPgn (std::uint32_t canId, <span class="keywordtype">bool</span> isExtended, <span class="keywordtype">bool</span> &hasPgn) {</div>
|
|
||||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> hasPgn = <span class="keyword">false</span>;</div>
|
|
||||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
|
|
||||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> (!isExtended)</div>
|
|
||||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span> 0U;</div>
|
|
||||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
|
|
||||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> ((canId & 0x1FFFFFFFU) != canId)</div>
|
|
||||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> 0U;</div>
|
|
||||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
|
|
||||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">const</span> std::uint32_t pf = (canId >> 16U) & 0xFFU;</div>
|
|
||||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">const</span> std::uint32_t ps = (canId >> 8U) & 0xFFU;</div>
|
|
||||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">const</span> std::uint32_t dp = (canId >> 24U) & 0x01U;</div>
|
|
||||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
|
|
||||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> std::uint32_t pgn = 0U;</div>
|
|
||||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
|
|
||||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (pf < 240U)</div>
|
|
||||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> pgn = (dp << 16U) | (pf << 8U);</div>
|
|
||||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">else</span></div>
|
|
||||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> pgn = (dp << 16U) | (pf << 8U) | ps;</div>
|
|
||||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
|
|
||||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> hasPgn = <span class="keyword">true</span>;</div>
|
|
||||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> pgn;</div>
|
|
||||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span>}</div>
|
|
||||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
|
|
||||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> DbcParser::ParseFrameLine (<span class="keyword">const</span> std::string &line) {</div>
|
|
||||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="comment">/*</span></div>
|
|
||||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="comment"> * Example:</span></div>
|
|
||||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment"> * BO_ 256 EngineData: 8 EEC1</span></div>
|
|
||||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment"> */</span></div>
|
|
||||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
|
|
||||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> std::istringstream stream (line);</div>
|
|
||||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> std::string token;</div>
|
|
||||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> frame;</div>
|
|
||||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> std::uint32_t rawCanId = 0U;</div>
|
|
||||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
|
|
||||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> stream >> token;</div>
|
|
||||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span> (token != <span class="stringliteral">"BO_"</span>)</div>
|
|
||||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">throw</span> std::runtime_error (<span class="stringliteral">"Invalid frame line: "</span> + line);</div>
|
|
||||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
|
|
||||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> stream >> rawCanId;</div>
|
|
||||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> NormalizeCanId (rawCanId, frame.<a class="code hl_variable" href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">canId</a>, frame.<a class="code hl_variable" href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">isExtended</a>);</div>
|
|
||||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
|
|
||||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> stream >> token;</div>
|
|
||||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span> (token.empty())</div>
|
|
||||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">throw</span> std::runtime_error (<span class="stringliteral">"Missing frame name: "</span> + line);</div>
|
|
||||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div>
|
|
||||||
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span> (token[token.size() - 1U] == <span class="charliteral">':'</span>)</div>
|
|
||||||
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> token.erase (token.size() - 1U, 1U);</div>
|
|
||||||
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
|
|
||||||
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> frame.<a class="code hl_variable" href="structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb">name</a> = token;</div>
|
|
||||||
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
|
|
||||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> {</div>
|
|
||||||
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dlcValue = 0U;</div>
|
|
||||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> stream >> dlcValue;</div>
|
|
||||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> frame.<a class="code hl_variable" href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">dlc</a> = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span> (dlcValue);</div>
|
|
||||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
|
|
||||||
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
|
|
||||||
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> stream >> frame.<a class="code hl_variable" href="structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8">transmitter</a>;</div>
|
|
||||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> frame.<a class="code hl_variable" href="structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943">pgn</a> = TryExtractPgn (frame.<a class="code hl_variable" href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">canId</a>, frame.<a class="code hl_variable" href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">isExtended</a>, frame.<a class="code hl_variable" href="structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d">hasPgn</a>);</div>
|
|
||||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
|
|
||||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">return</span> frame;</div>
|
|
||||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>}</div>
|
|
||||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
|
|
||||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> DbcParser::ParseSignalLine (<span class="keyword">const</span> std::string &line) {</div>
|
|
||||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="comment">/*</span></div>
|
|
||||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="comment"> * Example:</span></div>
|
|
||||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="comment"> * SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8000] "rpm" ECU1,ECU2</span></div>
|
|
||||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment"> */</span></div>
|
|
||||||
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
|
|
||||||
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> signal;</div>
|
|
||||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
|
|
||||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> std::string work = TrimText (line);</div>
|
|
||||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span> (work.compare (0U, 4U, <span class="stringliteral">"SG_ "</span>) != 0)</div>
|
|
||||||
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">throw</span> std::runtime_error (<span class="stringliteral">"Invalid signal line: "</span> + line);</div>
|
|
||||||
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
|
|
||||||
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> work.erase (0U, 4U);</div>
|
|
||||||
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
|
|
||||||
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">const</span> std::string::size_type colonPos = work.find (<span class="charliteral">':'</span>);</div>
|
|
||||||
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span> (colonPos == std::string::npos)</div>
|
|
||||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">throw</span> std::runtime_error (<span class="stringliteral">"Signal line missing ':' : "</span> + line);</div>
|
|
||||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
|
|
||||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a379e422a00cad56f896cacf60455b088">name</a> = TrimText (work.substr (0U, colonPos));</div>
|
|
||||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> std::string rest = TrimText (work.substr (colonPos + 1U));</div>
|
|
||||||
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
|
|
||||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">const</span> std::string::size_type pipePos = rest.find (<span class="charliteral">'|'</span>);</div>
|
|
||||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">const</span> std::string::size_type atPos = rest.find (<span class="charliteral">'@'</span>);</div>
|
|
||||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">const</span> std::string::size_type signPos = rest.find_first_of (<span class="stringliteral">"+-"</span>, atPos);</div>
|
|
||||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">const</span> std::string::size_type factorBegin = rest.find (<span class="charliteral">'('</span>);</div>
|
|
||||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">const</span> std::string::size_type factorComma = rest.find (<span class="charliteral">','</span>, factorBegin);</div>
|
|
||||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">const</span> std::string::size_type factorEnd = rest.find (<span class="charliteral">')'</span>, factorComma);</div>
|
|
||||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keyword">const</span> std::string::size_type rangeBegin = rest.find (<span class="charliteral">'['</span>);</div>
|
|
||||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">const</span> std::string::size_type rangeSep = rest.find (<span class="charliteral">'|'</span>, rangeBegin);</div>
|
|
||||||
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">const</span> std::string::size_type rangeEnd = rest.find (<span class="charliteral">']'</span>, rangeSep);</div>
|
|
||||||
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">const</span> std::string::size_type unitBegin = rest.find (<span class="charliteral">'"'</span>, rangeEnd);</div>
|
|
||||||
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">const</span> std::string::size_type unitEnd = rest.find (<span class="charliteral">'"'</span>, unitBegin + 1U);</div>
|
|
||||||
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
|
|
||||||
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span> ((pipePos == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> (atPos == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> (signPos == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> (factorBegin == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> (factorComma == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> (factorEnd == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> (rangeBegin == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> (rangeSep == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> (rangeEnd == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> (unitBegin == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> (unitEnd == std::string::npos))</div>
|
|
||||||
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">throw</span> std::runtime_error (<span class="stringliteral">"Unsupported signal syntax: "</span> + line);</div>
|
|
||||||
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div>
|
|
||||||
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> signal.<a class="code hl_variable" href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">startBit</a> = <span class="keyword">static_cast<</span>std::uint32_t<span class="keyword">></span> (</div>
|
|
||||||
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> std::stoul (TrimText (rest.substr (0U, pipePos)))</div>
|
|
||||||
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> );</div>
|
|
||||||
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> </div>
|
|
||||||
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">length</a> = <span class="keyword">static_cast<</span>std::uint32_t<span class="keyword">></span> (</div>
|
|
||||||
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> std::stoul (TrimText (rest.substr (pipePos + 1U, atPos - pipePos - 1U)))</div>
|
|
||||||
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> );</div>
|
|
||||||
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div>
|
|
||||||
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> {</div>
|
|
||||||
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span> ((atPos + 1U) >= rest.size())</div>
|
|
||||||
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">throw</span> std::runtime_error (<span class="stringliteral">"Invalid endianness in signal: "</span> + line);</div>
|
|
||||||
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
|
|
||||||
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keyword">const</span> <span class="keywordtype">char</span> endianChar = rest[atPos + 1U];</div>
|
|
||||||
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> signal.<a class="code hl_variable" href="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c">isLittleEndian</a> = (endianChar == <span class="charliteral">'1'</span>);</div>
|
|
||||||
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> }</div>
|
|
||||||
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
|
|
||||||
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> {</div>
|
|
||||||
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">const</span> <span class="keywordtype">char</span> signChar = rest[signPos];</div>
|
|
||||||
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f">isSigned</a> = (signChar == <span class="charliteral">'-'</span>);</div>
|
|
||||||
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> }</div>
|
|
||||||
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div>
|
|
||||||
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> signal.<a class="code hl_variable" href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">factor</a> = std::stod (</div>
|
|
||||||
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> TrimText (rest.substr (factorBegin + 1U, factorComma - factorBegin - 1U))</div>
|
|
||||||
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> );</div>
|
|
||||||
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div>
|
|
||||||
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> signal.<a class="code hl_variable" href="structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e">offset</a> = std::stod (</div>
|
|
||||||
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> TrimText (rest.substr (factorComma + 1U, factorEnd - factorComma - 1U))</div>
|
|
||||||
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> );</div>
|
|
||||||
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
|
|
||||||
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> signal.<a class="code hl_variable" href="structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b">minimum</a> = std::stod (</div>
|
|
||||||
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> TrimText (rest.substr (rangeBegin + 1U, rangeSep - rangeBegin - 1U))</div>
|
|
||||||
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> );</div>
|
|
||||||
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> </div>
|
|
||||||
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> signal.<a class="code hl_variable" href="structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52">maximum</a> = std::stod (</div>
|
|
||||||
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> TrimText (rest.substr (rangeSep + 1U, rangeEnd - rangeSep - 1U))</div>
|
|
||||||
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> );</div>
|
|
||||||
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
|
|
||||||
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">unit</a> = rest.substr (unitBegin + 1U, unitEnd - unitBegin - 1U);</div>
|
|
||||||
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
|
|
||||||
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> {</div>
|
|
||||||
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keyword">const</span> std::string receiversText = TrimText (rest.substr (unitEnd + 1U));</div>
|
|
||||||
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> signal.<a class="code hl_variable" href="structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3">receivers</a> = SplitReceivers (receiversText);</div>
|
|
||||||
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> }</div>
|
|
||||||
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div>
|
|
||||||
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">return</span> signal;</div>
|
|
||||||
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span>}</div>
|
|
||||||
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div>
|
|
||||||
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="keywordtype">void</span> DbcParser::ParseCommentLine (<span class="keyword">const</span> std::string &line, <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &database) {</div>
|
|
||||||
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">/*</span></div>
|
|
||||||
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="comment"> * Examples:</span></div>
|
|
||||||
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="comment"> * CM_ BO_ 256 "Frame comment";</span></div>
|
|
||||||
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span><span class="comment"> * CM_ SG_ 256 EngineSpeed "Signal comment";</span></div>
|
|
||||||
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="comment"> */</span></div>
|
|
||||||
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> </div>
|
|
||||||
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> std::istringstream stream (line);</div>
|
|
||||||
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> std::string token;</div>
|
|
||||||
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> stream >> token;</div>
|
|
||||||
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div>
|
|
||||||
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span> (token != <span class="stringliteral">"CM_"</span>)</div>
|
|
||||||
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">return</span>;</div>
|
|
||||||
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> </div>
|
|
||||||
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> stream >> token;</div>
|
|
||||||
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
|
|
||||||
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span> (token == <span class="stringliteral">"BO_"</span>) {</div>
|
|
||||||
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> std::uint32_t rawCanId = 0U;</div>
|
|
||||||
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> std::uint32_t canId = 0U;</div>
|
|
||||||
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordtype">bool</span> isExtended = <span class="keyword">false</span>;</div>
|
|
||||||
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> </div>
|
|
||||||
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> stream >> rawCanId;</div>
|
|
||||||
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> NormalizeCanId (rawCanId, canId, isExtended);</div>
|
|
||||||
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> </div>
|
|
||||||
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keyword">const</span> std::string::size_type quoteBegin = line.find (<span class="charliteral">'"'</span>);</div>
|
|
||||||
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keyword">const</span> std::string::size_type quoteEnd = line.rfind (<span class="charliteral">'"'</span>);</div>
|
|
||||||
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
|
|
||||||
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span> ((quoteBegin == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> (quoteEnd == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> (quoteEnd <= quoteBegin))</div>
|
|
||||||
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">return</span>;</div>
|
|
||||||
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div>
|
|
||||||
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> *frame = FindFrameById (database, canId, isExtended);</div>
|
|
||||||
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">if</span> (frame != <span class="keyword">nullptr</span>)</div>
|
|
||||||
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> frame-><a class="code hl_variable" href="structFrameInfo.html#ace75121294f9d89b762080ab5643293c">comment</a> = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U);</div>
|
|
||||||
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (token == <span class="stringliteral">"SG_"</span>) {</div>
|
|
||||||
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> std::uint32_t rawCanId = 0U;</div>
|
|
||||||
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> std::uint32_t canId = 0U;</div>
|
|
||||||
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordtype">bool</span> isExtended = <span class="keyword">false</span>;</div>
|
|
||||||
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> std::string signalName;</div>
|
|
||||||
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
|
|
||||||
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> stream >> rawCanId;</div>
|
|
||||||
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> stream >> signalName;</div>
|
|
||||||
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> </div>
|
|
||||||
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> NormalizeCanId (rawCanId, canId, isExtended);</div>
|
|
||||||
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> </div>
|
|
||||||
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keyword">const</span> std::string::size_type quoteBegin = line.find (<span class="charliteral">'"'</span>);</div>
|
|
||||||
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keyword">const</span> std::string::size_type quoteEnd = line.rfind (<span class="charliteral">'"'</span>);</div>
|
|
||||||
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
|
|
||||||
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">if</span> ((quoteBegin == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> (quoteEnd == std::string::npos) ||</div>
|
|
||||||
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> (quoteEnd <= quoteBegin))</div>
|
|
||||||
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">return</span>;</div>
|
|
||||||
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> </div>
|
|
||||||
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> *frame = FindFrameById (database, canId, isExtended);</div>
|
|
||||||
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">if</span> (frame != <span class="keyword">nullptr</span>) {</div>
|
|
||||||
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> *signal = FindSignalByName (*frame, signalName);</div>
|
|
||||||
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">if</span> (signal != <span class="keyword">nullptr</span>)</div>
|
|
||||||
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> signal-><a class="code hl_variable" href="structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5">comment</a> = line.substr (quoteBegin + 1U, quoteEnd - quoteBegin - 1U);</div>
|
|
||||||
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> }</div>
|
|
||||||
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> }</div>
|
|
||||||
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span>}</div>
|
|
||||||
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> </div>
|
|
||||||
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span><a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> *DbcParser::FindFrameById (<a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &database,</div>
|
|
||||||
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> std::uint32_t canId,</div>
|
|
||||||
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">bool</span> isExtended) {</div>
|
|
||||||
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">for</span> (std::size_t index = 0U; index < database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size(); ++index) {</div>
|
|
||||||
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span> ((database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].canId == canId) &&</div>
|
|
||||||
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> (database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index].isExtended == isExtended))</div>
|
|
||||||
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">return</span> &database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>[index];</div>
|
|
||||||
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> }</div>
|
|
||||||
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> </div>
|
|
||||||
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
||||||
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span>}</div>
|
|
||||||
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div>
|
|
||||||
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span><a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> *DbcParser::FindSignalByName (<a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> &frame, <span class="keyword">const</span> std::string &signalName) {</div>
|
|
||||||
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">for</span> (std::size_t index = 0U; index < frame.signals.size(); ++index) {</div>
|
|
||||||
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">if</span> (frame.signals[index].<a class="code hl_variable" href="structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb">name</a> == signalName)</div>
|
|
||||||
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">return</span> &frame.signals[index];</div>
|
|
||||||
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> }</div>
|
|
||||||
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> </div>
|
|
||||||
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
|
|
||||||
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span>}</div>
|
|
||||||
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
|
||||||
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
||||||
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector< FrameInfo > frames</div><div class="ttdef"><b>Definition:</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
|
<div class="ttc" id="astructDbcParseContext_html"><div class="ttname"><a href="structDbcParseContext.html">DbcParseContext</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00011">dbc_statement_handler.h:11</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
|
|
||||||
<div class="ttc" id="astructFrameInfo_html_a34b726afaad2ac5c697fdb2ac070cdaf"><div class="ttname"><a href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">FrameInfo::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00027">frame_info.h:27</a></div></div>
|
|
||||||
<div class="ttc" id="astructFrameInfo_html_a4737a5420213ad4304724e39f3a4e55d"><div class="ttname"><a href="structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d">FrameInfo::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00029">frame_info.h:29</a></div></div>
|
|
||||||
<div class="ttc" id="astructFrameInfo_html_a92749ec3798d4211a505860fb389a9e8"><div class="ttname"><a href="structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8">FrameInfo::transmitter</a></div><div class="ttdeci">std::string transmitter</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00031">frame_info.h:31</a></div></div>
|
|
||||||
<div class="ttc" id="astructFrameInfo_html_aa2b198ea0f55e560c123d35e7b3ecab9"><div class="ttname"><a href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">FrameInfo::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00030">frame_info.h:30</a></div></div>
|
|
||||||
<div class="ttc" id="astructFrameInfo_html_abb53a7f93ed7abc0ea1ae4a8ccafcdcb"><div class="ttname"><a href="structFrameInfo.html#abb53a7f93ed7abc0ea1ae4a8ccafcdcb">FrameInfo::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00025">frame_info.h:25</a></div></div>
|
|
||||||
<div class="ttc" id="astructFrameInfo_html_ace75121294f9d89b762080ab5643293c"><div class="ttname"><a href="structFrameInfo.html#ace75121294f9d89b762080ab5643293c">FrameInfo::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00032">frame_info.h:32</a></div></div>
|
|
||||||
<div class="ttc" id="astructFrameInfo_html_aee518b33f1000bf0b7f6e4a87474c943"><div class="ttname"><a href="structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943">FrameInfo::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00028">frame_info.h:28</a></div></div>
|
|
||||||
<div class="ttc" id="astructFrameInfo_html_af470b0742c05bfbffc31c51a68f5c05e"><div class="ttname"><a href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">FrameInfo::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00026">frame_info.h:26</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html"><div class="ttname"><a href="structSignalInfo.html">SignalInfo</a></div><div class="ttdoc">Describes one signal inside a DBC frame.</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00022">signal_info.h:22</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_a1008b5201f71848177217bd52fb84baa"><div class="ttname"><a href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">SignalInfo::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00025">signal_info.h:25</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_a1f214f03e94ef5794de2d3367bfcbd01"><div class="ttname"><a href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">SignalInfo::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00032">signal_info.h:32</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_a2c95562fd0b29327a7fd7b1e6feee7f3"><div class="ttname"><a href="structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3">SignalInfo::receivers</a></div><div class="ttdeci">std::vector< std::string > receivers</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00033">signal_info.h:33</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_a379e422a00cad56f896cacf60455b088"><div class="ttname"><a href="structSignalInfo.html#a379e422a00cad56f896cacf60455b088">SignalInfo::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00023">signal_info.h:23</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_a52a52b320eef92fbcb4626307f9a498f"><div class="ttname"><a href="structSignalInfo.html#a52a52b320eef92fbcb4626307f9a498f">SignalInfo::isSigned</a></div><div class="ttdeci">bool isSigned</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00027">signal_info.h:27</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_ab7d0769f47aa540656b22e4e49db517e"><div class="ttname"><a href="structSignalInfo.html#ab7d0769f47aa540656b22e4e49db517e">SignalInfo::offset</a></div><div class="ttdeci">double offset</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00029">signal_info.h:29</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_ac99ba7563a5dad01e39c4257216953f5"><div class="ttname"><a href="structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5">SignalInfo::comment</a></div><div class="ttdeci">std::string comment</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00034">signal_info.h:34</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_ace290724f9801521609aedaa946d61f1"><div class="ttname"><a href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">SignalInfo::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00024">signal_info.h:24</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_ada7bf94fbeaa26bd08c73982b5af255b"><div class="ttname"><a href="structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b">SignalInfo::minimum</a></div><div class="ttdeci">double minimum</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00030">signal_info.h:30</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_adf1c4331b9eabced0d7fdda40ff0eb52"><div class="ttname"><a href="structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52">SignalInfo::maximum</a></div><div class="ttdeci">double maximum</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00031">signal_info.h:31</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_ae4f78d99a2750aa564d7eba860171499"><div class="ttname"><a href="structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499">SignalInfo::factor</a></div><div class="ttdeci">double factor</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00028">signal_info.h:28</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html_af363b1563fb4c7cc8973f9a80c06846c"><div class="ttname"><a href="structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c">SignalInfo::isLittleEndian</a></div><div class="ttdeci">bool isLittleEndian</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00026">signal_info.h:26</a></div></div>
|
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_parser.h File Reference</title>
|
<title>DBC Framework: dbc_parser.h File Reference</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__parser_8h.html',''); initResizabl
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -92,8 +99,6 @@ $(document).ready(function(){initNavTree('dbc__parser_8h.html',''); initResizabl
|
|||||||
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
|
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
|
||||||
<a href="#details">More...</a></p>
|
<a href="#details">More...</a></p>
|
||||||
<div class="textblock"><code>#include <string></code><br />
|
<div class="textblock"><code>#include <string></code><br />
|
||||||
<code>#include <vector></code><br />
|
|
||||||
<code>#include <cstdint></code><br />
|
|
||||||
<code>#include "<a class="el" href="dbc__database_8h_source.html">dbc_database.h</a>"</code><br />
|
<code>#include "<a class="el" href="dbc__database_8h_source.html">dbc_database.h</a>"</code><br />
|
||||||
</div>
|
</div>
|
||||||
<p><a href="dbc__parser_8h_source.html">Go to the source code of this file.</a></p>
|
<p><a href="dbc__parser_8h_source.html">Go to the source code of this file.</a></p>
|
||||||
@@ -114,8 +119,8 @@ Classes</h2></td></tr>
|
|||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.9.4"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>DBC Framework: dbc_parser.h Source File</title>
|
<title>DBC Framework: dbc_parser.h Source File</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.9.4 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
@@ -51,6 +51,11 @@ $(function() {
|
|||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
<div id="nav-tree">
|
<div id="nav-tree">
|
||||||
@@ -77,9 +82,16 @@ $(document).ready(function(){initNavTree('dbc__parser_8h_source.html',''); initR
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
@@ -91,53 +103,31 @@ $(document).ready(function(){initNavTree('dbc__parser_8h_source.html',''); initR
|
|||||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#define DBC_PARSER_H</span></div>
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#define DBC_PARSER_H</span></div>
|
||||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
|
||||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <string></span></div>
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <string></span></div>
|
||||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <vector></span></div>
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
|
||||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include <cstdint></span></div>
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include "<a class="code" href="dbc__database_8h.html">dbc_database.h</a>"</span></div>
|
||||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
|
||||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include "<a class="code" href="dbc__database_8h.html">dbc_database.h</a>"</span></div>
|
<div class="foldopen" id="foldopen00033" data-start="{" data-end="};">
|
||||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="classDbcParser.html"> 33</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcParser.html">DbcParser</a> {</div>
|
||||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="classDbcParser.html"> 35</a></span><span class="keyword">class </span><a class="code hl_class" href="classDbcParser.html">DbcParser</a> {</div>
|
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">public</span>:</div>
|
||||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">public</span>:</div>
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> <a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(<span class="keyword">const</span> std::string &filePath) <span class="keyword">const</span>;</div>
|
||||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> <a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a> (<span class="keyword">const</span> std::string &filePath) <span class="keyword">const</span>;</div>
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
|
||||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">private</span>:</div>
|
||||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">private</span>:</div>
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">static</span> std::string Trim(<span class="keyword">const</span> std::string &text);</div>
|
||||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> IsFrameLine (<span class="keyword">const</span> std::string &line);</div>
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span>};</div>
|
||||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> IsSignalLine (<span class="keyword">const</span> std::string &line);</div>
|
</div>
|
||||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> IsCommentLine (<span class="keyword">const</span> std::string &line);</div>
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
|
||||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">static</span> std::string Trim (<span class="keyword">const</span> std::string &text);</div>
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_PARSER_H */</span><span class="preprocessor"></span></div>
|
||||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">static</span> std::vector<std::string> SplitReceivers (<span class="keyword">const</span> std::string &text);</div>
|
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
|
||||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">static</span> std::uint32_t TryExtractPgn (std::uint32_t canId, <span class="keywordtype">bool</span> isExtended, <span class="keywordtype">bool</span> &hasPgn);</div>
|
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
||||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
|
|
||||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">static</span> <span class="keywordtype">void</span> NormalizeCanId (std::uint32_t rawCanId,</div>
|
|
||||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> std::uint32_t &normalizedCanId,</div>
|
|
||||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">bool</span> &isExtended);</div>
|
|
||||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
|
|
||||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">static</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> ParseFrameLine (<span class="keyword">const</span> std::string &line);</div>
|
|
||||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">static</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> ParseSignalLine (<span class="keyword">const</span> std::string &line);</div>
|
|
||||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
|
|
||||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ParseCommentLine (<span class="keyword">const</span> std::string &line, <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &database);</div>
|
|
||||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
|
|
||||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">static</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> *FindFrameById (<a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> &database,</div>
|
|
||||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> std::uint32_t canId,</div>
|
|
||||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">bool</span> isExtended);</div>
|
|
||||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
|
|
||||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">static</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> *FindSignalByName (<a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> &frame, <span class="keyword">const</span> std::string &signalName);</div>
|
|
||||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>};</div>
|
|
||||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
|
|
||||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">#endif </span><span class="comment">/* DBC_PARSER_H */</span><span class="preprocessor"></span></div>
|
|
||||||
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__parser_8h_source.html#l00035">dbc_parser.h:35</a></div></div>
|
|
||||||
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
|
||||||
<div class="ttc" id="adbc__database_8h_html"><div class="ttname"><a href="dbc__database_8h.html">dbc_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
<div class="ttc" id="adbc__database_8h_html"><div class="ttname"><a href="dbc__database_8h.html">dbc_database.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition:</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
||||||
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition:</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
|
|
||||||
<div class="ttc" id="astructSignalInfo_html"><div class="ttname"><a href="structSignalInfo.html">SignalInfo</a></div><div class="ttdoc">Describes one signal inside a DBC frame.</div><div class="ttdef"><b>Definition:</b> <a href="signal__info_8h_source.html#l00022">signal_info.h:22</a></div></div>
|
|
||||||
</div><!-- fragment --></div><!-- contents -->
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
</div><!-- doc-content -->
|
</div><!-- doc-content -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
<ul>
|
<ul>
|
||||||
<li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
||||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -0,0 +1,409 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>DBC Framework: dbc_parser_test.cpp Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="resize.js"></script>
|
||||||
|
<script type="text/javascript" src="navtreedata.js"></script>
|
||||||
|
<script type="text/javascript" src="navtree.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">DBC Framework
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<div id="nav-tree">
|
||||||
|
<div id="nav-tree-contents">
|
||||||
|
<div id="nav-sync" class="sync"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="splitbar" style="-moz-user-select:none;"
|
||||||
|
class="ui-resizable-handle">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''); initResizable(); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="doc-content">
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">dbc_parser_test.cpp</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include "<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>"</span></div>
|
||||||
|
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include "dbc_statement_handler.h"</span></div>
|
||||||
|
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
|
||||||
|
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <QtTest></span></div>
|
||||||
|
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include <chrono></span></div>
|
||||||
|
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include <filesystem></span></div>
|
||||||
|
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include <fstream></span></div>
|
||||||
|
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
|
||||||
|
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#define CHECK(condition, name) QVERIFY2((condition), std::string(name).c_str())</span></div>
|
||||||
|
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include <stdexcept></span></div>
|
||||||
|
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
|
||||||
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">struct </span>Fixture {</div>
|
||||||
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> std::filesystem::path path = std::filesystem::temp_directory_path() /</div>
|
||||||
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> (<span class="stringliteral">"dbc_parser_test_"</span> + std::to_string(std::chrono::steady_clock::now().time_since_epoch().count()) + <span class="stringliteral">".dbc"</span>);</div>
|
||||||
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> ~Fixture() {</div>
|
||||||
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> std::error_code error;</div>
|
||||||
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> std::filesystem::remove(path, error);</div>
|
||||||
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> }</div>
|
||||||
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordtype">void</span> Write(<span class="keyword">const</span> std::string &text)<span class="keyword"> const </span>{</div>
|
||||||
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> std::ofstream output(path);</div>
|
||||||
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> output << text;</div>
|
||||||
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordflow">if</span> (!output)</div>
|
||||||
|
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Cannot write test fixture."</span>);</div>
|
||||||
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> }</div>
|
||||||
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span>};</div>
|
||||||
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
|
||||||
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">class </span>CountingHandler : <span class="keyword">public</span> <a class="code hl_class" href="classDbcStatementHandler.html">DbcStatementHandler</a> {</div>
|
||||||
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">public</span>:</div>
|
||||||
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">int</span> instances = 0;</div>
|
||||||
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">int</span> calls = 0;</div>
|
||||||
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> CountingHandler() { ++instances; }</div>
|
||||||
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">void</span> Handle(<span class="keyword">const</span> std::string &, <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> &context)<span class="keyword"> const override </span>{</div>
|
||||||
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> ++calls;</div>
|
||||||
|
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> context.database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.emplace_back();</div>
|
||||||
|
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> }</div>
|
||||||
|
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>};</div>
|
||||||
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
|
||||||
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>std::string SignalLine(<span class="keyword">const</span> std::string &start, <span class="keyword">const</span> std::string &length,</div>
|
||||||
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">const</span> std::string &order, <span class="keyword">const</span> std::string &factor,</div>
|
||||||
|
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">const</span> std::string &offset, <span class="keyword">const</span> std::string &minimum,</div>
|
||||||
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">const</span> std::string &maximum) {</div>
|
||||||
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> <span class="stringliteral">"SG_ Value : "</span> + start + <span class="stringliteral">"|"</span> + length + <span class="stringliteral">"@"</span> + order +</div>
|
||||||
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="stringliteral">" ("</span> + factor + <span class="stringliteral">","</span> + offset + <span class="stringliteral">") ["</span> + minimum + <span class="stringliteral">"|"</span> + maximum + <span class="stringliteral">"] \"\" ECU"</span>;</div>
|
||||||
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>}</div>
|
||||||
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
|
||||||
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="keyword">class </span>DbcParserTest : <span class="keyword">public</span> QObject {</div>
|
||||||
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> Q_OBJECT</div>
|
||||||
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="keyword">private</span>:</div>
|
||||||
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> RejectSignal(<span class="keyword">const</span> Fixture &fixture, <span class="keyword">const</span> std::string &line, <span class="keywordtype">unsigned</span> payload = 8U) {</div>
|
||||||
|
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(payload) + <span class="stringliteral">" ECU\n\n"</span> + line + <span class="stringliteral">"\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Reject "</span> + line);</div>
|
||||||
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||||
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">const</span> std::string prefix = fixture.path.string() + <span class="stringliteral">":3: "</span>;</div>
|
||||||
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> CHECK(std::string(error.what()).find(prefix) == 0U &&</div>
|
||||||
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> std::string(error.what()).size() > prefix.size(),</div>
|
||||||
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">"Reject "</span> + line);</div>
|
||||||
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> }</div>
|
||||||
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
|
||||||
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="keyword">private</span> Q_SLOTS:</div>
|
||||||
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> validFrames();</div>
|
||||||
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">void</span> invalidFrames();</div>
|
||||||
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> integration();</div>
|
||||||
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">void</span> invalidSignals();</div>
|
||||||
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> validSignals();</div>
|
||||||
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> dispatch();</div>
|
||||||
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> independentSessions();</div>
|
||||||
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>};</div>
|
||||||
|
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
|
||||||
|
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keywordtype">void</span> DbcParserTest::validFrames() {</div>
|
||||||
|
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> Fixture fixture;</div>
|
||||||
|
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">struct </span>ValidCase {</div>
|
||||||
|
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *line;</div>
|
||||||
|
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> std::uint32_t id;</div>
|
||||||
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">bool</span> extended;</div>
|
||||||
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">unsigned</span> length;</div>
|
||||||
|
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> };</div>
|
||||||
|
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> ValidCase valid[] = {</div>
|
||||||
|
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> {<span class="stringliteral">"BO_ 0 Frame: 0 ECU"</span>, 0U, <span class="keyword">false</span>, 0U},</div>
|
||||||
|
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> {<span class="stringliteral">"BO_ 2047 Frame: 8 ECU"</span>, 2047U, <span class="keyword">false</span>, 8U},</div>
|
||||||
|
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> {<span class="stringliteral">"BO_ 2048 Frame: 64 ECU"</span>, 2048U, <span class="keyword">true</span>, 64U},</div>
|
||||||
|
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> {<span class="stringliteral">"BO_ 536870911 Frame: 255 ECU"</span>, 0x1FFFFFFFU, <span class="keyword">true</span>, 255U},</div>
|
||||||
|
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> {<span class="stringliteral">"BO_ 2147483649 Frame: 8 ECU"</span>, 1U, <span class="keyword">true</span>, 8U},</div>
|
||||||
|
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> {<span class="stringliteral">"BO_ 2684354559 Frame: 8 ECU"</span>, 0x1FFFFFFFU, <span class="keyword">true</span>, 8U},</div>
|
||||||
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> {<span class="stringliteral">" BO_\t256\tFrame :\t8\tECU \r"</span>, 256U, <span class="keyword">false</span>, 8U}};</div>
|
||||||
|
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: valid) {</div>
|
||||||
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> fixture.Write(std::string(test.line) + <span class="charliteral">'\n'</span>);</div>
|
||||||
|
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">const</span> <span class="keyword">auto</span> database = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> CHECK(database.frames.size() == 1U && database.frames[0].name == <span class="stringliteral">"Frame"</span> &&</div>
|
||||||
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> database.frames[0].canId == test.id &&</div>
|
||||||
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> database.frames[0].isExtended == test.extended &&</div>
|
||||||
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> database.frames[0].dlc == test.length &&</div>
|
||||||
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> database.frames[0].transmitter == <span class="stringliteral">"ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> test.line);</div>
|
||||||
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||||
|
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> }</div>
|
||||||
|
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}</div>
|
||||||
|
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
|
||||||
|
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keywordtype">void</span> DbcParserTest::invalidFrames() {</div>
|
||||||
|
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> Fixture fixture;</div>
|
||||||
|
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *invalid[] = {</div>
|
||||||
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="stringliteral">"BO_ invalid"</span>, <span class="stringliteral">"BO_"</span>, <span class="stringliteral">"BO_ 1"</span>, <span class="stringliteral">"BO_ 1 : 8 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame 8 ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="stringliteral">"BO_ 1 Frame:"</span>, <span class="stringliteral">"BO_ 1 Frame: 8"</span>, <span class="stringliteral">"BO_ 1 Frame: 8 ECU extra"</span>,</div>
|
||||||
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="stringliteral">"BO_ 1 Two Names: 8 ECU"</span>, <span class="stringliteral">"BO_ -1 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ +1 Frame: 8 ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="stringliteral">"BO_ 1x Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 0x123 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 1.5 Frame: 8 ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="stringliteral">"BO_ 4294967296 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 999999999999999999999 Frame: 8 ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="stringliteral">"BO_ 536870912 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 1073741824 Frame: 8 ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="stringliteral">"BO_ 2684354560 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 4294967295 Frame: 8 ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="stringliteral">"BO_ 1 Frame: -1 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: +8 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: 8x ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="stringliteral">"BO_ 1 Frame: 8.5 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: 256 ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="stringliteral">"BO_ 1 Frame: 4294967296 ECU"</span>, <span class="stringliteral">"BO_\tinvalid"</span>};</div>
|
||||||
|
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *line: invalid) {</div>
|
||||||
|
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> fixture.Write(std::string(<span class="stringliteral">"VERSION \"test\"\n\n"</span>) + line + <span class="charliteral">'\n'</span>);</div>
|
||||||
|
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> CHECK(<span class="keyword">false</span>, line);</div>
|
||||||
|
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||||
|
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">const</span> std::string prefix = fixture.path.string() + <span class="stringliteral">":3: "</span>;</div>
|
||||||
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> CHECK(std::string(error.what()).find(prefix) == 0U &&</div>
|
||||||
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> std::string(error.what()).size() > prefix.size(),</div>
|
||||||
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> line);</div>
|
||||||
|
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
|
||||||
|
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> }</div>
|
||||||
|
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>}</div>
|
||||||
|
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
|
||||||
|
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="keywordtype">void</span> DbcParserTest::integration() {</div>
|
||||||
|
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> Fixture fixture;</div>
|
||||||
|
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> fixture.Write(</div>
|
||||||
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="stringliteral">"BO_TX_BU_ 256 : ECU;\nBO_ 256 Frame: 8 ECU\n"</span></div>
|
||||||
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="stringliteral">" SG_ Speed : 0|16@1+ (0.5,1) [0|100] \"rpm\" ECU\n"</span></div>
|
||||||
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="stringliteral">"CM_ BO_ 256 \"Frame comment\";\nCM_ SG_ 256 Speed \"Signal comment\";\n"</span></div>
|
||||||
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="stringliteral">"BO_ 257 Second: 8 ECU\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">const</span> <span class="keyword">auto</span> database = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> CHECK(database.frames.size() == 2U && database.frames[0].signals.size() == 1U &&</div>
|
||||||
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> database.frames[0].comment == <span class="stringliteral">"Frame comment"</span> &&</div>
|
||||||
|
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> database.frames[0].signals[0].comment == <span class="stringliteral">"Signal comment"</span>,</div>
|
||||||
|
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="stringliteral">"Integration"</span>);</div>
|
||||||
|
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> fixture.Write(<span class="stringliteral">"\nSG_ Speed : invalid\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Signal error location"</span>);</div>
|
||||||
|
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||||
|
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> CHECK(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":2: "</span>) == 0U,</div>
|
||||||
|
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="stringliteral">"Signal error location"</span>);</div>
|
||||||
|
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
|
||||||
|
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
|
||||||
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
|
||||||
|
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keywordtype">void</span> DbcParserTest::invalidSignals() {</div>
|
||||||
|
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> Fixture fixture;</div>
|
||||||
|
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">const</span> std::string ordinary = SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>);</div>
|
||||||
|
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"-1"</span>, <span class="stringliteral">"+1"</span>, <span class="stringliteral">"0junk"</span>, <span class="stringliteral">"0x10"</span>, <span class="stringliteral">"1.5"</span>,</div>
|
||||||
|
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="stringliteral">"4294967296"</span>, <span class="stringliteral">"999999999999999999999"</span>}) {</div>
|
||||||
|
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> RejectSignal(fixture, SignalLine(value, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
|
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, value, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
|
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> }</div>
|
||||||
|
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string length: {<span class="stringliteral">"0"</span>, <span class="stringliteral">"65"</span>})</div>
|
||||||
|
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, length, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
|
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string order: {<span class="stringliteral">"2+"</span>, <span class="stringliteral">"9-"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1x"</span>, <span class="stringliteral">"1++"</span>, <span class="stringliteral">"01+"</span>})</div>
|
||||||
|
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, order, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
|
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"1junk"</span>, <span class="stringliteral">"nan"</span>, <span class="stringliteral">"NaN"</span>, <span class="stringliteral">"inf"</span>, <span class="stringliteral">"-inf"</span>, <span class="stringliteral">"1e999"</span>, <span class="stringliteral">"1e-999"</span>, <span class="stringliteral">"0x1p2"</span>, <span class="stringliteral">""</span>, <span class="stringliteral">"1e"</span>, <span class="stringliteral">"1.2.3"</span>}) {</div>
|
||||||
|
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
|
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||||
|
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, value, <span class="stringliteral">"255"</span>));</div>
|
||||||
|
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, value));</div>
|
||||||
|
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
|
||||||
|
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||||
|
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string name: {<span class="stringliteral">""</span>, <span class="stringliteral">"Two Names"</span>, <span class="stringliteral">"Value M"</span>, <span class="stringliteral">"Value m1"</span>, <span class="stringliteral">"Value m1M"</span>}) {</div>
|
||||||
|
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> std::string line = ordinary;</div>
|
||||||
|
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> line.replace(4U, 5U, name);</div>
|
||||||
|
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> RejectSignal(fixture, line);</div>
|
||||||
|
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
|
||||||
|
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string broken: {</div>
|
||||||
|
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="stringliteral">"SG_"</span>, <span class="stringliteral">"SG_ Value"</span>, <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] ECU"</span>,</div>
|
||||||
|
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\""</span>,</div>
|
||||||
|
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,"</span>,</div>
|
||||||
|
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"</span>})</div>
|
||||||
|
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> RejectSignal(fixture, broken);</div>
|
||||||
|
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"64"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||||
|
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"63"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||||
|
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"56"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"0+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||||
|
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> RejectSignal(fixture, SignalLine(<span class="stringliteral">"4294967295"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||||
|
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> RejectSignal(fixture, ordinary, 0U);</div>
|
||||||
|
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> delimiter: {<span class="charliteral">'|'</span>, <span class="charliteral">'@'</span>, <span class="charliteral">'('</span>, <span class="charliteral">')'</span>, <span class="charliteral">'['</span>, <span class="charliteral">']'</span>, <span class="charliteral">'"'</span>}) {</div>
|
||||||
|
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> std::string line = ordinary;</div>
|
||||||
|
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> line.erase(line.find(delimiter), 1U);</div>
|
||||||
|
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> RejectSignal(fixture, line);</div>
|
||||||
|
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> }</div>
|
||||||
|
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span>}</div>
|
||||||
|
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
|
||||||
|
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="keywordtype">void</span> DbcParserTest::validSignals() {</div>
|
||||||
|
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> Fixture fixture;</div>
|
||||||
|
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> signalParser;</div>
|
||||||
|
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span> +</div>
|
||||||
|
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span> +</div>
|
||||||
|
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> SignalLine(<span class="stringliteral">"8"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1-"</span>, <span class="stringliteral">"-1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"-255"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">const</span> <span class="keyword">auto</span> factors = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> CHECK(factors.frames[0].signals.size() == 2U &&</div>
|
||||||
|
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> factors.frames[0].signals[0].factor == 0.0 &&</div>
|
||||||
|
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> factors.frames[0].signals[1].factor == -1.0,</div>
|
||||||
|
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="stringliteral">"Zero and negative factors and equal range boundaries"</span>);</div>
|
||||||
|
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
|
||||||
|
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">struct </span>SignalCase {</div>
|
||||||
|
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *start;</div>
|
||||||
|
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *length;</div>
|
||||||
|
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *order;</div>
|
||||||
|
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">unsigned</span> payload;</div>
|
||||||
|
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> };</div>
|
||||||
|
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">const</span> SignalCase validSignals[] = {</div>
|
||||||
|
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 1U},</div>
|
||||||
|
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0-"</span>, 1U},</div>
|
||||||
|
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||||
|
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"0-"</span>, 8U},</div>
|
||||||
|
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> {<span class="stringliteral">"63"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||||
|
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> {<span class="stringliteral">"56"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0+"</span>, 8U},</div>
|
||||||
|
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> {<span class="stringliteral">"3"</span>, <span class="stringliteral">"12"</span>, <span class="stringliteral">"0+"</span>, 2U},</div>
|
||||||
|
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> {<span class="stringliteral">"2039"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 255U}};</div>
|
||||||
|
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: validSignals) {</div>
|
||||||
|
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(test.payload) + <span class="stringliteral">" ECU\n"</span> +</div>
|
||||||
|
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> SignalLine(test.start, test.length, test.order, <span class="stringliteral">".5e+1"</span>, <span class="stringliteral">"-2.5E-1"</span>, <span class="stringliteral">"-1."</span>, <span class="stringliteral">"+2e2"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">const</span> <span class="keyword">auto</span> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">const</span> <span class="keyword">auto</span> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||||
|
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> CHECK(signal.startBit == std::stoul(test.start) &&</div>
|
||||||
|
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> signal.length == std::stoul(test.length) &&</div>
|
||||||
|
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> signal.isLittleEndian == (test.order[0] == <span class="charliteral">'1'</span>) &&</div>
|
||||||
|
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> signal.isSigned == (test.order[1] == <span class="charliteral">'-'</span>) &&</div>
|
||||||
|
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> signal.factor == 5.0 && signal.offset == -0.25 &&</div>
|
||||||
|
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> signal.minimum == -1.0 && signal.maximum == 200.0,</div>
|
||||||
|
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="stringliteral">"Valid signal boundary and numeric metadata"</span>);</div>
|
||||||
|
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||||
|
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> }</div>
|
||||||
|
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span></div>
|
||||||
|
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="stringliteral">"SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keyword">const</span> <span class="keyword">auto</span> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keyword">const</span> <span class="keyword">auto</span> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||||
|
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> CHECK(signal.name == <span class="stringliteral">"Value"</span> && signal.unit == <span class="stringliteral">"rpm"</span> &&</div>
|
||||||
|
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> signal.receivers == std::vector<std::string>({<span class="stringliteral">"ECU1"</span>, <span class="stringliteral">"ECU2"</span>}),</div>
|
||||||
|
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="stringliteral">"Signal tabs, spaces, and receiver list"</span>);</div>
|
||||||
|
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { CHECK(<span class="keyword">false</span>, error.what()); }</div>
|
||||||
|
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span>}</div>
|
||||||
|
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
|
||||||
|
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="keywordtype">void</span> DbcParserTest::dispatch() {</div>
|
||||||
|
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> CountingHandler::instances = 0;</div>
|
||||||
|
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> CountingHandler::calls = 0;</div>
|
||||||
|
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> dispatchDatabase;</div>
|
||||||
|
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{dispatchDatabase, <span class="keyword">nullptr</span>};</div>
|
||||||
|
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
|
||||||
|
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> dispatcher.RegisterType<CountingHandler>(<span class="stringliteral">"TEST_"</span>);</div>
|
||||||
|
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> CHECK(dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ first"</span>, context) &&</div>
|
||||||
|
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ second"</span>, context) &&</div>
|
||||||
|
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> CountingHandler::instances == 1 && CountingHandler::calls == 2 &&</div>
|
||||||
|
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> dispatchDatabase.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 2U,</div>
|
||||||
|
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="stringliteral">"Factory dispatch and handler reuse"</span>);</div>
|
||||||
|
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> CHECK(!dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_OTHER data"</span>, context) &&</div>
|
||||||
|
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"BO_TX_BU_ 1 : ECU;"</span>, context) &&</div>
|
||||||
|
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"VAL_ 1 Speed 0 \"Stopped\";"</span>, context) &&</div>
|
||||||
|
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> CountingHandler::calls == 2,</div>
|
||||||
|
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="stringliteral">"Exact and unknown keyword dispatch"</span>);</div>
|
||||||
|
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span>}</div>
|
||||||
|
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
|
||||||
|
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="keywordtype">void</span> DbcParserTest::independentSessions() {</div>
|
||||||
|
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> Fixture fixture;</div>
|
||||||
|
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
|
||||||
|
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> fixture.Write(<span class="stringliteral">"BO_ 1 First: 8 ECU\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> CHECK(parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string()).<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U, <span class="stringliteral">"First parse"</span>);</div>
|
||||||
|
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> fixture.Write(<span class="stringliteral">"SG_ Speed : invalid\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">try</span> {</div>
|
||||||
|
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> CHECK(<span class="keyword">false</span>, <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||||
|
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||||
|
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> CHECK(std::string(error.what()).find(<span class="stringliteral">"Signal found before any frame"</span>) !=</div>
|
||||||
|
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> std::string::npos,</div>
|
||||||
|
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||||
|
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div>
|
||||||
|
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> fixture.Write(<span class="stringliteral">"BO_ 2 Second: 8 ECU\n"</span>);</div>
|
||||||
|
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keyword">const</span> <span class="keyword">auto</span> recovered = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||||
|
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> CHECK(recovered.frames.size() == 1U && recovered.frames[0].canId == 2U,</div>
|
||||||
|
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="stringliteral">"Fresh parse after error"</span>);</div>
|
||||||
|
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span>}</div>
|
||||||
|
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
|
||||||
|
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="keywordtype">int</span> RunParserTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
|
||||||
|
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> DbcParserTest tests;</div>
|
||||||
|
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">return</span> QTest::qExec(&tests, argc, argv);</div>
|
||||||
|
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span>}</div>
|
||||||
|
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div>
|
||||||
|
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="preprocessor">#include "dbc_parser_test.moc"</span></div>
|
||||||
|
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcStatementDispatcher_html"><div class="ttname"><a href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00047">dbc_statement_handler.h:47</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &line, DbcParseContext &context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00314">dbc_statement_handler.cpp:314</a></div></div>
|
||||||
|
<div class="ttc" id="aclassDbcStatementHandler_html"><div class="ttname"><a href="classDbcStatementHandler.html">DbcStatementHandler</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00016">dbc_statement_handler.h:16</a></div></div>
|
||||||
|
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||||
|
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
||||||
|
<div class="ttc" id="astructDbcDatabase_html_a2cade5d0234ee816132127542f8c612b"><div class="ttname"><a href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">DbcDatabase::frames</a></div><div class="ttdeci">std::vector< FrameInfo > frames</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00023">dbc_database.h:23</a></div></div>
|
||||||
|
<div class="ttc" id="astructDbcParseContext_html"><div class="ttname"><a href="structDbcParseContext.html">DbcParseContext</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00011">dbc_statement_handler.h:11</a></div></div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
</div><!-- doc-content -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">tests</a></li><li class="navelem"><b>dbc_parser_test.cpp</b></li>
|
||||||
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||