Select Git revision
IRpcFrontend.h

Tim Übelhör authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
IRpcFrontend.h 1.91 KiB
#pragma once
#include <string>
#include <vector>
enum fmi2Status
{
fmi2OK,
fmi2Warning,
fmi2Discard,
fmi2Error,
fmi2Fatal,
fmi2Pending
};
// Struct that will be used for the NewValues callback
struct ValuesStruct
{
std::string instanceName;
std::vector<uint32_t> integerValueRefs;
std::vector<int32_t> integerValues;
std::vector<uint32_t> realValueRefs;
std::vector<double> realValues;
std::vector<uint32_t> boolValueRefs;
std::vector<bool> boolValues;
std::vector<uint32_t> stringValueRefs;
std::vector<std::string> stringValues;
};
// Definition of a channel link
struct ChannelLink
{
std::string masterInstanceName;
std::string slaveInstanceName;
uint32_t masterValueRef;
uint32_t slaveValueRef;
double factor;
double offset;
};
// Callback definitions shall be easy to marshall
typedef void(__stdcall *NewValuesCallback)(double timestamp, ValuesStruct values);
typedef void(__stdcall *LogCallback)(std::string instanceName, int status, std::string message);
/// This interface hides the rpc (framework) implementation.
/// We can compile a pure native library and do not have to worry about CLI compiler errors.
class IRpcFrontend
{
public:
virtual void destroy() = 0;
virtual void connect(std::string address, int port) = 0;
virtual void registerCallbacks(NewValuesCallback newValuesCallback, LogCallback logCallback) = 0;
virtual fmi2Status play() = 0;
virtual void pause() = 0;
virtual fmi2Status stop() = 0;
virtual bool addFmu(std::string instanceName, std::vector<unsigned char> fmuFile) = 0;
virtual bool removeFmu(std::string instanceName) = 0;
virtual bool addChannelLink(ChannelLink channelLink) = 0;
virtual bool removeChannelink(ChannelLink channelLink) = 0;
virtual fmi2Status setValues(ValuesStruct values) = 0;
};
// Factory signature
extern "C" __declspec(dllexport) IRpcFrontend* createRpcFrontend();