diff --git a/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_fb.h b/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_fb.h index 78ad2d4..ab4d9ce 100644 --- a/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_fb.h +++ b/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_fb.h @@ -41,11 +41,13 @@ struct CaptureFbInit class CaptureFb final : public daq::asam_cmp_common_lib::CaptureCommonFb { public: - explicit CaptureFb(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const CaptureFbInit& init); + explicit CaptureFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr & ctx, + const ComponentPtr& parent, + const StringPtr& localId, + const CaptureFbInit& init); ~CaptureFb() override; - static FunctionBlockTypePtr CreateType(); - private: void initProperties(); void initEncoders(); diff --git a/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_module_fb.h b/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_module_fb.h index f964bdb..0ee31b3 100644 --- a/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_module_fb.h +++ b/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_module_fb.h @@ -26,11 +26,18 @@ BEGIN_NAMESPACE_ASAM_CMP_CAPTURE_MODULE class CaptureModuleFb final : public asam_cmp_common_lib::NetworkManagerFb { public: - explicit CaptureModuleFb(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const std::shared_ptr& ethernetWrapper); + explicit CaptureModuleFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, + const ComponentPtr& parent, + const StringPtr& localId, + const std::shared_ptr& ethernetWrapper); ~CaptureModuleFb() override = default; - static FunctionBlockTypePtr CreateType(); - static FunctionBlockPtr create(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId); + static FunctionBlockTypePtr CreateType(const ModuleInfoPtr& moduleInfo); + static FunctionBlockPtr create(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, + const ComponentPtr& parent, + const StringPtr& localId); private: void createFbs(); diff --git a/asam_cmp_capture_module/include/asam_cmp_capture_module/interface_fb.h b/asam_cmp_capture_module/include/asam_cmp_capture_module/interface_fb.h index ee668c2..d138cb7 100644 --- a/asam_cmp_capture_module/include/asam_cmp_capture_module/interface_fb.h +++ b/asam_cmp_capture_module/include/asam_cmp_capture_module/interface_fb.h @@ -45,13 +45,13 @@ struct InterfaceFbInit class InterfaceFb final : public asam_cmp_common_lib::InterfaceCommonFb { public: - explicit InterfaceFb(const ContextPtr& ctx, - const ComponentPtr& parent, - const StringPtr& localId, - const asam_cmp_common_lib::InterfaceCommonInit& commonInit, - const InterfaceFbInit& internalInit); + explicit InterfaceFb(const ModuleInfoPtr& modulenifo, + const ContextPtr& ctx, + const ComponentPtr& parent, + const StringPtr& localId, + const asam_cmp_common_lib::InterfaceCommonInit& commonInit, + const InterfaceFbInit& internalInit); ~InterfaceFb() override = default; - static FunctionBlockTypePtr CreateType(); private: void initProperties(); diff --git a/asam_cmp_capture_module/include/asam_cmp_capture_module/stream_fb.h b/asam_cmp_capture_module/include/asam_cmp_capture_module/stream_fb.h index c54e0d9..8473509 100644 --- a/asam_cmp_capture_module/include/asam_cmp_capture_module/stream_fb.h +++ b/asam_cmp_capture_module/include/asam_cmp_capture_module/stream_fb.h @@ -48,7 +48,8 @@ struct StreamInit class StreamFb final : public asam_cmp_common_lib::StreamCommonFb { public: - explicit StreamFb(const ContextPtr& ctx, + explicit StreamFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const asam_cmp_common_lib::StreamCommonInit& init, diff --git a/asam_cmp_capture_module/src/CMakeLists.txt b/asam_cmp_capture_module/src/CMakeLists.txt index a4552b7..e6155df 100644 --- a/asam_cmp_capture_module/src/CMakeLists.txt +++ b/asam_cmp_capture_module/src/CMakeLists.txt @@ -4,7 +4,8 @@ project(asam_cmp_capture_module set(LIB_NAME asam_cmp_capture_module) -set(SRC_Cpp module_dll.cpp +set(SRC_Cpp + module_dll.cpp capture_module_fb.cpp capture_module.cpp interface_fb.cpp @@ -14,7 +15,8 @@ set(SRC_Cpp module_dll.cpp encoder_bank.cpp ) -set(SRC_PublicHeaders module_dll.h +set(SRC_PublicHeaders + module_dll.h capture_module_fb.h capture_module.h interface_fb.h @@ -28,6 +30,12 @@ set(SRC_PrivateHeaders dispatch.h ) +source_group("module" FILES + ${SRC_Cpp} + ${SRC_PublicHeaders} + ${SRC_PrivateHeaders} +) + if (MSVC) add_compile_options(/bigobj) endif() diff --git a/asam_cmp_capture_module/src/capture_fb.cpp b/asam_cmp_capture_module/src/capture_fb.cpp index 092f8b0..90f5e06 100644 --- a/asam_cmp_capture_module/src/capture_fb.cpp +++ b/asam_cmp_capture_module/src/capture_fb.cpp @@ -9,8 +9,12 @@ BEGIN_NAMESPACE_ASAM_CMP_CAPTURE_MODULE -CaptureFb::CaptureFb(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const CaptureFbInit& init) - : asam_cmp_common_lib::CaptureCommonFb(ctx, parent, localId) +CaptureFb::CaptureFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, + const ComponentPtr& parent, + const StringPtr& localId, + const CaptureFbInit& init) + : asam_cmp_common_lib::CaptureCommonFb(moduleInfo, ctx, parent, localId) , allowJumboFrames(false) , ethernetWrapper(init.ethernetWrapper) , selectedEthernetDeviceName(init.selectedDeviceName) diff --git a/asam_cmp_capture_module/src/capture_module.cpp b/asam_cmp_capture_module/src/capture_module.cpp index 4e83f19..b460ca8 100644 --- a/asam_cmp_capture_module/src/capture_module.cpp +++ b/asam_cmp_capture_module/src/capture_module.cpp @@ -18,7 +18,7 @@ DictPtr CaptureModule::onGetAvailableFunctionBlockT { auto types = Dict(); - auto typeCaptureModule = CaptureModuleFb::CreateType(); + auto typeCaptureModule = CaptureModuleFb::CreateType(moduleInfo); types.set(typeCaptureModule.getId(), typeCaptureModule); return types; @@ -29,9 +29,9 @@ FunctionBlockPtr CaptureModule::onCreateFunctionBlock(const StringPtr& id, const StringPtr& localId, const PropertyObjectPtr& config) { - if (id == CaptureModuleFb::CreateType().getId()) + if (id == CaptureModuleFb::CreateType(moduleInfo).getId()) { - FunctionBlockPtr fb = CaptureModuleFb::create(context, parent, localId); + FunctionBlockPtr fb = CaptureModuleFb::create(moduleInfo,context, parent, localId); return fb; } diff --git a/asam_cmp_capture_module/src/capture_module_fb.cpp b/asam_cmp_capture_module/src/capture_module_fb.cpp index 20505fe..3da10c5 100644 --- a/asam_cmp_capture_module/src/capture_module_fb.cpp +++ b/asam_cmp_capture_module/src/capture_module_fb.cpp @@ -1,25 +1,30 @@ +#include + #include #include #include BEGIN_NAMESPACE_ASAM_CMP_CAPTURE_MODULE -CaptureModuleFb::CaptureModuleFb(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const std::shared_ptr& ethernetWrapper) - : NetworkManagerFb(CreateType(), ctx, parent, localId, ethernetWrapper) +CaptureModuleFb::CaptureModuleFb(const ModuleInfoPtr& moduleInfo,const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const std::shared_ptr& ethernetWrapper) + : NetworkManagerFb(CreateType(moduleInfo), ctx, parent, localId, ethernetWrapper) { createFbs(); } -FunctionBlockPtr CaptureModuleFb::create(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId) +FunctionBlockPtr CaptureModuleFb::create(const ModuleInfoPtr& moduleInfo, const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId) { std::shared_ptr ptr = std::make_shared(); - auto fb = createWithImplementation(ctx, parent, localId, ptr); + auto fb = createWithImplementation(moduleInfo, ctx, parent, localId, ptr); return fb; } -FunctionBlockTypePtr CaptureModuleFb::CreateType() +FunctionBlockTypePtr CaptureModuleFb::CreateType(const ModuleInfoPtr& moduleInfo) { - return FunctionBlockType("AsamCmpCaptureModule", "AsamCmpCaptureModule", "ASAM CMP Capture Module"); + auto fbType = FunctionBlockType("AsamCmpCaptureModule", "AsamCmpCaptureModule", "ASAM CMP Capture Module"); + + checkErrorInfo(fbType.asPtr(true)->setModuleInfo(moduleInfo)); + return fbType; } void CaptureModuleFb::createFbs() @@ -27,7 +32,7 @@ void CaptureModuleFb::createFbs() const StringPtr captureModuleId = "Capture"; CaptureFbInit init{ethernetWrapper, selectedEthernetDeviceName}; auto newFb = createWithImplementation( - context, functionBlocks, captureModuleId, init); + this->type.getModuleInfo(), context, functionBlocks, captureModuleId, init); newFb.setName("Capture"); functionBlocks.addItem(newFb); } diff --git a/asam_cmp_capture_module/src/interface_fb.cpp b/asam_cmp_capture_module/src/interface_fb.cpp index e502dbf..211f5da 100644 --- a/asam_cmp_capture_module/src/interface_fb.cpp +++ b/asam_cmp_capture_module/src/interface_fb.cpp @@ -9,12 +9,13 @@ BEGIN_NAMESPACE_ASAM_CMP_CAPTURE_MODULE -InterfaceFb::InterfaceFb(const ContextPtr& ctx, +InterfaceFb::InterfaceFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const asam_cmp_common_lib::InterfaceCommonInit& init, const InterfaceFbInit& internalInit) - : InterfaceCommonFb(ctx, parent, localId, init) + : InterfaceCommonFb(moduleInfo, ctx, parent, localId, init) , statusSync(internalInit.statusSync) , encoders(internalInit.encoders) , deviceStatus(internalInit.deviceStatus) diff --git a/asam_cmp_capture_module/src/stream_fb.cpp b/asam_cmp_capture_module/src/stream_fb.cpp index c973c2a..205f09f 100644 --- a/asam_cmp_capture_module/src/stream_fb.cpp +++ b/asam_cmp_capture_module/src/stream_fb.cpp @@ -24,12 +24,13 @@ constexpr std::string_view InputInvalid{"Invalid"}; constexpr std::string_view IsClientScaling{"$IsConnectedAnalogSignal == true && $IsClientPostScaling == false"}; constexpr std::string_view IsClientRange{"$IsConnectedAnalogSignal == true && $IsClientPostScaling == true"}; -StreamFb::StreamFb(const ContextPtr& ctx, +StreamFb::StreamFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const asam_cmp_common_lib::StreamCommonInit& init, const StreamInit& internalInit) - : asam_cmp_common_lib::StreamCommonFb(ctx, parent, localId, init) + : asam_cmp_common_lib::StreamCommonFb(moduleInfo, ctx, parent, localId, init) , interfaceId(internalInit.interfaceId) , streamIdsList(internalInit.streamIdsList) , statusSync(internalInit.statusSync) diff --git a/asam_cmp_capture_module/tests/CMakeLists.txt b/asam_cmp_capture_module/tests/CMakeLists.txt index 8c95177..025ddf6 100644 --- a/asam_cmp_capture_module/tests/CMakeLists.txt +++ b/asam_cmp_capture_module/tests/CMakeLists.txt @@ -1,6 +1,7 @@ set(TEST_APP test_capture_module) set(TEST_SOURCES + test_capture_module_fb.cpp test_interface.cpp test_stream.cpp test_capture_fb.cpp diff --git a/asam_cmp_capture_module/tests/test_analog_messages.cpp b/asam_cmp_capture_module/tests/test_analog_messages.cpp index cc28545..e9f0468 100644 --- a/asam_cmp_capture_module/tests/test_analog_messages.cpp +++ b/asam_cmp_capture_module/tests/test_analog_messages.cpp @@ -46,8 +46,8 @@ class AnalogMessagesTest : public testing::Test const StringPtr captureModuleId = "asam_cmp_capture_fb"; selectedDevice = "device1"; modules::asam_cmp_capture_module::CaptureFbInit init = {ethernetWrapper, selectedDevice}; - captureFb = - createWithImplementation(context, nullptr, captureModuleId, init); + captureFb = createWithImplementation( + moduleInfo, context, nullptr, captureModuleId, init); ProcedurePtr createProc = captureFb.getPropertyValue("AddInterface"); createProc(); @@ -86,6 +86,7 @@ class AnalogMessagesTest : public testing::Test StringPtr selectedDevice; ContextPtr context; + ModuleInfoPtr moduleInfo; FunctionBlockPtr captureFb; FunctionBlockPtr interfaceFb; diff --git a/asam_cmp_capture_module/tests/test_capture_fb.cpp b/asam_cmp_capture_module/tests/test_capture_fb.cpp index 2b51b5c..dfcadf8 100644 --- a/asam_cmp_capture_module/tests/test_capture_fb.cpp +++ b/asam_cmp_capture_module/tests/test_capture_fb.cpp @@ -40,9 +40,8 @@ class CaptureFbTest : public testing::Test const StringPtr captureModuleId = "asam_cmp_capture_fb"; selectedDevice = "device1"; modules::asam_cmp_capture_module::CaptureFbInit init = {ethernetWrapper, selectedDevice}; - captureFb = - createWithImplementation( - context, nullptr, captureModuleId, init); + captureFb = createWithImplementation( + moduleInfo, context, nullptr, captureModuleId, init); } protected: @@ -52,6 +51,7 @@ class CaptureFbTest : public testing::Test StringPtr selectedDevice; ContextPtr context; + ModuleInfoPtr moduleInfo; FunctionBlockPtr captureFb; std::mutex packedReceivedSync; diff --git a/asam_cmp_capture_module/tests/test_capture_module.cpp b/asam_cmp_capture_module/tests/test_capture_module.cpp new file mode 100644 index 0000000..5f3d899 --- /dev/null +++ b/asam_cmp_capture_module/tests/test_capture_module.cpp @@ -0,0 +1,63 @@ +#include +#include +#include +#include + +#include + +#include +#include +#include + + +using namespace daq; +using namespace testing; +using namespace daq::modules::asam_cmp_capture_module; + +class CaptureModuleFbTest : public::testing::Test +{ +protected: + CaptureModuleFbTest() + : logger(Logger()) + , context(Context(Scheduler(logger), logger, nullptr, nullptr)) + , moduleInfo(ModuleInfo(VersionInfo(1,2,3), "", "")) + , names(List()) + , descriptions(List()) + , ethernetWrapper(std::make_shared()) + { + auto startStub = []() {}; + auto stopStub = []() {}; + + ON_CALL(*ethernetWrapper, startCapture(_)).WillByDefault(startStub); + ON_CALL(*ethernetWrapper, stopCapture()).WillByDefault(stopStub); + ON_CALL(*ethernetWrapper, getEthernetDevicesNamesList()).WillByDefault(Return(names)); + ON_CALL(*ethernetWrapper, getEthernetDevicesDescriptionsList()).WillByDefault(Return(descriptions)); + ON_CALL(*ethernetWrapper, sendPacket(_)) + .WillByDefault(WithArgs<0>(Invoke( + [&](const std::vector& data) { } + ))); + + captureModuleFb = createWithImplementation(moduleInfo, context, nullptr, "dummy_id", ethernetWrapper); + } + +protected: + LoggerPtr logger; + ContextPtr context; + ModuleInfoPtr moduleInfo; + + ListPtr names; + ListPtr descriptions; + std::shared_ptr ethernetWrapper; + + FunctionBlockPtr captureModuleFb; +}; + +TEST_F(CaptureModuleFbTest, VersionScaling) +{ + ASSERT_EQ(captureModuleFb.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto captureFb = captureModuleFb.getFunctionBlocks().getItemAt(0); + + ASSERT_EQ(captureFb.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); +} + diff --git a/asam_cmp_capture_module/tests/test_capture_module_fb.cpp b/asam_cmp_capture_module/tests/test_capture_module_fb.cpp new file mode 100644 index 0000000..7f14ae1 --- /dev/null +++ b/asam_cmp_capture_module/tests/test_capture_module_fb.cpp @@ -0,0 +1,71 @@ +#include +#include +#include +#include + +#include + +#include +#include +#include + + +using namespace daq; +using namespace testing; +using namespace daq::modules::asam_cmp_capture_module; + +class CaptureModuleFbTest : public::testing::Test +{ +protected: + CaptureModuleFbTest() + : logger(Logger()) + , context(Context(Scheduler(logger), logger, nullptr, nullptr)) + , moduleInfo(ModuleInfo(VersionInfo(1,2,3), "", "")) + , names(List()) + , descriptions(List()) + , ethernetWrapper(std::make_shared()) + { + names.pushBack("DummyName"); + descriptions.pushBack("DummyDescription"); + auto startStub = []() {}; + auto stopStub = []() {}; + + EXPECT_CALL(*ethernetWrapper, setDevice(_)).WillRepeatedly(Return(true)); + EXPECT_CALL(*ethernetWrapper, startCapture(_)).WillRepeatedly(startStub); + EXPECT_CALL(*ethernetWrapper, stopCapture()).WillRepeatedly(stopStub); + EXPECT_CALL(*ethernetWrapper, getEthernetDevicesNamesList()).WillRepeatedly(Return(names)); + EXPECT_CALL(*ethernetWrapper, getEthernetDevicesDescriptionsList()).WillRepeatedly(Return(descriptions)); + EXPECT_CALL(*ethernetWrapper, sendPacket(_)) + .WillRepeatedly(WithArgs<0>(Invoke( + [&](const std::vector& data) { } + ))); + + captureModuleFb = createWithImplementation(moduleInfo, context, nullptr, "dummy_id", ethernetWrapper); + } + +protected: + LoggerPtr logger; + ContextPtr context; + ModuleInfoPtr moduleInfo; + + ListPtr names; + ListPtr descriptions; + std::shared_ptr ethernetWrapper; + + FunctionBlockPtr captureModuleFb; +}; + +TEST_F(CaptureModuleFbTest, VersionScaling) +{ + ASSERT_EQ(captureModuleFb.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto captureFb = captureModuleFb.getFunctionBlocks().getItemAt(0); + ASSERT_EQ(captureFb.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto itfFB = captureFb.addFunctionBlock("AsamCmpInterface"); + ASSERT_EQ(itfFB.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto streamFb = itfFB.addFunctionBlock("AsamCmpStream"); + ASSERT_EQ(itfFB.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); +} + diff --git a/asam_cmp_capture_module/tests/test_interface.cpp b/asam_cmp_capture_module/tests/test_interface.cpp index 21f5b9d..8deb9f4 100644 --- a/asam_cmp_capture_module/tests/test_interface.cpp +++ b/asam_cmp_capture_module/tests/test_interface.cpp @@ -36,8 +36,8 @@ class InterfaceFbTest: public testing::Test const StringPtr captureModuleId = "asam_cmp_capture_fb"; selectedDevice = "device1"; modules::asam_cmp_capture_module::CaptureFbInit init = {ethernetWrapper, selectedDevice}; - captureFb = - createWithImplementation(context, nullptr, captureModuleId, init); + captureFb = createWithImplementation( + moduleInfo, context, nullptr, captureModuleId, init); ProcedurePtr createProc = captureFb.getPropertyValue("AddInterface"); createProc(); @@ -51,6 +51,7 @@ class InterfaceFbTest: public testing::Test StringPtr selectedDevice; ContextPtr context; + ModuleInfoPtr moduleInfo; FunctionBlockPtr captureFb; FunctionBlockPtr interfaceFb; diff --git a/asam_cmp_capture_module/tests/test_stream.cpp b/asam_cmp_capture_module/tests/test_stream.cpp index 1ecdf1f..55489f7 100644 --- a/asam_cmp_capture_module/tests/test_stream.cpp +++ b/asam_cmp_capture_module/tests/test_stream.cpp @@ -42,8 +42,8 @@ class StreamFbTest : public testing::Test const StringPtr captureModuleId = "asam_cmp_capture_fb"; selectedDevice = "device1"; modules::asam_cmp_capture_module::CaptureFbInit init = {ethernetWrapper, selectedDevice}; - captureFb = - createWithImplementation(context, nullptr, captureModuleId, init); + captureFb = createWithImplementation( + moduleInfo, context, nullptr, captureModuleId, init); ProcedurePtr createProc = captureFb.getPropertyValue("AddInterface"); createProc(); @@ -96,6 +96,7 @@ class StreamFbTest : public testing::Test StringPtr selectedDevice; ContextPtr context; + ModuleInfoPtr moduleInfo; FunctionBlockPtr captureFb; FunctionBlockPtr interfaceFb; ChannelPtr canChannel; diff --git a/asam_cmp_common_lib/include/asam_cmp_common_lib/capture_common_fb.h b/asam_cmp_common_lib/include/asam_cmp_common_lib/capture_common_fb.h index aa5081e..6a411e9 100644 --- a/asam_cmp_common_lib/include/asam_cmp_common_lib/capture_common_fb.h +++ b/asam_cmp_common_lib/include/asam_cmp_common_lib/capture_common_fb.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -29,10 +30,13 @@ template class CaptureCommonFbImpl : public FunctionBlockImpl { public: - explicit CaptureCommonFbImpl(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId); + explicit CaptureCommonFbImpl(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, + const ComponentPtr& parent, + const StringPtr& localId); ~CaptureCommonFbImpl() override = default; - static FunctionBlockTypePtr CreateType(); + static FunctionBlockTypePtr CreateType(const ModuleInfoPtr& moduleInfo); DictPtr onGetAvailableFunctionBlockTypes() override; FunctionBlockPtr onAddFunctionBlock(const StringPtr& typeId, const PropertyObjectPtr& config) override; @@ -77,16 +81,21 @@ class CaptureCommonFbImpl : public FunctionBlockImpl; template -CaptureCommonFbImpl::CaptureCommonFbImpl(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId) - : FunctionBlockImpl(CreateType(), ctx, parent, localId) +CaptureCommonFbImpl::CaptureCommonFbImpl(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, + const ComponentPtr& parent, + const StringPtr& localId) + : FunctionBlockImpl(CreateType(moduleInfo), ctx, parent, localId) { initProperties(); } template -FunctionBlockTypePtr CaptureCommonFbImpl::CreateType() +FunctionBlockTypePtr CaptureCommonFbImpl::CreateType(const ModuleInfoPtr& moduleInfo) { - return FunctionBlockType("AsamCmpCapture", "AsamCmpCapture", "ASAM CMP Capture"); + auto fbType = FunctionBlockType("AsamCmpCapture", "AsamCmpCapture", "ASAM CMP Capture"); + checkErrorInfo(fbType.asPtr(true)->setModuleInfo(moduleInfo)); + return fbType; } template @@ -156,7 +165,7 @@ FunctionBlockPtr CaptureCommonFbImpl::addInterfaceWithParams(uint StringPtr fbName = fmt::format("Interface {}", createdInterfaces); StringPtr fbId = fmt::format("Interface_{}", createdInterfaces++); - auto newFb = createWithImplementation(this->context, this->functionBlocks, fbId, init, std::forward(params)...); + auto newFb = createWithImplementation(this->type.getModuleInfo(), this->context, this->functionBlocks, fbId, init, std::forward(params)...); newFb.setName(fbName); interfaceIdManager.addId(interfaceId); this->addNestedFunctionBlock(newFb); @@ -253,14 +262,14 @@ void CaptureCommonFbImpl::propertyChangedIfNotUpdating() template DictPtr CaptureCommonFbImpl::onGetAvailableFunctionBlockTypes() { - auto type = InterfaceCommonFb::CreateType(); - return Dict({{type.getId(), type}}); + auto itfType = InterfaceCommonFb::CreateType(this->type.getModuleInfo()); + return Dict({{itfType.getId(), itfType}}); } template FunctionBlockPtr CaptureCommonFbImpl::onAddFunctionBlock(const StringPtr& typeId, const PropertyObjectPtr& config) { - if (typeId == InterfaceCommonFb::CreateType().getId()) + if (typeId == InterfaceCommonFb::CreateType(type.getModuleInfo()).getId()) { addInterface(); auto interfaceFb = this->functionBlocks.getItems().getItemAt(this->functionBlocks.getItems().getCount() - 1); diff --git a/asam_cmp_common_lib/include/asam_cmp_common_lib/interface_common_fb.h b/asam_cmp_common_lib/include/asam_cmp_common_lib/interface_common_fb.h index e249c66..5ba08b3 100644 --- a/asam_cmp_common_lib/include/asam_cmp_common_lib/interface_common_fb.h +++ b/asam_cmp_common_lib/include/asam_cmp_common_lib/interface_common_fb.h @@ -37,12 +37,13 @@ class InterfaceCommonFb : public FunctionBlock using PayloadType = ASAM::CMP::PayloadType; public: - explicit InterfaceCommonFb(const ContextPtr& ctx, + explicit InterfaceCommonFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const InterfaceCommonInit& init); ~InterfaceCommonFb() override = default; - static FunctionBlockTypePtr CreateType(); + static FunctionBlockTypePtr CreateType(const ModuleInfoPtr& moduleInfo); DictPtr onGetAvailableFunctionBlockTypes() override; FunctionBlockPtr onAddFunctionBlock(const StringPtr& typeId, const PropertyObjectPtr& config) override; @@ -92,7 +93,7 @@ FunctionBlockPtr InterfaceCommonFb::addStreamWithParams(uint8_t streamId, Params StringPtr fbName = fmt::format("Stream {}", createdStreams); StringPtr fbId = fmt::format("Stream_{}", createdStreams++); - auto newFb = createWithImplementation(context, functionBlocks, fbId, init, std::forward(params)...); + auto newFb = createWithImplementation(this->type.getModuleInfo(), context, functionBlocks, fbId, init, std::forward(params)...); newFb.setName(fbName); streamIdManager.addId(streamId); this->addNestedFunctionBlock(newFb); diff --git a/asam_cmp_common_lib/include/asam_cmp_common_lib/stream_common_fb_impl.h b/asam_cmp_common_lib/include/asam_cmp_common_lib/stream_common_fb_impl.h index afd2cbb..1acb587 100644 --- a/asam_cmp_common_lib/include/asam_cmp_common_lib/stream_common_fb_impl.h +++ b/asam_cmp_common_lib/include/asam_cmp_common_lib/stream_common_fb_impl.h @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -42,9 +43,13 @@ class StreamCommonFbImpl : public FunctionBlockImpl; template -StreamCommonFbImpl::StreamCommonFbImpl(const ContextPtr& ctx, +StreamCommonFbImpl::StreamCommonFbImpl(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const StreamCommonInit& init) - : FunctionBlockImpl(CreateType(), ctx, parent, localId) + : FunctionBlockImpl(CreateType(moduleInfo), ctx, parent, localId) , streamId(init.id) , payloadType(init.payloadType) , streamIdManager(init.streamIdManager) @@ -78,9 +85,11 @@ StreamCommonFbImpl::StreamCommonFbImpl(const ContextPtr& ctx, } template -FunctionBlockTypePtr StreamCommonFbImpl::CreateType() +FunctionBlockTypePtr StreamCommonFbImpl::CreateType(const ModuleInfoPtr& moduleInfo) { - return FunctionBlockType("AsamCmpStream", "AsamCmpStream", "ASAM CMP Stream"); + auto fbType = FunctionBlockType("AsamCmpStream", "AsamCmpStream", "ASAM CMP Stream"); + checkErrorInfo(fbType.asPtr(true)->setModuleInfo(moduleInfo)); + return fbType; } template diff --git a/asam_cmp_common_lib/src/interface_common_fb.cpp b/asam_cmp_common_lib/src/interface_common_fb.cpp index 92937b2..3eb4f86 100644 --- a/asam_cmp_common_lib/src/interface_common_fb.cpp +++ b/asam_cmp_common_lib/src/interface_common_fb.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -10,11 +11,12 @@ BEGIN_NAMESPACE_ASAM_CMP_COMMON using ASAM::CMP::PayloadType; -InterfaceCommonFb::InterfaceCommonFb(const ContextPtr& ctx, +InterfaceCommonFb::InterfaceCommonFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const InterfaceCommonInit& init) - : FunctionBlock(CreateType(), ctx, parent, localId) + : FunctionBlock(CreateType(moduleInfo), ctx, parent, localId) , interfaceIdManager(init.interfaceIdManager) , interfaceId(init.id) , payloadType(0) @@ -25,9 +27,11 @@ InterfaceCommonFb::InterfaceCommonFb(const ContextPtr& ctx, initProperties(); } -FunctionBlockTypePtr InterfaceCommonFb::CreateType() +FunctionBlockTypePtr InterfaceCommonFb::CreateType(const ModuleInfoPtr& moduleInfo) { - return FunctionBlockType("AsamCmpInterface", "AsamCmpInterface", "ASAM CMP Interface"); + auto fbType = FunctionBlockType("AsamCmpInterface", "AsamCmpInterface", "ASAM CMP Interface"); + checkErrorInfo(fbType.asPtr(true)->setModuleInfo(moduleInfo)); + return fbType; } void InterfaceCommonFb::initProperties() @@ -155,13 +159,13 @@ void InterfaceCommonFb::propertyChangedIfNotUpdating() DictPtr InterfaceCommonFb::onGetAvailableFunctionBlockTypes() { - auto type = StreamCommonFb::CreateType(); - return Dict({{type.getId(), type}}); + auto streamType = StreamCommonFb::CreateType(this->type.getModuleInfo()); + return Dict({ {streamType.getId(), streamType} }); } FunctionBlockPtr InterfaceCommonFb::onAddFunctionBlock(const StringPtr& typeId, const PropertyObjectPtr& config) { - if (typeId == StreamCommonFb::CreateType().getId()) + if (typeId == StreamCommonFb::CreateType(this->type.getModuleInfo()).getId()) { addStream(); auto streamFb = this->functionBlocks.getItems().getItemAt(this->functionBlocks.getItems().getCount() - 1); diff --git a/asam_cmp_data_sink/include/asam_cmp_data_sink/capture_fb.h b/asam_cmp_data_sink/include/asam_cmp_data_sink/capture_fb.h index c7d4d91..b7e1c9e 100644 --- a/asam_cmp_data_sink/include/asam_cmp_data_sink/capture_fb.h +++ b/asam_cmp_data_sink/include/asam_cmp_data_sink/capture_fb.h @@ -30,12 +30,14 @@ BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE class CaptureFb final : public asam_cmp_common_lib::CaptureCommonFbImpl { public: - explicit CaptureFb(const ContextPtr& ctx, + explicit CaptureFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, DataPacketsPublisher& publisher, CapturePacketsPublisher& capturePacketsPublisher); - explicit CaptureFb(const ContextPtr& ctx, + explicit CaptureFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, DataPacketsPublisher& publisher, diff --git a/asam_cmp_data_sink/include/asam_cmp_data_sink/data_sink_fb.h b/asam_cmp_data_sink/include/asam_cmp_data_sink/data_sink_fb.h index fa02b8b..cd96d57 100644 --- a/asam_cmp_data_sink/include/asam_cmp_data_sink/data_sink_fb.h +++ b/asam_cmp_data_sink/include/asam_cmp_data_sink/data_sink_fb.h @@ -28,7 +28,8 @@ BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE class DataSinkFb final : public FunctionBlock { public: - explicit DataSinkFb(const ContextPtr& ctx, + explicit DataSinkFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, StatusMt statusMt, @@ -36,7 +37,7 @@ class DataSinkFb final : public FunctionBlock CapturePacketsPublisher& capturePacketsPublisher); ~DataSinkFb() override = default; - static FunctionBlockTypePtr CreateType(); + static FunctionBlockTypePtr CreateType(const ModuleInfoPtr& moduleInfo); DictPtr onGetAvailableFunctionBlockTypes() override; FunctionBlockPtr onAddFunctionBlock(const StringPtr& typeId, const PropertyObjectPtr& config) override; diff --git a/asam_cmp_data_sink/include/asam_cmp_data_sink/data_sink_module_fb.h b/asam_cmp_data_sink/include/asam_cmp_data_sink/data_sink_module_fb.h index 4f93475..f16668a 100644 --- a/asam_cmp_data_sink/include/asam_cmp_data_sink/data_sink_module_fb.h +++ b/asam_cmp_data_sink/include/asam_cmp_data_sink/data_sink_module_fb.h @@ -28,14 +28,15 @@ BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE class DataSinkModuleFb final : public asam_cmp_common_lib::NetworkManagerFb { public: - explicit DataSinkModuleFb(const ContextPtr& ctx, + explicit DataSinkModuleFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const std::shared_ptr& ethernetWrapper); ~DataSinkModuleFb() override; - static FunctionBlockTypePtr CreateType(); - static FunctionBlockPtr create(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId); + static FunctionBlockTypePtr CreateType(const ModuleInfoPtr& moduleInfo); + static FunctionBlockPtr create(const ModuleInfoPtr& moduleInfo, const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId); ErrCode INTERFACE_FUNC remove() override; private: diff --git a/asam_cmp_data_sink/include/asam_cmp_data_sink/interface_fb.h b/asam_cmp_data_sink/include/asam_cmp_data_sink/interface_fb.h index a934ceb..14c6620 100644 --- a/asam_cmp_data_sink/include/asam_cmp_data_sink/interface_fb.h +++ b/asam_cmp_data_sink/include/asam_cmp_data_sink/interface_fb.h @@ -25,13 +25,15 @@ BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE class InterfaceFb final : public asam_cmp_common_lib::InterfaceCommonFb { public: - explicit InterfaceFb(const ContextPtr& ctx, + explicit InterfaceFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const asam_cmp_common_lib::InterfaceCommonInit& init, const uint16_t& deviceId, DataPacketsPublisher& publisher); - explicit InterfaceFb(const ContextPtr& ctx, + explicit InterfaceFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const asam_cmp_common_lib::InterfaceCommonInit& init, diff --git a/asam_cmp_data_sink/include/asam_cmp_data_sink/status_fb_impl.h b/asam_cmp_data_sink/include/asam_cmp_data_sink/status_fb_impl.h index 77359ba..8f7593e 100644 --- a/asam_cmp_data_sink/include/asam_cmp_data_sink/status_fb_impl.h +++ b/asam_cmp_data_sink/include/asam_cmp_data_sink/status_fb_impl.h @@ -26,10 +26,10 @@ BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE class StatusFbImpl final : public FunctionBlockImpl { public: - explicit StatusFbImpl(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId); + explicit StatusFbImpl(const ModuleInfoPtr& moduleInfo, const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId); ~StatusFbImpl() override = default; - static FunctionBlockTypePtr CreateType(); + static FunctionBlockTypePtr CreateType(const ModuleInfoPtr& moduleInfo); public: void processStatusPacket(const std::shared_ptr& packet) override; diff --git a/asam_cmp_data_sink/include/asam_cmp_data_sink/stream_fb.h b/asam_cmp_data_sink/include/asam_cmp_data_sink/stream_fb.h index 5a01afe..656b0f5 100644 --- a/asam_cmp_data_sink/include/asam_cmp_data_sink/stream_fb.h +++ b/asam_cmp_data_sink/include/asam_cmp_data_sink/stream_fb.h @@ -56,7 +56,8 @@ class StreamFb final : public asam_cmp_common_lib::StreamCommonFbImpl(true)->setModuleInfo(moduleInfo)); + return fbType; } void DataSinkFb::addCaptureModuleFromStatus(int index) @@ -32,7 +35,7 @@ void DataSinkFb::addCaptureModuleFromStatus(int index) auto deviceStatus = status.getDeviceStatus(index); const StringPtr fbId = getFbId(captureModuleId); const auto newFb = createWithImplementation( - context, functionBlocks, fbId, dataPacketsPublisher, capturePacketsPublisher, std::move(deviceStatus)); + this->type.getModuleInfo(), context, functionBlocks, fbId, dataPacketsPublisher, capturePacketsPublisher, std::move(deviceStatus)); this->addNestedFunctionBlock(newFb); ++captureModuleId; } @@ -42,8 +45,8 @@ void DataSinkFb::addCaptureModuleEmpty() auto lock = this->getRecursiveConfigLock(); const StringPtr fbId = getFbId(captureModuleId); - const auto newFb = - createWithImplementation(context, functionBlocks, fbId, dataPacketsPublisher, capturePacketsPublisher); + const auto newFb = createWithImplementation( + this->type.getModuleInfo(), context, functionBlocks, fbId, dataPacketsPublisher, capturePacketsPublisher); this->addNestedFunctionBlock(newFb); capturePacketsPublisher.subscribe(newFb.getPropertyValue("DeviceId"), newFb.as(true)); ++captureModuleId; @@ -102,13 +105,13 @@ void DataSinkFb::initProperties() DictPtr DataSinkFb::onGetAvailableFunctionBlockTypes() { - auto type = CaptureFb::CreateType(); - return Dict({{type.getId(), type}}); + auto captureType = CaptureFb::CreateType(this->type.getModuleInfo()); + return Dict({{captureType.getId(), captureType}}); } FunctionBlockPtr DataSinkFb::onAddFunctionBlock(const StringPtr& typeId, const PropertyObjectPtr& config) { - if (typeId == CaptureFb::CreateType().getId()) + if (typeId == CaptureFb::CreateType(this->type.getModuleInfo()).getId()) { addCaptureModuleEmpty(); auto captureFb = this->functionBlocks.getItems().getItemAt(this->functionBlocks.getItems().getCount() - 1); diff --git a/asam_cmp_data_sink/src/data_sink_module.cpp b/asam_cmp_data_sink/src/data_sink_module.cpp index b1cf4c0..2773c02 100644 --- a/asam_cmp_data_sink/src/data_sink_module.cpp +++ b/asam_cmp_data_sink/src/data_sink_module.cpp @@ -18,20 +18,20 @@ DictPtr DataSinkModule::onGetAvailableFunctionBlock { auto types = Dict(); - auto typeStatistics = DataSinkModuleFb::CreateType(); + auto typeStatistics = DataSinkModuleFb::CreateType(moduleInfo); types.set(typeStatistics.getId(), typeStatistics); return types; } FunctionBlockPtr DataSinkModule::onCreateFunctionBlock(const StringPtr& id, - const ComponentPtr& parent, - const StringPtr& localId, - const PropertyObjectPtr& config) + const ComponentPtr& parent, + const StringPtr& localId, + const PropertyObjectPtr& config) { - if (id == DataSinkModuleFb::CreateType().getId()) + if (id == DataSinkModuleFb::CreateType(moduleInfo).getId()) { - FunctionBlockPtr fb = DataSinkModuleFb::create(context, parent, localId); + FunctionBlockPtr fb = DataSinkModuleFb::create(moduleInfo, context, parent, localId); return fb; } diff --git a/asam_cmp_data_sink/src/data_sink_module_fb.cpp b/asam_cmp_data_sink/src/data_sink_module_fb.cpp index 46f5d5d..a52ca48 100644 --- a/asam_cmp_data_sink/src/data_sink_module_fb.cpp +++ b/asam_cmp_data_sink/src/data_sink_module_fb.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -14,20 +15,24 @@ BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE -DataSinkModuleFb::DataSinkModuleFb(const ContextPtr& ctx, +DataSinkModuleFb::DataSinkModuleFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const std::shared_ptr& ethernetWrapper) - : asam_cmp_common_lib::NetworkManagerFb(CreateType(), ctx, parent, localId, ethernetWrapper) + : asam_cmp_common_lib::NetworkManagerFb(CreateType(moduleInfo), ctx, parent, localId, ethernetWrapper) { createFbs(); startCapture(); } -FunctionBlockPtr DataSinkModuleFb::create(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId) +FunctionBlockPtr DataSinkModuleFb::create(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, + const ComponentPtr& parent, + const StringPtr& localId) { std::shared_ptr ptr = std::make_shared(); - auto fb = createWithImplementation(ctx, parent, localId, ptr); + auto fb = createWithImplementation(moduleInfo, ctx, parent, localId, ptr); return fb; } @@ -49,21 +54,24 @@ void DataSinkModuleFb::networkAdapterChangedInternal() startCapture(); } -FunctionBlockTypePtr DataSinkModuleFb::CreateType() +FunctionBlockTypePtr DataSinkModuleFb::CreateType(const ModuleInfoPtr& moduleInfo) { - return FunctionBlockType("AsamCmpDataSinkModule", "AsamCmpDataSinkModule", "ASAM CMP Data Sink Module"); + auto fbType = FunctionBlockType("AsamCmpDataSinkModule", "AsamCmpDataSinkModule", "ASAM CMP Data Sink Module"); + checkErrorInfo(fbType.asPtr(true)->setModuleInfo(moduleInfo)); + return fbType; } void DataSinkModuleFb::createFbs() { const StringPtr statusId = "Status"; - auto newFb = createWithImplementation(context, functionBlocks, statusId); + auto newFb = createWithImplementation( + this->type.getModuleInfo(), context, functionBlocks, statusId); functionBlocks.addItem(newFb); auto statusMt = functionBlocks.getItems()[0].asPtr(true)->getStatusMt(); const StringPtr dataSinkId = "DataSink"; newFb = createWithImplementation( - context, functionBlocks, dataSinkId, statusMt, dataPacketsPublisher, capturePacketsPublisher); + this->type.getModuleInfo(), context, functionBlocks, dataSinkId, statusMt, dataPacketsPublisher, capturePacketsPublisher); functionBlocks.addItem(newFb); } diff --git a/asam_cmp_data_sink/src/interface_fb.cpp b/asam_cmp_data_sink/src/interface_fb.cpp index 886df82..033d88d 100644 --- a/asam_cmp_data_sink/src/interface_fb.cpp +++ b/asam_cmp_data_sink/src/interface_fb.cpp @@ -5,26 +5,28 @@ BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE -InterfaceFb::InterfaceFb(const ContextPtr& ctx, +InterfaceFb::InterfaceFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const asam_cmp_common_lib::InterfaceCommonInit& init, const uint16_t& deviceId, DataPacketsPublisher& publisher) - : InterfaceCommonFb(ctx, parent, localId, init) + : InterfaceCommonFb(moduleInfo, ctx, parent, localId, init) , publisher(publisher) , deviceId(deviceId) { } -InterfaceFb::InterfaceFb(const ContextPtr& ctx, +InterfaceFb::InterfaceFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const asam_cmp_common_lib::InterfaceCommonInit& init, const uint16_t& deviceId, DataPacketsPublisher& publisher, ASAM::CMP::InterfaceStatus&& ifStatus) - : InterfaceCommonFb(ctx, parent, localId, init) + : InterfaceCommonFb(moduleInfo, ctx, parent, localId, init) , interfaceStatus(std::move(ifStatus)) , publisher(publisher) , deviceId(deviceId) diff --git a/asam_cmp_data_sink/src/status_fb_impl.cpp b/asam_cmp_data_sink/src/status_fb_impl.cpp index 473f8f6..e375702 100644 --- a/asam_cmp_data_sink/src/status_fb_impl.cpp +++ b/asam_cmp_data_sink/src/status_fb_impl.cpp @@ -1,19 +1,24 @@ #include #include - +#include #include BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE -StatusFbImpl::StatusFbImpl(const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId) - : FunctionBlockImpl(CreateType(), ctx, parent, localId) +StatusFbImpl::StatusFbImpl(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, + const ComponentPtr& parent, + const StringPtr& localId) + : FunctionBlockImpl(CreateType(moduleInfo), ctx, parent, localId) { initProperties(); } -FunctionBlockTypePtr StatusFbImpl::CreateType() +FunctionBlockTypePtr StatusFbImpl::CreateType(const ModuleInfoPtr& moduleInfo) { - return FunctionBlockType("AsamCmpStatus", "AsamCmpStatus", "ASAM CMP Status"); + auto fbType = FunctionBlockType("AsamCmpStatus", "AsamCmpStatus", "ASAM CMP Status"); + checkErrorInfo(fbType.asPtr(true)->setModuleInfo(moduleInfo)); + return fbType; } void StatusFbImpl::processStatusPacket(const std::shared_ptr& packet) diff --git a/asam_cmp_data_sink/src/stream_fb.cpp b/asam_cmp_data_sink/src/stream_fb.cpp index f4a3377..77bb202 100644 --- a/asam_cmp_data_sink/src/stream_fb.cpp +++ b/asam_cmp_data_sink/src/stream_fb.cpp @@ -10,14 +10,15 @@ BEGIN_NAMESPACE_ASAM_CMP_DATA_SINK_MODULE -StreamFb::StreamFb(const ContextPtr& ctx, +StreamFb::StreamFb(const ModuleInfoPtr& moduleInfo, + const ContextPtr& ctx, const ComponentPtr& parent, const StringPtr& localId, const asam_cmp_common_lib::StreamCommonInit& init, DataPacketsPublisher& publisher, const uint16_t& deviceId, const uint32_t& interfaceId) - : StreamCommonFbImpl(ctx, parent, localId, init) + : StreamCommonFbImpl(moduleInfo, ctx, parent, localId, init) , deviceId(deviceId) , interfaceId(interfaceId) , publisher(publisher) diff --git a/asam_cmp_data_sink/tests/test_capture_fb.cpp b/asam_cmp_data_sink/tests/test_capture_fb.cpp index 27d5c12..ed07047 100644 --- a/asam_cmp_data_sink/tests/test_capture_fb.cpp +++ b/asam_cmp_data_sink/tests/test_capture_fb.cpp @@ -17,12 +17,19 @@ class CaptureFbTest : public testing::Test { auto logger = Logger(); captureFb = createWithImplementation( - Context(Scheduler(logger), logger, nullptr, nullptr, nullptr), nullptr, "capture_module_0", publisher, capturePacketsPublisher); + moduleInfo, + Context(Scheduler(logger), logger, nullptr, nullptr, nullptr), + nullptr, + "capture_module_0", + publisher, + capturePacketsPublisher + ); } protected: modules::asam_cmp_data_sink_module::DataPacketsPublisher publisher; modules::asam_cmp_data_sink_module::CapturePacketsPublisher capturePacketsPublisher; + ModuleInfoPtr moduleInfo{}; FunctionBlockPtr captureFb; }; @@ -44,7 +51,10 @@ TEST_F(CaptureFbTest, AvailableFunctionBlockTypes) auto availableTypes = captureFb.getAvailableFunctionBlockTypes(); ASSERT_EQ(availableTypes.getCount(), 1u); ASSERT_TRUE(availableTypes.hasKey("AsamCmpInterface")); - ASSERT_EQ(availableTypes.get("AsamCmpInterface"), asam_cmp_common_lib::InterfaceCommonFb::CreateType()); + ASSERT_EQ( + availableTypes.get("AsamCmpInterface"), + asam_cmp_common_lib::InterfaceCommonFb::CreateType(captureFb.getFunctionBlockType().getModuleInfo()) + ); } TEST_F(CaptureFbTest, OnAddFunctionBlocks) diff --git a/asam_cmp_data_sink/tests/test_data_sink_fb.cpp b/asam_cmp_data_sink/tests/test_data_sink_fb.cpp index 1ce522a..6ac8b0e 100644 --- a/asam_cmp_data_sink/tests/test_data_sink_fb.cpp +++ b/asam_cmp_data_sink/tests/test_data_sink_fb.cpp @@ -24,11 +24,12 @@ class DataSinkFbTest : public ::testing::Test auto logger = Logger(); context = Context(Scheduler(logger), logger, TypeManager(), nullptr); statusFb = - createWithImplementation(context, nullptr, "asam_cmp_status"); + createWithImplementation( + moduleInfo, context, nullptr, "asam_cmp_status"); statusHandler = statusFb.asPtrOrNull(); funcBlock = createWithImplementation( - context, nullptr, "asam_cmp_data_sink", statusHandler->getStatusMt(), publisher, capturePacketPublisher); + moduleInfo, context, nullptr, "asam_cmp_data_sink", statusHandler->getStatusMt(), publisher, capturePacketPublisher); CaptureModulePayload cmPayload; std::vector vendorData = std::vector(begin(vendorDataAsString), end(vendorDataAsString)); @@ -60,6 +61,7 @@ class DataSinkFbTest : public ::testing::Test modules::asam_cmp_data_sink_module::DataPacketsPublisher publisher; modules::asam_cmp_data_sink_module::CapturePacketsPublisher capturePacketPublisher; ContextPtr context; + ModuleInfoPtr moduleInfo{}; FunctionBlockPtr funcBlock; FunctionBlockPtr statusFb; IStatusHandler* statusHandler; @@ -87,7 +89,10 @@ TEST_F(DataSinkFbTest, AvailableFunctionBlockTypes) auto availableTypes = funcBlock.getAvailableFunctionBlockTypes(); ASSERT_EQ(availableTypes.getCount(), 1u); ASSERT_TRUE(availableTypes.hasKey("AsamCmpCapture")); - ASSERT_EQ(availableTypes.get("AsamCmpCapture"), CaptureFb::CreateType()); + ASSERT_EQ( + availableTypes.get("AsamCmpCapture"), + CaptureFb::CreateType(funcBlock.getFunctionBlockType().getModuleInfo()) + ); } TEST_F(DataSinkFbTest, OnAddFunctionBlocks) diff --git a/asam_cmp_data_sink/tests/test_data_sink_module_fb.cpp b/asam_cmp_data_sink/tests/test_data_sink_module_fb.cpp index 5c8c4bd..1cb9af6 100644 --- a/asam_cmp_data_sink/tests/test_data_sink_module_fb.cpp +++ b/asam_cmp_data_sink/tests/test_data_sink_module_fb.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -53,8 +54,9 @@ class DataSinkModuleFbTest : public ::testing::Test auto logger = Logger(); context = Context(Scheduler(logger), logger, TypeManager(), nullptr); + moduleInfo = ModuleInfo(VersionInfo(1, 2, 3), "", ""); funcBlock = createWithImplementation( - context, nullptr, "id", ethernetWrapper); + moduleInfo, context, nullptr, "id", ethernetWrapper); } protected: @@ -69,6 +71,7 @@ class DataSinkModuleFbTest : public ::testing::Test ListPtr names; ListPtr descriptions; + ModuleInfoPtr moduleInfo{}; ContextPtr context; FunctionBlockPtr funcBlock; @@ -90,6 +93,26 @@ TEST_F(DataSinkModuleFbTest, FunctionBlockType) ASSERT_EQ(type.getDescription(), "ASAM CMP Data Sink Module"); } +TEST_F(DataSinkModuleFbTest, VersionScaling) +{ + ASSERT_EQ(funcBlock.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto statusFb = funcBlock.getFunctionBlocks().getItemAt(0); + ASSERT_EQ(statusFb.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto datasinkFb = funcBlock.getFunctionBlocks().getItemAt(1); + ASSERT_EQ(datasinkFb.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto captureFb = datasinkFb.addFunctionBlock("AsamCmpCapture"); + ASSERT_EQ(captureFb.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto itfFB = captureFb.addFunctionBlock("AsamCmpInterface"); + ASSERT_EQ(itfFB.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); + + auto streamFb = itfFB.addFunctionBlock("AsamCmpStream"); + ASSERT_EQ(itfFB.getFunctionBlockType().getModuleInfo().getVersionInfo(), moduleInfo.getVersionInfo()); +} + template void DataSinkModuleFbTest::testProperty(const StringPtr& name, T newValue, bool success) { @@ -111,7 +134,7 @@ TEST_F(DataSinkModuleFbTest, NetworkAdaptersProperties) TEST_F(DataSinkModuleFbTest, ChangeNetworkAdapter) { auto propList = funcBlock.getProperty(networkAdapters.data()).getSelectionValues().asPtrOrNull(); - ASSERT_GT(propList.getCount(), 1); + ASSERT_GT(propList.getCount(), daq::SizeT(1)); constexpr int newVal = 1; testProperty(networkAdapters.data(), newVal); } @@ -124,7 +147,7 @@ TEST_F(DataSinkModuleFbTest, ChangeNetworkAdapterSequenceCall) EXPECT_CALL(*ethernetWrapper, setDevice(_)).Times(Exactly(1)).WillRepeatedly(Return(true)); } - ASSERT_GT(descriptions.getCount(), 1); + ASSERT_GT(descriptions.getCount(), daq::SizeT(1)); constexpr int newVal = 1; testProperty(networkAdapters.data(), newVal); } diff --git a/asam_cmp_data_sink/tests/test_interface_fb.cpp b/asam_cmp_data_sink/tests/test_interface_fb.cpp index e9c11a6..87e4f9b 100644 --- a/asam_cmp_data_sink/tests/test_interface_fb.cpp +++ b/asam_cmp_data_sink/tests/test_interface_fb.cpp @@ -20,13 +20,14 @@ class InterfaceFbTest : public ::testing::Test { auto logger = Logger(); captureFb = createWithImplementation( - Context(Scheduler(logger), logger, TypeManager(), nullptr), nullptr, "capture_module_0", publisher, capturePacketsPublisher); + moduleInfo, Context(Scheduler(logger), logger, TypeManager(), nullptr), nullptr, "capture_module_0", publisher, capturePacketsPublisher); captureFb.getPropertyValue("AddInterface").execute(); interfaceFb = captureFb.getFunctionBlocks().getItemAt(0); } protected: + ModuleInfoPtr moduleInfo{}; FunctionBlockPtr captureFb; FunctionBlockPtr interfaceFb; modules::asam_cmp_data_sink_module::DataPacketsPublisher publisher; @@ -51,7 +52,10 @@ TEST_F(InterfaceFbTest, AvailableFunctionBlockTypes) auto availableTypes = interfaceFb.getAvailableFunctionBlockTypes(); ASSERT_EQ(availableTypes.getCount(), 1u); ASSERT_TRUE(availableTypes.hasKey("AsamCmpStream")); - ASSERT_EQ(availableTypes.get("AsamCmpStream"), modules::asam_cmp_data_sink_module::StreamFb::CreateType()); + ASSERT_EQ( + availableTypes.get("AsamCmpStream"), + modules::asam_cmp_data_sink_module::StreamFb::CreateType(interfaceFb.getFunctionBlockType().getModuleInfo()) + ); } TEST_F(InterfaceFbTest, OnAddFunctionBlocks) diff --git a/asam_cmp_data_sink/tests/test_status_fb.cpp b/asam_cmp_data_sink/tests/test_status_fb.cpp index 3e24387..ffa6d59 100644 --- a/asam_cmp_data_sink/tests/test_status_fb.cpp +++ b/asam_cmp_data_sink/tests/test_status_fb.cpp @@ -26,7 +26,7 @@ class StatusFbTest : public ::testing::Test { auto logger = Logger(); funcBlock = createWithImplementation( - Context(Scheduler(logger), logger, TypeManager(), nullptr), nullptr, "asam_cmp_status"); + moduleInfo, Context(Scheduler(logger), logger, TypeManager(), nullptr), nullptr, "asam_cmp_status"); statusMt = std::make_unique(funcBlock.asPtr(true)->getStatusMt()); cmPayload.setData(deviceDescr, "", "", "", {}); @@ -42,6 +42,7 @@ class StatusFbTest : public ::testing::Test bool checkDescription(const StringPtr& description, std::string_view deviceDescr, const uint16_t deviceId, size_t interfacesCount); protected: + ModuleInfoPtr moduleInfo{}; FunctionBlockPtr funcBlock; CaptureModulePayload cmPayload; diff --git a/asam_cmp_data_sink/tests/test_stream_fb.cpp b/asam_cmp_data_sink/tests/test_stream_fb.cpp index 85174d1..e14dba9 100644 --- a/asam_cmp_data_sink/tests/test_stream_fb.cpp +++ b/asam_cmp_data_sink/tests/test_stream_fb.cpp @@ -57,7 +57,7 @@ class StreamFbTest : public testing::Test { auto logger = Logger(); captureFb = createWithImplementation( - Context(Scheduler(logger), logger, TypeManager(), nullptr), nullptr, "capture_module_0", publisher, capturePacketsPublisher); + moduleInfo, Context(Scheduler(logger), logger, TypeManager(), nullptr), nullptr, "capture_module_0", publisher, capturePacketsPublisher); captureFb.getPropertyValue("AddInterface").execute(); interfaceFb = captureFb.getFunctionBlocks().getItemAt(0); @@ -80,6 +80,7 @@ class StreamFbTest : public testing::Test static constexpr int ethernetPayloadType = 4; protected: + ModuleInfoPtr moduleInfo{}; DataPacketsPublisher publisher; CapturePacketsPublisher capturePacketsPublisher; FunctionBlockPtr captureFb;