diff --git a/include/dbcppp/CApi.h b/include/dbcppp/CApi.h index aa2ba8a1..7203b061 100644 --- a/include/dbcppp/CApi.h +++ b/include/dbcppp/CApi.h @@ -100,7 +100,7 @@ extern "C" DBCPPP_API void dbcppp_AttributeDefinitionFree(const dbcppp_AttributeDefinition* attribute_defintion); DBCPPP_API dbcppp_EObjectType dbcppp_AttributeDefinitionObjectType(const dbcppp_AttributeDefinition* attribute_definition); DBCPPP_API const char* dbcppp_AttributeDefinitionName(const dbcppp_AttributeDefinition* attribute_definition); - DBCPPP_API dbcppp_EAttributeDefinitionValueType dbcppp_AttributeDefinitionValue_Type(const dbcppp_AttributeDefinition* attribute_definition); + DBCPPP_API dbcppp_EAttributeDefinitionValueType dbcppp_AttributeDefinitionValueType(const dbcppp_AttributeDefinition* attribute_definition); DBCPPP_API int64_t dbcppp_AttributeDefinitionValueTypeAsInt_Minimum(const dbcppp_AttributeDefinition* attribute_definition); DBCPPP_API int64_t dbcppp_AttributeDefinitionValueTypeAsInt_Maximum(const dbcppp_AttributeDefinition* attribute_definition); DBCPPP_API uint64_t dbcppp_AttributeDefinitionValueTypeAsHex_Minimum(const dbcppp_AttributeDefinition* attribute_definition); @@ -139,8 +139,8 @@ extern "C" DBCPPP_API double dbcppp_EnvironmentVariableInitialValue(const dbcppp_EnvironmentVariable* env_var); DBCPPP_API uint64_t dbcppp_EnvironmentVariableEvId(const dbcppp_EnvironmentVariable* env_var); DBCPPP_API dbcppp_EEnvironmentVariableAccessType dbcppp_EnvironmentVariableAccessType(const dbcppp_EnvironmentVariable* env_var); - DBCPPP_API const char* dbcppp_EnvironmentVariableNodes_Get(const dbcppp_EnvironmentVariable* env_var, uint64_t i); - DBCPPP_API uint64_t dbcppp_EnvironmentVariableNodes_Size(const dbcppp_EnvironmentVariable* env_var); + DBCPPP_API const char* dbcppp_EnvironmentVariableAccessNodes_Get(const dbcppp_EnvironmentVariable* env_var, uint64_t i); + DBCPPP_API uint64_t dbcppp_EnvironmentVariableAccessNodes_Size(const dbcppp_EnvironmentVariable* env_var); DBCPPP_API uint64_t dbcppp_EnvironmentVariableValueEncodingDescriptions_GetValue(const dbcppp_EnvironmentVariable* env_var, int64_t i); DBCPPP_API const char* dbcppp_EnvironmentVariableValueEncodingDescriptions_GetDescription(const dbcppp_EnvironmentVariable* env_var, int64_t i); DBCPPP_API uint64_t dbcppp_EnvironmentVariableValueEncodingDescriptions_Size(const dbcppp_EnvironmentVariable* env_var); @@ -170,8 +170,9 @@ extern "C" DBCPPP_API const dbcppp_Attribute* dbcppp_MessageAttributeValues_Get(const dbcppp_Message* msg, uint64_t i); DBCPPP_API uint64_t dbcppp_MessageAttributeValues_Size(const dbcppp_Message* msg); DBCPPP_API const char* dbcppp_MessageComment(const dbcppp_Message* msg); - + DBCPPP_API const dbcppp_Network* dbcppp_NetworkLoadDBCFromFile(const char* filename); + DBCPPP_API const dbcppp_Network* dbcppp_NetworkLoadDBCFromMemory(const char* data); DBCPPP_API const dbcppp_Network* dbcppp_NetworkCreate( const char* version , const char** new_symbols diff --git a/include/dbcppp/EnvironmentVariable.h b/include/dbcppp/EnvironmentVariable.h index 92a8958b..4d4ebd4c 100644 --- a/include/dbcppp/EnvironmentVariable.h +++ b/include/dbcppp/EnvironmentVariable.h @@ -24,7 +24,14 @@ namespace dbcppp }; enum class EAccessType { - Unrestricted, Read, Write, ReadWrite + Unrestricted = 0x0000, + Read = 0x0001, + Write = 0x0002, + ReadWrite = 0x0003, + Unrestricted_ = 0x8000, + Read_ = 0x8001, + Write_ = 0x8002, + ReadWrite_ = 0x8003 }; static std::unique_ptr Create( diff --git a/include/dbcppp/Signal.h b/include/dbcppp/Signal.h index 5990c4c5..7097a847 100644 --- a/include/dbcppp/Signal.h +++ b/include/dbcppp/Signal.h @@ -33,7 +33,8 @@ namespace dbcppp }; enum class EByteOrder { - LittleEndian, BigEndian + BigEndian = 0, + LittleEndian = 1 }; enum class EValueType { diff --git a/src/libdbcppp/CApi.cpp b/src/libdbcppp/CApi.cpp index 08aa4b03..fccf68d7 100644 --- a/src/libdbcppp/CApi.cpp +++ b/src/libdbcppp/CApi.cpp @@ -173,7 +173,7 @@ extern "C" auto ad = reinterpret_cast(attribute_definition); return ad->Name().c_str(); } - DBCPPP_API dbcppp_EAttributeDefinitionValueType dbcppp_AttributeDefinitionValue_Type(const dbcppp_AttributeDefinition* attribute_definition) + DBCPPP_API dbcppp_EAttributeDefinitionValueType dbcppp_AttributeDefinitionValueType(const dbcppp_AttributeDefinition* attribute_definition) { auto ad = reinterpret_cast(attribute_definition); if (std::get_if(&ad->ValueType())) @@ -404,12 +404,12 @@ extern "C" default: return dbcppp_EEnvironmentVariableAccessType::dbcppp_EnvironmentVariableAccessTypeReadWrite; } } - DBCPPP_API const char* dbcppp_EnvironmentVariableNodes_Get(const dbcppp_EnvironmentVariable* env_var, uint64_t i) + DBCPPP_API const char* dbcppp_EnvironmentVariableAccessNodes_Get(const dbcppp_EnvironmentVariable* env_var, uint64_t i) { auto env_var_i = reinterpret_cast(env_var); return env_var_i->AccessNodes_Get(i).c_str(); } - DBCPPP_API uint64_t dbcppp_EnvironmentVariableNodes_Size(const dbcppp_EnvironmentVariable* env_var) + DBCPPP_API uint64_t dbcppp_EnvironmentVariableAccessNodes_Size(const dbcppp_EnvironmentVariable* env_var) { auto env_var_i = reinterpret_cast(env_var); return env_var_i->AccessNodes_Size(); diff --git a/src/libdbcppp/DBCAST2Network.cpp b/src/libdbcppp/DBCAST2Network.cpp index 35261989..8a06ec56 100644 --- a/src/libdbcppp/DBCAST2Network.cpp +++ b/src/libdbcppp/DBCAST2Network.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -498,22 +499,15 @@ static auto getEnvironmentVariables(const G_Network& gnet) case 1: var_type = IEnvironmentVariable::EVarType::Float; break; case 2: var_type = IEnvironmentVariable::EVarType::String; break; } - if (ev.access_type == "DUMMY_NODE_VECTOR0") - { - access_type = IEnvironmentVariable::EAccessType::Unrestricted; - } - else if (ev.access_type == "DUMMY_NODE_VECTOR1") - { - access_type = IEnvironmentVariable::EAccessType::Read; - } - else if (ev.access_type == "DUMMY_NODE_VECTOR2") - { - access_type = IEnvironmentVariable::EAccessType::Write; - } - else - { - access_type = IEnvironmentVariable::EAccessType::ReadWrite; - } + access_type = IEnvironmentVariable::EAccessType::Unrestricted; + if (ev.access_type == "DUMMY_NODE_VECTOR0") access_type = IEnvironmentVariable::EAccessType::Unrestricted; + else if (ev.access_type == "DUMMY_NODE_VECTOR1") access_type = IEnvironmentVariable::EAccessType::Read; + else if (ev.access_type == "DUMMY_NODE_VECTOR2") access_type = IEnvironmentVariable::EAccessType::Write; + else if (ev.access_type == "DUMMY_NODE_VECTOR3") access_type = IEnvironmentVariable::EAccessType::ReadWrite; + else if (ev.access_type == "DUMMY_NODE_VECTOR8000") access_type = IEnvironmentVariable::EAccessType::Unrestricted_; + else if (ev.access_type == "DUMMY_NODE_VECTOR8001") access_type = IEnvironmentVariable::EAccessType::Read_; + else if (ev.access_type == "DUMMY_NODE_VECTOR8002") access_type = IEnvironmentVariable::EAccessType::Write_; + else if (ev.access_type == "DUMMY_NODE_VECTOR8003") access_type = IEnvironmentVariable::EAccessType::ReadWrite_; for (auto& evd : gnet.environment_variable_datas) { if (evd.name == ev.name) @@ -689,7 +683,13 @@ extern "C" DBCPPP_API const dbcppp_Network* dbcppp_NetworkLoadDBCFromFile(const char* filename) { std::ifstream is(filename); - std::unique_ptr result = INetwork::LoadDBCFromIs(is); - return reinterpret_cast(result.release()); + auto net = INetwork::LoadDBCFromIs(is); + return reinterpret_cast(net.release()); + } + DBCPPP_API const dbcppp_Network* dbcppp_NetworkLoadDBCFromMemory(const char* data) + { + std::istringstream iss(data); + auto net = INetwork::LoadDBCFromIs(iss); + return reinterpret_cast(net.release()); } } \ No newline at end of file diff --git a/src/libdbcppp/Network2DBC.cpp b/src/libdbcppp/Network2DBC.cpp index d0d90262..3de06238 100644 --- a/src/libdbcppp/Network2DBC.cpp +++ b/src/libdbcppp/Network2DBC.cpp @@ -237,6 +237,10 @@ DBCPPP_API std::ostream& dbcppp::Network2DBC::operator<<(std::ostream& os, const case IEnvironmentVariable::EAccessType::Read: os << "DUMMY_NODE_VECTOR1"; break; case IEnvironmentVariable::EAccessType::Write: os << "DUMMY_NODE_VECTOR2"; break; case IEnvironmentVariable::EAccessType::ReadWrite: os << "DUMMY_NODE_VECTOR3"; break; + case IEnvironmentVariable::EAccessType::Unrestricted_: os << "DUMMY_NODE_VECTOR8000"; break; + case IEnvironmentVariable::EAccessType::Read_: os << "DUMMY_NODE_VECTOR8001"; break; + case IEnvironmentVariable::EAccessType::Write_: os << "DUMMY_NODE_VECTOR8002"; break; + case IEnvironmentVariable::EAccessType::ReadWrite_: os << "DUMMY_NODE_VECTOR8003"; break; } bool first = true; for (const std::string& n : ev.AccessNodes()) diff --git a/tests/APITests.cpp b/tests/APITests.cpp index 28ba553d..0ee0a21c 100644 --- a/tests/APITests.cpp +++ b/tests/APITests.cpp @@ -1,8 +1,246 @@ #include "Catch2.h" -#include "dbcppp/Network.h" +#include +#include -TEST_CASE("APITest ", "[]") +using namespace dbcppp; + +TEST_CASE("API Test: AttributeDefinition", "[]") +{ + constexpr char* test_dbc = + "VERSION \"\"\n" + "NS_ :\n" + "BS_:\n" + "BU_:\n" + "BA_DEF_ BO_ \"AD_Name\" INT 1 3000;"; + + SECTION("CPP API") + { + std::istringstream iss(test_dbc); + auto net = INetwork::LoadDBCFromIs(iss); + REQUIRE(net); + + REQUIRE(net->AttributeDefinitions_Size() == 1); + REQUIRE(net->AttributeDefinitions_Get(0).ObjectType() == IAttributeDefinition::EObjectType::Message); + REQUIRE(net->AttributeDefinitions_Get(0).Name() == "AD_Name"); + auto value_type = std::get_if(&net->AttributeDefinitions_Get(0).ValueType()); + REQUIRE(value_type); + REQUIRE(value_type->minimum == 1); + REQUIRE(value_type->maximum == 3000); + } + SECTION("C API") + { + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); + REQUIRE(net); + + REQUIRE(dbcppp_NetworkAttributeDefinitions_Size(net) == 1); + auto attr_def = dbcppp_NetworkAttributeDefinitions_Get(net, 0); + REQUIRE(dbcppp_AttributeDefinitionObjectType(attr_def) == dbcppp_ObjectType_Message); + REQUIRE(dbcppp_AttributeDefinitionName(attr_def) == std::string("AD_Name")); + REQUIRE(dbcppp_AttributeDefinitionValueType(attr_def) == dbcppp_AttributeDefinitionValueTypeInt); + REQUIRE(dbcppp_AttributeDefinitionValueTypeAsInt_Minimum(attr_def) == 1); + REQUIRE(dbcppp_AttributeDefinitionValueTypeAsInt_Maximum(attr_def) == 3000); + } +} +TEST_CASE("API Test: BitTiming", "[]") { + constexpr char* test_dbc = + "VERSION \"\"\n" + "NS_ :\n" + "BS_: 1 : 2, 3\n" + "BU_:\n"; + + SECTION("CPP API") + { + std::istringstream iss(test_dbc); + auto net = INetwork::LoadDBCFromIs(iss); + REQUIRE(net); + + REQUIRE(net->BitTiming().Baudrate() == 1); + REQUIRE(net->BitTiming().BTR1() == 2); + REQUIRE(net->BitTiming().BTR2() == 3); + } + SECTION("C API") + { + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); + REQUIRE(net); + + auto bt = dbcppp_NetworkBitTiming(net); + REQUIRE(bt); + REQUIRE(dbcppp_BitTimingBaudrate(bt) == 1); + REQUIRE(dbcppp_BitTimingBTR1(bt) == 2); + REQUIRE(dbcppp_BitTimingBTR2(bt) == 3); + } +} +TEST_CASE("API Test: EnvironmentVariable", "[]") +{ + constexpr char* test_dbc = + "VERSION \"\"\n" + "NS_ :\n" + "BS_:\n" + "BU_:\n" + "EV_ EnvVarName : 0 [1|2] \"Unit\" 5.5 1 DUMMY_NODE_VECTOR0 Node0;\n" + "CM_ EV_ EnvVarName \"Comment\";\n"; + + SECTION("CPP API") + { + std::istringstream iss(test_dbc); + auto net = INetwork::LoadDBCFromIs(iss); + REQUIRE(net); + + REQUIRE(net->EnvironmentVariables_Size() == 1); + REQUIRE(net->EnvironmentVariables_Get(0).Name() == "EnvVarName"); + REQUIRE(net->EnvironmentVariables_Get(0).VarType() == IEnvironmentVariable::EVarType::Integer); + REQUIRE(net->EnvironmentVariables_Get(0).Minimum() == 1); + REQUIRE(net->EnvironmentVariables_Get(0).Maximum() == 2); + REQUIRE(net->EnvironmentVariables_Get(0).Unit() == "Unit"); + REQUIRE(net->EnvironmentVariables_Get(0).InitialValue() == 5.5); + REQUIRE(net->EnvironmentVariables_Get(0).EvId() == 1); + REQUIRE(net->EnvironmentVariables_Get(0).AccessType() == IEnvironmentVariable::EAccessType::Unrestricted); + REQUIRE(net->EnvironmentVariables_Get(0).AccessNodes_Size() == 1); + REQUIRE(net->EnvironmentVariables_Get(0).AccessNodes_Get(0) == "Node0"); + } + SECTION("C API") + { + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); + REQUIRE(net); + + REQUIRE(dbcppp_NetworkEnvironmentVariables_Size(net) == 1); + auto ev = dbcppp_NetworkEnvironmentVariables_Get(net, 0); + REQUIRE(ev); + REQUIRE(dbcppp_EnvironmentVariableName(ev) == std::string("EnvVarName")); + REQUIRE(dbcppp_EnvironmentVariableVarType(ev) == dbcppp_EnvironmentVariableVarTypeInteger); + REQUIRE(dbcppp_EnvironmentVariableMinimum(ev) == 1); + REQUIRE(dbcppp_EnvironmentVariableMaximum(ev) == 2); + REQUIRE(dbcppp_EnvironmentVariableUnit(ev) == std::string("Unit")); + REQUIRE(dbcppp_EnvironmentVariableInitialValue(ev) == 5.5); + REQUIRE(dbcppp_EnvironmentVariableEvId(ev) == 1); + REQUIRE(dbcppp_EnvironmentVariableAccessType(ev) == dbcppp_EnvironmentVariableAccessTypeUnrestricted); + REQUIRE(dbcppp_EnvironmentVariableAccessNodes_Size(ev) == 1); + REQUIRE(dbcppp_EnvironmentVariableAccessNodes_Get(ev, 0) == std::string("Node0")); + } +} +TEST_CASE("API Test: Signal", "[]") +{ + constexpr char* test_dbc = + "VERSION \"\"\n" + "NS_ :\n" + "BS_: 1 : 2, 3\n" + "BU_:\n" + "BO_ 1 Msg0: 8 Sender0\n" + " SG_ Sig0: 0|1@1+ (1,0) [1|12] \"Unit0\" Vector__XXX\n" + " SG_ Sig1 m0 : 1|1@0- (1,0) [1|12] \"Unit1\" Recv0, Recv1\n" + " SG_ Sig2 M : 2|1@0- (1,0) [1|12] \"Unit2\" Recv0, Recv1\n"; + + SECTION("CPP API") + { + std::istringstream iss(test_dbc); + auto net = INetwork::LoadDBCFromIs(iss); + REQUIRE(net); + + REQUIRE(net->Messages_Size() == 1); + REQUIRE(net->Messages_Get(0).Signals_Size() == 3); + REQUIRE(net->Messages_Get(0).Signals_Get(0).Name() == "Sig0"); + REQUIRE(net->Messages_Get(0).Signals_Get(0).MultiplexerIndicator() == ISignal::EMultiplexer::NoMux); + REQUIRE(net->Messages_Get(0).Signals_Get(0).StartBit() == 0); + REQUIRE(net->Messages_Get(0).Signals_Get(0).BitSize() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(0).ByteOrder() == ISignal::EByteOrder::LittleEndian); + REQUIRE(net->Messages_Get(0).Signals_Get(0).ValueType() == ISignal::EValueType::Unsigned); + REQUIRE(net->Messages_Get(0).Signals_Get(0).Factor() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(0).Offset() == 0); + REQUIRE(net->Messages_Get(0).Signals_Get(0).Minimum() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(0).Maximum() == 12); + REQUIRE(net->Messages_Get(0).Signals_Get(0).Unit() == "Unit0"); + REQUIRE(net->Messages_Get(0).Signals_Get(0).Receivers_Size() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(0).Receivers_Get(0) == "Vector__XXX"); + + REQUIRE(net->Messages_Get(0).Signals_Get(1).Name() == "Sig1"); + REQUIRE(net->Messages_Get(0).Signals_Get(1).MultiplexerIndicator() == ISignal::EMultiplexer::MuxValue); + REQUIRE(net->Messages_Get(0).Signals_Get(1).StartBit() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(1).BitSize() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(1).ByteOrder() == ISignal::EByteOrder::BigEndian); + REQUIRE(net->Messages_Get(0).Signals_Get(1).ValueType() == ISignal::EValueType::Signed); + REQUIRE(net->Messages_Get(0).Signals_Get(1).Factor() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(1).Offset() == 0); + REQUIRE(net->Messages_Get(0).Signals_Get(1).Minimum() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(1).Maximum() == 12); + REQUIRE(net->Messages_Get(0).Signals_Get(1).Unit() == "Unit1"); + REQUIRE(net->Messages_Get(0).Signals_Get(1).Receivers_Size() == 2); + REQUIRE(net->Messages_Get(0).Signals_Get(1).Receivers_Get(0) == "Recv0"); + REQUIRE(net->Messages_Get(0).Signals_Get(1).Receivers_Get(1) == "Recv1"); + + REQUIRE(net->Messages_Get(0).Signals_Get(2).Name() == "Sig2"); + REQUIRE(net->Messages_Get(0).Signals_Get(2).MultiplexerIndicator() == ISignal::EMultiplexer::MuxSwitch); + REQUIRE(net->Messages_Get(0).Signals_Get(2).StartBit() == 2); + REQUIRE(net->Messages_Get(0).Signals_Get(2).BitSize() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(2).ByteOrder() == ISignal::EByteOrder::BigEndian); + REQUIRE(net->Messages_Get(0).Signals_Get(2).ValueType() == ISignal::EValueType::Signed); + REQUIRE(net->Messages_Get(0).Signals_Get(2).Factor() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(2).Offset() == 0); + REQUIRE(net->Messages_Get(0).Signals_Get(2).Minimum() == 1); + REQUIRE(net->Messages_Get(0).Signals_Get(2).Maximum() == 12); + REQUIRE(net->Messages_Get(0).Signals_Get(2).Unit() == "Unit2"); + REQUIRE(net->Messages_Get(0).Signals_Get(2).Receivers_Size() == 2); + REQUIRE(net->Messages_Get(0).Signals_Get(2).Receivers_Get(0) == "Recv0"); + REQUIRE(net->Messages_Get(0).Signals_Get(2).Receivers_Get(1) == "Recv1"); + } + SECTION("C API") + { + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); + REQUIRE(net); + + REQUIRE(dbcppp_NetworkMessages_Size(net) == 1); + auto msg = dbcppp_NetworkMessages_Get(net, 0); + REQUIRE(msg); + REQUIRE(dbcppp_MessageSignals_Size(msg) == 3); + auto sig = dbcppp_MessageSignals_Get(msg, 0); + REQUIRE(sig); + REQUIRE(dbcppp_SignalName(sig) == std::string("Sig0")); + REQUIRE(dbcppp_SignalMultiplexerIndicator(sig) == dbcppp_SignalMultiplexerNoMux); + REQUIRE(dbcppp_SignalStartBit(sig) == 0); + REQUIRE(dbcppp_SignalBitSize(sig) == 1); + REQUIRE(dbcppp_SignalByteOrder(sig) == dbcppp_SignalByteOrderLittleEndian); + REQUIRE(dbcppp_SignalValueType(sig) == dbcppp_SignalValueTypeUnsigned); + REQUIRE(dbcppp_SignalFactor(sig) == 1); + REQUIRE(dbcppp_SignalOffset(sig) == 0); + REQUIRE(dbcppp_SignalMinimum(sig) == 1); + REQUIRE(dbcppp_SignalMaximum(sig) == 12); + REQUIRE(dbcppp_SignalReceivers_Size(sig) == 1); + REQUIRE(dbcppp_SignalReceivers_Get(sig, 0) == std::string("Vector__XXX")); + } +} +TEST_CASE("API Test: Message", "[]") +{ + constexpr char* test_dbc = + "VERSION \"\"\n" + "NS_ :\n" + "BS_: 1 : 2, 3\n" + "BU_:\n" + "BO_ 1 Msg0: 8 Sender0\n" + " SG_ Sig0: 0|1@1+ (1,0) [1|12] \"Unit0\" Vector__XXX\n" + " SG_ Sig1 m0 : 1|1@0- (1,0) [1|12] \"Unit1\" Recv0, Recv1\n" + " SG_ Sig2 M : 2|1@0- (1,0) [1|12] \"Unit2\" Recv0, Recv1\n"; + + SECTION("CPP API") + { + std::istringstream iss(test_dbc); + auto net = INetwork::LoadDBCFromIs(iss); + REQUIRE(net); + + REQUIRE(net->Messages_Size() == 1); + REQUIRE(net->Messages_Get(0).Id() == 1); + REQUIRE(net->Messages_Get(0).MessageSize() == 8); + REQUIRE(net->Messages_Get(0).Transmitter() == "Sender0"); + REQUIRE(net->Messages_Get(0).Signals_Size() == 3); + } + SECTION("C API") + { + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); + REQUIRE(net); + REQUIRE(dbcppp_NetworkMessages_Size(net) == 1); + auto msg = dbcppp_NetworkMessages_Get(net, 0); + REQUIRE(msg); + REQUIRE(dbcppp_MessageSignals_Size(msg) == 3); + } } diff --git a/tests/test_files/dbc/issue_184_extended_mux_cascaded.dbc b/tests/test_files/dbc/issue_184_extended_mux_cascaded.dbc index cd93667f..c4592841 100644 --- a/tests/test_files/dbc/issue_184_extended_mux_cascaded.dbc +++ b/tests/test_files/dbc/issue_184_extended_mux_cascaded.dbc @@ -42,6 +42,9 @@ BO_ 2147483649 ext_MUX_cascaded: 8 Vector__XXX SG_ muxed_A_2_MUX_B m2M : 8|8@1- (1,0) [0|0] "" Vector__XXX SG_ muxed_A_1 m1 : 8|8@1- (1,0) [0|0] "" Vector__XXX SG_ MUX_A M : 0|8@1- (1,0) [0|0] "" Vector__XXX + SG_ muxed_A_2_MUX_B_MUX_C m2M : 32|8@1- (1,0) [0|0] "" Vector__XXX + SG_ muxed_C_0 m0 : 40|8@1- (1,0) [0|0] "" Vector__XXX + SG_ muxed_C_1 m1 : 40|8@1- (1,0) [0|0] "" Vector__XXX @@ -116,3 +119,6 @@ SG_MUL_VAL_ 2147483649 muxed_B_1 muxed_A_2_MUX_B 1-1; SG_MUL_VAL_ 2147483649 muxed_B_0 muxed_A_2_MUX_B 0-0; SG_MUL_VAL_ 2147483649 muxed_A_2_MUX_B MUX_A 2-2; SG_MUL_VAL_ 2147483649 muxed_A_1 MUX_A 1-1; +SG_MUL_VAL_ 2147483649 muxed_A_2_MUX_B_MUX_C muxed_A_2_MUX_B 2-2; +SG_MUL_VAL_ 2147483649 muxed_C_0 muxed_A_2_MUX_B_MUX_C 0-0; +SG_MUL_VAL_ 2147483649 muxed_C_1 muxed_A_2_MUX_B_MUX_C 1-1; diff --git a/tests/test_files/dbc/issue_184_extended_mux_cascaded.ini b/tests/test_files/dbc/issue_184_extended_mux_cascaded.ini new file mode 100644 index 00000000..ece670b9 --- /dev/null +++ b/tests/test_files/dbc/issue_184_extended_mux_cascaded.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,125, +[View_VehicleNetworks] +HIDDEN=3,5, +ORDER=0,1,2,3,4,5, +DEFINITIONS=29,30,31, +COLUMNWIDTHS=125,125,100,100,150,100,100,100, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,125,100,125,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_VehicleNetworkTxMessages] +HIDDEN=22, +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, +DEFINITIONS=5,7,8,10,11,12,25,26,27,32, +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150,100,100,100,100,50,50,50,50,100,50,100,50,50,100, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,125,100,125,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=125,125,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=125,125,125,125,125,125,125, +[View_Networks] +HIDDEN=2,4, +ORDER=0,1,2,3,4, +DEFINITIONS=29,30,31, +COLUMNWIDTHS=125,100,100,150,100,100,100, +[View_Network] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,125,100,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_NetworkTxMessages] +HIDDEN=22, +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, +DEFINITIONS=5,7,8,10,11,12,25,26,27,32, +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150,100,100,100,100,50,50,50,50,100,50,100,50,50,100, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,100,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,125,100,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,100,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NodeTxMessages] +HIDDEN=21, +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, +DEFINITIONS=5,7,8,10,11,12,25,26,27,32, +COLUMNWIDTHS=125,125,55,100,50,100,100,150,100,100,100,100,50,50,50,50,100,50,100,50,50,100, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_Messages] +HIDDEN=21, +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, +DEFINITIONS=5,7,8,10,11,12,25,26,27,32, +COLUMNWIDTHS=125,55,100,50,100,100,100,150,100,100,100,100,50,50,50,50,100,50,100,50,50,100, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,100,150, diff --git a/tests/test_files/dbc/issue_184_extended_mux_independent_multiplexors_dumped.ini b/tests/test_files/dbc/issue_184_extended_mux_independent_multiplexors_dumped.ini new file mode 100644 index 00000000..ece670b9 --- /dev/null +++ b/tests/test_files/dbc/issue_184_extended_mux_independent_multiplexors_dumped.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,125, +[View_VehicleNetworks] +HIDDEN=3,5, +ORDER=0,1,2,3,4,5, +DEFINITIONS=29,30,31, +COLUMNWIDTHS=125,125,100,100,150,100,100,100, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,125,100,125,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_VehicleNetworkTxMessages] +HIDDEN=22, +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, +DEFINITIONS=5,7,8,10,11,12,25,26,27,32, +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150,100,100,100,100,50,50,50,50,100,50,100,50,50,100, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,125,100,125,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=125,125,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=125,125,125,125,125,125,125, +[View_Networks] +HIDDEN=2,4, +ORDER=0,1,2,3,4, +DEFINITIONS=29,30,31, +COLUMNWIDTHS=125,100,100,150,100,100,100, +[View_Network] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,125,100,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_NetworkTxMessages] +HIDDEN=22, +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, +DEFINITIONS=5,7,8,10,11,12,25,26,27,32, +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150,100,100,100,100,50,50,50,50,100,50,100,50,50,100, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,100,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,125,100,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS=13,14,15,16,17,18,19,20,21,22,23,24, +COLUMNWIDTHS=125,100,150,100,100,50,50,50,50,50,50,50,50,50,50, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NodeTxMessages] +HIDDEN=21, +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, +DEFINITIONS=5,7,8,10,11,12,25,26,27,32, +COLUMNWIDTHS=125,125,55,100,50,100,100,150,100,100,100,100,50,50,50,50,100,50,100,50,50,100, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,-1,100,100,100,100,50,50,50, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_Messages] +HIDDEN=21, +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, +DEFINITIONS=5,7,8,10,11,12,25,26,27,32, +COLUMNWIDTHS=125,55,100,50,100,100,100,150,100,100,100,100,50,50,50,50,100,50,100,50,50,100, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, +DEFINITIONS=1,2,3,4,6,9,28, +COLUMNWIDTHS=125,50,100,100,100,50,50,50,50,100,100,150,100,100,100,100,50,50,50, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,100,150,