Closes #11
This commit is contained in:
1 parent
0067cb4ddd
commit
f17ddb6aad
104 files changed
+1928
-889
No files matched your search
@@ -119,7 +119,7 @@ Classes</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -121,7 +121,7 @@ $(document).ready(function(){initNavTree('dbc__database_8h_source.html',''); ini
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp.html',''); i
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -201,7 +201,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp_source.html'
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -119,7 +119,7 @@ Classes</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -124,7 +124,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8h_source.html','
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp.html',''); initResiz
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -280,7 +280,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp_source.html',''); in
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -130,7 +130,7 @@ Classes</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -196,7 +196,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h_source.html',''); init
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -100,7 +100,7 @@ $(document).ready(function(){initNavTree('dbc__decoder__test_8cpp_source.html','
|
||||
<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 <iostream></span></div>
|
||||
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include <QtTest></span></div>
|
||||
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <limits></span></div>
|
||||
<div class="line"><a id="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>
|
||||
@@ -118,128 +118,141 @@ $(document).ready(function(){initNavTree('dbc__decoder__test_8cpp_source.html','
|
||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordtype">double</span> physicalValue;</div>
|
||||
<div class="line"><a id="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><span class="keywordtype">int</span> main() {</div>
|
||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">const</span> DecodeCase cases[] = {</div>
|
||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> {<span class="stringliteral">"Motorola reproduction"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> {<span class="stringliteral">"Motorola within byte"</span>, ByteOrder::Motorola, 5U, 4U, ValueType::Unsigned, {0xAC}, <span class="keyword">true</span>, 11, 1.0, 0.0, 11.0},</div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> {<span class="stringliteral">"Motorola unaligned crossing"</span>, ByteOrder::Motorola, 3U, 12U, ValueType::Unsigned, {0xAB, 0xCD}, <span class="keyword">true</span>, 0xBCD, 1.0, 0.0, 3021.0},</div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> {<span class="stringliteral">"Motorola starts at bit zero"</span>, ByteOrder::Motorola, 0U, 2U, ValueType::Unsigned, {0x01, 0x80}, <span class="keyword">true</span>, 3, 1.0, 0.0, 3.0},</div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> {<span class="stringliteral">"Motorola second byte"</span>, ByteOrder::Motorola, 15U, 16U, ValueType::Unsigned, {0xFF, 0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> {<span class="stringliteral">"Motorola signed scaled"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Signed, {0xFF, 0xFE}, <span class="keyword">true</span>, -2, 0.5, 10.0, 9.0},</div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> {<span class="stringliteral">"Motorola 64 bits"</span>, ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0, 0, 0, 0, 0, 0, 0x12, 0x34}, <span class="keyword">true</span>, 0x1234, 1.0, 0.0, 4660.0},</div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> {<span class="stringliteral">"Motorola 64 bits high bit"</span>, ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0x40, 0, 0, 0, 0, 0, 0, 0}, <span class="keyword">true</span>, 0x4000000000000000LL, 1.0, 0.0, 4611686018427387904.0},</div>
|
||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> {<span class="stringliteral">"Motorola short payload"</span>, ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> {<span class="stringliteral">"Motorola empty payload"</span>, ByteOrder::Motorola, 7U, 8U, ValueType::Unsigned, {}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> {<span class="stringliteral">"Motorola large start"</span>, ByteOrder::Motorola, std::numeric_limits<std::uint32_t>::max(), 8U, ValueType::Unsigned, {0xFF}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> {<span class="stringliteral">"Motorola zero length"</span>, ByteOrder::Motorola, 7U, 0U, ValueType::Unsigned, {0xFF}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> {<span class="stringliteral">"Motorola excessive length"</span>, ByteOrder::Motorola, 7U, 65U, ValueType::Unsigned,</div>
|
||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> std::vector<std::uint8_t>(9U, 0xFF), <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0},</div>
|
||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> {<span class="stringliteral">"Intel regression"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12, 0x34}, <span class="keyword">true</span>, 0x3412, 1.0, 0.0, 13330.0},</div>
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> {<span class="stringliteral">"Intel signed regression"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Signed, {0xFE, 0xFF}, <span class="keyword">true</span>, -2, 0.5, 10.0, 9.0},</div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> {<span class="stringliteral">"Intel short payload"</span>, ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12}, <span class="keyword">false</span>, 0, 1.0, 0.0, 0.0}};</div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">int</span> failures = 0;</div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> DecodeCase &test: cases) {</div>
|
||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
|
||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a> = test.name;</div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = test.byteOrder;</div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = test.startBit;</div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = test.length;</div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = test.valueType;</div>
|
||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = test.factor;</div>
|
||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = test.offset;</div>
|
||||
<div class="line"><a id="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> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
|
||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a> = 0x123U;</div>
|
||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> definition.<a class="code hl_variable" href="structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060">dlc</a> = <span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(test.data.size());</div>
|
||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> definition.signals.push_back(signal);</div>
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> database.frames.push_back(definition);</div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>, <span class="keyword">false</span>), 0U);</div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = definition.<a class="code hl_variable" href="structDecodeFrame.html#a52e10215388db7df8b541b9d9909edcf">canId</a>;</div>
|
||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a> = test.data;</div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
|
||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> passed = result.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> &&</div>
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> (result.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == &database.frames[0]) &&</div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> (result.signals.size() == 1U) &&</div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> (result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == &database.frames[0].signals[0]) &&</div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> (result.signals[0].<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> == test.valid) &&</div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> (!test.valid || (((test.valueType == ValueType::Signed)</div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> ? (std::get_if<std::int64_t>(&result.signals[0].rawValue) &&</div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> std::get<std::int64_t>(result.signals[0].rawValue) == test.rawValue)</div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> : (std::get_if<std::uint64_t>(&result.signals[0].rawValue) &&</div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> std::get<std::uint64_t>(result.signals[0].rawValue) ==</div>
|
||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> static_cast<std::uint64_t>(test.rawValue))) &&</div>
|
||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> (result.signals[0].physicalValue == test.physicalValue)));</div>
|
||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (!passed) {</div>
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> std::cerr << <span class="stringliteral">"FAIL: "</span> << test.name << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> ++failures;</div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> std::size_t boundaryCases = 0U;</div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b">ByteOrder</a> order: {ByteOrder::Intel, ByteOrder::Motorola}) {</div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">for</span> (<a class="code hl_enumeration" href="decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1">ValueType</a> type: {ValueType::Unsigned, ValueType::Signed}) {</div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">for</span> (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),</div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> std::uint64_t(0x8000000000000000ULL),</div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> std::uint64_t(0x8000000000000001ULL),</div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> std::uint64_t(0xFFFFFFFFFFFFFFFFULL)}) {</div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> database;</div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_struct" href="structDecodeFrame.html">DecodeFrame</a> definition;</div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_struct" href="structDecodeSignal.html">DecodeSignal</a> signal;</div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d">startBit</a> = order == ByteOrder::Intel ? 0U : 7U;</div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#acd4ef5ee30421d117b5756854302debb">length</a> = 64U;</div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#abdc4c4bb4a67a6d61d6ca81e8a52833d">byteOrder</a> = order;</div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8">valueType</a> = type;</div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a428c39913a366a8476dd291061354391">factor</a> = 0.5;</div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> signal.<a class="code hl_variable" href="structDecodeSignal.html#a92db637af4e224a0ae70173050dc3f74">offset</a> = 10.0;</div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> definition.signals.push_back(signal);</div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> database.frames.push_back(definition);</div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> database.frameIndexByKey.emplace(<a class="code hl_struct" href="structFrameKey.html">FrameKey</a>(0U, <span class="keyword">false</span>), 0U);</div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> frame;</div>
|
||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">byte</span> = 0U; <span class="keywordtype">byte</span> < 8U; ++byte) {</div>
|
||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> shift = (order == ByteOrder::Intel ? byte : 7U - byte) * 8U;</div>
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> frame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.push_back(<span class="keyword">static_cast<</span>std::uint8_t<span class="keyword">></span>(bits >> shift));</div>
|
||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keyword">const</span> <span class="keyword">auto</span> result = <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a>().<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(database, frame);</div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">const</span> std::int64_t signedExpected = bits <= 0x7FFFFFFFFFFFFFFFULL</div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> ? <span class="keyword">static_cast<</span>std::int64_t<span class="keyword">></span>(bits)</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> : std::numeric_limits<std::int64_t>::min() +</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> static_cast<std::int64_t>(bits - 0x8000000000000000ULL);</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">const</span> <span class="keyword">auto</span> &decoded = result.signals.at(0U);</div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">const</span> <span class="keyword">auto</span> expected = type == ValueType::Unsigned</div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> ? std::variant<std::int64_t, std::uint64_t>(bits)</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> : std::variant<std::int64_t, std::uint64_t>(signedExpected);</div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">const</span> <span class="keywordtype">double</span> physical = (type == ValueType::Unsigned</div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> ? <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(bits)</div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> : static_cast<double>(signedExpected)) *</div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> 0.5 +</div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> 10.0;</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> std::ostringstream actualText;</div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> std::ostringstream expectedText;</div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *signedValue = std::get_if<std::int64_t>(&decoded.rawValue))</div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> actualText << *signedValue;</div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> actualText << std::get<std::uint64_t>(decoded.rawValue);</div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (type == ValueType::Unsigned)</div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> expectedText << bits;</div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> expectedText << signedExpected;</div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span> (!decoded.valid || decoded.rawValue != expected ||</div>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> decoded.physicalValue != physical || actualText.str() != expectedText.str()) {</div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> std::cerr << <span class="stringliteral">"FAIL: 64-bit boundary "</span> << bits << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> ++failures;</div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> }</div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> ++boundaryCases;</div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> }</div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</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> <span class="keywordflow">if</span> (failures != 0)</div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> 1;</div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> std::cout << <span class="stringliteral">"All "</span> << <span class="keyword">sizeof</span>(cases) / <span class="keyword">sizeof</span>(cases[0]) + boundaryCases << <span class="stringliteral">" decoder cases passed.\n"</span>;</div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</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>
|
||||
|
||||
@@ -113,7 +113,7 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp.html',''); initResiza
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -166,7 +166,7 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp_source.html',''); ini
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -119,7 +119,7 @@ Classes</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -126,7 +126,7 @@ $(document).ready(function(){initNavTree('dbc__parser_8h_source.html',''); initR
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -101,261 +101,292 @@ $(document).ready(function(){initNavTree('dbc__parser__test_8cpp_source.html',''
|
||||
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include "<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>"</span></div>
|
||||
<div class="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 <chrono></span></div>
|
||||
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include <filesystem></span></div>
|
||||
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include <fstream></span></div>
|
||||
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include <iostream></span></div>
|
||||
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include <stdexcept></span></div>
|
||||
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
|
||||
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="keyword">struct </span>Fixture {</div>
|
||||
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> std::filesystem::path path = std::filesystem::temp_directory_path() /</div>
|
||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> (<span class="stringliteral">"dbc_parser_test_"</span> + std::to_string(std::chrono::steady_clock::now().time_since_epoch().count()) + <span class="stringliteral">".dbc"</span>);</div>
|
||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> ~Fixture() {</div>
|
||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> std::error_code error;</div>
|
||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> std::filesystem::remove(path, error);</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="keywordtype">void</span> Write(<span class="keyword">const</span> std::string &text)<span class="keyword"> const </span>{</div>
|
||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> std::ofstream output(path);</div>
|
||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> output << text;</div>
|
||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <span class="keywordflow">if</span> (!output)</div>
|
||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">"Cannot write test fixture."</span>);</div>
|
||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> }</div>
|
||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span>};</div>
|
||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">class </span>CountingHandler : <span class="keyword">public</span> <a class="code hl_class" href="classDbcStatementHandler.html">DbcStatementHandler</a> {</div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">public</span>:</div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">int</span> instances = 0;</div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">int</span> calls = 0;</div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> CountingHandler() { ++instances; }</div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">void</span> Handle(<span class="keyword">const</span> std::string &, <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> &context)<span class="keyword"> const override </span>{</div>
|
||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> ++calls;</div>
|
||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> context.database.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.emplace_back();</div>
|
||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> }</div>
|
||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>};</div>
|
||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
|
||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>std::string SignalLine(<span class="keyword">const</span> std::string &start, <span class="keyword">const</span> std::string &length,</div>
|
||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">const</span> std::string &order, <span class="keyword">const</span> std::string &factor,</div>
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">const</span> std::string &offset, <span class="keyword">const</span> std::string &minimum,</div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">const</span> std::string &maximum) {</div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">return</span> <span class="stringliteral">"SG_ Value : "</span> + start + <span class="stringliteral">"|"</span> + length + <span class="stringliteral">"@"</span> + order +</div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="stringliteral">" ("</span> + factor + <span class="stringliteral">","</span> + offset + <span class="stringliteral">") ["</span> + minimum + <span class="stringliteral">"|"</span> + maximum + <span class="stringliteral">"] \"\" ECU"</span>;</div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</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><span class="keyword">struct </span>TestContext {</div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">int</span> failures = 0;</div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> std::size_t count = 0U;</div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">void</span> Check(<span class="keywordtype">bool</span> passed, <span class="keyword">const</span> std::string &name) {</div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> ++count;</div>
|
||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">if</span> (!passed) {</div>
|
||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> ++failures;</div>
|
||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> std::cerr << <span class="stringliteral">"FAIL: "</span> << name << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</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> <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="l00055" name="l00055"></a><span class="lineno"> 55</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(payload) + <span class="stringliteral">" ECU\n\n"</span> + line + <span class="stringliteral">"\n"</span>);</div>
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> Check(<span class="keyword">false</span>, <span class="stringliteral">"Reject "</span> + line);</div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">const</span> std::string prefix = fixture.path.string() + <span class="stringliteral">":3: "</span>;</div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> Check(std::string(error.what()).find(prefix) == 0U &&</div>
|
||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> std::string(error.what()).size() > prefix.size(),</div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="stringliteral">"Reject "</span> + 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> }</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> </div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="keywordtype">int</span> main() {</div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> Fixture fixture;</div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> TestContext tests;</div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">struct </span>ValidCase {</div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *line;</div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> std::uint32_t id;</div>
|
||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">bool</span> extended;</div>
|
||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">unsigned</span> length;</div>
|
||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> };</div>
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">const</span> ValidCase valid[] = {</div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> {<span class="stringliteral">"BO_ 0 Frame: 0 ECU"</span>, 0U, <span class="keyword">false</span>, 0U},</div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> {<span class="stringliteral">"BO_ 2047 Frame: 8 ECU"</span>, 2047U, <span class="keyword">false</span>, 8U},</div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> {<span class="stringliteral">"BO_ 2048 Frame: 64 ECU"</span>, 2048U, <span class="keyword">true</span>, 64U},</div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> {<span class="stringliteral">"BO_ 536870911 Frame: 255 ECU"</span>, 0x1FFFFFFFU, <span class="keyword">true</span>, 255U},</div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> {<span class="stringliteral">"BO_ 2147483649 Frame: 8 ECU"</span>, 1U, <span class="keyword">true</span>, 8U},</div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> {<span class="stringliteral">"BO_ 2684354559 Frame: 8 ECU"</span>, 0x1FFFFFFFU, <span class="keyword">true</span>, 8U},</div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> {<span class="stringliteral">" BO_\t256\tFrame :\t8\tECU \r"</span>, 256U, <span class="keyword">false</span>, 8U}};</div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: valid) {</div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> fixture.Write(std::string(test.line) + <span class="charliteral">'\n'</span>);</div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">const</span> <span class="keyword">auto</span> database = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> tests.Check(database.frames.size() == 1U && database.frames[0].name == <span class="stringliteral">"Frame"</span> &&</div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> database.frames[0].canId == test.id &&</div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> database.frames[0].isExtended == test.extended &&</div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> database.frames[0].dlc == test.length &&</div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> database.frames[0].transmitter == <span class="stringliteral">"ECU"</span>,</div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> test.line);</div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { tests.Check(<span class="keyword">false</span>, error.what()); }</div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *invalid[] = {</div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="stringliteral">"BO_ invalid"</span>, <span class="stringliteral">"BO_"</span>, <span class="stringliteral">"BO_ 1"</span>, <span class="stringliteral">"BO_ 1 : 8 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame 8 ECU"</span>,</div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="stringliteral">"BO_ 1 Frame:"</span>, <span class="stringliteral">"BO_ 1 Frame: 8"</span>, <span class="stringliteral">"BO_ 1 Frame: 8 ECU extra"</span>,</div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="stringliteral">"BO_ 1 Two Names: 8 ECU"</span>, <span class="stringliteral">"BO_ -1 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ +1 Frame: 8 ECU"</span>,</div>
|
||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="stringliteral">"BO_ 1x Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 0x123 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 1.5 Frame: 8 ECU"</span>,</div>
|
||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="stringliteral">"BO_ 4294967296 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 999999999999999999999 Frame: 8 ECU"</span>,</div>
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="stringliteral">"BO_ 536870912 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 1073741824 Frame: 8 ECU"</span>,</div>
|
||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="stringliteral">"BO_ 2684354560 Frame: 8 ECU"</span>, <span class="stringliteral">"BO_ 4294967295 Frame: 8 ECU"</span>,</div>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="stringliteral">"BO_ 1 Frame: -1 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: +8 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: 8x ECU"</span>,</div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="stringliteral">"BO_ 1 Frame: 8.5 ECU"</span>, <span class="stringliteral">"BO_ 1 Frame: 256 ECU"</span>,</div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="stringliteral">"BO_ 1 Frame: 4294967296 ECU"</span>, <span class="stringliteral">"BO_\tinvalid"</span>};</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *line: invalid) {</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> fixture.Write(std::string(<span class="stringliteral">"VERSION \"test\"\n\n"</span>) + line + <span class="charliteral">'\n'</span>);</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> tests.Check(<span class="keyword">false</span>, line);</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">const</span> std::string prefix = fixture.path.string() + <span class="stringliteral">":3: "</span>;</div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> tests.Check(std::string(error.what()).find(prefix) == 0U &&</div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> std::string(error.what()).size() > prefix.size(),</div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> line);</div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> }</div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> fixture.Write(</div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="stringliteral">"BO_TX_BU_ 256 : ECU;\nBO_ 256 Frame: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="stringliteral">" SG_ Speed : 0|16@1+ (0.5,1) [0|100] \"rpm\" ECU\n"</span></div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="stringliteral">"CM_ BO_ 256 \"Frame comment\";\nCM_ SG_ 256 Speed \"Signal comment\";\n"</span></div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="stringliteral">"BO_ 257 Second: 8 ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">const</span> <span class="keyword">auto</span> database = <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> tests.Check(database.frames.size() == 2U && database.frames[0].signals.size() == 1U &&</div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> database.frames[0].comment == <span class="stringliteral">"Frame comment"</span> &&</div>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> database.frames[0].signals[0].comment == <span class="stringliteral">"Signal comment"</span>,</div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="stringliteral">"Integration"</span>);</div>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> fixture.Write(<span class="stringliteral">"\nSG_ Speed : invalid\n"</span>);</div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a>().<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> tests.Check(<span class="keyword">false</span>, <span class="stringliteral">"Signal error location"</span>);</div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> tests.Check(std::string(error.what()).find(fixture.path.string() + <span class="stringliteral">":2: "</span>) == 0U,</div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="stringliteral">"Signal error location"</span>);</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> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> signalParser;</div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">const</span> std::string ordinary = SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>);</div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"-1"</span>, <span class="stringliteral">"+1"</span>, <span class="stringliteral">"0junk"</span>, <span class="stringliteral">"0x10"</span>, <span class="stringliteral">"1.5"</span>,</div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="stringliteral">"4294967296"</span>, <span class="stringliteral">"999999999999999999999"</span>}) {</div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> tests.RejectSignal(fixture, SignalLine(value, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, value, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string length: {<span class="stringliteral">"0"</span>, <span class="stringliteral">"65"</span>})</div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, length, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string order: {<span class="stringliteral">"2+"</span>, <span class="stringliteral">"9-"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1x"</span>, <span class="stringliteral">"1++"</span>, <span class="stringliteral">"01+"</span>})</div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, order, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string value: {<span class="stringliteral">"1junk"</span>, <span class="stringliteral">"nan"</span>, <span class="stringliteral">"NaN"</span>, <span class="stringliteral">"inf"</span>, <span class="stringliteral">"-inf"</span>, <span class="stringliteral">"1e999"</span>, <span class="stringliteral">"1e-999"</span>, <span class="stringliteral">"0x1p2"</span>, <span class="stringliteral">""</span>, <span class="stringliteral">"1e"</span>, <span class="stringliteral">"1.2.3"</span>}) {</div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, value, <span class="stringliteral">"0"</span>, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, value, <span class="stringliteral">"255"</span>));</div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, value));</div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> }</div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string name: {<span class="stringliteral">""</span>, <span class="stringliteral">"Two Names"</span>, <span class="stringliteral">"Value M"</span>, <span class="stringliteral">"Value m1"</span>, <span class="stringliteral">"Value m1M"</span>}) {</div>
|
||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> std::string line = ordinary;</div>
|
||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> line.replace(4U, 5U, name);</div>
|
||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> tests.RejectSignal(fixture, line);</div>
|
||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div>
|
||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string broken: {</div>
|
||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="stringliteral">"SG_"</span>, <span class="stringliteral">"SG_ Value"</span>, <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] ECU"</span>,</div>
|
||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\""</span>,</div>
|
||||
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,"</span>,</div>
|
||||
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="stringliteral">"SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"</span>})</div>
|
||||
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> tests.RejectSignal(fixture, broken);</div>
|
||||
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"64"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"63"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"56"</span>, <span class="stringliteral">"2"</span>, <span class="stringliteral">"0+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"3"</span>));</div>
|
||||
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> tests.RejectSignal(fixture, SignalLine(<span class="stringliteral">"4294967295"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>));</div>
|
||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> tests.RejectSignal(fixture, ordinary, 0U);</div>
|
||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> delimiter: {<span class="charliteral">'|'</span>, <span class="charliteral">'@'</span>, <span class="charliteral">'('</span>, <span class="charliteral">')'</span>, <span class="charliteral">'['</span>, <span class="charliteral">']'</span>, <span class="charliteral">'"'</span>}) {</div>
|
||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> std::string line = ordinary;</div>
|
||||
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> line.erase(line.find(delimiter), 1U);</div>
|
||||
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> tests.RejectSignal(fixture, line);</div>
|
||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> }</div>
|
||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span> +</div>
|
||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> SignalLine(<span class="stringliteral">"0"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1+"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span> +</div>
|
||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> SignalLine(<span class="stringliteral">"8"</span>, <span class="stringliteral">"8"</span>, <span class="stringliteral">"1-"</span>, <span class="stringliteral">"-1"</span>, <span class="stringliteral">"0"</span>, <span class="stringliteral">"-255"</span>, <span class="stringliteral">"0"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">const</span> <span class="keyword">auto</span> factors = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> tests.Check(factors.frames[0].signals.size() == 2U &&</div>
|
||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> factors.frames[0].signals[0].factor == 0.0 &&</div>
|
||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> factors.frames[0].signals[1].factor == -1.0,</div>
|
||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="stringliteral">"Zero and negative factors and equal range boundaries"</span>);</div>
|
||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
|
||||
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">struct </span>SignalCase {</div>
|
||||
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *start;</div>
|
||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *length;</div>
|
||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *order;</div>
|
||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">unsigned</span> payload;</div>
|
||||
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> };</div>
|
||||
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">const</span> SignalCase validSignals[] = {</div>
|
||||
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 1U},</div>
|
||||
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0-"</span>, 1U},</div>
|
||||
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> {<span class="stringliteral">"0"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> {<span class="stringliteral">"7"</span>, <span class="stringliteral">"64"</span>, <span class="stringliteral">"0-"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> {<span class="stringliteral">"63"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> {<span class="stringliteral">"56"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"0+"</span>, 8U},</div>
|
||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> {<span class="stringliteral">"3"</span>, <span class="stringliteral">"12"</span>, <span class="stringliteral">"0+"</span>, 2U},</div>
|
||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> {<span class="stringliteral">"2039"</span>, <span class="stringliteral">"1"</span>, <span class="stringliteral">"1+"</span>, 255U}};</div>
|
||||
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &test: validSignals) {</div>
|
||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: "</span> + std::to_string(test.payload) + <span class="stringliteral">" ECU\n"</span> +</div>
|
||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> SignalLine(test.start, test.length, test.order, <span class="stringliteral">".5e+1"</span>, <span class="stringliteral">"-2.5E-1"</span>, <span class="stringliteral">"-1."</span>, <span class="stringliteral">"+2e2"</span>) + <span class="stringliteral">"\n"</span>);</div>
|
||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">const</span> <span class="keyword">auto</span> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">const</span> <span class="keyword">auto</span> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> tests.Check(signal.startBit == std::stoul(test.start) &&</div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> signal.length == std::stoul(test.length) &&</div>
|
||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> signal.isLittleEndian == (test.order[0] == <span class="charliteral">'1'</span>) &&</div>
|
||||
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> signal.isSigned == (test.order[1] == <span class="charliteral">'-'</span>) &&</div>
|
||||
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> signal.factor == 5.0 && signal.offset == -0.25 &&</div>
|
||||
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> signal.minimum == -1.0 && signal.maximum == 200.0,</div>
|
||||
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="stringliteral">"Valid signal boundary and numeric metadata"</span>);</div>
|
||||
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { tests.Check(<span class="keyword">false</span>, error.what()); }</div>
|
||||
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> }</div>
|
||||
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> fixture.Write(<span class="stringliteral">"BO_ 1 Frame: 8 ECU\n"</span></div>
|
||||
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="stringliteral">"SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n"</span>);</div>
|
||||
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">const</span> <span class="keyword">auto</span> parsed = signalParser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">const</span> <span class="keyword">auto</span> &signal = parsed.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.at(0).signals.at(0);</div>
|
||||
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> tests.Check(signal.name == <span class="stringliteral">"Value"</span> && signal.unit == <span class="stringliteral">"rpm"</span> &&</div>
|
||||
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> signal.receivers == std::vector<std::string>({<span class="stringliteral">"ECU1"</span>, <span class="stringliteral">"ECU2"</span>}),</div>
|
||||
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="stringliteral">"Signal tabs, spaces, and receiver list"</span>);</div>
|
||||
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &error) { tests.Check(<span class="keyword">false</span>, error.what()); }</div>
|
||||
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> dispatchDatabase;</div>
|
||||
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <a class="code hl_struct" href="structDbcParseContext.html">DbcParseContext</a> context{dispatchDatabase, <span class="keyword">nullptr</span>};</div>
|
||||
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <a class="code hl_class" href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a> dispatcher;</div>
|
||||
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> dispatcher.RegisterType<CountingHandler>(<span class="stringliteral">"TEST_"</span>);</div>
|
||||
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> tests.Check(dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ first"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_ second"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> CountingHandler::instances == 1 && CountingHandler::calls == 2 &&</div>
|
||||
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> dispatchDatabase.<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 2U,</div>
|
||||
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="stringliteral">"Factory dispatch and handler reuse"</span>);</div>
|
||||
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> tests.Check(!dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"TEST_OTHER data"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"BO_TX_BU_ 1 : ECU;"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> !dispatcher.<a class="code hl_function" href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">Dispatch</a>(<span class="stringliteral">"VAL_ 1 Speed 0 \"Stopped\";"</span>, context) &&</div>
|
||||
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> CountingHandler::calls == 2,</div>
|
||||
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="stringliteral">"Exact and unknown keyword dispatch"</span>);</div>
|
||||
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keyword">const</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
|
||||
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> fixture.Write(<span class="stringliteral">"BO_ 1 First: 8 ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> tests.Check(parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string()).<a class="code hl_variable" href="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b">frames</a>.size() == 1U, <span class="stringliteral">"First parse"</span>);</div>
|
||||
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> fixture.Write(<span class="stringliteral">"SG_ Speed : invalid\n"</span>);</div>
|
||||
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> tests.Check(<span class="keyword">false</span>, <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error &error) {</div>
|
||||
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> tests.Check(std::string(error.what()).find(<span class="stringliteral">"Signal found before any frame"</span>) !=</div>
|
||||
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> std::string::npos,</div>
|
||||
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="stringliteral">"Independent parse context"</span>);</div>
|
||||
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> }</div>
|
||||
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> fixture.Write(<span class="stringliteral">"BO_ 2 Second: 8 ECU\n"</span>);</div>
|
||||
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">const</span> <span class="keyword">auto</span> recovered = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(fixture.path.string());</div>
|
||||
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> tests.Check(recovered.frames.size() == 1U && recovered.frames[0].canId == 2U,</div>
|
||||
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="stringliteral">"Fresh parse after error"</span>);</div>
|
||||
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span> (tests.failures != 0) <span class="keywordflow">return</span> 1;</div>
|
||||
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> std::cout << <span class="stringliteral">"All "</span> << tests.count << <span class="stringliteral">" parser cases passed.\n"</span>;</div>
|
||||
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</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>
|
||||
|
||||
@@ -450,7 +450,7 @@ $(document).ready(function(){initNavTree('dbc__statement__handler_8cpp_source.ht
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><b>dbc_statement_handler.cpp</b></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><b>dbc_statement_handler.cpp</b></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -191,7 +191,7 @@ $(document).ready(function(){initNavTree('dbc__statement__handler_8h_source.html
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><b>dbc_statement_handler.h</b></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><b>dbc_statement_handler.h</b></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8cpp.html',''); ini
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -133,7 +133,7 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8cpp_source.html','
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -120,7 +120,7 @@ Classes</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -125,7 +125,7 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8h_source.html','')
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -200,7 +200,7 @@ Enumerations</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="decode__database_8h.html">decode_database.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="decode__database_8h.html">decode_database.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -227,7 +227,7 @@ $(document).ready(function(){initNavTree('decode__database_8h_source.html','');
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="decode__database_8h.html">decode_database.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="decode__database_8h.html">decode_database.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>DBC Framework: core Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr id="projectrow">
|
||||
<td id="projectalign">
|
||||
<div id="projectname">DBC Framework
|
||||
</div>
|
||||
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.8 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(document).ready(function(){initNavTree('dir_4270bfced15e0e73154b13468c7c9ad9.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<div id="MSearchResults">
|
||||
<div class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div id="SRResults"></div>
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle"><div class="title">core Directory Reference</div></div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__database_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__database_8h.html">dbc_database.h</a></td></tr>
|
||||
<tr class="memdesc:dbc__database_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decode__builder_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__decode__builder_8cpp.html">dbc_decode_builder.cpp</a></td></tr>
|
||||
<tr class="memdesc:dbc__decode__builder_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decode__builder_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></td></tr>
|
||||
<tr class="memdesc:dbc__decode__builder_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decoder_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__decoder_8cpp.html">dbc_decoder.cpp</a></td></tr>
|
||||
<tr class="memdesc:dbc__decoder_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__decoder_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__decoder_8h.html">dbc_decoder.h</a></td></tr>
|
||||
<tr class="memdesc:dbc__decoder_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__parser_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__parser_8cpp.html">dbc_parser.cpp</a></td></tr>
|
||||
<tr class="memdesc:dbc__parser_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__parser_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__parser_8h.html">dbc_parser.h</a></td></tr>
|
||||
<tr class="memdesc:dbc__parser_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__statement__handler_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>dbc_statement_handler.cpp</b></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__statement__handler_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>dbc_statement_handler.h</b></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__tree__builder_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__tree__builder_8cpp.html">dbc_tree_builder.cpp</a></td></tr>
|
||||
<tr class="memdesc:dbc__tree__builder_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__tree__builder_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></td></tr>
|
||||
<tr class="memdesc:dbc__tree__builder_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="decode__database_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="decode__database_8h.html">decode_database.h</a></td></tr>
|
||||
<tr class="memdesc:decode__database_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="frame__info_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="frame__info_8h.html">frame_info.h</a></td></tr>
|
||||
<tr class="memdesc:frame__info_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="signal__info_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="signal__info_8h.html">signal_info.h</a></td></tr>
|
||||
<tr class="memdesc:signal__info_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="tree__node_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></td></tr>
|
||||
<tr class="memdesc:tree__node_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="tree__node_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="tree__node_8h.html">tree_node.h</a></td></tr>
|
||||
<tr class="memdesc:tree__node_8h"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="typefactory_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>typefactory.h</b></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,20 @@
|
||||
var dir_4270bfced15e0e73154b13468c7c9ad9 =
|
||||
[
|
||||
[ "dbc_database.h", "dbc__database_8h.html", "dbc__database_8h" ],
|
||||
[ "dbc_decode_builder.cpp", "dbc__decode__builder_8cpp.html", null ],
|
||||
[ "dbc_decode_builder.h", "dbc__decode__builder_8h.html", "dbc__decode__builder_8h" ],
|
||||
[ "dbc_decoder.cpp", "dbc__decoder_8cpp.html", null ],
|
||||
[ "dbc_decoder.h", "dbc__decoder_8h.html", "dbc__decoder_8h" ],
|
||||
[ "dbc_parser.cpp", "dbc__parser_8cpp.html", null ],
|
||||
[ "dbc_parser.h", "dbc__parser_8h.html", "dbc__parser_8h" ],
|
||||
[ "dbc_statement_handler.cpp", "dbc__statement__handler_8cpp_source.html", null ],
|
||||
[ "dbc_statement_handler.h", "dbc__statement__handler_8h_source.html", null ],
|
||||
[ "dbc_tree_builder.cpp", "dbc__tree__builder_8cpp.html", null ],
|
||||
[ "dbc_tree_builder.h", "dbc__tree__builder_8h.html", "dbc__tree__builder_8h" ],
|
||||
[ "decode_database.h", "decode__database_8h.html", "decode__database_8h" ],
|
||||
[ "frame_info.h", "frame__info_8h.html", "frame__info_8h" ],
|
||||
[ "signal_info.h", "signal__info_8h.html", "signal__info_8h" ],
|
||||
[ "tree_node.cpp", "tree__node_8cpp.html", null ],
|
||||
[ "tree_node.h", "tree__node_8h.html", "tree__node_8h" ],
|
||||
[ "typefactory.h", "typefactory_8h_source.html", null ]
|
||||
];
|
||||
@@ -100,6 +100,8 @@ Files</h2></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>dbc_parser_test.cpp</b></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="tests_2main_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><b>main.cpp</b></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
var dir_59425e443f801f1f2fd8bbe4959a3ccf =
|
||||
[
|
||||
[ "dbc_decoder_test.cpp", "dbc__decoder__test_8cpp_source.html", null ],
|
||||
[ "dbc_parser_test.cpp", "dbc__parser__test_8cpp_source.html", null ]
|
||||
[ "dbc_parser_test.cpp", "dbc__parser__test_8cpp_source.html", null ],
|
||||
[ "tests/main.cpp", "tests_2main_8cpp_source.html", null ]
|
||||
];
|
||||
@@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>DBC Framework: examples Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr id="projectrow">
|
||||
<td id="projectalign">
|
||||
<div id="projectname">DBC Framework
|
||||
</div>
|
||||
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.8 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(document).ready(function(){initNavTree('dir_d28a4824dc47e487b107a5db32ef43c4.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<div id="MSearchResults">
|
||||
<div class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div id="SRResults"></div>
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle"><div class="title">examples Directory Reference</div></div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="examples_2main_8cpp_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="examples_2main_8cpp.html">main.cpp</a></td></tr>
|
||||
<tr class="memdesc:examples_2main_8cpp"><td class="mdescLeft"> </td><td class="mdescRight">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) <br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,4 @@
|
||||
var dir_d28a4824dc47e487b107a5db32ef43c4 =
|
||||
[
|
||||
[ "main.cpp", "examples_2main_8cpp.html", null ]
|
||||
];
|
||||
@@ -0,0 +1,164 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>DBC Framework: main.cpp File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr id="projectrow">
|
||||
<td id="projectalign">
|
||||
<div id="projectname">DBC Framework
|
||||
</div>
|
||||
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.8 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(document).ready(function(){initNavTree('examples_2main_8cpp.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<div id="MSearchResults">
|
||||
<div class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div id="SRResults"></div>
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#func-members">Functions</a> </div>
|
||||
<div class="headertitle"><div class="title">main.cpp File Reference</div></div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
|
||||
<a href="#details">More...</a></p>
|
||||
<div class="textblock"><code>#include <cstddef></code><br />
|
||||
<code>#include <iomanip></code><br />
|
||||
<code>#include <iostream></code><br />
|
||||
<code>#include <memory></code><br />
|
||||
<code>#include <vector></code><br />
|
||||
<code>#include "<a class="el" href="dbc__decode__builder_8h_source.html">dbc_decode_builder.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="dbc__decoder_8h_source.html">dbc_decoder.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="dbc__parser_8h_source.html">dbc_parser.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="dbc__tree__builder_8h_source.html">dbc_tree_builder.h</a>"</code><br />
|
||||
</div>
|
||||
<p><a href="examples_2main_8cpp_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
|
||||
Functions</h2></td></tr>
|
||||
<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97" id="r_a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="examples_2main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
|
||||
<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </p>
|
||||
<p>Licensed under the MIT License. See LICENSE file in the project root for full license text. </p>
|
||||
|
||||
<p class="definition">Definition in file <a class="el" href="examples_2main_8cpp_source.html">examples/main.cpp</a>.</p>
|
||||
</div><h2 class="groupheader">Function Documentation</h2>
|
||||
<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">◆ </a></span>main()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">int main </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"><em>argc</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">char * </td>
|
||||
<td class="paramname"><em>argv</em>[] </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="examples_2main_8cpp_source.html#l00101">101</a> of file <a class="el" href="examples_2main_8cpp_source.html">examples/main.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="examples_2main_8cpp.html">main.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,287 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>DBC Framework: main.cpp Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr id="projectrow">
|
||||
<td id="projectalign">
|
||||
<div id="projectname">DBC Framework
|
||||
</div>
|
||||
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.8 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(document).ready(function() { init_codefold(0); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(document).ready(function(){initNavTree('examples_2main_8cpp_source.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<div id="MSearchResults">
|
||||
<div class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div id="SRResults"></div>
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle"><div class="title">examples/main.cpp</div></div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="examples_2main_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include <cstddef></span></div>
|
||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include <iomanip></span></div>
|
||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include <iostream></span></div>
|
||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <memory></span></div>
|
||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <vector></span></div>
|
||||
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
|
||||
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include "<a class="code" href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a>"</span></div>
|
||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include "<a class="code" href="dbc__decoder_8h.html">dbc_decoder.h</a>"</span></div>
|
||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include "<a class="code" href="dbc__parser_8h.html">dbc_parser.h</a>"</span></div>
|
||||
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include "<a class="code" href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a>"</span></div>
|
||||
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
|
||||
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="keyword">static</span> <span class="keywordtype">void</span> PrintTree(<span class="keyword">const</span> <a class="code hl_class" href="classTreeNode.html">TreeNode</a> *node, <span class="keywordtype">int</span> indent) {</div>
|
||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keywordflow">if</span> (node == <span class="keyword">nullptr</span>)</div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < indent; ++i)</div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> std::cout << <span class="stringliteral">" "</span>;</div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">switch</span> (node-><a class="code hl_function" href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">GetType</a>()) {</div>
|
||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">case</span> NodeType::Root:</div>
|
||||
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> std::cout << <span class="stringliteral">"[root] "</span> << node-><a class="code hl_function" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a>() << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
|
||||
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">case</span> NodeType::Frame: {</div>
|
||||
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">const</span> <a class="code hl_struct" href="structFrameInfo.html">FrameInfo</a> *frame = node-><a class="code hl_function" href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">GetFrame</a>();</div>
|
||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> std::cout << <span class="stringliteral">"[frame] "</span> << node-><a class="code hl_function" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a>();</div>
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">if</span> (frame != <span class="keyword">nullptr</span>) {</div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> std::cout << <span class="stringliteral">" id=0x"</span> << std::hex << frame-><a class="code hl_variable" href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">canId</a> << std::dec</div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> << <span class="stringliteral">" ext="</span> << (frame-><a class="code hl_variable" href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">isExtended</a> ? <span class="stringliteral">"yes"</span> : <span class="stringliteral">"no"</span>)</div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> << <span class="stringliteral">" dlc="</span> << <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(frame-><a class="code hl_variable" href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">dlc</a>);</div>
|
||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
|
||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">if</span> (frame-><a class="code hl_variable" href="structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d">hasPgn</a>)</div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> std::cout << <span class="stringliteral">" pgn="</span> << frame-><a class="code hl_variable" href="structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943">pgn</a>;</div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> }</div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> std::cout << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> }</div>
|
||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
|
||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">case</span> NodeType::Signal: {</div>
|
||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">const</span> <a class="code hl_struct" href="structSignalInfo.html">SignalInfo</a> *signal = node-><a class="code hl_function" href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">GetSignal</a>();</div>
|
||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> std::cout << <span class="stringliteral">"[signal] "</span> << node-><a class="code hl_function" href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">GetName</a>();</div>
|
||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> (signal != <span class="keyword">nullptr</span>) {</div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> std::cout << <span class="stringliteral">" start="</span> << signal-><a class="code hl_variable" href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">startBit</a></div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> << <span class="stringliteral">" len="</span> << signal-><a class="code hl_variable" href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">length</a></div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> << <span class="stringliteral">" unit="</span> << signal-><a class="code hl_variable" href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">unit</a>;</div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
|
||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> std::cout << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> }</div>
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">default</span>:</div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> std::cout << <span class="stringliteral">"[unknown]\n"</span>;</div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> }</div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span> (std::size_t i = 0U; i < node-><a class="code hl_function" href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">GetChildCount</a>(); ++i)</div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> PrintTree(node-><a class="code hl_function" href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">GetChild</a>(i), indent + 1);</div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>}</div>
|
||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
|
||||
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">static</span> <span class="keywordtype">void</span> PrintDecodedFrame(<span class="keyword">const</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> &decoded) {</div>
|
||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (!decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">valid</a> || (decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a> == <span class="keyword">nullptr</span>)) {</div>
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> std::cout << <span class="stringliteral">"No frame definition found.\n"</span>;</div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> std::cout << <span class="stringliteral">"Decoded frame: "</span> << decoded.<a class="code hl_variable" href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">definition</a>-><a class="code hl_variable" href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">name</a> << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">for</span> (std::size_t index = 0U; index < decoded.signals.size(); ++index) {</div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">const</span> <a class="code hl_struct" href="structDecodedSignalValue.html">DecodedSignalValue</a> &signal = decoded.signals[index];</div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span> ((signal.<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a> == <span class="keyword">nullptr</span>) || !signal.<a class="code hl_variable" href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">valid</a>)</div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> std::cout << <span class="stringliteral">" "</span> << signal.<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>-><a class="code hl_variable" href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">name</a></div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> << <span class="stringliteral">" raw="</span>;</div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keyword">auto</span> *signedValue = std::get_if<std::int64_t>(&signal.<a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a>))</div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> std::cout << *signedValue;</div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> std::cout << std::get<std::uint64_t>(signal.<a class="code hl_variable" href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">rawValue</a>);</div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> std::cout << <span class="stringliteral">" physical="</span> << signal.<a class="code hl_variable" href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">physicalValue</a></div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> << <span class="stringliteral">" "</span> << signal.<a class="code hl_variable" href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">definition</a>-><a class="code hl_variable" href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">unit</a></div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> }</div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}</div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
|
||||
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]) {</div>
|
||||
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span> (argc < 2) {</div>
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> std::cerr << <span class="stringliteral">"Usage: dbc_demo <file.dbc>\n"</span>;</div>
|
||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">return</span> 1;</div>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> }</div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <a class="code hl_class" href="classDbcParser.html">DbcParser</a> parser;</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <a class="code hl_struct" href="structDbcDatabase.html">DbcDatabase</a> database = parser.<a class="code hl_function" href="classDbcParser.html#aef72826942c9095d653fafa435855e56">ParseFile</a>(argv[1]);</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_class" href="classDbcTreeBuilder.html">DbcTreeBuilder</a> treeBuilder;</div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> std::unique_ptr<TreeNode> root = treeBuilder.<a class="code hl_function" href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">Build</a>(database);</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> std::cout << <span class="stringliteral">"=== Parsed tree ===\n"</span>;</div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> PrintTree(root.get(), 0);</div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_class" href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a> decodeBuilder;</div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <a class="code hl_struct" href="structDecodeDatabase.html">DecodeDatabase</a> decodeDatabase = decodeBuilder.<a class="code hl_function" href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">Build</a>(database);</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="comment">/*</span></div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> * Example raw frame.</span></div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> * Replace with live CAN frame or trace record later.</span></div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> */</span></div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_struct" href="structRawCanFrame.html">RawCanFrame</a> rawFrame;</div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">canId</a> = decodeDatabase.frames.empty() ? 0U : decodeDatabase.frames[0].canId;</div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">isExtended</a> = decodeDatabase.frames.empty() ? false : decodeDatabase.frames[0].isExtended;</div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> rawFrame.<a class="code hl_variable" href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">data</a>.resize(8U, 0U);</div>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_class" href="classDbcDecoder.html">DbcDecoder</a> decoder;</div>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_struct" href="structDecodedFrameValue.html">DecodedFrameValue</a> decoded = decoder.<a class="code hl_function" href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">Decode</a>(decodeDatabase, rawFrame);</div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> std::cout << <span class="stringliteral">"\n=== Decoded frame ===\n"</span>;</div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> PrintDecodedFrame(decoded);</div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception &ex) {</div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> std::cerr << <span class="stringliteral">"Error: "</span> << ex.what() << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">return</span> 2;</div>
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> }</div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span>}</div>
|
||||
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
|
||||
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00014">dbc_decode_builder.cpp:14</a></div></div>
|
||||
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00064">dbc_decoder.h:64</a></div></div>
|
||||
<div class="ttc" id="aclassDbcDecoder_html_a345951ffe5d943a70d3a1ea1f39e74f7"><div class="ttname"><a href="classDbcDecoder.html#a345951ffe5d943a70d3a1ea1f39e74f7">DbcDecoder::Decode</a></div><div class="ttdeci">DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const</div><div class="ttdoc">Decode one raw CAN frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8cpp_source.html#l00031">dbc_decoder.cpp:31</a></div></div>
|
||||
<div class="ttc" id="aclassDbcParser_html"><div class="ttname"><a href="classDbcParser.html">DbcParser</a></div><div class="ttdoc">Minimal DBC parser.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8h_source.html#l00033">dbc_parser.h:33</a></div></div>
|
||||
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00040">dbc_parser.cpp:40</a></div></div>
|
||||
<div class="ttc" id="aclassDbcTreeBuilder_html"><div class="ttname"><a href="classDbcTreeBuilder.html">DbcTreeBuilder</a></div><div class="ttdoc">Builds a simple tree from parsed DBC database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8h_source.html#l00023">dbc_tree_builder.h:23</a></div></div>
|
||||
<div class="ttc" id="aclassDbcTreeBuilder_html_a7e57d067d831b14b383947fd125edd4b"><div class="ttname"><a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">DbcTreeBuilder::Build</a></div><div class="ttdeci">std::unique_ptr< TreeNode > Build(const DbcDatabase &database) const</div><div class="ttdoc">Build tree representation of parsed DBC data.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8cpp_source.html#l00014">dbc_tree_builder.cpp:14</a></div></div>
|
||||
<div class="ttc" id="aclassTreeNode_html"><div class="ttname"><a href="classTreeNode.html">TreeNode</a></div><div class="ttdoc">Tree node for later use in model/view or other hierarchy consumers.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8h_source.html#l00035">tree_node.h:35</a></div></div>
|
||||
<div class="ttc" id="aclassTreeNode_html_a226518612d0d00b5988a2c44fc21d3f1"><div class="ttname"><a href="classTreeNode.html#a226518612d0d00b5988a2c44fc21d3f1">TreeNode::GetSignal</a></div><div class="ttdeci">const SignalInfo * GetSignal() const</div><div class="ttdoc">Get signal payload if node is signal.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00061">tree_node.cpp:61</a></div></div>
|
||||
<div class="ttc" id="aclassTreeNode_html_a4727ff801a2d1b9323c5ae50a35457a6"><div class="ttname"><a href="classTreeNode.html#a4727ff801a2d1b9323c5ae50a35457a6">TreeNode::GetChild</a></div><div class="ttdeci">const TreeNode * GetChild(std::size_t index) const</div><div class="ttdoc">Get child by index.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00035">tree_node.cpp:35</a></div></div>
|
||||
<div class="ttc" id="aclassTreeNode_html_aaac5b8d9dc9e5ae1f367d1adbcf20e18"><div class="ttname"><a href="classTreeNode.html#aaac5b8d9dc9e5ae1f367d1adbcf20e18">TreeNode::GetName</a></div><div class="ttdeci">const std::string & GetName() const</div><div class="ttdoc">Get display name.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00053">tree_node.cpp:53</a></div></div>
|
||||
<div class="ttc" id="aclassTreeNode_html_abdd82460187dca8d3e5d66f5d5c529ea"><div class="ttname"><a href="classTreeNode.html#abdd82460187dca8d3e5d66f5d5c529ea">TreeNode::GetChildCount</a></div><div class="ttdeci">std::size_t GetChildCount() const</div><div class="ttdoc">Get child count.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00031">tree_node.cpp:31</a></div></div>
|
||||
<div class="ttc" id="aclassTreeNode_html_afa2f4b0aafa12d3d41ed00df8e0250c9"><div class="ttname"><a href="classTreeNode.html#afa2f4b0aafa12d3d41ed00df8e0250c9">TreeNode::GetType</a></div><div class="ttdeci">NodeType GetType() const</div><div class="ttdoc">Get node type.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00049">tree_node.cpp:49</a></div></div>
|
||||
<div class="ttc" id="aclassTreeNode_html_afc503b40004764163605d6dbdb4ef811"><div class="ttname"><a href="classTreeNode.html#afc503b40004764163605d6dbdb4ef811">TreeNode::GetFrame</a></div><div class="ttdeci">const FrameInfo * GetFrame() const</div><div class="ttdoc">Get frame payload if node is frame.</div><div class="ttdef"><b>Definition</b> <a href="tree__node_8cpp_source.html#l00057">tree_node.cpp:57</a></div></div>
|
||||
<div class="ttc" id="adbc__decode__builder_8h_html"><div class="ttname"><a href="dbc__decode__builder_8h.html">dbc_decode_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||
<div class="ttc" id="adbc__decoder_8h_html"><div class="ttname"><a href="dbc__decoder_8h.html">dbc_decoder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||
<div class="ttc" id="adbc__tree__builder_8h_html"><div class="ttname"><a href="dbc__tree__builder_8h.html">dbc_tree_builder.h</a></div><div class="ttdoc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro)</div></div>
|
||||
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
|
||||
<div class="ttc" id="astructDecodeDatabase_html"><div class="ttname"><a href="structDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Runtime decode database with fast lookup by CAN ID.</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00111">decode_database.h:111</a></div></div>
|
||||
<div class="ttc" id="astructDecodeFrame_html_aa0a7f8fd5bfde2148dfd0d838328f579"><div class="ttname"><a href="structDecodeFrame.html#aa0a7f8fd5bfde2148dfd0d838328f579">DecodeFrame::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00062">decode_database.h:62</a></div></div>
|
||||
<div class="ttc" id="astructDecodeSignal_html_a38eed9ca7581423fd8bfbedcffc12092"><div class="ttname"><a href="structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092">DecodeSignal::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00049">decode_database.h:49</a></div></div>
|
||||
<div class="ttc" id="astructDecodeSignal_html_a58cf5844f2272a23dcb9687d912e4780"><div class="ttname"><a href="structDecodeSignal.html#a58cf5844f2272a23dcb9687d912e4780">DecodeSignal::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00040">decode_database.h:40</a></div></div>
|
||||
<div class="ttc" id="astructDecodedFrameValue_html"><div class="ttname"><a href="structDecodedFrameValue.html">DecodedFrameValue</a></div><div class="ttdoc">Fully decoded frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00051">dbc_decoder.h:51</a></div></div>
|
||||
<div class="ttc" id="astructDecodedFrameValue_html_a4f51c31110dba1f73a763c596372beb0"><div class="ttname"><a href="structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0">DecodedFrameValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00054">dbc_decoder.h:54</a></div></div>
|
||||
<div class="ttc" id="astructDecodedFrameValue_html_a60dda1cc352d2c8087f0bdbc81dd266c"><div class="ttname"><a href="structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c">DecodedFrameValue::definition</a></div><div class="ttdeci">const DecodeFrame * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00052">dbc_decoder.h:52</a></div></div>
|
||||
<div class="ttc" id="astructDecodedSignalValue_html"><div class="ttname"><a href="structDecodedSignalValue.html">DecodedSignalValue</a></div><div class="ttdoc">One decoded signal value.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00037">dbc_decoder.h:37</a></div></div>
|
||||
<div class="ttc" id="astructDecodedSignalValue_html_a6847d05b3cb00d5e0f6c611968f57978"><div class="ttname"><a href="structDecodedSignalValue.html#a6847d05b3cb00d5e0f6c611968f57978">DecodedSignalValue::physicalValue</a></div><div class="ttdeci">double physicalValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00040">dbc_decoder.h:40</a></div></div>
|
||||
<div class="ttc" id="astructDecodedSignalValue_html_a95db4f7f93b5f311e8f272833e45055e"><div class="ttname"><a href="structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e">DecodedSignalValue::rawValue</a></div><div class="ttdeci">std::variant< std::int64_t, std::uint64_t > rawValue</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00039">dbc_decoder.h:39</a></div></div>
|
||||
<div class="ttc" id="astructDecodedSignalValue_html_aac0ed361af545cde48d0e6f41a859686"><div class="ttname"><a href="structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686">DecodedSignalValue::valid</a></div><div class="ttdeci">bool valid</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00041">dbc_decoder.h:41</a></div></div>
|
||||
<div class="ttc" id="astructDecodedSignalValue_html_acadc3b3bb21dd6b0412d342c7e6b20d7"><div class="ttname"><a href="structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7">DecodedSignalValue::definition</a></div><div class="ttdeci">const DecodeSignal * definition</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00038">dbc_decoder.h:38</a></div></div>
|
||||
<div class="ttc" id="astructFrameInfo_html"><div class="ttname"><a href="structFrameInfo.html">FrameInfo</a></div><div class="ttdoc">Describes one CAN frame from a DBC file.</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00024">frame_info.h:24</a></div></div>
|
||||
<div class="ttc" id="astructFrameInfo_html_a34b726afaad2ac5c697fdb2ac070cdaf"><div class="ttname"><a href="structFrameInfo.html#a34b726afaad2ac5c697fdb2ac070cdaf">FrameInfo::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00027">frame_info.h:27</a></div></div>
|
||||
<div class="ttc" id="astructFrameInfo_html_a4737a5420213ad4304724e39f3a4e55d"><div class="ttname"><a href="structFrameInfo.html#a4737a5420213ad4304724e39f3a4e55d">FrameInfo::hasPgn</a></div><div class="ttdeci">bool hasPgn</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00029">frame_info.h:29</a></div></div>
|
||||
<div class="ttc" id="astructFrameInfo_html_aa2b198ea0f55e560c123d35e7b3ecab9"><div class="ttname"><a href="structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9">FrameInfo::dlc</a></div><div class="ttdeci">std::uint8_t dlc</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00030">frame_info.h:30</a></div></div>
|
||||
<div class="ttc" id="astructFrameInfo_html_aee518b33f1000bf0b7f6e4a87474c943"><div class="ttname"><a href="structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943">FrameInfo::pgn</a></div><div class="ttdeci">std::uint32_t pgn</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00028">frame_info.h:28</a></div></div>
|
||||
<div class="ttc" id="astructFrameInfo_html_af470b0742c05bfbffc31c51a68f5c05e"><div class="ttname"><a href="structFrameInfo.html#af470b0742c05bfbffc31c51a68f5c05e">FrameInfo::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="frame__info_8h_source.html#l00026">frame_info.h:26</a></div></div>
|
||||
<div class="ttc" id="astructRawCanFrame_html"><div class="ttname"><a href="structRawCanFrame.html">RawCanFrame</a></div><div class="ttdoc">Raw CAN frame used for runtime or trace decoding.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00024">dbc_decoder.h:24</a></div></div>
|
||||
<div class="ttc" id="astructRawCanFrame_html_a0acb487612104c99c9907344c035df83"><div class="ttname"><a href="structRawCanFrame.html#a0acb487612104c99c9907344c035df83">RawCanFrame::data</a></div><div class="ttdeci">std::vector< std::uint8_t > data</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00027">dbc_decoder.h:27</a></div></div>
|
||||
<div class="ttc" id="astructRawCanFrame_html_a2d0e7fa0e3d5c20bbed55ed8f7888ff4"><div class="ttname"><a href="structRawCanFrame.html#a2d0e7fa0e3d5c20bbed55ed8f7888ff4">RawCanFrame::canId</a></div><div class="ttdeci">std::uint32_t canId</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00025">dbc_decoder.h:25</a></div></div>
|
||||
<div class="ttc" id="astructRawCanFrame_html_a462193d275adc1dba8bd18ffa0e36bb7"><div class="ttname"><a href="structRawCanFrame.html#a462193d275adc1dba8bd18ffa0e36bb7">RawCanFrame::isExtended</a></div><div class="ttdeci">bool isExtended</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00026">dbc_decoder.h:26</a></div></div>
|
||||
<div class="ttc" id="astructSignalInfo_html"><div class="ttname"><a href="structSignalInfo.html">SignalInfo</a></div><div class="ttdoc">Describes one signal inside a DBC frame.</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00022">signal_info.h:22</a></div></div>
|
||||
<div class="ttc" id="astructSignalInfo_html_a1008b5201f71848177217bd52fb84baa"><div class="ttname"><a href="structSignalInfo.html#a1008b5201f71848177217bd52fb84baa">SignalInfo::length</a></div><div class="ttdeci">std::uint32_t length</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00025">signal_info.h:25</a></div></div>
|
||||
<div class="ttc" id="astructSignalInfo_html_a1f214f03e94ef5794de2d3367bfcbd01"><div class="ttname"><a href="structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01">SignalInfo::unit</a></div><div class="ttdeci">std::string unit</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00032">signal_info.h:32</a></div></div>
|
||||
<div class="ttc" id="astructSignalInfo_html_ace290724f9801521609aedaa946d61f1"><div class="ttname"><a href="structSignalInfo.html#ace290724f9801521609aedaa946d61f1">SignalInfo::startBit</a></div><div class="ttdeci">std::uint32_t startBit</div><div class="ttdef"><b>Definition</b> <a href="signal__info_8h_source.html#l00024">signal_info.h:24</a></div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="examples_2main_8cpp.html">main.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+24
-21
@@ -95,27 +95,30 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); });
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
|
||||
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html" target="_self">tests</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decoder__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_decoder_test.cpp</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_parser_test.cpp</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__database_8h.html" target="_self">dbc_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__decode__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decode__builder_8cpp.html" target="_self">dbc_decode_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__decode__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decode__builder_8h.html" target="_self">dbc_decode_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__decoder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decoder_8cpp.html" target="_self">dbc_decoder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__decoder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decoder_8h.html" target="_self">dbc_decoder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__parser_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__parser_8cpp.html" target="_self">dbc_parser.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__parser_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__parser_8h.html" target="_self">dbc_parser.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__statement__handler_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.cpp</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__statement__handler_8h_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.h</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__tree__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8cpp.html" target="_self">dbc_tree_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="dbc__tree__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8h.html" target="_self">dbc_tree_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="decode__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="decode__database_8h.html" target="_self">decode_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="frame__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="frame__info_8h.html" target="_self">frame_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="main_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="main_8cpp.html" target="_self">main.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="signal__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="signal__info_8h.html" target="_self">signal_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="tree__node_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8cpp.html" target="_self">tree_node.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="tree__node_8h_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8h.html" target="_self">tree_node.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="typefactory_8h_source.html"><span class="icondoc"></span></a><b>typefactory.h</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html" target="_self">core</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__database_8h.html" target="_self">dbc_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decode__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decode__builder_8cpp.html" target="_self">dbc_decode_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_2_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decode__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decode__builder_8h.html" target="_self">dbc_decode_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decoder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decoder_8cpp.html" target="_self">dbc_decoder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_4_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decoder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__decoder_8h.html" target="_self">dbc_decoder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__parser_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__parser_8cpp.html" target="_self">dbc_parser.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_6_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__parser_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__parser_8h.html" target="_self">dbc_parser.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__statement__handler_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.cpp</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_8_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__statement__handler_8h_source.html"><span class="icondoc"></span></a><b>dbc_statement_handler.h</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__tree__builder_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8cpp.html" target="_self">dbc_tree_builder.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_10_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__tree__builder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="dbc__tree__builder_8h.html" target="_self">dbc_tree_builder.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="decode__database_8h_source.html"><span class="icondoc"></span></a><a class="el" href="decode__database_8h.html" target="_self">decode_database.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_12_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="frame__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="frame__info_8h.html" target="_self">frame_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="signal__info_8h_source.html"><span class="icondoc"></span></a><a class="el" href="signal__info_8h.html" target="_self">signal_info.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_14_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="tree__node_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8cpp.html" target="_self">tree_node.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="tree__node_8h_source.html"><span class="icondoc"></span></a><a class="el" href="tree__node_8h.html" target="_self">tree_node.h</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_0_16_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="typefactory_8h_source.html"><span class="icondoc"></span></a><b>typefactory.h</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')"> </span><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html" target="_self">examples</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="examples_2main_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="examples_2main_8cpp.html" target="_self">main.cpp</a></td><td class="desc">Created: 2026-03-13 Author: Deeaitch (Dim. Himro) </td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">▼</span><span id="img_2_" class="iconfopen" onclick="toggleFolder('2_')"> </span><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html" target="_self">tests</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_2_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__decoder__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_decoder_test.cpp</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_2_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="dbc__parser__test_8cpp_source.html"><span class="icondoc"></span></a><b>dbc_parser_test.cpp</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_2_2_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="tests_2main_8cpp_source.html"><span class="icondoc"></span></a><b>main.cpp</b></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
|
||||
+3
-19
@@ -1,22 +1,6 @@
|
||||
var files_dup =
|
||||
[
|
||||
[ "tests", "dir_59425e443f801f1f2fd8bbe4959a3ccf.html", "dir_59425e443f801f1f2fd8bbe4959a3ccf" ],
|
||||
[ "dbc_database.h", "dbc__database_8h.html", "dbc__database_8h" ],
|
||||
[ "dbc_decode_builder.cpp", "dbc__decode__builder_8cpp.html", null ],
|
||||
[ "dbc_decode_builder.h", "dbc__decode__builder_8h.html", "dbc__decode__builder_8h" ],
|
||||
[ "dbc_decoder.cpp", "dbc__decoder_8cpp.html", null ],
|
||||
[ "dbc_decoder.h", "dbc__decoder_8h.html", "dbc__decoder_8h" ],
|
||||
[ "dbc_parser.cpp", "dbc__parser_8cpp.html", null ],
|
||||
[ "dbc_parser.h", "dbc__parser_8h.html", "dbc__parser_8h" ],
|
||||
[ "dbc_statement_handler.cpp", "dbc__statement__handler_8cpp_source.html", null ],
|
||||
[ "dbc_statement_handler.h", "dbc__statement__handler_8h_source.html", null ],
|
||||
[ "dbc_tree_builder.cpp", "dbc__tree__builder_8cpp.html", null ],
|
||||
[ "dbc_tree_builder.h", "dbc__tree__builder_8h.html", "dbc__tree__builder_8h" ],
|
||||
[ "decode_database.h", "decode__database_8h.html", "decode__database_8h" ],
|
||||
[ "frame_info.h", "frame__info_8h.html", "frame__info_8h" ],
|
||||
[ "main.cpp", "main_8cpp.html", null ],
|
||||
[ "signal_info.h", "signal__info_8h.html", "signal__info_8h" ],
|
||||
[ "tree_node.cpp", "tree__node_8cpp.html", null ],
|
||||
[ "tree_node.h", "tree__node_8h.html", "tree__node_8h" ],
|
||||
[ "typefactory.h", "typefactory_8h_source.html", null ]
|
||||
[ "core", "dir_4270bfced15e0e73154b13468c7c9ad9.html", "dir_4270bfced15e0e73154b13468c7c9ad9" ],
|
||||
[ "examples", "dir_d28a4824dc47e487b107a5db32ef43c4.html", "dir_d28a4824dc47e487b107a5db32ef43c4" ],
|
||||
[ "tests", "dir_59425e443f801f1f2fd8bbe4959a3ccf.html", "dir_59425e443f801f1f2fd8bbe4959a3ccf" ]
|
||||
];
|
||||
@@ -121,7 +121,7 @@ Classes</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="frame__info_8h.html">frame_info.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="frame__info_8h.html">frame_info.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -141,7 +141,7 @@ $(document).ready(function(){initNavTree('frame__info_8h_source.html',''); initR
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="frame__info_8h.html">frame_info.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="frame__info_8h.html">frame_info.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+22
-11
@@ -87,8 +87,9 @@
|
||||
</section>
|
||||
<section title="Regression tests" ref="md_README.html#autotoc_md103"/>
|
||||
</section>
|
||||
<section title="Decoder regression tests" ref="md_tests_2README.html">
|
||||
<section title="Parser regression tests" ref="md_tests_2README.html#autotoc_md105"/>
|
||||
<section title="QtTest regression tests" ref="md_tests_2README.html">
|
||||
<section title="Decoder coverage" ref="md_tests_2README.html#autotoc_md105"/>
|
||||
<section title="Parser coverage" ref="md_tests_2README.html#autotoc_md106"/>
|
||||
</section>
|
||||
<section title="Classes" ref="annotated.html">
|
||||
<section title="Class List" ref="annotated.html">
|
||||
@@ -249,10 +250,7 @@
|
||||
</section>
|
||||
<section title="Files" ref="files.html">
|
||||
<section title="File List" ref="files.html">
|
||||
<section title="tests" ref="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">
|
||||
<section title="dbc_decoder_test.cpp" ref="dbc__decoder__test_8cpp_source.html"/>
|
||||
<section title="dbc_parser_test.cpp" ref="dbc__parser__test_8cpp_source.html"/>
|
||||
</section>
|
||||
<section title="core" ref="dir_4270bfced15e0e73154b13468c7c9ad9.html">
|
||||
<section title="dbc_database.h" ref="dbc__database_8h.html">
|
||||
<section title="DbcDatabase" ref="structDbcDatabase.html">
|
||||
<section title="frames" ref="structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b"/>
|
||||
@@ -355,8 +353,6 @@
|
||||
<section title="public" ref="structFrameInfo.html#a3f7e25d67ddae22f2ed50823a5a26084"/>
|
||||
</section>
|
||||
</section>
|
||||
<section title="main.cpp" ref="main_8cpp.html">
|
||||
</section>
|
||||
<section title="signal_info.h" ref="signal__info_8h.html">
|
||||
<section title="SignalInfo" ref="structSignalInfo.html">
|
||||
<section title="name" ref="structSignalInfo.html#a379e422a00cad56f896cacf60455b088"/>
|
||||
@@ -396,6 +392,16 @@
|
||||
</section>
|
||||
<section title="typefactory.h" ref="typefactory_8h_source.html"/>
|
||||
</section>
|
||||
<section title="examples" ref="dir_d28a4824dc47e487b107a5db32ef43c4.html">
|
||||
<section title="main.cpp" ref="examples_2main_8cpp.html">
|
||||
</section>
|
||||
</section>
|
||||
<section title="tests" ref="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">
|
||||
<section title="dbc_decoder_test.cpp" ref="dbc__decoder__test_8cpp_source.html"/>
|
||||
<section title="dbc_parser_test.cpp" ref="dbc__parser__test_8cpp_source.html"/>
|
||||
<section title="tests/main.cpp" ref="tests_2main_8cpp_source.html"/>
|
||||
</section>
|
||||
</section>
|
||||
<section title="File Members" ref="globals.html">
|
||||
<section title="All" ref="globals.html"/>
|
||||
<section title="Enumerations" ref="globals_enum.html"/>
|
||||
@@ -429,7 +435,7 @@
|
||||
<keyword name="TypeFactory" id="TypeFactory_" ref="classTypeFactory.html"/>
|
||||
<keyword name="TypeFactory< std::string, DbcStatementHandler >" id="TypeFactory< std::string, DbcStatementHandler >_" ref="classTypeFactory.html"/>
|
||||
<keyword name="DBC Parser and Runtime Decode Module Documentation" id="DBC Parser and Runtime Decode Module Documentation_" ref="md_README.html"/>
|
||||
<keyword name="Decoder regression tests" id="Decoder regression tests_" ref="md_tests_2README.html"/>
|
||||
<keyword name="QtTest regression tests" id="QtTest regression tests_" ref="md_tests_2README.html"/>
|
||||
<keyword name="AddChild(std::unique_ptr< TreeNode > child)" id="TreeNode::AddChild_a6161f2ebb92184eab4215d121870e788" ref="classTreeNode.html#a6161f2ebb92184eab4215d121870e788"/>
|
||||
<keyword name="Build(const DbcDatabase &source) const" id="DbcDecodeBuilder::Build_a2bc6386dfb5e58976c42e22c19ec471b" ref="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b"/>
|
||||
<keyword name="Build(const DbcDatabase &database) const" id="DbcTreeBuilder::Build_a7e57d067d831b14b383947fd125edd4b" ref="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b"/>
|
||||
@@ -576,10 +582,14 @@
|
||||
<file>dbc__tree__builder_8h_source.html</file>
|
||||
<file>decode__database_8h.html</file>
|
||||
<file>decode__database_8h_source.html</file>
|
||||
<file>dir_4270bfced15e0e73154b13468c7c9ad9.html</file>
|
||||
<file>dir_59425e443f801f1f2fd8bbe4959a3ccf.html</file>
|
||||
<file>dir_d28a4824dc47e487b107a5db32ef43c4.html</file>
|
||||
<file>doxygen.css</file>
|
||||
<file>doxygen.svg</file>
|
||||
<file>dynsections.js</file>
|
||||
<file>examples_2main_8cpp.html</file>
|
||||
<file>examples_2main_8cpp_source.html</file>
|
||||
<file>files.html</file>
|
||||
<file>frame__info_8h.html</file>
|
||||
<file>frame__info_8h_source.html</file>
|
||||
@@ -615,8 +625,6 @@
|
||||
<file>inherit_graph_9.svg</file>
|
||||
<file>inherits.html</file>
|
||||
<file>jquery.js</file>
|
||||
<file>main_8cpp.html</file>
|
||||
<file>main_8cpp_source.html</file>
|
||||
<file>md_README.html</file>
|
||||
<file>md_tests_2README.html</file>
|
||||
<file>menu.js</file>
|
||||
@@ -638,6 +646,7 @@
|
||||
<file>search/all_15.js</file>
|
||||
<file>search/all_16.js</file>
|
||||
<file>search/all_17.js</file>
|
||||
<file>search/all_18.js</file>
|
||||
<file>search/all_2.js</file>
|
||||
<file>search/all_3.js</file>
|
||||
<file>search/all_4.js</file>
|
||||
@@ -685,6 +694,7 @@
|
||||
<file>search/pages_3.js</file>
|
||||
<file>search/pages_4.js</file>
|
||||
<file>search/pages_5.js</file>
|
||||
<file>search/pages_6.js</file>
|
||||
<file>search/search.css</file>
|
||||
<file>search/search.js</file>
|
||||
<file>search/searchdata.js</file>
|
||||
@@ -744,6 +754,7 @@
|
||||
<file>tab_s.png</file>
|
||||
<file>tab_sd.png</file>
|
||||
<file>tabs.css</file>
|
||||
<file>tests_2main_8cpp_source.html</file>
|
||||
<file>tree__node_8cpp.html</file>
|
||||
<file>tree__node_8cpp_source.html</file>
|
||||
<file>tree__node_8h.html</file>
|
||||
|
||||
@@ -233,7 +233,7 @@ Parser</h2>
|
||||
Demo</h2>
|
||||
<p>File:</p>
|
||||
<ul>
|
||||
<li><code><a class="el" href="main_8cpp.html" title="Created: 2026-03-13 Author: Deeaitch (Dim. Himro)">main.cpp</a></code></li>
|
||||
<li><code>main.cpp</code></li>
|
||||
</ul>
|
||||
<p>Used as a small integration example.</p>
|
||||
<hr />
|
||||
@@ -797,7 +797,15 @@ Build Integration</h1>
|
||||
<li>qmake</li>
|
||||
<li>Makefile</li>
|
||||
</ul>
|
||||
<p>Just add the source files to the project.</p>
|
||||
<p>Open <code>dbc.pro</code> in Qt Creator to see two subprojects: <code>core</code> and <code>tests</code>. <code>core/core.pro</code> builds the C++17 static library <code>dbc_core</code> without a Qt dependency. <code>tests/tests.pro</code> builds the QtTest executable <code>dbc_tests</code> and links that library. The root project declares <code>tests.depends = core</code> for parallel builds.</p>
|
||||
<p>Build out of source (Qt 6; use <code>qmake</code> for Qt 5):</p>
|
||||
<div class="fragment"><div class="line">mkdir build</div>
|
||||
<div class="line">cd build</div>
|
||||
<div class="line">qmake6 ../dbc.pro</div>
|
||||
<div class="line">make -j</div>
|
||||
<div class="line">make check</div>
|
||||
</div><!-- fragment --><p><code>core/core_files.pri</code> lists the library sources and headers. Consumers include <code>core/core.pri</code> for include paths and library linkage; the test source lists live in <code>tests/parser_tests.pri</code> and <code>tests/decoder_tests.pri</code>. When building a consumer separately, pass <code>DBC_CORE_BUILD_DIR=/absolute/path/to/build/core</code> to qmake.</p>
|
||||
<p>The former demonstration program is preserved in <code><a class="el" href="examples_2main_8cpp.html" title="Created: 2026-03-13 Author: Deeaitch (Dim. Himro)">examples/main.cpp</a></code> with <code>examples/demo.pro</code>. Build it separately after building core, using that same <code>DBC_CORE_BUILD_DIR</code> option; run <code>dbc_demo <file.dbc></code>.</p>
|
||||
<hr />
|
||||
<h1><a class="anchor" id="autotoc_md100"></a>
|
||||
Summary</h1>
|
||||
@@ -826,7 +834,7 @@ Runtime decode representation</h2>
|
||||
</div><!-- fragment --><p>This gives FrameTap a much better foundation for real use, because both browsing and decoding are supported without forcing one representation to do the other's job.</p>
|
||||
<h1><a class="anchor" id="autotoc_md103"></a>
|
||||
Regression tests</h1>
|
||||
<p>See <a class="el" href="md_tests_2README.html">tests/README.md</a> for compiler and qmake commands. Tests cover frame validation and error locations, Intel and Motorola extraction, signed and unsigned 64-bit boundaries, physical conversion, numeric output, and invalid signal payloads. </p>
|
||||
<p>See <a class="el" href="md_tests_2README.html">tests/README.md</a> for QtTest build and execution commands. Tests cover frame validation and error locations, Intel and Motorola extraction, signed and unsigned 64-bit boundaries, physical conversion, numeric output, and invalid signal payloads. </p>
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- PageDoc -->
|
||||
</div><!-- doc-content -->
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<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: Decoder regression tests</title>
|
||||
<title>DBC Framework: QtTest regression tests</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>
|
||||
@@ -90,28 +90,30 @@ $(document).ready(function(){initNavTree('md_tests_2README.html',''); initResiza
|
||||
</div>
|
||||
|
||||
<div><div class="header">
|
||||
<div class="headertitle"><div class="title">Decoder regression tests</div></div>
|
||||
<div class="headertitle"><div class="title">QtTest regression tests</div></div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><p><a class="anchor" id="autotoc_md104"></a> Run from the repository root with a C++17 compiler:</p>
|
||||
<div class="fragment"><div class="line">g++ -std=c++17 -Wall -Wextra -Wpedantic -I. \</div>
|
||||
<div class="line"> tests/dbc_decoder_test.cpp dbc_decoder.cpp -o /tmp/dbc_decoder_test</div>
|
||||
<div class="line">/tmp/dbc_decoder_test</div>
|
||||
</div><!-- fragment --><p>Alternatively, build the standalone qmake project out of source:</p>
|
||||
<div class="fragment"><div class="line">mkdir -p /tmp/dbc_decoder_test_build</div>
|
||||
<div class="line">cd /tmp/dbc_decoder_test_build</div>
|
||||
<div class="line">qmake /absolute/path/to/dbc/tests/dbc_decoder_test.pro</div>
|
||||
<div class="textblock"><p><a class="anchor" id="autotoc_md104"></a> Open the repository's root <code>dbc.pro</code> in Qt Creator. It contains <code>core</code> (a static C++17 library) and <code>tests</code> (the <code>dbc_tests</code> QtTest executable). Core is built first; tests link its archive rather than compiling its implementation again. Qt Core and Qt Test development packages are required for tests only.</p>
|
||||
<p>Build from the repository root with Qt 6 (use <code>qmake</code> for Qt 5):</p>
|
||||
<div class="fragment"><div class="line">mkdir build</div>
|
||||
<div class="line">cd build</div>
|
||||
<div class="line">qmake6 ../dbc.pro</div>
|
||||
<div class="line">make -j</div>
|
||||
<div class="line">make check</div>
|
||||
</div><!-- fragment --><p>Or run <code>./tests/dbc_tests</code> directly. Both parser and decoder suites run, and the executable returns nonzero when either suite fails. Decoder cases appear as individual QtTest data rows; parser checks are grouped into named test slots. Checks also run in release builds.</p>
|
||||
<p>To build tests separately against an existing core build:</p>
|
||||
<div class="fragment"><div class="line">mkdir /tmp/dbc-tests-build</div>
|
||||
<div class="line">cd /tmp/dbc-tests-build</div>
|
||||
<div class="line">qmake6 /absolute/path/to/dbc/tests/tests.pro \</div>
|
||||
<div class="line"> DBC_CORE_BUILD_DIR=/absolute/path/to/build/core</div>
|
||||
<div class="line">make</div>
|
||||
<div class="line">./dbc_decoder_test</div>
|
||||
</div><!-- fragment --><p>The executable returns a nonzero exit code if any case fails. Checks remain active in release builds and do not depend on <code>assert</code> or an external test framework.</p>
|
||||
<p>Coverage includes Motorola bit numbering within and across bytes, unaligned signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary values (including <code>INT64_MIN</code>, <code>INT64_MAX</code>, and <code>UINT64_MAX</code>), numeric output, invalid lengths, insufficient payloads, and Intel regression cases. Frame validity means the definition was found; insufficient payloads are checked through signal validity.</p>
|
||||
<div class="line">make check</div>
|
||||
</div><!-- fragment --><p><code>parser_tests.pri</code> and <code>decoder_tests.pri</code> include the test sources. <code>../core/core.pri</code> supplies the library include path and linkage.</p>
|
||||
<h1><a class="anchor" id="autotoc_md105"></a>
|
||||
Parser regression tests</h1>
|
||||
<p>Run from the repository root:</p>
|
||||
<div class="fragment"><div class="line">g++ -std=c++17 -Wall -Wextra -Wpedantic -Werror -I. \</div>
|
||||
<div class="line"> tests/dbc_parser_test.cpp dbc_parser.cpp dbc_statement_handler.cpp -o /tmp/dbc_parser_test</div>
|
||||
<div class="line">/tmp/dbc_parser_test</div>
|
||||
</div><!-- fragment --><p>For qmake, use <code>tests/dbc_parser_test.pro</code> in a separate build directory, following the decoder instructions above, then run <code>./dbc_parser_test</code>.</p>
|
||||
Decoder coverage</h1>
|
||||
<p>Coverage includes Motorola bit numbering within and across bytes, unaligned signals, signed values, scaling, 64-bit extraction, signed/unsigned boundary values (including <code>INT64_MIN</code>, <code>INT64_MAX</code>, and <code>UINT64_MAX</code>), numeric output, invalid lengths, insufficient payloads, and Intel regression cases. Frame validity means the definition was found; insufficient payloads are checked through signal validity.</p>
|
||||
<h1><a class="anchor" id="autotoc_md106"></a>
|
||||
Parser coverage</h1>
|
||||
<p>Parser tests cover standard and extended CAN IDs, whitespace, payload storage boundaries, missing fields, malformed and overflowing numbers, reserved ID bits, error paths and line numbers, and integration with signals and comments. Signal tests cover complete syntax and numeric validation, scientific notation, finite physical parameters and ordered ranges, spaces and tabs, receiver lists, unsupported multiplexing, and Intel/Motorola declared-payload boundaries. Temporary DBC fixtures are created in the system temporary directory and removed automatically.</p>
|
||||
<p>Dispatch tests also verify exact keyword matching, handler construction and reuse, unknown statements, and independent parsing sessions, including recovery after errors. </p>
|
||||
</div></div><!-- contents -->
|
||||
|
||||
@@ -100,8 +100,9 @@ var NAVTREE =
|
||||
] ],
|
||||
[ "Regression tests", "md_README.html#autotoc_md103", null ]
|
||||
] ],
|
||||
[ "Decoder regression tests", "md_tests_2README.html", [
|
||||
[ "Parser regression tests", "md_tests_2README.html#autotoc_md105", null ]
|
||||
[ "QtTest regression tests", "md_tests_2README.html", [
|
||||
[ "Decoder coverage", "md_tests_2README.html#autotoc_md105", null ],
|
||||
[ "Parser coverage", "md_tests_2README.html#autotoc_md106", null ]
|
||||
] ],
|
||||
[ "Classes", "annotated.html", [
|
||||
[ "Class List", "annotated.html", "annotated_dup" ],
|
||||
|
||||
+50
-46
@@ -34,40 +34,44 @@ var NAVTREEINDEX0 =
|
||||
"classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3":[2,0,22,0],
|
||||
"classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473":[2,0,22,1],
|
||||
"classes.html":[2,1],
|
||||
"dbc__database_8h.html":[3,0,1],
|
||||
"dbc__database_8h_source.html":[3,0,1],
|
||||
"dbc__decode__builder_8cpp.html":[3,0,2],
|
||||
"dbc__decode__builder_8cpp_source.html":[3,0,2],
|
||||
"dbc__decode__builder_8h.html":[3,0,3],
|
||||
"dbc__decode__builder_8h_source.html":[3,0,3],
|
||||
"dbc__decoder_8cpp.html":[3,0,4],
|
||||
"dbc__decoder_8cpp_source.html":[3,0,4],
|
||||
"dbc__decoder_8h.html":[3,0,5],
|
||||
"dbc__decoder_8h_source.html":[3,0,5],
|
||||
"dbc__decoder__test_8cpp_source.html":[3,0,0,0],
|
||||
"dbc__parser_8cpp.html":[3,0,6],
|
||||
"dbc__parser_8cpp_source.html":[3,0,6],
|
||||
"dbc__parser_8h.html":[3,0,7],
|
||||
"dbc__parser_8h_source.html":[3,0,7],
|
||||
"dbc__parser__test_8cpp_source.html":[3,0,0,1],
|
||||
"dbc__statement__handler_8cpp_source.html":[3,0,8],
|
||||
"dbc__statement__handler_8h_source.html":[3,0,9],
|
||||
"dbc__tree__builder_8cpp.html":[3,0,10],
|
||||
"dbc__tree__builder_8cpp_source.html":[3,0,10],
|
||||
"dbc__tree__builder_8h.html":[3,0,11],
|
||||
"dbc__tree__builder_8h_source.html":[3,0,11],
|
||||
"decode__database_8h.html":[3,0,12],
|
||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b":[3,0,12,5],
|
||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31":[3,0,12,5,1],
|
||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5":[3,0,12,5,0],
|
||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1":[3,0,12,6],
|
||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379":[3,0,12,6,1],
|
||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1aa1a914735b205424ba6c40b85528d78a":[3,0,12,6,0],
|
||||
"decode__database_8h_source.html":[3,0,12],
|
||||
"dir_59425e443f801f1f2fd8bbe4959a3ccf.html":[3,0,0],
|
||||
"dbc__database_8h.html":[3,0,0,0],
|
||||
"dbc__database_8h_source.html":[3,0,0,0],
|
||||
"dbc__decode__builder_8cpp.html":[3,0,0,1],
|
||||
"dbc__decode__builder_8cpp_source.html":[3,0,0,1],
|
||||
"dbc__decode__builder_8h.html":[3,0,0,2],
|
||||
"dbc__decode__builder_8h_source.html":[3,0,0,2],
|
||||
"dbc__decoder_8cpp.html":[3,0,0,3],
|
||||
"dbc__decoder_8cpp_source.html":[3,0,0,3],
|
||||
"dbc__decoder_8h.html":[3,0,0,4],
|
||||
"dbc__decoder_8h_source.html":[3,0,0,4],
|
||||
"dbc__decoder__test_8cpp_source.html":[3,0,2,0],
|
||||
"dbc__parser_8cpp.html":[3,0,0,5],
|
||||
"dbc__parser_8cpp_source.html":[3,0,0,5],
|
||||
"dbc__parser_8h.html":[3,0,0,6],
|
||||
"dbc__parser_8h_source.html":[3,0,0,6],
|
||||
"dbc__parser__test_8cpp_source.html":[3,0,2,1],
|
||||
"dbc__statement__handler_8cpp_source.html":[3,0,0,7],
|
||||
"dbc__statement__handler_8h_source.html":[3,0,0,8],
|
||||
"dbc__tree__builder_8cpp.html":[3,0,0,9],
|
||||
"dbc__tree__builder_8cpp_source.html":[3,0,0,9],
|
||||
"dbc__tree__builder_8h.html":[3,0,0,10],
|
||||
"dbc__tree__builder_8h_source.html":[3,0,0,10],
|
||||
"decode__database_8h.html":[3,0,0,11],
|
||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142b":[3,0,0,11,5],
|
||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142ba2ed1afe3c9215523e4272f46e6186b31":[3,0,0,11,5,1],
|
||||
"decode__database_8h.html#aaeb92d42f5a6e27b8ba19f18d69d142baff97a9fdede09eaf6e1c8ec9f6a61dd5":[3,0,0,11,5,0],
|
||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1":[3,0,0,11,6],
|
||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1a71fed0c3428bf1a2e19af257c4bac379":[3,0,0,11,6,1],
|
||||
"decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1aa1a914735b205424ba6c40b85528d78a":[3,0,0,11,6,0],
|
||||
"decode__database_8h_source.html":[3,0,0,11],
|
||||
"dir_4270bfced15e0e73154b13468c7c9ad9.html":[3,0,0],
|
||||
"dir_59425e443f801f1f2fd8bbe4959a3ccf.html":[3,0,2],
|
||||
"dir_d28a4824dc47e487b107a5db32ef43c4.html":[3,0,1],
|
||||
"examples_2main_8cpp.html":[3,0,1,0],
|
||||
"examples_2main_8cpp_source.html":[3,0,1,0],
|
||||
"files.html":[3,0],
|
||||
"frame__info_8h.html":[3,0,13],
|
||||
"frame__info_8h_source.html":[3,0,13],
|
||||
"frame__info_8h.html":[3,0,0,12],
|
||||
"frame__info_8h_source.html":[3,0,0,12],
|
||||
"functions.html":[2,3,0],
|
||||
"functions_func.html":[2,3,1],
|
||||
"functions_vars.html":[2,3,2],
|
||||
@@ -75,8 +79,6 @@ var NAVTREEINDEX0 =
|
||||
"globals_enum.html":[3,1,1],
|
||||
"hierarchy.html":[2,2],
|
||||
"index.html":[],
|
||||
"main_8cpp.html":[3,0,14],
|
||||
"main_8cpp_source.html":[3,0,14],
|
||||
"md_README.html":[0],
|
||||
"md_README.html#autotoc_md1":[0,0],
|
||||
"md_README.html#autotoc_md10":[0,3,0],
|
||||
@@ -145,9 +147,10 @@ var NAVTREEINDEX0 =
|
||||
"md_README.html#autotoc_md98":[0,43],
|
||||
"md_tests_2README.html":[1],
|
||||
"md_tests_2README.html#autotoc_md105":[1,0],
|
||||
"md_tests_2README.html#autotoc_md106":[1,1],
|
||||
"pages.html":[],
|
||||
"signal__info_8h.html":[3,0,15],
|
||||
"signal__info_8h_source.html":[3,0,15],
|
||||
"signal__info_8h.html":[3,0,0,13],
|
||||
"signal__info_8h_source.html":[3,0,0,13],
|
||||
"structDbcDatabase.html":[2,0,1],
|
||||
"structDbcDatabase.html#a2cade5d0234ee816132127542f8c612b":[2,0,1,0],
|
||||
"structDbcParseContext.html":[2,0,5],
|
||||
@@ -213,13 +216,14 @@ var NAVTREEINDEX0 =
|
||||
"structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52":[2,0,20,8],
|
||||
"structSignalInfo.html#ae4f78d99a2750aa564d7eba860171499":[2,0,20,5],
|
||||
"structSignalInfo.html#af363b1563fb4c7cc8973f9a80c06846c":[2,0,20,3],
|
||||
"tree__node_8cpp.html":[3,0,16],
|
||||
"tree__node_8cpp_source.html":[3,0,16],
|
||||
"tree__node_8h.html":[3,0,17],
|
||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16":[3,0,17,1],
|
||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398":[3,0,17,1,2],
|
||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a3bb3e8c8a24891ba0f7608bcc96f8b0a":[3,0,17,1,1],
|
||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16afa03eb688ad8aa1db593d33dabd89bad":[3,0,17,1,0],
|
||||
"tree__node_8h_source.html":[3,0,17],
|
||||
"typefactory_8h_source.html":[3,0,18]
|
||||
"tests_2main_8cpp_source.html":[3,0,2,2],
|
||||
"tree__node_8cpp.html":[3,0,0,14],
|
||||
"tree__node_8cpp_source.html":[3,0,0,14],
|
||||
"tree__node_8h.html":[3,0,0,15],
|
||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16":[3,0,0,15,1],
|
||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a085fea7abdc5d904fe69a3081efd7398":[3,0,0,15,1,2],
|
||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16a3bb3e8c8a24891ba0f7608bcc96f8b0a":[3,0,0,15,1,1],
|
||||
"tree__node_8h.html#acac9cbaeea226ed297804c012dc12b16afa03eb688ad8aa1db593d33dabd89bad":[3,0,0,15,1,0],
|
||||
"tree__node_8h_source.html":[3,0,0,15],
|
||||
"typefactory_8h_source.html":[3,0,0,16]
|
||||
};
|
||||
@@ -96,7 +96,7 @@ $(document).ready(function(){initNavTree('pages.html',''); initResizable(); });
|
||||
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md_README.html" target="_self">DBC Parser and Runtime Decode Module Documentation</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md_tests_2README.html" target="_self">Decoder regression tests</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md_tests_2README.html" target="_self">QtTest regression tests</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
|
||||
@@ -9,7 +9,7 @@ var searchData=
|
||||
['parsefile_6',['ParseFile',['../classDbcParser.html#aef72826942c9095d653fafa435855e56',1,'DbcParser']]],
|
||||
['parser_7',['Parser',['../md_README.html#autotoc_md14',1,'']]],
|
||||
['parser_20and_20runtime_20decode_20module_20documentation_8',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||
['parser_20regression_20tests_9',['Parser regression tests',['../md_tests_2README.html#autotoc_md105',1,'']]],
|
||||
['parser_20coverage_9',['Parser coverage',['../md_tests_2README.html#autotoc_md106',1,'']]],
|
||||
['parser_20support_10',['Parser Support',['../md_README.html#autotoc_md53',1,'']]],
|
||||
['path_11',['path',['../md_README.html#autotoc_md4',1,'1. Parse and UI path'],['../md_README.html#autotoc_md5',1,'2. Runtime decode path'],['../md_README.html#autotoc_md81',1,'live path'],['../md_README.html#autotoc_md82',1,'trace path']]],
|
||||
['pgn_12',['pgn',['../structFrameInfo.html#aee518b33f1000bf0b7f6e4a87474c943',1,'FrameInfo::pgn'],['../structDecodeFrame.html#a1d3c54055c0cbceb73adf551f7067f23',1,'DecodeFrame::pgn']]],
|
||||
|
||||
@@ -1,22 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['raw_20frame_0',['Decode a raw frame',['../md_README.html#autotoc_md78',1,'']]],
|
||||
['raw_20value_20representation_20and_20precision_1',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||
['rawcanframe_2',['RawCanFrame',['../structRawCanFrame.html',1,'']]],
|
||||
['rawcanframe_20tt_3',['<tt>RawCanFrame</tt>',['../md_README.html#autotoc_md43',1,'']]],
|
||||
['rawvalue_4',['rawValue',['../structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e',1,'DecodedSignalValue']]],
|
||||
['receivers_5',['receivers',['../structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa',1,'DecodeSignal::receivers'],['../structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3',1,'SignalInfo::receivers']]],
|
||||
['recommended_20next_20steps_6',['Recommended Next Steps',['../md_README.html#autotoc_md92',1,'']]],
|
||||
['registertype_7',['registerType',['../classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3',1,'TypeFactory']]],
|
||||
['regression_20tests_8',['regression tests',['../md_tests_2README.html',1,'Decoder regression tests'],['../md_tests_2README.html#autotoc_md105',1,'Parser regression tests'],['../md_README.html#autotoc_md103',1,'Regression tests']]],
|
||||
['representation_9',['representation',['../md_README.html#autotoc_md101',1,'Parsed representation'],['../md_README.html#autotoc_md102',1,'Runtime decode representation']]],
|
||||
['representation_20and_20precision_10',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||
['runtime_20decode_20database_11',['Build runtime decode database',['../md_README.html#autotoc_md77',1,'']]],
|
||||
['runtime_20decode_20layer_12',['Runtime Decode Layer',['../md_README.html#autotoc_md27',1,'']]],
|
||||
['runtime_20decode_20layer_20exists_13',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||
['runtime_20decode_20module_20documentation_14',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||
['runtime_20decode_20path_15',['2. Runtime decode path',['../md_README.html#autotoc_md5',1,'']]],
|
||||
['runtime_20decode_20representation_16',['Runtime decode representation',['../md_README.html#autotoc_md102',1,'']]],
|
||||
['runtime_20decode_20structures_17',['Runtime decode structures',['../md_README.html#autotoc_md12',1,'']]],
|
||||
['runtime_20decoder_18',['Runtime decoder',['../md_README.html#autotoc_md13',1,'']]]
|
||||
['qttest_20regression_20tests_0',['QtTest regression tests',['../md_tests_2README.html',1,'']]]
|
||||
];
|
||||
+19
-18
@@ -1,21 +1,22 @@
|
||||
var searchData=
|
||||
[
|
||||
['signal_20definition_0',['Signal definition',['../md_README.html#autotoc_md60',1,'']]],
|
||||
['signal_20validation_20and_20parse_20errors_1',['Signal validation and parse errors',['../md_README.html#autotoc_md62',1,'']]],
|
||||
['signal_5finfo_2eh_2',['signal_info.h',['../signal__info_8h.html',1,'']]],
|
||||
['signalinfo_3',['SignalInfo',['../structSignalInfo.html',1,'']]],
|
||||
['signalinfo_20tt_4',['<tt>SignalInfo</tt>',['../md_README.html#autotoc_md18',1,'']]],
|
||||
['stage_201_20already_20implemented_5',['Stage 1 - already implemented',['../md_README.html#autotoc_md93',1,'']]],
|
||||
['stage_202_6',['Stage 2',['../md_README.html#autotoc_md94',1,'']]],
|
||||
['stage_203_7',['Stage 3',['../md_README.html#autotoc_md95',1,'']]],
|
||||
['stage_204_8',['Stage 4',['../md_README.html#autotoc_md96',1,'']]],
|
||||
['startbit_9',['startbit',['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit'],['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit']]],
|
||||
['statement_20handler_20factory_10',['Statement Handler Factory',['../md_README.html#autotoc_md88',1,'']]],
|
||||
['steps_11',['Recommended Next Steps',['../md_README.html#autotoc_md92',1,'']]],
|
||||
['strategy_12',['Unified Decode Strategy',['../md_README.html#autotoc_md80',1,'']]],
|
||||
['structures_13',['structures',['../md_README.html#autotoc_md17',1,'Parsed Data Structures'],['../md_README.html#autotoc_md10',1,'Parsed DBC structures'],['../md_README.html#autotoc_md12',1,'Runtime decode structures'],['../md_README.html#autotoc_md11',1,'UI tree structures']]],
|
||||
['summary_14',['Summary',['../md_README.html#autotoc_md100',1,'']]],
|
||||
['support_15',['Parser Support',['../md_README.html#autotoc_md53',1,'']]],
|
||||
['supported_20dbc_20syntax_16',['Supported DBC Syntax',['../md_README.html#autotoc_md55',1,'']]],
|
||||
['syntax_17',['Supported DBC Syntax',['../md_README.html#autotoc_md55',1,'']]]
|
||||
['raw_20frame_0',['Decode a raw frame',['../md_README.html#autotoc_md78',1,'']]],
|
||||
['raw_20value_20representation_20and_20precision_1',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||
['rawcanframe_2',['RawCanFrame',['../structRawCanFrame.html',1,'']]],
|
||||
['rawcanframe_20tt_3',['<tt>RawCanFrame</tt>',['../md_README.html#autotoc_md43',1,'']]],
|
||||
['rawvalue_4',['rawValue',['../structDecodedSignalValue.html#a95db4f7f93b5f311e8f272833e45055e',1,'DecodedSignalValue']]],
|
||||
['receivers_5',['receivers',['../structDecodeSignal.html#abdbae62a64d2df716bf60c6b67b30eaa',1,'DecodeSignal::receivers'],['../structSignalInfo.html#a2c95562fd0b29327a7fd7b1e6feee7f3',1,'SignalInfo::receivers']]],
|
||||
['recommended_20next_20steps_6',['Recommended Next Steps',['../md_README.html#autotoc_md92',1,'']]],
|
||||
['registertype_7',['registerType',['../classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3',1,'TypeFactory']]],
|
||||
['regression_20tests_8',['regression tests',['../md_tests_2README.html',1,'QtTest regression tests'],['../md_README.html#autotoc_md103',1,'Regression tests']]],
|
||||
['representation_9',['representation',['../md_README.html#autotoc_md101',1,'Parsed representation'],['../md_README.html#autotoc_md102',1,'Runtime decode representation']]],
|
||||
['representation_20and_20precision_10',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||
['runtime_20decode_20database_11',['Build runtime decode database',['../md_README.html#autotoc_md77',1,'']]],
|
||||
['runtime_20decode_20layer_12',['Runtime Decode Layer',['../md_README.html#autotoc_md27',1,'']]],
|
||||
['runtime_20decode_20layer_20exists_13',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||
['runtime_20decode_20module_20documentation_14',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||
['runtime_20decode_20path_15',['2. Runtime decode path',['../md_README.html#autotoc_md5',1,'']]],
|
||||
['runtime_20decode_20representation_16',['Runtime decode representation',['../md_README.html#autotoc_md102',1,'']]],
|
||||
['runtime_20decode_20structures_17',['Runtime decode structures',['../md_README.html#autotoc_md12',1,'']]],
|
||||
['runtime_20decoder_18',['Runtime decoder',['../md_README.html#autotoc_md13',1,'']]]
|
||||
];
|
||||
+18
-29
@@ -1,32 +1,21 @@
|
||||
var searchData=
|
||||
[
|
||||
['tests_0',['tests',['../md_tests_2README.html',1,'Decoder regression tests'],['../md_tests_2README.html#autotoc_md105',1,'Parser regression tests'],['../md_README.html#autotoc_md103',1,'Regression tests']]],
|
||||
['the_20runtime_20decode_20layer_20exists_1',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||
['the_20tree_20is_20not_20enough_2',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
||||
['trace_20path_3',['trace path',['../md_README.html#autotoc_md82',1,'']]],
|
||||
['transmitter_4',['transmitter',['../structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8',1,'FrameInfo::transmitter'],['../structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9',1,'DecodeFrame::transmitter']]],
|
||||
['tree_5',['Build UI tree',['../md_README.html#autotoc_md76',1,'']]],
|
||||
['tree_20is_20not_20enough_6',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
||||
['tree_20layer_7',['UI Tree Layer',['../md_README.html#autotoc_md24',1,'']]],
|
||||
['tree_20structures_8',['UI tree structures',['../md_README.html#autotoc_md11',1,'']]],
|
||||
['tree_5fnode_2ecpp_9',['tree_node.cpp',['../tree__node_8cpp.html',1,'']]],
|
||||
['tree_5fnode_2eh_10',['tree_node.h',['../tree__node_8h.html',1,'']]],
|
||||
['treenode_11',['treenode',['../classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d',1,'TreeNode::TreeNode()'],['../classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc',1,'TreeNode::TreeNode(const FrameInfo &frame)'],['../classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae',1,'TreeNode::TreeNode(const SignalInfo &signal)'],['../classTreeNode.html',1,'TreeNode']]],
|
||||
['treenode_20tt_12',['<tt>TreeNode</tt>',['../md_README.html#autotoc_md25',1,'']]],
|
||||
['tt_20byteorder_20tt_13',['<tt>ByteOrder</tt>',['../md_README.html#autotoc_md30',1,'']]],
|
||||
['tt_20dbcdatabase_20tt_14',['<tt>DbcDatabase</tt>',['../md_README.html#autotoc_md22',1,'']]],
|
||||
['tt_20dbcdecoder_20tt_15',['<tt>DbcDecoder</tt>',['../md_README.html#autotoc_md51',1,'']]],
|
||||
['tt_20decodedatabase_20tt_16',['<tt>DecodeDatabase</tt>',['../md_README.html#autotoc_md40',1,'']]],
|
||||
['tt_20decodedframevalue_20tt_17',['<tt>DecodedFrameValue</tt>',['../md_README.html#autotoc_md49',1,'']]],
|
||||
['tt_20decodedsignalvalue_20tt_18',['<tt>DecodedSignalValue</tt>',['../md_README.html#autotoc_md45',1,'']]],
|
||||
['tt_20decodeframe_20tt_19',['<tt>DecodeFrame</tt>',['../md_README.html#autotoc_md36',1,'']]],
|
||||
['tt_20decodesignal_20tt_20',['<tt>DecodeSignal</tt>',['../md_README.html#autotoc_md34',1,'']]],
|
||||
['tt_20frameinfo_20tt_21',['<tt>FrameInfo</tt>',['../md_README.html#autotoc_md20',1,'']]],
|
||||
['tt_20framekey_20tt_22',['<tt>FrameKey</tt>',['../md_README.html#autotoc_md38',1,'']]],
|
||||
['tt_20rawcanframe_20tt_23',['<tt>RawCanFrame</tt>',['../md_README.html#autotoc_md43',1,'']]],
|
||||
['tt_20signalinfo_20tt_24',['<tt>SignalInfo</tt>',['../md_README.html#autotoc_md18',1,'']]],
|
||||
['tt_20treenode_20tt_25',['<tt>TreeNode</tt>',['../md_README.html#autotoc_md25',1,'']]],
|
||||
['tt_20valuetype_20tt_26',['<tt>ValueType</tt>',['../md_README.html#autotoc_md32',1,'']]],
|
||||
['typefactory_27',['TypeFactory',['../classTypeFactory.html',1,'']]],
|
||||
['typefactory_3c_20std_3a_3astring_2c_20dbcstatementhandler_20_3e_28',['TypeFactory< std::string, DbcStatementHandler >',['../classTypeFactory.html',1,'']]]
|
||||
['signal_20definition_0',['Signal definition',['../md_README.html#autotoc_md60',1,'']]],
|
||||
['signal_20validation_20and_20parse_20errors_1',['Signal validation and parse errors',['../md_README.html#autotoc_md62',1,'']]],
|
||||
['signal_5finfo_2eh_2',['signal_info.h',['../signal__info_8h.html',1,'']]],
|
||||
['signalinfo_3',['SignalInfo',['../structSignalInfo.html',1,'']]],
|
||||
['signalinfo_20tt_4',['<tt>SignalInfo</tt>',['../md_README.html#autotoc_md18',1,'']]],
|
||||
['stage_201_20already_20implemented_5',['Stage 1 - already implemented',['../md_README.html#autotoc_md93',1,'']]],
|
||||
['stage_202_6',['Stage 2',['../md_README.html#autotoc_md94',1,'']]],
|
||||
['stage_203_7',['Stage 3',['../md_README.html#autotoc_md95',1,'']]],
|
||||
['stage_204_8',['Stage 4',['../md_README.html#autotoc_md96',1,'']]],
|
||||
['startbit_9',['startbit',['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit'],['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit']]],
|
||||
['statement_20handler_20factory_10',['Statement Handler Factory',['../md_README.html#autotoc_md88',1,'']]],
|
||||
['steps_11',['Recommended Next Steps',['../md_README.html#autotoc_md92',1,'']]],
|
||||
['strategy_12',['Unified Decode Strategy',['../md_README.html#autotoc_md80',1,'']]],
|
||||
['structures_13',['structures',['../md_README.html#autotoc_md17',1,'Parsed Data Structures'],['../md_README.html#autotoc_md10',1,'Parsed DBC structures'],['../md_README.html#autotoc_md12',1,'Runtime decode structures'],['../md_README.html#autotoc_md11',1,'UI tree structures']]],
|
||||
['summary_14',['Summary',['../md_README.html#autotoc_md100',1,'']]],
|
||||
['support_15',['Parser Support',['../md_README.html#autotoc_md53',1,'']]],
|
||||
['supported_20dbc_20syntax_16',['Supported DBC Syntax',['../md_README.html#autotoc_md55',1,'']]],
|
||||
['syntax_17',['Supported DBC Syntax',['../md_README.html#autotoc_md55',1,'']]]
|
||||
];
|
||||
@@ -1,11 +1,32 @@
|
||||
var searchData=
|
||||
[
|
||||
['ui_20path_0',['1. Parse and UI path',['../md_README.html#autotoc_md4',1,'']]],
|
||||
['ui_20tree_1',['Build UI tree',['../md_README.html#autotoc_md76',1,'']]],
|
||||
['ui_20tree_20layer_2',['UI Tree Layer',['../md_README.html#autotoc_md24',1,'']]],
|
||||
['ui_20tree_20structures_3',['UI tree structures',['../md_README.html#autotoc_md11',1,'']]],
|
||||
['unified_20decode_20strategy_4',['Unified Decode Strategy',['../md_README.html#autotoc_md80',1,'']]],
|
||||
['unit_5',['unit',['../structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092',1,'DecodeSignal::unit'],['../structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01',1,'SignalInfo::unit']]],
|
||||
['usage_6',['Example Usage',['../md_README.html#autotoc_md74',1,'']]],
|
||||
['use_20in_20frametap_7',['Intended Use in FrameTap',['../md_README.html#autotoc_md84',1,'']]]
|
||||
['tests_0',['tests',['../md_tests_2README.html',1,'QtTest regression tests'],['../md_README.html#autotoc_md103',1,'Regression tests']]],
|
||||
['the_20runtime_20decode_20layer_20exists_1',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||
['the_20tree_20is_20not_20enough_2',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
||||
['trace_20path_3',['trace path',['../md_README.html#autotoc_md82',1,'']]],
|
||||
['transmitter_4',['transmitter',['../structFrameInfo.html#a92749ec3798d4211a505860fb389a9e8',1,'FrameInfo::transmitter'],['../structDecodeFrame.html#ad78241dc40c793aabb8495b6989b81a9',1,'DecodeFrame::transmitter']]],
|
||||
['tree_5',['Build UI tree',['../md_README.html#autotoc_md76',1,'']]],
|
||||
['tree_20is_20not_20enough_6',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
||||
['tree_20layer_7',['UI Tree Layer',['../md_README.html#autotoc_md24',1,'']]],
|
||||
['tree_20structures_8',['UI tree structures',['../md_README.html#autotoc_md11',1,'']]],
|
||||
['tree_5fnode_2ecpp_9',['tree_node.cpp',['../tree__node_8cpp.html',1,'']]],
|
||||
['tree_5fnode_2eh_10',['tree_node.h',['../tree__node_8h.html',1,'']]],
|
||||
['treenode_11',['treenode',['../classTreeNode.html#a984a98d5ccf7ef1f5a18094c6821f35d',1,'TreeNode::TreeNode()'],['../classTreeNode.html#a8e38dd591d8801d7ee3a7dbad90c67fc',1,'TreeNode::TreeNode(const FrameInfo &frame)'],['../classTreeNode.html#ab9f00f5253d56461bb2d420fd639c5ae',1,'TreeNode::TreeNode(const SignalInfo &signal)'],['../classTreeNode.html',1,'TreeNode']]],
|
||||
['treenode_20tt_12',['<tt>TreeNode</tt>',['../md_README.html#autotoc_md25',1,'']]],
|
||||
['tt_20byteorder_20tt_13',['<tt>ByteOrder</tt>',['../md_README.html#autotoc_md30',1,'']]],
|
||||
['tt_20dbcdatabase_20tt_14',['<tt>DbcDatabase</tt>',['../md_README.html#autotoc_md22',1,'']]],
|
||||
['tt_20dbcdecoder_20tt_15',['<tt>DbcDecoder</tt>',['../md_README.html#autotoc_md51',1,'']]],
|
||||
['tt_20decodedatabase_20tt_16',['<tt>DecodeDatabase</tt>',['../md_README.html#autotoc_md40',1,'']]],
|
||||
['tt_20decodedframevalue_20tt_17',['<tt>DecodedFrameValue</tt>',['../md_README.html#autotoc_md49',1,'']]],
|
||||
['tt_20decodedsignalvalue_20tt_18',['<tt>DecodedSignalValue</tt>',['../md_README.html#autotoc_md45',1,'']]],
|
||||
['tt_20decodeframe_20tt_19',['<tt>DecodeFrame</tt>',['../md_README.html#autotoc_md36',1,'']]],
|
||||
['tt_20decodesignal_20tt_20',['<tt>DecodeSignal</tt>',['../md_README.html#autotoc_md34',1,'']]],
|
||||
['tt_20frameinfo_20tt_21',['<tt>FrameInfo</tt>',['../md_README.html#autotoc_md20',1,'']]],
|
||||
['tt_20framekey_20tt_22',['<tt>FrameKey</tt>',['../md_README.html#autotoc_md38',1,'']]],
|
||||
['tt_20rawcanframe_20tt_23',['<tt>RawCanFrame</tt>',['../md_README.html#autotoc_md43',1,'']]],
|
||||
['tt_20signalinfo_20tt_24',['<tt>SignalInfo</tt>',['../md_README.html#autotoc_md18',1,'']]],
|
||||
['tt_20treenode_20tt_25',['<tt>TreeNode</tt>',['../md_README.html#autotoc_md25',1,'']]],
|
||||
['tt_20valuetype_20tt_26',['<tt>ValueType</tt>',['../md_README.html#autotoc_md32',1,'']]],
|
||||
['typefactory_27',['TypeFactory',['../classTypeFactory.html',1,'']]],
|
||||
['typefactory_3c_20std_3a_3astring_2c_20dbcstatementhandler_20_3e_28',['TypeFactory< std::string, DbcStatementHandler >',['../classTypeFactory.html',1,'']]]
|
||||
];
|
||||
@@ -1,8 +1,11 @@
|
||||
var searchData=
|
||||
[
|
||||
['valid_0',['valid',['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid'],['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid']]],
|
||||
['validation_20and_20parse_20errors_1',['validation and parse errors',['../md_README.html#autotoc_md58',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md62',1,'Signal validation and parse errors']]],
|
||||
['value_20representation_20and_20precision_2',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||
['valuetype_3',['valuetype',['../structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8',1,'DecodeSignal::valueType'],['../decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1',1,'ValueType: decode_database.h']]],
|
||||
['valuetype_20tt_4',['<tt>ValueType</tt>',['../md_README.html#autotoc_md32',1,'']]]
|
||||
['ui_20path_0',['1. Parse and UI path',['../md_README.html#autotoc_md4',1,'']]],
|
||||
['ui_20tree_1',['Build UI tree',['../md_README.html#autotoc_md76',1,'']]],
|
||||
['ui_20tree_20layer_2',['UI Tree Layer',['../md_README.html#autotoc_md24',1,'']]],
|
||||
['ui_20tree_20structures_3',['UI tree structures',['../md_README.html#autotoc_md11',1,'']]],
|
||||
['unified_20decode_20strategy_4',['Unified Decode Strategy',['../md_README.html#autotoc_md80',1,'']]],
|
||||
['unit_5',['unit',['../structDecodeSignal.html#a38eed9ca7581423fd8bfbedcffc12092',1,'DecodeSignal::unit'],['../structSignalInfo.html#a1f214f03e94ef5794de2d3367bfcbd01',1,'SignalInfo::unit']]],
|
||||
['usage_6',['Example Usage',['../md_README.html#autotoc_md74',1,'']]],
|
||||
['use_20in_20frametap_7',['Intended Use in FrameTap',['../md_README.html#autotoc_md84',1,'']]]
|
||||
];
|
||||
@@ -1,5 +1,8 @@
|
||||
var searchData=
|
||||
[
|
||||
['why_20the_20runtime_20decode_20layer_20exists_0',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||
['why_20the_20tree_20is_20not_20enough_1',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]]
|
||||
['valid_0',['valid',['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid'],['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid']]],
|
||||
['validation_20and_20parse_20errors_1',['validation and parse errors',['../md_README.html#autotoc_md58',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md62',1,'Signal validation and parse errors']]],
|
||||
['value_20representation_20and_20precision_2',['Raw value representation and precision',['../md_README.html#autotoc_md47',1,'']]],
|
||||
['valuetype_3',['valuetype',['../structDecodeSignal.html#a9d37638129263b8902ba5be59baf39a8',1,'DecodeSignal::valueType'],['../decode__database_8h.html#ad9971b6ef33e02ba2c75d19c1d2518a1',1,'ValueType: decode_database.h']]],
|
||||
['valuetype_20tt_4',['<tt>ValueType</tt>',['../md_README.html#autotoc_md32',1,'']]]
|
||||
];
|
||||
@@ -0,0 +1,5 @@
|
||||
var searchData=
|
||||
[
|
||||
['why_20the_20runtime_20decode_20layer_20exists_0',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||
['why_20the_20tree_20is_20not_20enough_1',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]]
|
||||
];
|
||||
@@ -5,7 +5,8 @@ var searchData=
|
||||
['comment_2',['comment',['../structDecodeSignal.html#ae28c905d4a2bc86419c2a8361bfea473',1,'DecodeSignal::comment'],['../structDecodeFrame.html#a25819ef907a32391af5c9f7cae9cdb22',1,'DecodeFrame::comment'],['../structFrameInfo.html#ace75121294f9d89b762080ab5643293c',1,'FrameInfo::comment'],['../structSignalInfo.html#ac99ba7563a5dad01e39c4257216953f5',1,'SignalInfo::comment']]],
|
||||
['comments_3',['Comments',['../md_README.html#autotoc_md64',1,'']]],
|
||||
['contains_4',['contains',['../classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4',1,'TypeFactory']]],
|
||||
['create_5',['create',['../classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f',1,'TypeFactory']]],
|
||||
['creator_6',['creator',['../classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473',1,'TypeFactory']]],
|
||||
['current_20limitations_7',['Current Limitations',['../md_README.html#autotoc_md90',1,'']]]
|
||||
['coverage_5',['coverage',['../md_tests_2README.html#autotoc_md105',1,'Decoder coverage'],['../md_tests_2README.html#autotoc_md106',1,'Parser coverage']]],
|
||||
['create_6',['create',['../classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f',1,'TypeFactory']]],
|
||||
['creator_7',['creator',['../classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473',1,'TypeFactory']]],
|
||||
['current_20limitations_8',['Current Limitations',['../md_README.html#autotoc_md90',1,'']]]
|
||||
];
|
||||
@@ -50,13 +50,13 @@ var searchData=
|
||||
['decodeframe_47',['DecodeFrame',['../structDecodeFrame.html',1,'']]],
|
||||
['decodeframe_20tt_48',['<tt>DecodeFrame</tt>',['../md_README.html#autotoc_md36',1,'']]],
|
||||
['decoder_49',['Runtime decoder',['../md_README.html#autotoc_md13',1,'']]],
|
||||
['decoder_20layer_50',['Decoder Layer',['../md_README.html#autotoc_md42',1,'']]],
|
||||
['decoder_20regression_20tests_51',['Decoder regression tests',['../md_tests_2README.html',1,'']]],
|
||||
['decoder_20coverage_50',['Decoder coverage',['../md_tests_2README.html#autotoc_md105',1,'']]],
|
||||
['decoder_20layer_51',['Decoder Layer',['../md_README.html#autotoc_md42',1,'']]],
|
||||
['decodesignal_52',['DecodeSignal',['../structDecodeSignal.html',1,'']]],
|
||||
['decodesignal_20tt_53',['<tt>DecodeSignal</tt>',['../md_README.html#autotoc_md34',1,'']]],
|
||||
['definition_54',['definition',['../structDecodedFrameValue.html#a60dda1cc352d2c8087f0bdbc81dd266c',1,'DecodedFrameValue::definition'],['../structDecodedSignalValue.html#acadc3b3bb21dd6b0412d342c7e6b20d7',1,'DecodedSignalValue::definition'],['../md_README.html#autotoc_md56',1,'Frame definition'],['../md_README.html#autotoc_md60',1,'Signal definition']]],
|
||||
['demo_55',['Demo',['../md_README.html#autotoc_md15',1,'']]],
|
||||
['dispatch_56',['Dispatch',['../classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed',1,'DbcStatementDispatcher']]],
|
||||
['dlc_57',['dlc',['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc'],['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc']]],
|
||||
['dlc_57',['dlc',['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc'],['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc']]],
|
||||
['documentation_58',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
||||
];
|
||||
@@ -3,6 +3,7 @@ var searchData=
|
||||
['enough_0',['Why the Tree Is Not Enough',['../md_README.html#autotoc_md86',1,'']]],
|
||||
['errors_1',['errors',['../md_README.html#autotoc_md58',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md62',1,'Signal validation and parse errors']]],
|
||||
['example_20usage_2',['Example Usage',['../md_README.html#autotoc_md74',1,'']]],
|
||||
['exists_3',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||
['extraction_4',['extraction',['../md_README.html#autotoc_md72',1,'Intel and Motorola Extraction'],['../md_README.html#autotoc_md68',1,'PGN Extraction']]]
|
||||
['examples_2fmain_2ecpp_3',['main.cpp',['../examples_2main_8cpp.html',1,'']]],
|
||||
['exists_4',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md7',1,'']]],
|
||||
['extraction_5',['extraction',['../md_README.html#autotoc_md72',1,'Intel and Motorola Extraction'],['../md_README.html#autotoc_md68',1,'PGN Extraction']]]
|
||||
];
|
||||
@@ -1,9 +1,8 @@
|
||||
var searchData=
|
||||
[
|
||||
['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]],
|
||||
['maximum_1',['maximum',['../structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7',1,'DecodeSignal::maximum'],['../structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52',1,'SignalInfo::maximum']]],
|
||||
['minimum_2',['minimum',['../structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25',1,'DecodeSignal::minimum'],['../structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b',1,'SignalInfo::minimum']]],
|
||||
['module_20documentation_3',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||
['module_20layout_4',['Module Layout',['../md_README.html#autotoc_md9',1,'']]],
|
||||
['motorola_20extraction_5',['Intel and Motorola Extraction',['../md_README.html#autotoc_md72',1,'']]]
|
||||
['maximum_0',['maximum',['../structDecodeSignal.html#a4a6ba87142a9badbf0ca830e9e709cb7',1,'DecodeSignal::maximum'],['../structSignalInfo.html#adf1c4331b9eabced0d7fdda40ff0eb52',1,'SignalInfo::maximum']]],
|
||||
['minimum_1',['minimum',['../structDecodeSignal.html#a0fb84e19a0ab3bd50b6f65c1075ebc25',1,'DecodeSignal::minimum'],['../structSignalInfo.html#ada7bf94fbeaa26bd08c73982b5af255b',1,'SignalInfo::minimum']]],
|
||||
['module_20documentation_2',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||
['module_20layout_3',['Module Layout',['../md_README.html#autotoc_md9',1,'']]],
|
||||
['motorola_20extraction_4',['Intel and Motorola Extraction',['../md_README.html#autotoc_md72',1,'']]]
|
||||
];
|
||||
@@ -1,4 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['frame_5finfo_2eh_0',['frame_info.h',['../frame__info_8h.html',1,'']]]
|
||||
['examples_2fmain_2ecpp_0',['main.cpp',['../examples_2main_8cpp.html',1,'']]]
|
||||
];
|
||||
@@ -1,4 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]]
|
||||
['frame_5finfo_2eh_0',['frame_info.h',['../frame__info_8h.html',1,'']]]
|
||||
];
|
||||
@@ -2,6 +2,5 @@ var searchData=
|
||||
[
|
||||
['dbc_20parser_20and_20runtime_20decode_20module_20documentation_0',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||
['decode_20module_20documentation_1',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]],
|
||||
['decoder_20regression_20tests_2',['Decoder regression tests',['../md_tests_2README.html',1,'']]],
|
||||
['documentation_3',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
||||
['documentation_2',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
||||
];
|
||||
@@ -1,5 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['regression_20tests_0',['Decoder regression tests',['../md_tests_2README.html',1,'']]],
|
||||
['runtime_20decode_20module_20documentation_1',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
||||
['qttest_20regression_20tests_0',['QtTest regression tests',['../md_tests_2README.html',1,'']]]
|
||||
];
|
||||
@@ -1,4 +1,5 @@
|
||||
var searchData=
|
||||
[
|
||||
['tests_0',['Decoder regression tests',['../md_tests_2README.html',1,'']]]
|
||||
['regression_20tests_0',['QtTest regression tests',['../md_tests_2README.html',1,'']]],
|
||||
['runtime_20decode_20module_20documentation_1',['DBC Parser and Runtime Decode Module Documentation',['../md_README.html',1,'']]]
|
||||
];
|
||||
@@ -0,0 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['tests_0',['QtTest regression tests',['../md_tests_2README.html',1,'']]]
|
||||
];
|
||||
@@ -1,12 +1,12 @@
|
||||
var indexSectionsWithContent =
|
||||
{
|
||||
0: "1234abcdefghilmnoprstuvw",
|
||||
0: "1234abcdefghilmnopqrstuvw",
|
||||
1: "dfrst",
|
||||
2: "dfmst",
|
||||
2: "defst",
|
||||
3: "abcdfgprt",
|
||||
4: "bcdfhilmnoprstuv",
|
||||
5: "bnv",
|
||||
6: "admprt"
|
||||
6: "admpqrt"
|
||||
};
|
||||
|
||||
var indexSectionNames =
|
||||
|
||||
@@ -120,7 +120,7 @@ Classes</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="signal__info_8h.html">signal_info.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="signal__info_8h.html">signal_info.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -145,7 +145,7 @@ $(document).ready(function(){initNavTree('signal__info_8h_source.html',''); init
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="signal__info_8h.html">signal_info.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="signal__info_8h.html">signal_info.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>DBC Framework: main.cpp Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr id="projectrow">
|
||||
<td id="projectalign">
|
||||
<div id="projectname">DBC Framework
|
||||
</div>
|
||||
<div id="projectbrief">DBC parsing and CAN signal decoding framework</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.8 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(document).ready(function() { init_codefold(0); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||
$(document).ready(function(){initNavTree('tests_2main_8cpp_source.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<div id="MSearchResults">
|
||||
<div class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div id="SRResults"></div>
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle"><div class="title">tests/main.cpp</div></div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include <QCoreApplication></span></div>
|
||||
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include <QtTest></span></div>
|
||||
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
|
||||
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="keywordtype">int</span> RunParserTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv);</div>
|
||||
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="keywordtype">int</span> RunDecoderTests(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv);</div>
|
||||
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
|
||||
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
|
||||
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> QCoreApplication application(argc, argv);</div>
|
||||
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">const</span> <span class="keywordtype">int</span> parserResult = RunParserTests(argc, argv);</div>
|
||||
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">const</span> <span class="keywordtype">int</span> decoderResult = RunDecoderTests(argc, argv);</div>
|
||||
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <span class="keywordflow">return</span> parserResult | decoderResult;</div>
|
||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span>}</div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_59425e443f801f1f2fd8bbe4959a3ccf.html">tests</a></li><li class="navelem"><b>main.cpp</b></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('tree__node_8cpp.html',''); initResizab
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -191,7 +191,7 @@ $(document).ready(function(){initNavTree('tree__node_8cpp_source.html',''); init
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="tree__node_8cpp.html">tree_node.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -160,7 +160,7 @@ Enumerations</h2></td></tr>
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="tree__node_8h.html">tree_node.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="tree__node_8h.html">tree_node.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -180,7 +180,7 @@ $(document).ready(function(){initNavTree('tree__node_8h_source.html',''); initRe
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="tree__node_8h.html">tree_node.h</a></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><a class="el" href="tree__node_8h.html">tree_node.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -170,7 +170,7 @@ $(document).ready(function(){initNavTree('typefactory_8h_source.html',''); initR
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><b>typefactory.h</b></li>
|
||||
<li class="navelem"><a class="el" href="dir_4270bfced15e0e73154b13468c7c9ad9.html">core</a></li><li class="navelem"><b>typefactory.h</b></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user