#ifndef TRANSMITTERSWITCHINFO_H #define TRANSMITTERSWITCHINFO_H #include #include #include #include "nlohmann/json.hpp" #define nJson nlohmann::json /** * @brief 支持的发射机类型 * */ const QMap g_DevTypeInfo = { {955, "衢州台发射机"} }; /* EQM数据库中的主备 */ enum class enum_DeviceMB : int { Dev_Main = 0, /* 主设备 */ Dev_Backup = 1, /* 备设备 */ Dev_Contingency = 2 /* 应急设备 */ }; enum class enum_Action : int { Act_ON = 1, /* 开机 */ Act_OFF = 2, /* 关机 */ }; /** * @brief 执行计划条目信息 * */ struct ExecPlanItemInfo { int ExecType; /* 执行类型 */ int WeekDay; /* 周几 */ QDate date; /* 日期 */ QTime execTime; /* 执行时间 */ QString devName; /* 设备名称 */ int actionID; /* 动作ID */ QString actionName; /* 执行的动作 */ ExecPlanItemInfo(); ExecPlanItemInfo(const ExecPlanItemInfo& item); ExecPlanItemInfo& operator=(const ExecPlanItemInfo& item); }; /** * @brief 存储一个设备类型及端口参数,即这个设备支持哪些端口,在配置页面选择设备的时候使用 * 如:“衢州台发射机”支持哪些端口 */ struct DevTypeInfo { DevTypeInfo(); ~DevTypeInfo() {} DevTypeInfo& operator=(const DevTypeInfo& devInfo); QString devTypeName; /* 设备类型名称,如:衢州台发射机,非必须的 */ QMap devAction; /* 设备支持的动作,如开机、关机等 */ QMap devType_MB; /* 同一中设备允许存在的个数,如主/备或其他标记方式,这里用不到 */ int PTTypeCode; /* 设备类型编号,在EQM数据库中的类型,如发射机是955 */ }; /** * @brief 软件支持的设备类型信息 * */ class MapDevType { MapDevType(); MapDevType(const MapDevType& devType) = delete; MapDevType& operator=(const MapDevType& devType) = delete; public: ~MapDevType() {} static MapDevType& getInstance() { static MapDevType instance; return instance; } /* 添加支持的设备类型 */ void initDevType(); /* 获取某一个发射机类型 */ DevTypeInfo getDevType(int PTTypeCode); private: QMap m_mapDevType; /* 设备类型信息,int是发射机的PTTypeCode */ }; #define DevTypeContainer MapDevType::getInstance() /** * @brief 配置完成后的信息,给一个类型的设备创建了名字,并存储了设备类型和参数信息 */ struct DeviceInfo { DeviceInfo(); ~DeviceInfo() {} DeviceInfo(const DeviceInfo& devInfo); DeviceInfo& operator=(const DeviceInfo& devInfo); QString devName; /* 自定义的设备名称 */ DevTypeInfo DevType; /* 该设备的类型 */ // QPair devTypeMB; /* 该设备是主设备还是备用设备 */ int DID; /* 设备ID */ int DTID; /* 设备类型ID */ int PTTypeCode; /* 端口类型编码 */ int ChannelID; /* 通道ID */ }; class MapDevice { MapDevice(); MapDevice(const MapDevice& dev) = delete; MapDevice& operator=(const MapDevice& dev) = delete; public: ~MapDevice() {} static MapDevice& getInstance() { static MapDevice instance; return instance; } /* 添加一个设备 */ void addDevice(const DeviceInfo& devInfo); /* 获取一个设备 */ DeviceInfo getDevice(const QString& devName); /* 查找一个设备 */ bool findDevice(const QString& devName); /* 根据设备名称获取设备动作 */ bool getDevAction(const QString& devName, QMap& devAction); /* 删除一个设备 */ void deleteDevice(const QString& devName); /* 获取容器 */ QMap& getMapDevice() { return m_mapDevice; } private: QMap m_mapDevice; /* 设备信息,key是设备名称 */ }; #define DeviceContainer MapDevice::getInstance() #endif /* TRANSMITTERSWITCHINFO_H */