先提交气动模型的暂时修改
This commit is contained in:
parent
73d8dd7eab
commit
efcc6597cb
@ -194,14 +194,14 @@ public:
|
|||||||
void class ::RegisterDDSParticipant() \
|
void class ::RegisterDDSParticipant() \
|
||||||
{ \
|
{ \
|
||||||
XNModelObject::RegisterDDSParticipant(); \
|
XNModelObject::RegisterDDSParticipant(); \
|
||||||
Q_D(class); \
|
T_D(); \
|
||||||
auto framework = GetFramework(); \
|
auto framework = GetFramework(); \
|
||||||
if (!framework) \
|
if (!framework) \
|
||||||
return; \
|
return; \
|
||||||
XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \
|
XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \
|
||||||
if (!ddsManager) \
|
if (!ddsManager) \
|
||||||
return; \
|
return; \
|
||||||
quint32 MyID = getUniqueId();
|
uint32_t MyID = GetUniqueId();
|
||||||
|
|
||||||
#define XN_PUBLISHTOPIC(topic) \
|
#define XN_PUBLISHTOPIC(topic) \
|
||||||
d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID);
|
d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID);
|
||||||
@ -215,6 +215,6 @@ public:
|
|||||||
#define XN_MODEL_INITIALIZE(ClassName) \
|
#define XN_MODEL_INITIALIZE(ClassName) \
|
||||||
extern "C" XNModelObjectPtr Initial##ClassName() \
|
extern "C" XNModelObjectPtr Initial##ClassName() \
|
||||||
{ \
|
{ \
|
||||||
ClassNamePtr obj = std::make_shared<ClassName>(); \
|
ClassName##Ptr obj = std::make_shared<ClassName>(); \
|
||||||
return obj; \
|
return obj; \
|
||||||
}
|
}
|
||||||
|
@ -194,14 +194,14 @@ public:
|
|||||||
void class ::RegisterDDSParticipant() \
|
void class ::RegisterDDSParticipant() \
|
||||||
{ \
|
{ \
|
||||||
XNModelObject::RegisterDDSParticipant(); \
|
XNModelObject::RegisterDDSParticipant(); \
|
||||||
Q_D(class); \
|
T_D(); \
|
||||||
auto framework = GetFramework(); \
|
auto framework = GetFramework(); \
|
||||||
if (!framework) \
|
if (!framework) \
|
||||||
return; \
|
return; \
|
||||||
XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \
|
XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \
|
||||||
if (!ddsManager) \
|
if (!ddsManager) \
|
||||||
return; \
|
return; \
|
||||||
quint32 MyID = getUniqueId();
|
uint32_t MyID = GetUniqueId();
|
||||||
|
|
||||||
#define XN_PUBLISHTOPIC(topic) \
|
#define XN_PUBLISHTOPIC(topic) \
|
||||||
d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID);
|
d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID);
|
||||||
@ -215,6 +215,6 @@ public:
|
|||||||
#define XN_MODEL_INITIALIZE(ClassName) \
|
#define XN_MODEL_INITIALIZE(ClassName) \
|
||||||
extern "C" XNModelObjectPtr Initial##ClassName() \
|
extern "C" XNModelObjectPtr Initial##ClassName() \
|
||||||
{ \
|
{ \
|
||||||
ClassNamePtr obj = std::make_shared<ClassName>(); \
|
ClassName##Ptr obj = std::make_shared<ClassName>(); \
|
||||||
return obj; \
|
return obj; \
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,10 @@
|
|||||||
"*.cpp": "cpp",
|
"*.cpp": "cpp",
|
||||||
"functional": "cpp",
|
"functional": "cpp",
|
||||||
"qhash": "cpp",
|
"qhash": "cpp",
|
||||||
"qstringlist": "cpp"
|
"qstringlist": "cpp",
|
||||||
|
"*.ipp": "cpp",
|
||||||
|
"*.tcc": "cpp",
|
||||||
|
"optional": "cpp",
|
||||||
|
"type_traits": "cpp"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,17 +2,16 @@
|
|||||||
#include "XNAerodynamics_p.h"
|
#include "XNAerodynamics_p.h"
|
||||||
#include <XNCore/XNModelManager.h>
|
#include <XNCore/XNModelManager.h>
|
||||||
#include <XNCore/XNDDSManager.h>
|
#include <XNCore/XNDDSManager.h>
|
||||||
#include <QMutexLocker>
|
#include <XNCore/XNFramework.h>
|
||||||
|
|
||||||
XN_DLL_INITIALIZE(XNAerodynamics)
|
XN_MODEL_INITIALIZE(XNAerodynamics)
|
||||||
XN_REGISTER_PARTICIPANT_BEGIN(XNAerodynamics)
|
XN_REGISTER_PARTICIPANT_BEGIN(XNAerodynamics)
|
||||||
XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_output)
|
XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_output)
|
||||||
XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_heartbeat)
|
XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_heartbeat)
|
||||||
XN_SUBSCRIBETOPIC(XNSim::ATA04::Aerodynamics_input, &XNAerodynamics::OnInput)
|
XN_SUBSCRIBETOPIC(XNSim::ATA04::Aerodynamics_input, &XNAerodynamics::OnInput)
|
||||||
XN_REGISTER_PARTICIPANT_END(XNAerodynamics)
|
XN_REGISTER_PARTICIPANT_END(XNAerodynamics)
|
||||||
|
|
||||||
XNAerodynamics::XNAerodynamics(QObject *parent)
|
XNAerodynamics::XNAerodynamics() : XNModelObject(new XNAerodynamicsPrivate())
|
||||||
: XNModelObject(*new XNAerodynamicsPrivate(this), parent)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,28 +19,26 @@ XNAerodynamics::~XNAerodynamics()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
XNAerodynamics::XNAerodynamics(XNAerodynamicsPrivate &dd, QObject *parent)
|
XNAerodynamics::XNAerodynamics(PrivateType *p) : XNModelObject(p)
|
||||||
: XNModelObject(dd, parent)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void XNAerodynamics::OnInitialize()
|
void XNAerodynamics::Initialize(uint32_t initialType, uint32_t threadID)
|
||||||
{
|
{
|
||||||
Q_D(XNAerodynamics);
|
T_D();
|
||||||
XNModelObject::OnInitialize();
|
XNModelObject::Initialize(initialType, threadID);
|
||||||
if (d->_dynamicLib) {
|
if (d->_dynamicLib) {
|
||||||
d->_fun = reinterpret_cast<FunctionType>(
|
d->_fun = (FunctionType)dlsym(d->_dynamicLib, d->_entryPointName.c_str());
|
||||||
d->_dynamicLib->resolve("_Z27SACSCAerodynamicsEntryPointP20ComacDataStructure_S"));
|
|
||||||
if (!d->_fun) {
|
if (!d->_fun) {
|
||||||
LOG_WARNING("Failed to resolve SACSCAerodynamicsEntryPoint");
|
LOG_WARNING("Failed to resolve SACSCAerodynamicsEntryPoint");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void XNAerodynamics::OnPrepareForExecute()
|
void XNAerodynamics::PrepareForExecute()
|
||||||
{
|
{
|
||||||
Q_D(XNAerodynamics);
|
T_D();
|
||||||
XNModelObject::OnPrepareForExecute();
|
XNModelObject::PrepareForExecute();
|
||||||
d->_data.aero_model_heartbeat = 0;
|
d->_data.aero_model_heartbeat = 0;
|
||||||
d->_data.input_aero = new input_aero_S;
|
d->_data.input_aero = new input_aero_S;
|
||||||
d->_data.input_aero->l_04_i_aerocomac_ail_f8 = (double *)calloc(2, sizeof(double));
|
d->_data.input_aero->l_04_i_aerocomac_ail_f8 = (double *)calloc(2, sizeof(double));
|
||||||
@ -58,10 +55,10 @@ void XNAerodynamics::OnPrepareForExecute()
|
|||||||
|
|
||||||
void XNAerodynamics::StepUpdate()
|
void XNAerodynamics::StepUpdate()
|
||||||
{
|
{
|
||||||
Q_D(XNAerodynamics);
|
T_D();
|
||||||
XNModelObject::StepUpdate();
|
XNModelObject::StepUpdate();
|
||||||
if (d->_fun) {
|
if (d->_fun) {
|
||||||
QMutexLocker locker(&d->_mutex);
|
std::lock_guard<std::mutex> locker(d->_mutex);
|
||||||
d->_fun(&d->_data);
|
d->_fun(&d->_data);
|
||||||
}
|
}
|
||||||
OnOutput();
|
OnOutput();
|
||||||
@ -69,7 +66,7 @@ void XNAerodynamics::StepUpdate()
|
|||||||
|
|
||||||
void XNAerodynamics::OnOutput()
|
void XNAerodynamics::OnOutput()
|
||||||
{
|
{
|
||||||
Q_D(XNAerodynamics);
|
T_D();
|
||||||
//DDS心跳发布
|
//DDS心跳发布
|
||||||
XNSim::ATA04::Aerodynamics_heartbeat heartbeat;
|
XNSim::ATA04::Aerodynamics_heartbeat heartbeat;
|
||||||
heartbeat.aero_model_heartbeat(d->_data.aero_model_heartbeat);
|
heartbeat.aero_model_heartbeat(d->_data.aero_model_heartbeat);
|
||||||
@ -94,8 +91,8 @@ void XNAerodynamics::OnOutput()
|
|||||||
|
|
||||||
void XNAerodynamics::OnInput(const XNSim::ATA04::Aerodynamics_input &input)
|
void XNAerodynamics::OnInput(const XNSim::ATA04::Aerodynamics_input &input)
|
||||||
{
|
{
|
||||||
Q_D(XNAerodynamics);
|
T_D();
|
||||||
QMutexLocker locker(&d->_mutex);
|
std::lock_guard<std::mutex> locker(d->_mutex);
|
||||||
if (input.l_04_i_aerocomac_alpha_f8()) {
|
if (input.l_04_i_aerocomac_alpha_f8()) {
|
||||||
d->_data.input_aero->l_04_i_aerocomac_alpha_f8 = input.l_04_i_aerocomac_alpha_f8().value();
|
d->_data.input_aero->l_04_i_aerocomac_alpha_f8 = input.l_04_i_aerocomac_alpha_f8().value();
|
||||||
}
|
}
|
||||||
|
@ -7,20 +7,19 @@ class XNAerodynamicsPrivate;
|
|||||||
|
|
||||||
class XNAERODYNAMICS_EXPORT XNAerodynamics : public XNModelObject
|
class XNAERODYNAMICS_EXPORT XNAerodynamics : public XNModelObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
XN_METATYPE(XNAerodynamics, XNModelObject)
|
||||||
Q_DISABLE_COPY(XNAerodynamics)
|
XN_DECLARE_PRIVATE(XNAerodynamics)
|
||||||
Q_DECLARE_PRIVATE(XNAerodynamics)
|
|
||||||
XN_DECLARE_DDS()
|
XN_DECLARE_DDS()
|
||||||
public:
|
public:
|
||||||
explicit XNAerodynamics(QObject *parent = nullptr);
|
XNAerodynamics();
|
||||||
virtual ~XNAerodynamics();
|
virtual ~XNAerodynamics();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
XNAerodynamics(XNAerodynamicsPrivate &dd, QObject *parent = nullptr);
|
XNAerodynamics(PrivateType *p);
|
||||||
|
|
||||||
public slots:
|
public:
|
||||||
virtual void OnInitialize() override;
|
virtual void Initialize(uint32_t initialType, uint32_t threadID) override;
|
||||||
virtual void OnPrepareForExecute() override;
|
virtual void PrepareForExecute() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void StepUpdate() override;
|
virtual void StepUpdate() override;
|
||||||
@ -30,4 +29,4 @@ private:
|
|||||||
void OnInput(const XNSim::ATA04::Aerodynamics_input &input);
|
void OnInput(const XNSim::ATA04::Aerodynamics_input &input);
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(XNAerodynamics)
|
XNCLASS_PTR_DECLARE(XNAerodynamics)
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
#ifndef XNAERODYNAMICS_GLOBAL_H
|
#ifndef XNAERODYNAMICS_GLOBAL_H
|
||||||
#define XNAERODYNAMICS_GLOBAL_H
|
#define XNAERODYNAMICS_GLOBAL_H
|
||||||
|
|
||||||
#include <QtCore/qglobal.h>
|
|
||||||
|
|
||||||
#if defined(XNAERODYNAMICS_LIBRARY)
|
#if defined(XNAERODYNAMICS_LIBRARY)
|
||||||
#define XNAERODYNAMICS_EXPORT Q_DECL_EXPORT
|
# define XNAERODYNAMICS_EXPORT __attribute__((visibility("default")))
|
||||||
#else
|
#else
|
||||||
#define XNAERODYNAMICS_EXPORT Q_DECL_IMPORT
|
# define XNAERODYNAMICS_EXPORT __attribute__((visibility("default")))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // XNAERODYNAMICS_GLOBAL_H
|
#endif // XNAERODYNAMICS_GLOBAL_H
|
||||||
|
@ -1,20 +1,15 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <XNCore/XNModelObject_p.h>
|
#include <XNCore/XNModelObject_p.h>
|
||||||
#include <DataModels/libSACSCAerodynamics_V2.0.3.5H/std_04_dll.h>
|
#include <DataModels/libSACSCAerodynamics_V2.0.3.5H/std_04_dll.h>
|
||||||
#include <QMutex>
|
|
||||||
|
|
||||||
typedef void (*FunctionType)(ComacDataStructure_S *);
|
typedef void (*FunctionType)(ComacDataStructure_S *);
|
||||||
|
|
||||||
class XNAerodynamicsPrivate : public XNModelObjectPrivate
|
struct XNAerodynamicsPrivate : public XNModelObjectPrivate {
|
||||||
{
|
|
||||||
public:
|
|
||||||
Q_DECLARE_PUBLIC(XNAerodynamics)
|
|
||||||
|
|
||||||
XNAerodynamicsPrivate(XNAerodynamics *q) : XNModelObjectPrivate(q) {}
|
|
||||||
|
|
||||||
FunctionType _fun = nullptr;
|
FunctionType _fun = nullptr;
|
||||||
|
|
||||||
ComacDataStructure_S _data;
|
ComacDataStructure_S _data;
|
||||||
|
|
||||||
QMutex _mutex;
|
std::string _entryPointName = "_Z27SACSCAerodynamicsEntryPointP20ComacDataStructure_S";
|
||||||
|
|
||||||
|
std::mutex _mutex;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user