#include "XNInterfaceGenServer.h" #include "GetInterfaceData.h" #include "GenIDL.h" #include "FastDDSGen.h" #include "DDSInterfaceGen.h" #include "CMakeListsGen.h" // 全局变量定义 int g_configrationID; std::string g_configName; AllInterfaceData g_interfaceData; int XNInterfaceGen_Step1_InitParams(int configrationID, const char *errorMsg, const int errorMsgSize) { g_configrationID = 0; g_configName = ""; g_interfaceData.systemName = ""; g_interfaceData.planeName = ""; g_interfaceData.ataInterfaceData.clear(); GenIDL::clearIDLFilePath(); if (configrationID <= 0) { memcpy((void *)errorMsg, "Invalid configrationID", errorMsgSize); return -1; } g_configrationID = configrationID; memcpy((void *)errorMsg, "Init params success", errorMsgSize); return 0; } int XNInterfaceGen_Step2_GetInterfaceData(const char *errorMsg, const int errorMsgSize) { std::string errorMsgStr; g_interfaceData = GetInterfaceData::getInterfaceData(g_configrationID, errorMsgStr); g_configName = GetInterfaceData::getConfigName(g_configrationID, errorMsgStr); if (!errorMsgStr.empty()) { std::cout << "errorMsgStr: " << errorMsgStr << std::endl; memcpy((void *)errorMsg, errorMsgStr.c_str(), errorMsgSize); return -1; } return 0; } int XNInterfaceGen_Step3_CreateConfigDir(const char *errorMsg, const int errorMsgSize) { bool ret = GenIDL::createConfigDirectory(g_configName); if (!ret) { std::cout << "Create config directory failed" << std::endl; memcpy((void *)errorMsg, "Create config directory failed", errorMsgSize); return -1; } return 0; } int XNInterfaceGen_Step4_GenerateIDL(const char *errorMsg, const int errorMsgSize) { bool ret = GenIDL::generateIDL(g_interfaceData); if (!ret) { std::cout << "Generate IDL failed" << std::endl; memcpy((void *)errorMsg, "Generate IDL failed", errorMsgSize); return -1; } return 0; } int XNInterfaceGen_Step5_GenerateFastDDS(const char *errorMsg, const int errorMsgSize) { bool ret = FastDDSGen::generateFastDDSCode(GenIDL::getIDLFilePath()); if (!ret) { std::cout << "Generate FastDDS code failed" << std::endl; memcpy((void *)errorMsg, "Generate FastDDS code failed", errorMsgSize); return -1; } return 0; } int XNInterfaceGen_Step6_GenerateDDSInterface(const char *errorMsg, const int errorMsgSize) { DDSInterfaceGen ddsInterfaceGen(GenIDL::getIDLFilePath()); bool ret = ddsInterfaceGen.generateDDSInterface(g_interfaceData); if (!ret) { std::cout << "Generate DDS interface failed" << std::endl; memcpy((void *)errorMsg, "Generate DDS interface failed", errorMsgSize); return -1; } return 0; } int XNInterfaceGen_Step7_GenerateCMakeLists(const char *errorMsg, const int errorMsgSize) { bool ret = CMakeListsGen::generateCMakeLists(g_interfaceData, GenIDL::getIDLFilePath(), g_configName); if (!ret) { std::cout << "Generate CMakeLists.txt failed" << std::endl; memcpy((void *)errorMsg, "Generate CMakeLists.txt failed", errorMsgSize); return -1; } return 0; } int XNInterfaceGen_Step8_BuildAndInstall(const char *errorMsg, const int errorMsgSize) { std::string idlDirPath = fs::path(GenIDL::getIDLFilePath()).parent_path().string(); std::string buildCmd = "cd " + idlDirPath + " && mkdir -p build && cd build && cmake .. && make && make install"; int buildRet = system(buildCmd.c_str()); if (buildRet != 0) { std::cout << "CMake build or install failed" << std::endl; memcpy((void *)errorMsg, "CMake build or install failed", errorMsgSize); return -1; } return 0; } int XNInterfaceGen_Step9_SudoLdconfig(const char *errorMsg, const int errorMsgSize) { std::string ldconfigCmd = "sudo ldconfig"; int ldconfigRet = system(ldconfigCmd.c_str()); if (ldconfigRet != 0) { std::cout << "Sudo ldconfig failed" << std::endl; memcpy((void *)errorMsg, "Sudo ldconfig failed", errorMsgSize); return -1; } return 0; }