/src/opendnp3/cpp/lib/src/app/WriteConversions.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright 2013-2022 Step Function I/O, LLC |
3 | | * |
4 | | * Licensed to Green Energy Corp (www.greenenergycorp.com) and Step Function I/O |
5 | | * LLC (https://stepfunc.io) under one or more contributor license agreements. |
6 | | * See the NOTICE file distributed with this work for additional information |
7 | | * regarding copyright ownership. Green Energy Corp and Step Function I/O LLC license |
8 | | * this file to you under the Apache License, Version 2.0 (the "License"); you |
9 | | * may not use this file except in compliance with the License. You may obtain |
10 | | * a copy of the License at: |
11 | | * |
12 | | * http://www.apache.org/licenses/LICENSE-2.0 |
13 | | * |
14 | | * Unless required by applicable law or agreed to in writing, software |
15 | | * distributed under the License is distributed on an "AS IS" BASIS, |
16 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
17 | | * See the License for the specific language governing permissions and |
18 | | * limitations under the License. |
19 | | */ |
20 | | #ifndef OPENDNP3_WRITECONVERSIONS_H |
21 | | #define OPENDNP3_WRITECONVERSIONS_H |
22 | | |
23 | | #include "app/WriteConversionTemplates.h" |
24 | | #include "gen/objects/Group1.h" |
25 | | #include "gen/objects/Group10.h" |
26 | | #include "gen/objects/Group11.h" |
27 | | #include "gen/objects/Group12.h" |
28 | | #include "gen/objects/Group13.h" |
29 | | #include "gen/objects/Group2.h" |
30 | | #include "gen/objects/Group20.h" |
31 | | #include "gen/objects/Group21.h" |
32 | | #include "gen/objects/Group22.h" |
33 | | #include "gen/objects/Group23.h" |
34 | | #include "gen/objects/Group3.h" |
35 | | #include "gen/objects/Group30.h" |
36 | | #include "gen/objects/Group32.h" |
37 | | #include "gen/objects/Group4.h" |
38 | | #include "gen/objects/Group40.h" |
39 | | #include "gen/objects/Group41.h" |
40 | | #include "gen/objects/Group42.h" |
41 | | #include "gen/objects/Group43.h" |
42 | | #include "gen/objects/Group50.h" |
43 | | |
44 | | #include "opendnp3/app/MeasurementTypes.h" |
45 | | |
46 | | namespace opendnp3 |
47 | | { |
48 | | |
49 | | // Group 1 |
50 | | typedef ConvertQ<Group1Var2, Binary> ConvertGroup1Var2; |
51 | | |
52 | | // Group 2 |
53 | | typedef ConvertQ<Group2Var1, Binary> ConvertGroup2Var1; |
54 | | typedef ConvertQT<Group2Var2, Binary> ConvertGroup2Var2; |
55 | | typedef ConvertQTDowncast<Group2Var3, Binary, uint16_t> ConvertGroup2Var3; |
56 | | |
57 | | // Group 3 |
58 | | typedef ConvertQ<Group3Var2, DoubleBitBinary> ConvertGroup3Var2; |
59 | | |
60 | | // Group 3 |
61 | | typedef ConvertQ<Group4Var1, DoubleBitBinary> ConvertGroup4Var1; |
62 | | typedef ConvertQT<Group4Var2, DoubleBitBinary> ConvertGroup4Var2; |
63 | | typedef ConvertQTDowncast<Group4Var3, DoubleBitBinary, uint16_t> ConvertGroup4Var3; |
64 | | |
65 | | // Group 10 |
66 | | typedef ConvertQ<Group10Var2, BinaryOutputStatus> ConvertGroup10Var2; |
67 | | |
68 | | // Group 11 |
69 | | typedef ConvertQ<Group11Var1, BinaryOutputStatus> ConvertGroup11Var1; |
70 | | typedef ConvertQT<Group11Var2, BinaryOutputStatus> ConvertGroup11Var2; |
71 | | |
72 | | // Group 12 |
73 | | struct ConvertGroup12Var1 : private StaticOnly |
74 | | { |
75 | | static Group12Var1 Apply(const ControlRelayOutputBlock& crob) |
76 | 3.70k | { |
77 | 3.70k | Group12Var1 ret; |
78 | 3.70k | ret.code = crob.rawCode; |
79 | 3.70k | ret.count = crob.count; |
80 | 3.70k | ret.onTime = crob.onTimeMS; |
81 | 3.70k | ret.offTime = crob.offTimeMS; |
82 | 3.70k | ret.status = CommandStatusSpec::to_type(crob.status); |
83 | 3.70k | return ret; |
84 | 3.70k | } |
85 | | }; |
86 | | |
87 | | // Group 13 |
88 | | struct ConvertGroup13Var1 : private StaticOnly |
89 | | { |
90 | | static Group13Var1 Apply(const BinaryCommandEvent& ev) |
91 | 0 | { |
92 | 0 | Group13Var1 ret; |
93 | 0 | ret.flags = ev.GetFlags().value; |
94 | 0 | return ret; |
95 | 0 | } |
96 | | }; |
97 | | |
98 | | struct ConvertGroup13Var2 : private StaticOnly |
99 | | { |
100 | | static Group13Var2 Apply(const BinaryCommandEvent& ev) |
101 | 0 | { |
102 | 0 | Group13Var2 ret; |
103 | 0 | ret.flags = ev.GetFlags().value; |
104 | 0 | ret.time = ev.time; |
105 | 0 | return ret; |
106 | 0 | } |
107 | | }; |
108 | | |
109 | | // Group 20 |
110 | | typedef ConvertQV<Group20Var1, Counter> ConvertGroup20Var1; |
111 | | typedef ConvertQVandTruncate<Group20Var2, Counter> ConvertGroup20Var2; |
112 | | |
113 | | typedef ConvertV<Group20Var5, Counter> ConvertGroup20Var5; |
114 | | typedef ConvertVandTruncate<Group20Var6, Counter> ConvertGroup20Var6; |
115 | | |
116 | | // Group 21 |
117 | | typedef ConvertQV<Group21Var1, FrozenCounter> ConvertGroup21Var1; |
118 | | typedef ConvertQVandTruncate<Group21Var2, FrozenCounter> ConvertGroup21Var2; |
119 | | |
120 | | typedef ConvertQVT<Group21Var5, FrozenCounter> ConvertGroup21Var5; |
121 | | typedef ConvertQVTandTruncate<Group21Var6, FrozenCounter> ConvertGroup21Var6; |
122 | | |
123 | | typedef ConvertV<Group21Var9, FrozenCounter> ConvertGroup21Var9; |
124 | | typedef ConvertVandTruncate<Group21Var10, FrozenCounter> ConvertGroup21Var10; |
125 | | |
126 | | // Group 22 |
127 | | typedef ConvertQV<Group22Var1, Counter> ConvertGroup22Var1; |
128 | | typedef ConvertQVandTruncate<Group22Var2, Counter> ConvertGroup22Var2; |
129 | | |
130 | | typedef ConvertQVT<Group22Var5, Counter> ConvertGroup22Var5; |
131 | | typedef ConvertQVTandTruncate<Group22Var6, Counter> ConvertGroup22Var6; |
132 | | |
133 | | // Group 23 |
134 | | typedef ConvertQV<Group23Var1, FrozenCounter> ConvertGroup23Var1; |
135 | | typedef ConvertQVandTruncate<Group23Var2, FrozenCounter> ConvertGroup23Var2; |
136 | | typedef ConvertQVT<Group23Var5, FrozenCounter> ConvertGroup23Var5; |
137 | | typedef ConvertQVTandTruncate<Group23Var6, FrozenCounter> ConvertGroup23Var6; |
138 | | |
139 | | // Group 30 |
140 | | typedef ConvertQVRangeCheck<Group30Var1, Analog, 0x20> ConvertGroup30Var1; |
141 | | typedef ConvertQVRangeCheck<Group30Var2, Analog, 0x20> ConvertGroup30Var2; |
142 | | typedef ConvertVRangeCheck<Group30Var3, Analog> ConvertGroup30Var3; |
143 | | typedef ConvertVRangeCheck<Group30Var4, Analog> ConvertGroup30Var4; |
144 | | typedef ConvertQVRangeCheck<Group30Var5, Analog, 0x20> ConvertGroup30Var5; |
145 | | typedef ConvertQV<Group30Var6, Analog> ConvertGroup30Var6; |
146 | | |
147 | | // Group 32 |
148 | | typedef ConvertQVRangeCheck<Group32Var1, Analog, 0x20> ConvertGroup32Var1; |
149 | | typedef ConvertQVRangeCheck<Group32Var2, Analog, 0x20> ConvertGroup32Var2; |
150 | | typedef ConvertQVTRangeCheck<Group32Var3, Analog, 0x20> ConvertGroup32Var3; |
151 | | typedef ConvertQVTRangeCheck<Group32Var4, Analog, 0x20> ConvertGroup32Var4; |
152 | | typedef ConvertQVRangeCheck<Group32Var5, Analog, 0x20> ConvertGroup32Var5; |
153 | | typedef ConvertQV<Group32Var6, Analog> ConvertGroup32Var6; |
154 | | typedef ConvertQVTRangeCheck<Group32Var7, Analog, 0x20> ConvertGroup32Var7; |
155 | | typedef ConvertQVT<Group32Var8, Analog> ConvertGroup32Var8; |
156 | | |
157 | | typedef ConvertQVRangeCheck<Group40Var1, AnalogOutputStatus, 0x20> ConvertGroup40Var1; |
158 | | typedef ConvertQVRangeCheck<Group40Var2, AnalogOutputStatus, 0x20> ConvertGroup40Var2; |
159 | | typedef ConvertQVRangeCheck<Group40Var3, AnalogOutputStatus, 0x20> ConvertGroup40Var3; |
160 | | typedef ConvertQV<Group40Var4, AnalogOutputStatus> ConvertGroup40Var4; |
161 | | |
162 | | // Group 41 |
163 | | typedef ConvertQS<Group41Var1, AnalogOutputInt32> ConvertGroup41Var1; |
164 | | typedef ConvertQS<Group41Var2, AnalogOutputInt16> ConvertGroup41Var2; |
165 | | typedef ConvertQS<Group41Var3, AnalogOutputFloat32> ConvertGroup41Var3; |
166 | | typedef ConvertQS<Group41Var4, AnalogOutputDouble64> ConvertGroup41Var4; |
167 | | |
168 | | // Group 42 |
169 | | typedef ConvertQVRangeCheck<Group42Var1, AnalogOutputStatus, 0x20> ConvertGroup42Var1; |
170 | | typedef ConvertQVRangeCheck<Group42Var2, AnalogOutputStatus, 0x20> ConvertGroup42Var2; |
171 | | typedef ConvertQVTRangeCheck<Group42Var3, AnalogOutputStatus, 0x20> ConvertGroup42Var3; |
172 | | typedef ConvertQVTRangeCheck<Group42Var4, AnalogOutputStatus, 0x20> ConvertGroup42Var4; |
173 | | typedef ConvertQVRangeCheck<Group42Var5, AnalogOutputStatus, 0x20> ConvertGroup42Var5; |
174 | | typedef ConvertQV<Group42Var6, AnalogOutputStatus> ConvertGroup42Var6; |
175 | | typedef ConvertQVTRangeCheck<Group42Var7, AnalogOutputStatus, 0x20> ConvertGroup42Var7; |
176 | | typedef ConvertQVT<Group42Var8, AnalogOutputStatus> ConvertGroup42Var8; |
177 | | |
178 | | // Group 43 |
179 | | template<class Target> struct ConvertGroup43RangeCheck : private StaticOnly |
180 | | { |
181 | | static Target Apply(const AnalogCommandEvent& src) |
182 | 0 | { |
183 | 0 | Target t; |
184 | 0 | DownSampling<double, typename Target::ValueType>::Apply(src.value, t.value); |
185 | 0 | t.status = CommandStatusSpec::to_type(src.status); |
186 | 0 | return t; |
187 | 0 | } Unexecuted instantiation: opendnp3::ConvertGroup43RangeCheck<opendnp3::Group43Var1>::Apply(opendnp3::AnalogCommandEvent const&) Unexecuted instantiation: opendnp3::ConvertGroup43RangeCheck<opendnp3::Group43Var2>::Apply(opendnp3::AnalogCommandEvent const&) Unexecuted instantiation: opendnp3::ConvertGroup43RangeCheck<opendnp3::Group43Var5>::Apply(opendnp3::AnalogCommandEvent const&) |
188 | | }; |
189 | | |
190 | | template<class Target> struct ConvertGroup43WithTimeRangeCheck : private StaticOnly |
191 | | { |
192 | | static Target Apply(const AnalogCommandEvent& src) |
193 | 0 | { |
194 | 0 | Target t; |
195 | 0 | DownSampling<double, typename Target::ValueType>::Apply(src.value, t.value); |
196 | 0 | t.status = CommandStatusSpec::to_type(src.status); |
197 | 0 | t.time = src.time; |
198 | 0 | return t; |
199 | 0 | } Unexecuted instantiation: opendnp3::ConvertGroup43WithTimeRangeCheck<opendnp3::Group43Var3>::Apply(opendnp3::AnalogCommandEvent const&) Unexecuted instantiation: opendnp3::ConvertGroup43WithTimeRangeCheck<opendnp3::Group43Var4>::Apply(opendnp3::AnalogCommandEvent const&) Unexecuted instantiation: opendnp3::ConvertGroup43WithTimeRangeCheck<opendnp3::Group43Var7>::Apply(opendnp3::AnalogCommandEvent const&) |
200 | | }; |
201 | | |
202 | | typedef ConvertGroup43RangeCheck<Group43Var1> ConvertGroup43Var1; |
203 | | typedef ConvertGroup43RangeCheck<Group43Var2> ConvertGroup43Var2; |
204 | | typedef ConvertGroup43WithTimeRangeCheck<Group43Var3> ConvertGroup43Var3; |
205 | | typedef ConvertGroup43WithTimeRangeCheck<Group43Var4> ConvertGroup43Var4; |
206 | | typedef ConvertGroup43RangeCheck<Group43Var5> ConvertGroup43Var5; |
207 | | |
208 | | struct ConvertGroup43Var6 : private StaticOnly |
209 | | { |
210 | | static Group43Var6 Apply(const AnalogCommandEvent& src) |
211 | 0 | { |
212 | 0 | Group43Var6 t; |
213 | 0 | t.value = src.value; |
214 | 0 | t.status = CommandStatusSpec::to_type(src.status); |
215 | 0 | return t; |
216 | 0 | } |
217 | | }; |
218 | | |
219 | | typedef ConvertGroup43WithTimeRangeCheck<Group43Var7> ConvertGroup43Var7; |
220 | | |
221 | | struct ConvertGroup43Var8 : private StaticOnly |
222 | | { |
223 | | static Group43Var8 Apply(const AnalogCommandEvent& src) |
224 | 0 | { |
225 | 0 | Group43Var8 t; |
226 | 0 | t.value = src.value; |
227 | 0 | t.status = CommandStatusSpec::to_type(src.status); |
228 | 0 | t.time = src.time; |
229 | 0 | return t; |
230 | 0 | } |
231 | | }; |
232 | | |
233 | | // Group 50 |
234 | | struct ConvertGroup50Var4 : private StaticOnly |
235 | | { |
236 | | static Group50Var4 Apply(const TimeAndInterval& value) |
237 | 1.80k | { |
238 | 1.80k | Group50Var4 ret; |
239 | 1.80k | ret.time = value.time; |
240 | 1.80k | ret.interval = value.interval; |
241 | 1.80k | ret.units = value.units; |
242 | 1.80k | return ret; |
243 | 1.80k | } |
244 | | }; |
245 | | |
246 | | } // namespace opendnp3 |
247 | | |
248 | | #endif |