diff --git a/Modules/include/PeriodicTrigger.h b/Modules/include/PeriodicTrigger.h index 631c3faca62584f0fb8493d53117bbffb4e98de1..84f6dca8e3d4508198a88b4c9037ecd896ec8e9c 100644 --- a/Modules/include/PeriodicTrigger.h +++ b/Modules/include/PeriodicTrigger.h @@ -16,26 +16,35 @@ namespace ChimeraTK { /** Constructor. In addition to the usual arguments of an ApplicationModule, the default timeout value is specified. * This value is used as a timeout if the timeout value is set to 0. The timeout value is in milliseconds. */ PeriodicTrigger(EntityOwner *owner, const std::string &name, const std::string &description, - const uint32_t defaultTimeout=1000, bool eliminateHierarchy=false, const std::unordered_set<std::string> &tags={}) + const uint32_t defaultPeriod=1000, bool eliminateHierarchy=false, const std::unordered_set<std::string> &tags={}) : ApplicationModule(owner, name, description, eliminateHierarchy, tags), - defaultTimeout_(defaultTimeout) + defaultPeriod_(defaultPeriod) {} - ScalarPollInput<uint32_t> timeout{this, "timeout", "ms", "Timeout in milliseconds. The trigger is sent once per the specified duration."}; + ScalarPollInput<uint32_t> period{this, "period", "ms", "period in milliseconds. The trigger is sent once per the specified duration."}; ScalarOutput<uint64_t> tick{this, "tick", "", "Timer tick. Counts the trigger number starting from 0."}; + void sendTrigger() { + ++tick; + tick.write(); + } + void mainLoop() { + if (auto application = dynamic_cast<Application *>(getOwner())) { + if (application->isTestableModeEnabled()) { + return; + } + } tick = 0; - std::chrono::time_point<std::chrono::steady_clock> t = std::chrono::steady_clock::now(); while(true) { - timeout.read(); - if(timeout == 0){ + period.read(); + if(period == 0){ // set receiving end of timeout. Will only be overwritten if there is new data. - timeout = defaultTimeout_; + period = defaultPeriod_; } - t += std::chrono::milliseconds(static_cast<uint32_t>(timeout)); + t += std::chrono::milliseconds(static_cast<uint32_t>(period)); boost::this_thread::interruption_point(); std::this_thread::sleep_until(t); @@ -46,7 +55,7 @@ namespace ChimeraTK { private: - uint32_t defaultTimeout_; + uint32_t defaultPeriod_; }; }