8#include <dpsim-models/Attribute.h>
9#include <dpsim-models/Logger.h>
10#include <dpsim-models/PtrFactory.h>
11#include <dpsim-models/Task.h>
12#include <dpsim/Config.h>
13#include <dpsim/Definitions.h>
14#include <dpsim/Interface.h>
15#include <dpsim/Scheduler.h>
18#include <villas/kernel/rt.hpp>
19#include <villas/node.hpp>
20#include <villas/node/exceptions.hpp>
21#include <villas/node/memory.hpp>
22#include <villas/pool.hpp>
23#include <villas/sample.hpp>
24#include <villas/signal.hpp>
25#include <villas/signal_list.hpp>
27using namespace villas;
36 typedef std::shared_ptr<InterfaceVillasQueueless> Ptr;
42 const String &nodeConfig,
const String &name =
"",
43 spdlog::level::level_enum logLevel = spdlog::level::level_enum::info);
45 virtual void open()
override;
46 virtual void close()
override;
49 virtual void syncExports()
override;
53 virtual CPS::Task::List getTasks()
override;
55 virtual void printVillasSignals()
const;
61 }
catch (
const std::exception &e) {
62 SPDLOG_LOGGER_ERROR(mLog,
"Error closing interface: {}", e.what());
68 const String mNodeConfig;
70 node::Pool mSamplePool;
72 virtual void writeToVillas();
73 virtual Int readFromVillas();
77 Int mSequenceFromDpsim;
83 : Task(intf.mName +
".Read"), mIntf(intf) {
84 for (
const auto &[attr, _seqId, _blockOnRead, _syncOnStart] :
85 intf.mImportAttrsDpsim) {
86 mModifiedAttributes.push_back(attr);
90 void execute(Real time, Int timeStepCount)
override;
99 : Task(intf.mName +
".Write"), mIntf(intf) {
100 for (
const auto &[attr, _seqId] : intf.mExportAttrsDpsim) {
101 mAttributeDependencies.push_back(attr);
103 mModifiedAttributes.push_back(Scheduler::external);
106 void execute(Real time, Int timeStepCount)
override;
Tasks to be defined by every component.
virtual void syncImports() override
Function called by the Simulation to perform interface synchronization.
InterfaceVillasQueueless(const String &nodeConfig, const String &name="", spdlog::level::level_enum logLevel=spdlog::level::level_enum::info)
create a new InterfaceVillasQueueless instance