TransmitterSwitchInfo.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #ifndef TRANSMITTERSWITCHINFO_H
  2. #define TRANSMITTERSWITCHINFO_H
  3. #include <QDate>
  4. #include <QString>
  5. #include <QMap>
  6. #include "nlohmann/json.hpp"
  7. #define nJson nlohmann::json
  8. /**
  9. * @brief 支持的发射机类型
  10. *
  11. */
  12. const QMap<int, QString> g_DevTypeInfo = {
  13. {955, "衢州台发射机"}
  14. };
  15. /* EQM数据库中的主备 */
  16. enum class enum_DeviceMB : int
  17. {
  18. Dev_Main = 0, /* 主设备 */
  19. Dev_Backup = 1, /* 备设备 */
  20. Dev_Contingency = 2 /* 应急设备 */
  21. };
  22. enum class enum_Action : int
  23. {
  24. Act_ON = 1, /* 开机 */
  25. Act_OFF = 2, /* 关机 */
  26. };
  27. /**
  28. * @brief 执行计划条目信息
  29. *
  30. */
  31. struct ExecPlanItemInfo
  32. {
  33. int ExecType; /* 执行类型,0按时刻,1按天 */
  34. int WeekDay; /* 周几,数据库里是1-7一周,周8是特殊日 */
  35. QDate date; /* 日期 */
  36. QTime execTime; /* 执行时间 */
  37. QString devName; /* 设备名称 */
  38. int actionID; /* 动作ID */
  39. QString actionName; /* 执行的动作 */
  40. ExecPlanItemInfo();
  41. ExecPlanItemInfo(const ExecPlanItemInfo& item);
  42. ExecPlanItemInfo& operator=(const ExecPlanItemInfo& item);
  43. };
  44. /**
  45. * @brief 存储一个设备类型及端口参数,即这个设备支持哪些端口,在配置页面选择设备的时候使用
  46. * 如:“衢州台发射机”支持哪些端口
  47. */
  48. struct DevTypeInfo
  49. {
  50. DevTypeInfo();
  51. ~DevTypeInfo() {}
  52. DevTypeInfo& operator=(const DevTypeInfo& devInfo);
  53. QString devTypeName; /* 设备类型名称,如:衢州台发射机,非必须的 */
  54. QMap<int, QString> devAction; /* 设备支持的动作,如开机、关机等 */
  55. QMap<enum_DeviceMB, QString> devType_MB; /* 同一中设备允许存在的个数,如主/备或其他标记方式,这里用不到 */
  56. int PTTypeCode; /* 设备类型编号,在EQM数据库中的类型,如发射机是955 */
  57. };
  58. /**
  59. * @brief 软件支持的设备类型信息
  60. *
  61. */
  62. class MapDevType
  63. {
  64. MapDevType();
  65. MapDevType(const MapDevType& devType) = delete;
  66. MapDevType& operator=(const MapDevType& devType) = delete;
  67. public:
  68. ~MapDevType() {}
  69. static MapDevType& getInstance()
  70. {
  71. static MapDevType instance;
  72. return instance;
  73. }
  74. /* 添加支持的设备类型 */
  75. void initDevType();
  76. /* 获取某一个发射机类型 */
  77. DevTypeInfo getDevType(int PTTypeCode);
  78. /* 获取设备类型信息 */
  79. QMap<int, DevTypeInfo>& getMapDevType() { return m_mapDevType; }
  80. private:
  81. QMap<int, DevTypeInfo> m_mapDevType; /* 设备类型信息,int是发射机的PTTypeCode */
  82. };
  83. #define DevTypeContainer MapDevType::getInstance()
  84. /**
  85. * @brief 配置完成后的信息,给一个类型的设备创建了名字,并存储了设备类型和参数信息
  86. */
  87. struct DeviceInfo
  88. {
  89. DeviceInfo();
  90. ~DeviceInfo() {}
  91. DeviceInfo(const DeviceInfo& devInfo);
  92. DeviceInfo& operator=(const DeviceInfo& devInfo);
  93. QString devName; /* 自定义的设备名称 */
  94. DevTypeInfo DevType; /* 该设备的类型 */
  95. // QPair<enum_DeviceMB, QString> devTypeMB; /* 该设备是主设备还是备用设备 */
  96. int DID; /* 设备ID */
  97. int DTID; /* 设备类型ID */
  98. int PTTypeCode; /* 端口类型编码 */
  99. int ChannelID; /* 通道ID */
  100. };
  101. class MapDevice
  102. {
  103. MapDevice();
  104. MapDevice(const MapDevice& dev) = delete;
  105. MapDevice& operator=(const MapDevice& dev) = delete;
  106. public:
  107. ~MapDevice() {}
  108. static MapDevice& getInstance()
  109. {
  110. static MapDevice instance;
  111. return instance;
  112. }
  113. /* 添加一个设备 */
  114. void addDevice(const DeviceInfo& devInfo);
  115. /* 获取一个设备 */
  116. DeviceInfo getDevice(const QString& devName);
  117. /* 查找一个设备 */
  118. bool findDevice(const QString& devName);
  119. /* 根据设备名称获取设备动作 */
  120. bool getDevAction(const QString& devName, QMap<int, QString>& devAction);
  121. /* 删除一个设备 */
  122. void deleteDevice(const QString& devName);
  123. /* 获取容器 */
  124. QMap<QString, DeviceInfo>& getMapDevice() { return m_mapDevice; }
  125. private:
  126. QMap<QString, DeviceInfo> m_mapDevice; /* 设备信息,key是设备名称 */
  127. };
  128. #define DeviceContainer MapDevice::getInstance()
  129. #endif /* TRANSMITTERSWITCHINFO_H */