85 lines
2.9 KiB
C++
85 lines
2.9 KiB
C++
#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)
|
|
{
|
|
// 这里不需要释放,因为使用的是静态数组
|
|
}
|
|
}
|