Coverage Report

Created: 2025-11-16 06:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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