PLCnext API Documentation  21.0.0.35466
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 
13 
14 namespace Arp { namespace Plc { namespace Commons { namespace Domain
15 {
16 enum class PlcState : uint32;
17 }}}} // namespace Arp::Plc::Commons::Domain
18 
19 namespace Arp { namespace System { namespace NmPayload { namespace Plc
20 {
21 
22 
28 class PlcStateChangedPayload : public Arp::System::Nm::SpecializedPayload<PlcStateChangedPayload>
29 {
30 public:
32  using SpecializedPayload::SpecializedPayload;
33 
37  PlcStateChangedPayload(PlcState lastState, PlcState newState);
38 
40  PlcState GetLastState() const;
41 
43  PlcState GetNewState() const;
44 
45 private:
46  using PayloadFieldType = std::underlying_type<PlcState>::type;
47 
48  static String PlcStateToString(PlcState plcState);
49  static String PlcStateToString(PayloadFieldType plcState);
50  static String MaskedPlcStateToString(PayloadFieldType maskedPlcState);
51  static String GetFlagsDescriptions(PayloadFieldType plcState);
52  static bool IsFlagSet(PayloadFieldType plcState, PayloadFieldType flag);
53 
54 private:
55  // Do not change the order of the field initialization!
56  size_t indexLastState = this->AddField<PayloadFieldType>();
57  size_t indexNewState = this->AddField<PayloadFieldType>();
58 };
59 
60 
61 }}}} // namespace Arp::System::NmPayload::Plc
std::uint32_t uint32
The Arp unsigned integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:35
Base class for custom Payload classes
Definition: SpecializedPayload.hpp:42
PlcState
Definition: PlcState.hpp:13
Root namespace for the PLCnext API
System components used by the System, Device, Plc or Io domains.
Payload class for state changes of the PLC
Definition: PlcStateChangedPayload.hpp:28