libiec61850  1.5.3
iec61850_common.h
Go to the documentation of this file.
1 /*
2  * iec61850_common.h
3  *
4  * Copyright 2013-2019 Michael Zillgith
5  *
6  * This file is part of libIEC61850.
7  *
8  * libIEC61850 is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * libIEC61850 is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with libIEC61850. If not, see <http://www.gnu.org/licenses/>.
20  *
21  * See COPYING file for the complete license text.
22  */
23 
24 #ifndef IEC61850_COMMON_H_
25 #define IEC61850_COMMON_H_
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 
32 #include "libiec61850_common_api.h"
33 #include "logging_api.h"
34 #include "linked_list.h"
35 
42 #define IEC_61850_EDITION_1 0
43 
45 #define IEC_61850_EDITION_2 1
46 
48 #define IEC_61850_EDITION_2_1 2
49 
51 typedef struct {
52  uint8_t vlanPriority;
53  uint16_t vlanId;
54  uint16_t appId;
55  uint8_t dstAddress[6];
57 
61 typedef enum {
66 
72 
78 
83 
89 
97 #define TRG_OPT_DATA_CHANGED 1
98 
100 #define TRG_OPT_QUALITY_CHANGED 2
101 
103 #define TRG_OPT_DATA_UPDATE 4
104 
106 #define TRG_OPT_INTEGRITY 8
107 
109 #define TRG_OPT_GI 16
110 
112 #define TRG_OPT_TRANSIENT 128
124 #define RPT_OPT_SEQ_NUM 1
125 
127 #define RPT_OPT_TIME_STAMP 2
128 
130 #define RPT_OPT_REASON_FOR_INCLUSION 4
131 
133 #define RPT_OPT_DATA_SET 8
134 
136 #define RPT_OPT_DATA_REFERENCE 16
137 
139 #define RPT_OPT_BUFFER_OVERFLOW 32
140 
142 #define RPT_OPT_ENTRY_ID 64
143 
145 #define RPT_OPT_CONF_REV 128
155 #define CONTROL_ORCAT_NOT_SUPPORTED 0
156 
158 #define CONTROL_ORCAT_BAY_CONTROL 1
159 
161 #define CONTROL_ORCAT_STATION_CONTROL 2
162 
164 #define CONTROL_ORCAT_REMOTE_CONTROL 3
165 
167 #define CONTROL_ORCAT_AUTOMATIC_BAY 4
168 
170 #define CONTROL_ORCAT_AUTOMATIC_STATION 5
171 
173 #define CONTROL_ORCAT_AUTOMATIC_REMOTE 6
174 
176 #define CONTROL_ORCAT_MAINTENANCE 7
177 
179 #define CONTROL_ORCAT_PROCESS 8
180 
190 typedef enum {
220 
229 typedef enum {
235 
244 #if (CONFIG_PROVIDE_OLD_FC_DEFINES == 1)
245 #define ST IEC61850_FC_ST
246 #define MX IEC61850_FC_MX
247 #define SP IEC61850_FC_SP
248 #define SV IEC61850_FC_SV
249 #define CF IEC61850_FC_CF
250 #define DC IEC61850_FC_DC
251 #define SG IEC61850_FC_SG
252 #define SE IEC61850_FC_SE
253 #define SR IEC61850_FC_SR
254 #define OR IEC61850_FC_OR
255 #define BL IEC61850_FC_BL
256 #define EX IEC61850_FC_EX
257 #define CO IEC61850_FC_CO
258 #define ALL IEC61850_FC_ALL
259 #define NONE IEC61850_FC_NONE
260 #endif /* (CONFIG_PROVIDE_OLD_FC_DEFINES == 1) */
261 
262 
264 typedef enum eFunctionalConstraint {
303 
306  IEC61850_FC_NONE = -1
308 
312 LIB61850_API char*
314 
318 LIB61850_API FunctionalConstraint
319 FunctionalConstraint_fromString(const char* fcString);
320 
330 typedef uint16_t Quality;
331 typedef uint16_t Validity;
332 
333 #define QUALITY_VALIDITY_GOOD 0
334 #define QUALITY_VALIDITY_INVALID 2
335 #define QUALITY_VALIDITY_RESERVED 1
336 #define QUALITY_VALIDITY_QUESTIONABLE 3
337 
338 #define QUALITY_DETAIL_OVERFLOW 4
339 #define QUALITY_DETAIL_OUT_OF_RANGE 8
340 #define QUALITY_DETAIL_BAD_REFERENCE 16
341 #define QUALITY_DETAIL_OSCILLATORY 32
342 #define QUALITY_DETAIL_FAILURE 64
343 #define QUALITY_DETAIL_OLD_DATA 128
344 #define QUALITY_DETAIL_INCONSISTENT 256
345 #define QUALITY_DETAIL_INACCURATE 512
346 
347 #define QUALITY_SOURCE_SUBSTITUTED 1024
348 
349 #define QUALITY_TEST 2048
350 
351 #define QUALITY_OPERATOR_BLOCKED 4096
352 
353 #define QUALITY_DERIVED 8192
354 
355 LIB61850_API Validity
357 
358 LIB61850_API void
360 
361 LIB61850_API void
362 Quality_setFlag(Quality* self, int flag);
363 
364 LIB61850_API void
365 Quality_unsetFlag(Quality* self, int flag);
366 
367 LIB61850_API bool
368 Quality_isFlagSet(Quality* self, int flag);
369 
370 LIB61850_API Quality
372 
373 LIB61850_API MmsValue*
375 
384 typedef enum {
387  DBPOS_ON = 2,
388  DBPOS_BAD_STATE = 3
390 
391 
399 LIB61850_API Dbpos
400 Dbpos_fromMmsValue(const MmsValue* mmsValue);
401 
410 LIB61850_API MmsValue*
411 Dbpos_toMmsValue(MmsValue* mmsValue, Dbpos dbpos);
412 
421 typedef union {
422  uint8_t val[8];
423 } Timestamp;
424 
425 LIB61850_API Timestamp*
427 
428 LIB61850_API Timestamp*
429 Timestamp_createFromByteArray(const uint8_t* byteArray);
430 
431 LIB61850_API void
433 
434 LIB61850_API void
436 
437 LIB61850_API uint32_t
439 
440 LIB61850_API msSinceEpoch
442 
443 LIB61850_API nsSinceEpoch
445 
446 LIB61850_API bool
448 
449 LIB61850_API void
451 
452 LIB61850_API bool
454 
455 LIB61850_API void
457 
458 LIB61850_API bool
460 
461 LIB61850_API void
463 
464 LIB61850_API int
466 
472 LIB61850_API void
473 Timestamp_setSubsecondPrecision(Timestamp* self, int subsecondPrecision);
474 
484 LIB61850_API void
485 Timestamp_setTimeInSeconds(Timestamp* self, uint32_t secondsSinceEpoch);
486 
495 LIB61850_API void
496 Timestamp_setTimeInMilliseconds(Timestamp* self, msSinceEpoch msTime);
497 
506 LIB61850_API void
507 Timestamp_setTimeInNanoseconds(Timestamp* self, nsSinceEpoch nsTime);
508 
509 LIB61850_API void
511 
518 LIB61850_API MmsValue*
520 
529 LIB61850_API Timestamp*
531 
537 LIB61850_API char*
539 
544 #ifdef __cplusplus
545 }
546 #endif
547 
548 #endif /* IEC61850_COMMON_H_ */
ControlAddCause
Definition: iec61850_common.h:190
@ ADD_CAUSE_ABORTION_BY_COMMUNICATION_LOSS
Definition: iec61850_common.h:214
@ ADD_CAUSE_BLOCKED_BY_INTERLOCKING
Definition: iec61850_common.h:201
@ ADD_CAUSE_UNKNOWN
Definition: iec61850_common.h:191
@ ADD_CAUSE_OBJECT_ALREADY_SELECTED
Definition: iec61850_common.h:210
@ ADD_CAUSE_SELECT_FAILED
Definition: iec61850_common.h:194
@ ADD_CAUSE_ABORTION_BY_CANCEL
Definition: iec61850_common.h:206
@ ADD_CAUSE_BLOCKED_BY_PROCESS
Definition: iec61850_common.h:200
@ ADD_CAUSE_COMMAND_ALREADY_IN_EXECUTION
Definition: iec61850_common.h:203
@ ADD_CAUSE_ABORTION_BY_TRIP
Definition: iec61850_common.h:208
@ ADD_CAUSE_OBJECT_NOT_SELECTED
Definition: iec61850_common.h:209
@ ADD_CAUSE_BLOCKED_BY_SYNCHROCHECK
Definition: iec61850_common.h:202
@ ADD_CAUSE_BLOCKED_BY_SWITCHING_HIERARCHY
Definition: iec61850_common.h:193
@ ADD_CAUSE_INVALID_POSITION
Definition: iec61850_common.h:195
@ ADD_CAUSE_STEP_LIMIT
Definition: iec61850_common.h:198
@ ADD_CAUSE_NO_ACCESS_AUTHORITY
Definition: iec61850_common.h:211
@ ADD_CAUSE_PARAMETER_CHANGE_IN_EXECUTION
Definition: iec61850_common.h:197
@ ADD_CAUSE_ENDED_WITH_OVERSHOOT
Definition: iec61850_common.h:212
@ ADD_CAUSE_ABORTION_BY_COMMAND
Definition: iec61850_common.h:215
@ ADD_CAUSE_TIME_LIMIT_OVER
Definition: iec61850_common.h:207
@ ADD_CAUSE_BLOCKED_BY_HEALTH
Definition: iec61850_common.h:204
@ ADD_CAUSE_LOCKED_BY_OTHER_CLIENT
Definition: iec61850_common.h:218
@ ADD_CAUSE_1_OF_N_CONTROL
Definition: iec61850_common.h:205
@ ADD_CAUSE_ABORTION_DUE_TO_DEVIATION
Definition: iec61850_common.h:213
@ ADD_CAUSE_NOT_SUPPORTED
Definition: iec61850_common.h:192
@ ADD_CAUSE_BLOCKED_BY_MODE
Definition: iec61850_common.h:199
@ ADD_CAUSE_NONE
Definition: iec61850_common.h:216
@ ADD_CAUSE_INCONSISTENT_PARAMETERS
Definition: iec61850_common.h:217
@ ADD_CAUSE_POSITION_REACHED
Definition: iec61850_common.h:196
ControlLastApplError
Definition: iec61850_common.h:229
@ CONTROL_ERROR_TIMEOUT_TEST
Definition: iec61850_common.h:232
@ CONTROL_ERROR_NO_ERROR
Definition: iec61850_common.h:230
@ CONTROL_ERROR_OPERATOR_TEST
Definition: iec61850_common.h:233
@ CONTROL_ERROR_UNKNOWN
Definition: iec61850_common.h:231
LIB61850_API Dbpos Dbpos_fromMmsValue(const MmsValue *mmsValue)
convert MMS bit string to Dbpos enumeration type
Dbpos
Definition: iec61850_common.h:384
LIB61850_API MmsValue * Dbpos_toMmsValue(MmsValue *mmsValue, Dbpos dbpos)
conver Dbpos to MMS bit string
@ DBPOS_BAD_STATE
Definition: iec61850_common.h:388
@ DBPOS_ON
Definition: iec61850_common.h:387
@ DBPOS_OFF
Definition: iec61850_common.h:386
@ DBPOS_INTERMEDIATE_STATE
Definition: iec61850_common.h:385
LIB61850_API char * FunctionalConstraint_toString(FunctionalConstraint fc)
convert a function constraint to a static string
LIB61850_API FunctionalConstraint FunctionalConstraint_fromString(const char *fcString)
parse a string treated as a functional constraint representation
FunctionalConstraint
Definition: iec61850_common.h:264
@ IEC61850_FC_BL
Definition: iec61850_common.h:286
@ IEC61850_FC_SE
Definition: iec61850_common.h:280
@ IEC61850_FC_US
Definition: iec61850_common.h:292
@ IEC61850_FC_SP
Definition: iec61850_common.h:270
@ IEC61850_FC_MX
Definition: iec61850_common.h:268
@ IEC61850_FC_LG
Definition: iec61850_common.h:300
@ IEC61850_FC_SV
Definition: iec61850_common.h:272
@ IEC61850_FC_BR
Definition: iec61850_common.h:298
@ IEC61850_FC_OR
Definition: iec61850_common.h:284
@ IEC61850_FC_SR
Definition: iec61850_common.h:282
@ IEC61850_FC_EX
Definition: iec61850_common.h:288
@ IEC61850_FC_ALL
Definition: iec61850_common.h:305
@ IEC61850_FC_SG
Definition: iec61850_common.h:278
@ IEC61850_FC_DC
Definition: iec61850_common.h:276
@ IEC61850_FC_MS
Definition: iec61850_common.h:294
@ IEC61850_FC_GO
Definition: iec61850_common.h:302
@ IEC61850_FC_NONE
Definition: iec61850_common.h:306
@ IEC61850_FC_CO
Definition: iec61850_common.h:290
@ IEC61850_FC_CF
Definition: iec61850_common.h:274
@ IEC61850_FC_ST
Definition: iec61850_common.h:266
@ IEC61850_FC_RP
Definition: iec61850_common.h:296
struct sMmsValue MmsValue
Definition: mms_value.h:68
uint16_t Validity
Definition: iec61850_common.h:331
LIB61850_API Quality Quality_fromMmsValue(const MmsValue *mmsValue)
LIB61850_API void Quality_setValidity(Quality *self, Validity validity)
uint16_t Quality
Definition: iec61850_common.h:330
LIB61850_API bool Quality_isFlagSet(Quality *self, int flag)
LIB61850_API void Quality_setFlag(Quality *self, int flag)
LIB61850_API void Quality_unsetFlag(Quality *self, int flag)
LIB61850_API Validity Quality_getValidity(Quality *self)
LIB61850_API MmsValue * Quality_toMmsValue(Quality *self, MmsValue *mmsValue)
LIB61850_API msSinceEpoch Timestamp_getTimeInMs(Timestamp *self)
LIB61850_API void Timestamp_setSubsecondPrecision(Timestamp *self, int subsecondPrecision)
Set the subsecond precision value of the time stamp.
LIB61850_API void Timestamp_setClockFailure(Timestamp *self, bool value)
LIB61850_API Timestamp * Timestamp_create(void)
LIB61850_API void Timestamp_setByMmsUtcTime(Timestamp *self, const MmsValue *mmsValue)
LIB61850_API nsSinceEpoch Timestamp_getTimeInNs(Timestamp *self)
LIB61850_API int Timestamp_getSubsecondPrecision(Timestamp *self)
LIB61850_API void Timestamp_destroy(Timestamp *self)
LIB61850_API void Timestamp_setClockNotSynchronized(Timestamp *self, bool value)
LIB61850_API void Timestamp_setTimeInMilliseconds(Timestamp *self, msSinceEpoch msTime)
Set the time in milliseconds.
LIB61850_API Timestamp * Timestamp_fromMmsValue(Timestamp *self, MmsValue *mmsValue)
Get the Timestamp value from an MmsValue instance of type MMS_UTC_TIME.
LIB61850_API MmsValue * Timestamp_toMmsValue(Timestamp *self, MmsValue *mmsValue)
Set an MmsValue instance of type UTCTime to the timestamp value.
LIB61850_API bool Timestamp_isClockNotSynchronized(Timestamp *self)
LIB61850_API bool Timestamp_hasClockFailure(Timestamp *self)
LIB61850_API Timestamp * Timestamp_createFromByteArray(const uint8_t *byteArray)
LIB61850_API void Timestamp_setTimeInNanoseconds(Timestamp *self, nsSinceEpoch nsTime)
Set the time in nanoseconds.
LIB61850_API void Timestamp_setTimeInSeconds(Timestamp *self, uint32_t secondsSinceEpoch)
Set the time in seconds.
LIB61850_API void Timestamp_setLeapSecondKnown(Timestamp *self, bool value)
LIB61850_API char * LibIEC61850_getVersionString(void)
Get the version of the library as string.
LIB61850_API bool Timestamp_isLeapSecondKnown(Timestamp *self)
LIB61850_API uint32_t Timestamp_getTimeInSeconds(Timestamp *self)
LIB61850_API void Timestamp_clearFlags(Timestamp *self)
ControlModel
Control model (represented by "ctlModel" attribute)
Definition: iec61850_common.h:61
@ CONTROL_MODEL_DIRECT_ENHANCED
Definition: iec61850_common.h:82
@ CONTROL_MODEL_STATUS_ONLY
Definition: iec61850_common.h:65
@ CONTROL_MODEL_DIRECT_NORMAL
Definition: iec61850_common.h:71
@ CONTROL_MODEL_SBO_ENHANCED
Definition: iec61850_common.h:87
@ CONTROL_MODEL_SBO_NORMAL
Definition: iec61850_common.h:77
Definition: iec61850_common.h:51
uint8_t vlanPriority
Definition: iec61850_common.h:52
uint16_t vlanId
Definition: iec61850_common.h:53
uint16_t appId
Definition: iec61850_common.h:54
Definition: iec61850_common.h:421