PLCnext API Documentation  22.9.0.33
PlcStateChangedPayload.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 
7 #pragma once
8 
9 
10 #include "Arp/System/Core/Arp.h"
11 #include "Arp/System/Nm/SpecializedPayload.hpp"
12 #include <tuple>
13 
14 
15 namespace Arp { namespace Plc { namespace Commons { namespace Domain
16 {
17 enum class PlcState : uint32;
18 }}}} // namespace Arp::Plc::Commons::Domain
19 
20 namespace Arp { namespace System { namespace NmPayload { namespace Plc
21 {
22 
23 
29 class PlcStateChangedPayload : public Arp::System::Nm::SpecializedPayload<PlcStateChangedPayload>
30 {
31 public:
33 
35  using ArgumentsType = std::tuple<PlcState, PlcState>;
36 
37  using SpecializedPayload::SpecializedPayload;
38 
40  explicit PlcStateChangedPayload(const ArgumentsType& args);
41 
46 
49 
52 
53 private:
54  using PayloadFieldType = std::underlying_type<PlcState>::type;
55 
56  static String PlcStateToString(PlcState plcState);
57  static String PlcStateToString(PayloadFieldType plcState);
58  static String MaskedPlcStateToString(PayloadFieldType maskedPlcState);
59  static String GetFlagsDescriptions(PayloadFieldType plcState);
60  static String AppendFlagDescription(const String& description, const String& flagDescription);
61  static bool IsFlagSet(PayloadFieldType plcState, PayloadFieldType flag);
62 
63 private:
64  // Do not change the order of the field initialization!
65  size_t indexLastState = this->AddField<PayloadFieldType>();
66  size_t indexNewState = this->AddField<PayloadFieldType>();
67 };
68 
69 
70 }}}} // namespace Arp::System::NmPayload::Plc
Payload class for state changes of the PLC
Definition: PlcStateChangedPayload.hpp:30
PlcStateChangedPayload(const ArgumentsType &args)
Creates a payload lobject
PlcStateChangedPayload(PlcState lastState, PlcState newState)
Creates a payload lobject
PlcState GetLastState() const
Retruns the last state of the PLC
PlcState GetNewState() const
Returns the new state of the PLC
std::tuple< PlcState, PlcState > ArgumentsType
ArgumentsType to be used with NonBlockingNotificationRegistration3
Definition: PlcStateChangedPayload.hpp:35
Base class for custom Payload classes
Definition: SpecializedPayload.hpp:43
std::uint32_t uint32
The Arp unsigned integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:35
PlcState
Definition: PlcState.hpp:14
@ System
System components used by the System, Device, Plc or Io domains.
Root namespace for the PLCnext API