XNSim/Release/include/XNCore/XNCore_global.h

261 lines
7.1 KiB
C
Raw Normal View History

2025-05-20 15:39:40 +08:00
#pragma once
2025-04-28 12:25:20 +08:00
#if defined(XNCORE_LIBRARY)
2025-05-20 15:39:40 +08:00
# define XNCORE_EXPORT __attribute__((visibility("default")))
2025-04-28 12:25:20 +08:00
#else
2025-05-20 15:39:40 +08:00
# define XNCORE_EXPORT __attribute__((visibility("default")))
2025-04-28 12:25:20 +08:00
#endif
2025-05-20 15:39:40 +08:00
#define FORCEINLINE __attribute__((always_inline))
2025-04-28 12:25:20 +08:00
#ifdef __linux__
# include <pthread.h>
# include <sched.h>
# include <sys/timeb.h>
# include <sys/mman.h>
# include <sys/stat.h>
# include <errno.h>
# include <time.h>
# include <memory>
# include <errno.h>
# include <unistd.h>
2025-05-20 15:39:40 +08:00
# include <limits.h>
# include <functional>
# include <map>
# include <unordered_map>
# include <vector>
# include <set>
# include <any>
# include <string>
# include <thread>
# include <mutex>
# include <condition_variable>
# include <queue>
# include <tinyxml2.h>
# include <chrono>
# include <iomanip>
# include <sstream>
# include <dlfcn.h>
# include <filesystem>
# include <array>
# include <cstring>
# include <iostream>
2025-04-28 12:25:20 +08:00
#endif
2025-05-20 15:39:40 +08:00
#include <fastdds/dds/domain/DomainParticipant.hpp>
#include <fastdds/dds/domain/DomainParticipantFactory.hpp>
#include <fastdds/dds/publisher/DataWriter.hpp>
#include <fastdds/dds/publisher/Publisher.hpp>
#include <fastdds/dds/subscriber/DataReader.hpp>
#include <fastdds/dds/subscriber/Subscriber.hpp>
#include <fastdds/dds/topic/TypeSupport.hpp>
#include <fastdds/dds/subscriber/DataReaderListener.hpp>
#include <fastcdr/xcdr/optional.hpp>
2025-04-28 12:25:20 +08:00
#define FAST_DDS_MACRO eprosima::fastdds::dds
/**
* @brief Hz
*/
#define BASE_RUN_FREQ 100.0
/**
* @brief
*/
#define BASE_RUN_INTER (1.0E9 / BASE_RUN_FREQ)
//模型周期性回调函数类型别名
using XNCallBack = std::function<void()>;
//DDS回调函数类型别名
using XNDDSCallBack = std::function<void(void *)>;
2025-05-20 15:39:40 +08:00
//事件回调函数类型别名
using XNEventCallback = std::function<void(const std::any &)>;
2025-04-28 12:25:20 +08:00
/**
* @brief
* @details 线
*/
struct PERIOD_INFO {
/**
* @brief
*/
timespec next_period;
/**
* @brief
*/
long period_ns;
};
2025-05-20 15:39:40 +08:00
/**
* @brief
*/
using XNTimePoint = std::chrono::system_clock::time_point;
/**
* @brief ISO格式的时间字符串转换为系统时间点
* @param timeStr ISO格式的时间字符串 (YYYY-MM-DDTHH:mm:ss)
* @return
*/
2025-05-20 16:41:46 +08:00
extern "C" XNTimePoint XNCORE_EXPORT parseISOTime(const std::string &timeStr);
2025-04-28 12:25:20 +08:00
/**
* @brief
*/
enum class RunStatus {
/**
* @brief
*/
NotStart = 0,
/**
* @brief
*/
Runing,
/**
* @brief
*/
Suspend,
/**
* @brief
*/
Aborted,
/**
* @brief
*/
Finished
};
/**
* @brief 仿
*/
enum class SimControlCmd {
/**
* @brief
*/
Start,
/**
* @brief
*/
Continue,
/**
* @brief
*/
Suspend,
/**
* @brief
*/
Abort
};
/**
* @brief
*/
enum class FreqLevel {
/**
* @brief
*/
BaseFreq = 0, // 120/100/60 Hz
/**
* @brief
*/
HalfFreq, // 60/50/30 Hz
/**
* @brief
*/
QuarterFreq, // 30/25/15 Hz
/**
* @brief
*/
EighthFreq, // 15/12.5/7.5 Hz
/**
* @brief
*/
SixteenthFreq, // 7.5/6.25/3.75 Hz
/**
* @brief
*/
ThirtyTwothFreq, // 3.75/3.125/1.875 Hz
};
/**
* @brief
*/
enum class XNFrameObjectStatus {
/**
* @brief
*/
NotReady = 0,
/**
* @brief
*/
Initialized,
/**
* @brief
*/
Ready,
/**
* @brief
*/
Unknown
};
2025-05-20 15:39:40 +08:00
template <class ToType, class FromType>
FORCEINLINE ToType XNStaticCastHelper(const FromType &from)
{
return std::static_pointer_cast<typename ToType::element_type>(from);
}
template <class ToType, class FromType>
FORCEINLINE ToType XNCastHelper(const FromType &from)
{
return std::dynamic_pointer_cast<typename ToType::element_type>(from);
}
#define XN_CAST(from, to) XNStaticCastHelper<to>(from)
#define XN_THISPTR std::static_pointer_cast<ThisType>(shared_from_this())
#define XNCLASS_PTR_DECLARE(a) \
using a##Ptr = std::shared_ptr<class a>; \
using a##WPtr = std::weak_ptr<class a>; \
using a##UPtr = std::unique_ptr<class a>; \
using a##ConsPtr = std::shared_ptr<const class a>;
#define XNSTRUCT_PTR_DECLARE(a) \
using a##Ptr = std::shared_ptr<struct a>; \
using a##WPtr = std::weak_ptr<struct a>; \
using a##UPtr = std::unique_ptr<struct a>; \
using a##ConsPtr = std::shared_ptr<const struct a>;
#define XN_NOCOPYABLE(Class) \
public: \
using NoCopyable = Class; \
\
private: \
Class(const Class &) = delete; \
Class &operator=(const Class &) = delete;
#define XN_DECLARE_PRIVATE(Class) \
XN_NOCOPYABLE(Class) \
protected: \
friend class Class##Private; \
inline Class##Private *GetPP() const \
2025-04-28 12:25:20 +08:00
{ \
2025-05-20 15:39:40 +08:00
return reinterpret_cast<Class##Private *>(_Private_Ptr); \
} \
using PrivateType = Class##Private;
#define T_D() PrivateType *const d = GetPP()
struct XNNullClass {
};
#define XN_METATYPE_P(cls) \
public: \
using ThisType = cls; \
using SuperType = XNNullClass;
2025-04-28 12:25:20 +08:00
2025-05-20 15:39:40 +08:00
#define XN_METATYPE(cls, sup) \
public: \
using ThisType = cls; \
using SuperType = sup;