85 lines
2.9 KiB
C++
Raw Normal View History

#include <XNMonitor/PluginInterface.h>
#include <XNMonitor/DataMonitor.h>
// C909_V1接口头文件 - 只在插件中包含
#include "../IDL/C909_V1_Interface.h"
// 插件信息
static PluginInfo plugin_info = {"C909_V1", "", DATAMONITOR_PLUGIN_INTERFACE_VERSION};
// 支持的接口列表
static const char *supported_interfaces[] = {
"Aerodynamics_input",
"GroundHandling_input",
"GroundHandling_output",
"Aerodynamics_output",
"WeightBalance_input",
"WeightBalance_output",
"GroundHandling_heartbeat",
"WeightBalance_heartbeat",
"Aerodynamics_heartbeat"
};
static const int interface_count = sizeof(supported_interfaces) / sizeof(supported_interfaces[0]);
// 导出的插件函数
extern "C"
{
PluginInfo *get_plugin_info()
{
return &plugin_info;
}
DataMonitorBasePtr create_monitor(const char *interfaceName)
{
std::string name(interfaceName);
if (name == "Aerodynamics_input") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::Aerodynamics_input_Interface>>();
} else
if (name == "GroundHandling_input") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::GroundHandling_input_Interface>>();
} else
if (name == "GroundHandling_output") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::GroundHandling_output_Interface>>();
} else
if (name == "Aerodynamics_output") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::Aerodynamics_output_Interface>>();
} else
if (name == "WeightBalance_input") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::WeightBalance_input_Interface>>();
} else
if (name == "WeightBalance_output") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::WeightBalance_output_Interface>>();
} else
if (name == "GroundHandling_heartbeat") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::GroundHandling_heartbeat_Interface>>();
} else
if (name == "WeightBalance_heartbeat") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::WeightBalance_heartbeat_Interface>>();
} else
if (name == "Aerodynamics_heartbeat") {
return std::make_shared<DataMonitorProduct<XNSim::C909::ATA04::Aerodynamics_heartbeat_Interface>>();
}
return nullptr;
}
void destroy_monitor(const char *interfaceName)
{
// 智能指针会自动管理内存,这里可以添加额外的清理逻辑
}
const char **get_supported_interfaces(int *count)
{
if (count) {
*count = interface_count;
}
return const_cast<const char **>(supported_interfaces);
}
void free_string_array(const char **array)
{
// 这里不需要释放,因为使用的是静态数组
}
}