{
return new DNQSCellCode(name, cellapi, this, code);
}
-
protected:
typedef bool (*InitFunction)();
typedef bool (*UnloadFunction)();
+ typedef bool (*GetIsReadyFunction)();
typedef float (*QueryPluginValueFunction)(const char*);
typedef void (*SetValueToPluginFunction)(const char*, float);
bool d_isValid;
+ bool d_isReady;
InitFunction d_initFunction;
UnloadFunction d_unloadFunction;
+ GetIsReadyFunction d_getIsReadyFunction;
QueryPluginValueFunction d_queryPluginValueFunction;
SetValueToPluginFunction d_setValueToPluginFunction;
DNPlugin() :
- d_isValid(false), d_initFunction(0), d_unloadFunction(0), d_queryPluginValueFunction(0), d_setValueToPluginFunction(0)
+ d_isValid(false), d_isReady(false), d_initFunction(0), d_unloadFunction(0), d_queryPluginValueFunction(0), d_setValueToPluginFunction(0)
{}
public:
virtual ~DNPlugin(){}
inline bool getIsValid() const { return d_isValid; }
+ inline bool getIsReady() const { return d_getIsReadyFunction ? d_getIsReadyFunction() : false; }
inline bool init() { return d_initFunction ? d_initFunction() : false; }
inline bool unload() { return d_unloadFunction ? d_unloadFunction() : true; }
inline float queryPluginValue(const char* name) { return d_isValid ? d_queryPluginValueFunction(name) : 0.0f; }
DNPluginOutputCell::DNPluginOutputCell(TKContainer *container, std::string location, std::string name, std::string pluginName, std::string valueName)
: DNCellInterfaceable(container, location, name, false, true),
- d_plugin(NULL), d_valueName(valueName), d_outputValue(std::numeric_limits<float>::quiet_NaN())
+ d_plugin(NULL), d_valueName(valueName), d_outputValue(std::numeric_limits<float>::quiet_NaN()), d_wasReady(false)
{
d_plugin = DNPluginManager::instance()->getPlugin(pluginName);
if (!d_plugin)
}
mAxon->setValue(value);
- if (d_plugin && d_plugin->getIsValid() && d_outputValue != value)
+ if (d_plugin && d_plugin->getIsValid())
{
- d_outputValue = value;
- d_plugin->setValueToPlugin(d_valueName.c_str(), value);
+ bool isReady = d_plugin->getIsReady();
+ if (isReady && (d_outputValue != value ||!d_wasReady))
+ {
+ d_outputValue = value;
+ d_plugin->setValueToPlugin(d_valueName.c_str(), value);
+ }
+ d_wasReady = isReady;
}
-
return true;
}
DNPlugin *d_plugin;
std::string d_valueName;
float d_outputValue;
+ bool d_wasReady;
public:
DNPluginOutputCell(TKContainer *container, std::string location, std::string name, std::string pluginName, std::string valueName);
{
d_initFunction = (DNPlugin::InitFunction)d_library->resolve("init");
d_unloadFunction = (DNPlugin::UnloadFunction) d_library->resolve("unload");
+ d_getIsReadyFunction = (DNPlugin::GetIsReadyFunction) d_library->resolve("getIsReady");
d_queryPluginValueFunction = (DNPlugin::QueryPluginValueFunction)d_library->resolve("queryPluginValue");
d_setValueToPluginFunction = (DNPlugin::SetValueToPluginFunction)d_library->resolve("setValueToPlugin");