Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
AbstractChannel.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_CHANNELS_ABSTRACTCHANNEL_HPP_
2#define IV_SRC_CHANNELS_ABSTRACTCHANNEL_HPP_
3
9#include "model/enums.hpp"
10
11#include <atomic>
12
13static const std::string kPrvStrNoChannelValue = " - - - ";
14
15namespace iv::units
16{
17class Unit;
18}
19
20namespace iv::channels
21{
22
23class AbstractChannel : public std::enable_shared_from_this<AbstractChannel>
24{
26
27public:
28 virtual ~AbstractChannel() = default;
29
30 virtual void update(AbstractChannel &other);
31 virtual bool load(const iv::file::xml::node &nodeChannel);
32 virtual bool save(iv::file::xml::node &nodeChannel) const;
33
34 virtual std::shared_ptr<AbstractChannel> clone() = 0;
35
36 void deinitialize();
37 virtual void processAlarm(std::shared_ptr<iv::alarms::AlarmsManager> alarmManager) = 0;
38 virtual void processValue() = 0;
39
40 void setValue(std::optional<iv::types::channelValue> value, const std::optional<iv::alarms::Alarm> &alarm,
41 const std::optional<iv::types::networkId> &networkOrigin);
42
43 virtual void calculateAlarm();
44
45 template<typename T>
46 requires std::is_same_v<T, bool> || std::is_same_v<T, int32_t> || std::is_same_v<T, uint32_t> ||
47 std::is_same_v<T, float> || std::is_same_v<T, uint64_t> || std::is_same_v<T, double> ||
48 std::is_same_v<T, std::string> || std::is_same_v<T, const char *>
49 T getValue() const;
50
52 virtual std::string getRawDataUnit() const;
53
54 [[nodiscard]] const iv::types::channelId &getChannelId() const;
55 [[nodiscard]] iv::types::channelOrder getChannelOrder() const;
57 [[nodiscard]] const std::map<iv::types::networkId, std::shared_ptr<iv::channels::INetworkInfo>> &
58 channelsNetwork() const;
59
60 [[nodiscard]] bool isWired() const;
61 [[nodiscard]] bool isVirtual() const;
62 [[nodiscard]] bool isAnalog() const;
63 [[nodiscard]] bool isDigital() const;
64 [[nodiscard]] bool isString() const;
65
66 bool isSerialLine() const;
67 bool isAlarmCalculated() const;
68 [[nodiscard]] bool hasValue() const;
69
70 // Processed gets
71 [[nodiscard]] std::string getAlarmIconName() const;
72 [[nodiscard]] iv::types::color getColorStateRgb() const;
73 [[nodiscard]] iv::alarms::eAlarmPriority getAlarmPriority() const;
74 [[nodiscard]] iv::alarms::eAlarmState getAlarmState() const;
75 [[nodiscard]] iv::alarms::eAlarmType getAlarmType() const;
77 [[nodiscard]] std::weak_ptr<iv::units::Unit> getUnit() const;
78
79 [[nodiscard]] virtual std::string getEngineeringUnitsStr() const;
80 [[nodiscard]] virtual std::string formatValue() const = 0;
81 [[nodiscard]] virtual iv::channels::FormattedValue formattedValue() const = 0;
82
83protected:
85 AbstractChannel(const AbstractChannel &other);
86
87 bool shouldStoreAlarm(iv::alarms::Alarm &alarm) const;
89
90public:
92 std::string m_shipyardTag;
95
96 std::weak_ptr<AbstractChannel> m_inhibitionChannel;
97
100
104
106
107 std::map<iv::types::networkId, std::shared_ptr<iv::channels::INetworkInfo>> m_channelsNetwork;
108
112 std::mutex m_mutexUpdate;
113 std::atomic<iv::channels::Value> m_value;
114 std::atomic<iv::alarms::Alarm> m_alarm;
115 std::optional<iv::types::networkId> m_networkOrigin {};
116 std::optional<iv::types::stationId> m_stationOrigin {};
117
118 std::atomic<iv::channels::Value> m_lastReceivedValue;
119 std::atomic<iv::alarms::Alarm> m_lastReceivedAlarm;
120 std::optional<iv::types::networkId> m_lastNetworkOrigin {};
121 std::optional<iv::types::stationId> m_lastStationOrigin {};
122
123 std::atomic<bool> m_shouldCalculateAlarm;
124
125 std::unique_ptr<iv::channels::controller::AbstractChannel> m_controller;
126
133
134private:
135 struct Keys
136 {
137 static constexpr std::string_view channelId {"Id"};
138 static constexpr std::string_view shipyardTag {"ShipyardTag"};
139 static constexpr std::string_view channelOrder {"Order"};
140 static constexpr std::string_view isEnabled {"Enabled"};
141 static constexpr std::string_view baseType {"BaseType"};
142 static constexpr std::string_view specificType {"SpecificType"};
143 static constexpr std::string_view area {"Area"};
144 static constexpr std::string_view verificationStatus {"VerificationStatus"};
145 static constexpr std::string_view idUnit {"IdUnit"};
146 static constexpr std::string_view indexChannel {"IndexChannel"};
147 static constexpr std::string_view deinitTimeout {"DeinitTimeout"};
148 };
150 {
151 static constexpr std::string string {};
152 static constexpr iv::types::channelId channelId {};
154 static constexpr bool isEnabled {true};
155 static constexpr std::string baseType {"WiredAnalog"};
156 static constexpr std::string specificType {"AnalogInput"};
157 static constexpr std::string area {"All"};
158 static constexpr std::string verificationStatus {"NotVerified"};
159 static constexpr iv::types::unitId idUnit {};
160 static constexpr uint16_t indexChannel {UINT16_MAX};
161 static constexpr iv::types::milliseconds deinitTimeout {10 * 1000};
162 };
163 struct Sections
164 {
165 static constexpr std::string_view dataflow {"DataFlow"};
166 static constexpr std::string_view flow {"Flow"};
167 };
168};
169
170template<typename T>
171 requires std::is_same_v<T, bool> || std::is_same_v<T, int32_t> || std::is_same_v<T, uint32_t> ||
172 std::is_same_v<T, float> || std::is_same_v<T, uint64_t> || std::is_same_v<T, double> ||
173 std::is_same_v<T, std::string> || std::is_same_v<T, const char *>
175{
176 iv::types::channelValue value = m_value.load().value;
177
178 if constexpr (std::is_same_v<T, bool>)
179 {
180 return static_cast<bool>(value);
181 }
182 else if constexpr (std::is_same_v<T, int32_t>)
183 {
184 return static_cast<int32_t>(value);
185 }
186 else if constexpr (std::is_same_v<T, float>)
187 {
188 return static_cast<float>(value);
189 }
190 else if constexpr (std::is_same_v<T, double>)
191 {
192 return value;
193 }
194 else if constexpr (std::is_same_v<T, std::string>)
195 {
196 return std::to_string(value);
197 }
198 else if constexpr (std::is_same_v<T, const char *>)
199 {
200 const std::string strValue = std::to_string(value);
201 return strValue.c_str();
202 }
203
204 return T(m_value.load().value);
205}
206
207}// namespace iv::channels
208
209#endif//IV_SRC_CHANNELS_ABSTRACTCHANNEL_HPP_
static const std::string kPrvStrNoChannelValue
Definition AbstractChannel.hpp:13
Definition AbstractChannel.hpp:24
std::optional< iv::types::stationId > m_lastStationOrigin
Definition AbstractChannel.hpp:121
iv::types::unitId m_idUnit
Definition AbstractChannel.hpp:130
virtual void calculateAlarm()
Definition AbstractChannel.cpp:432
iv::types::channelOrder getChannelOrder() const
Definition AbstractChannel.cpp:161
std::atomic< iv::channels::Value > m_value
Definition AbstractChannel.hpp:113
iv::channels::ChannelInfo m_info
Definition AbstractChannel.hpp:102
virtual void processAlarm(std::shared_ptr< iv::alarms::AlarmsManager > alarmManager)=0
std::string m_shipyardTag
Definition AbstractChannel.hpp:92
std::atomic< iv::alarms::Alarm > m_alarm
Definition AbstractChannel.hpp:114
virtual std::shared_ptr< AbstractChannel > clone()=0
iv::alarms::eAlarmState getAlarmState() const
Definition AbstractChannel.cpp:226
virtual iv::types::channelValue setRawData(iv::types::channelValue value)
Definition AbstractChannel.cpp:523
virtual std::string formatValue() const =0
std::weak_ptr< iv::units::Unit > getUnit() const
Definition AbstractChannel.cpp:263
std::mutex m_mutexUpdate
Definition AbstractChannel.hpp:112
std::string getAlarmIconName() const
Definition AbstractChannel.cpp:206
virtual std::string getRawDataUnit() const
Definition AbstractChannel.cpp:533
iv::channels::eChannelBaseType m_baseType
Definition AbstractChannel.hpp:98
bool isWired() const
Definition AbstractChannel.cpp:177
iv::types::milliseconds m_deinitTimeout
Definition AbstractChannel.hpp:132
bool hasValue() const
Definition AbstractChannel.cpp:325
std::atomic< iv::channels::Value > m_lastReceivedValue
Definition AbstractChannel.hpp:118
iv::types::channelValue getRawData() const
Definition AbstractChannel.cpp:528
void deinitialize()
Definition AbstractChannel.cpp:269
iv::types::channelOrder m_channelOrder
Definition AbstractChannel.hpp:93
bool shouldStoreAlarm(iv::alarms::Alarm &alarm) const
Definition AbstractChannel.cpp:436
void setValue(std::optional< iv::types::channelValue > value, const std::optional< iv::alarms::Alarm > &alarm, const std::optional< iv::types::networkId > &networkOrigin)
Definition AbstractChannel.cpp:361
bool m_isEnabled
Definition AbstractChannel.hpp:94
iv::alarms::eAlarmType getAlarmType() const
TODO: Por defecto tal vez debería haber un undefined o algo así, pq en detalles del canal se dibuja —...
Definition AbstractChannel.cpp:241
T getValue() const
Definition AbstractChannel.hpp:174
friend class iv::channels::controller::AbstractChannel
Definition AbstractChannel.hpp:25
std::optional< iv::types::networkId > m_networkOrigin
Definition AbstractChannel.hpp:115
const iv::channels::ChannelAlarmParameters & getAlarmParameters() const
Definition AbstractChannel.cpp:166
iv::channels::ChannelAlarmParameters m_alarmParameters
Definition AbstractChannel.hpp:103
iv::model::diamar::eVerificationStatus m_verificationStatus
Definition AbstractChannel.hpp:105
bool isAlarmCalculated() const
Definition AbstractChannel.cpp:351
std::optional< iv::types::networkId > m_lastNetworkOrigin
Definition AbstractChannel.hpp:120
iv::channels::eInhibitionCondition getInhibitionConditionState() const
Definition AbstractChannel.cpp:251
iv::channels::eChannelArea m_area
Definition AbstractChannel.hpp:101
bool isString() const
Definition AbstractChannel.cpp:201
virtual std::string getEngineeringUnitsStr() const
Definition AbstractChannel.cpp:330
virtual bool save(iv::file::xml::node &nodeChannel) const
Definition AbstractChannel.cpp:129
std::unique_ptr< iv::channels::controller::AbstractChannel > m_controller
Definition AbstractChannel.hpp:125
std::map< iv::types::networkId, std::shared_ptr< iv::channels::INetworkInfo > > m_channelsNetwork
Definition AbstractChannel.hpp:107
virtual void update(AbstractChannel &other)
Definition AbstractChannel.cpp:486
virtual bool load(const iv::file::xml::node &nodeChannel)
Definition AbstractChannel.cpp:55
std::weak_ptr< AbstractChannel > m_inhibitionChannel
Definition AbstractChannel.hpp:96
virtual iv::channels::FormattedValue formattedValue() const =0
virtual void processValue()=0
bool isVirtual() const
Definition AbstractChannel.cpp:183
iv::channels::eChannelSpecificType m_specificType
Definition AbstractChannel.hpp:99
bool isAnalog() const
Definition AbstractChannel.cpp:189
virtual ~AbstractChannel()=default
const iv::types::channelId & getChannelId() const
Definition AbstractChannel.cpp:156
iv::alarms::eAlarmPriority getAlarmPriority() const
Definition AbstractChannel.cpp:216
std::optional< iv::types::stationId > m_stationOrigin
Definition AbstractChannel.hpp:116
iv::types::indexChannel m_indexChannel
Definition AbstractChannel.hpp:131
std::atomic< bool > m_shouldCalculateAlarm
Definition AbstractChannel.hpp:123
iv::types::color getColorStateRgb() const
Definition AbstractChannel.cpp:211
const std::map< iv::types::networkId, std::shared_ptr< iv::channels::INetworkInfo > > & channelsNetwork() const
Definition AbstractChannel.cpp:172
bool isSerialLine() const
Definition AbstractChannel.cpp:335
std::atomic< iv::alarms::Alarm > m_lastReceivedAlarm
Definition AbstractChannel.hpp:119
iv::types::channelId m_tag
Definition AbstractChannel.hpp:91
bool isDigital() const
Definition AbstractChannel.cpp:195
Definition AbstractChannel.hpp:19
Definition xmlFile.hpp:15
Definition Unit.hpp:14
eAlarmPriority
Definition enums.hpp:13
eAlarmType
Definition enums.hpp:56
eAlarmState
Definition enums.hpp:20
Definition AlarmsManager.hpp:17
eInhibitionCondition
Definition enums.hpp:11
eChannelSpecificType
Definition enums.hpp:72
eChannelBaseType
Definition enums.hpp:63
eChannelArea
Definition enums.hpp:55
eVerificationStatus
Definition enums.hpp:90
uint32_t indexChannel
Definition types.hpp:87
uint16_t unitId
Definition types.hpp:77
uint16_t channelOrder
Definition types.hpp:68
double channelValue
Definition types.hpp:67
uint64_t milliseconds
Definition types.hpp:22
std::string channelId
Definition types.hpp:66
uint32_t color
Definition types.hpp:12
Definition AbstractChannel.hpp:16
Definition structs.hpp:16
Definition AbstractChannel.hpp:150
static constexpr std::string baseType
Definition AbstractChannel.hpp:155
static constexpr iv::types::unitId idUnit
Definition AbstractChannel.hpp:159
static constexpr std::string area
Definition AbstractChannel.hpp:157
static constexpr uint16_t indexChannel
Definition AbstractChannel.hpp:160
static constexpr iv::types::channelOrder channelOrder
Definition AbstractChannel.hpp:153
static constexpr std::string specificType
Definition AbstractChannel.hpp:156
static constexpr iv::types::milliseconds deinitTimeout
Definition AbstractChannel.hpp:161
static constexpr bool isEnabled
Definition AbstractChannel.hpp:154
static constexpr iv::types::channelId channelId
Definition AbstractChannel.hpp:152
static constexpr std::string verificationStatus
Definition AbstractChannel.hpp:158
Definition AbstractChannel.hpp:136
static constexpr std::string_view idUnit
Definition AbstractChannel.hpp:145
static constexpr std::string_view indexChannel
Definition AbstractChannel.hpp:146
static constexpr std::string_view verificationStatus
Definition AbstractChannel.hpp:144
static constexpr std::string_view deinitTimeout
Definition AbstractChannel.hpp:147
static constexpr std::string_view channelId
Definition AbstractChannel.hpp:137
static constexpr std::string_view area
Definition AbstractChannel.hpp:143
static constexpr std::string_view baseType
Definition AbstractChannel.hpp:141
static constexpr std::string_view shipyardTag
Definition AbstractChannel.hpp:138
static constexpr std::string_view specificType
Definition AbstractChannel.hpp:142
static constexpr std::string_view isEnabled
Definition AbstractChannel.hpp:140
static constexpr std::string_view channelOrder
Definition AbstractChannel.hpp:139
Definition AbstractChannel.hpp:164
static constexpr std::string_view dataflow
Definition AbstractChannel.hpp:165
static constexpr std::string_view flow
Definition AbstractChannel.hpp:166
Definition structs.hpp:123
Definition structs.hpp:45
Definition structs.hpp:21