diff --git a/modules/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_fb.h b/modules/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_fb.h index cd2dd3b..68b92c9 100644 --- a/modules/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_fb.h +++ b/modules/asam_cmp_capture_module/include/asam_cmp_capture_module/capture_fb.h @@ -82,6 +82,7 @@ class CaptureFb final : public daq::asam_cmp_common_lib::CaptureCommonFb std::shared_ptr ethernetWrapper; const StringPtr& selectedEthernetDeviceName; DevicePtr parentDevice; + bool useParentDomain; }; END_NAMESPACE_ASAM_CMP_CAPTURE_MODULE diff --git a/modules/asam_cmp_capture_module/src/capture_fb.cpp b/modules/asam_cmp_capture_module/src/capture_fb.cpp index 11db951..430a9ef 100644 --- a/modules/asam_cmp_capture_module/src/capture_fb.cpp +++ b/modules/asam_cmp_capture_module/src/capture_fb.cpp @@ -21,6 +21,7 @@ CaptureFb::CaptureFb(const ModuleInfoPtr& moduleInfo, , ethernetWrapper(init.ethernetWrapper) , selectedEthernetDeviceName(init.selectedDeviceName) , parentDevice(FindParentDevice(parent)) + , useParentDomain(parentDevice.assigned() && parentDevice.getDomain().assigned()) { initStatusPacket(); initProperties(); @@ -110,20 +111,27 @@ ASAM::CMP::DataContext CaptureFb::createEncoderDataContext() const uint64_t CaptureFb::getCurrentSystemTime() { - if (!parentDevice.assigned()) + if (!useParentDomain) return std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); DeviceDomainPtr domain = parentDevice.getDomain(); + const auto domainResolution = domain.getTickResolution(); return static_cast(parentDevice.getTicksSinceOrigin()) * (SimplifiedRatioPtr(domainResolution) * NanoTicksPerSec); } DevicePtr CaptureFb::FindParentDevice(const ComponentPtr& parent) { - auto parentDevice = parent; - while (parentDevice.assigned() && !parentDevice.asPtrOrNull().assigned()) - parentDevice = parentDevice.getParent(); + DevicePtr parentDevice = nullptr; + auto parentComponent = parent.asPtrOrNull(); + while (parentComponent.assigned()) + { + auto tempDevice = parentComponent.asPtrOrNull(); + if (tempDevice.assigned()) + parentDevice = std::move(tempDevice); + parentComponent = parentComponent.getParent(); + } return parentDevice; }