libiec61850  1.6.0
sv_subscriber.h
Go to the documentation of this file.
1 /*
2  * sv_subscriber.h
3  *
4  * Copyright 2015-2022 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 SAMPLED_VALUES_SV_SUBSCRIBER_H_
25 #define SAMPLED_VALUES_SV_SUBSCRIBER_H_
26 
27 #include "libiec61850_common_api.h"
28 #include "iec61850_common.h"
29 #include "r_session.h"
30 #include "hal_ethernet.h"
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
97 typedef struct sSVSubscriber_ASDU* SVSubscriber_ASDU;
98 
106 typedef struct sSVSubscriber* SVSubscriber;
107 
117 typedef void (*SVUpdateListener)(SVSubscriber subscriber, void* parameter, SVSubscriber_ASDU asdu);
118 
122 typedef struct sSVReceiver* SVReceiver;
123 
133 LIB61850_API SVReceiver
135 
143 LIB61850_API SVReceiver
144 SVReceiver_createRemote(RSession session);
145 
151 LIB61850_API void
153 
164 LIB61850_API void
166 
177 LIB61850_API void
178 SVReceiver_setInterfaceId(SVReceiver self, const char* interfaceId);
179 
188 LIB61850_API void
190 
197 LIB61850_API void
199 
207 LIB61850_API void
209 
215 LIB61850_API void
217 
227 LIB61850_API bool
229 
235 LIB61850_API void
237 
238 /***************************************
239  * Functions for non-threaded operation
240  ***************************************/
241 
242 LIB61850_API bool
244 
245 LIB61850_API void
247 
257 LIB61850_API bool
259 
260 /*
261  * \brief Create a new SV subscriber instance
262  *
263  * \param ethAddr optional destination address (NULL to not specify the destination address)
264  * \param appID the APP-ID to identify matching SV messages
265  *
266  * \return the new subscriber instance
267  */
268 
269 LIB61850_API SVSubscriber
270 SVSubscriber_create(const uint8_t* ethAddr, uint16_t appID);
271 
283 LIB61850_API void
284 SVSubscriber_setListener(SVSubscriber self, SVUpdateListener listener, void* parameter);
285 
286 LIB61850_API void
288 
289 /*************************************************************************
290  * SVSubscriber_ASDU object methods
291  **************************************************************************/
292 
306 LIB61850_API uint16_t
308 
314 LIB61850_API const char*
316 
322 LIB61850_API const char*
324 
330 LIB61850_API uint32_t
332 
338 LIB61850_API uint8_t
340 
346 LIB61850_API uint16_t
348 
356 LIB61850_API bool
358 
366 LIB61850_API bool
368 
376 LIB61850_API bool
378 
386 LIB61850_API bool
388 
396 LIB61850_API uint64_t
398 
406 LIB61850_API nsSinceEpoch
408 
417 LIB61850_API int8_t
419 
428 LIB61850_API int16_t
430 
439 LIB61850_API int32_t
441 
450 LIB61850_API int64_t
452 
461 LIB61850_API uint8_t
463 
472 LIB61850_API uint16_t
474 
483 LIB61850_API uint32_t
485 
494 LIB61850_API uint64_t
496 
505 LIB61850_API float
507 
516 LIB61850_API double
518 
527 LIB61850_API Timestamp
529 
540 LIB61850_API Quality
542 
550 LIB61850_API int
552 
560 uint8_t
562 
565 #ifdef __cplusplus
566 }
567 #endif
568 
569 #endif /* SAMPLED_VALUES_SV_SUBSCRIBER_ */
uint16_t Quality
Definition: iec61850_common.h:326
struct sSVSubscriber_ASDU * SVSubscriber_ASDU
opaque handle to a SV ASDU (Application service data unit) instance.
Definition: sv_subscriber.h:97
LIB61850_API void SVReceiver_enableDestAddrCheck(SVReceiver self)
Enable check for destination address of the received SV messages.
LIB61850_API void SVReceiver_start(SVReceiver self)
Receiver starts listening for SV messages.
LIB61850_API SVReceiver SVReceiver_create(void)
Create a new SV receiver instance.
LIB61850_API void SVSubscriber_setListener(SVSubscriber self, SVUpdateListener listener, void *parameter)
Set a callback handler to process received SV messages.
struct sSVReceiver * SVReceiver
opaque handle to a SV receiver instance
Definition: sv_subscriber.h:122
LIB61850_API void SVReceiver_setInterfaceId(SVReceiver self, const char *interfaceId)
Set the Ethernet interface ID for the receiver instance.
LIB61850_API void SVSubscriber_destroy(SVSubscriber self)
LIB61850_API bool SVReceiver_tick(SVReceiver self)
Parse SV messages if they are available.
LIB61850_API void SVReceiver_disableDestAddrCheck(SVReceiver self)
Disable check for destination address of the received SV messages.
LIB61850_API bool SVReceiver_startThreadless(SVReceiver self)
struct sSVSubscriber * SVSubscriber
opaque handle to a SV subscriber instance
Definition: sv_subscriber.h:106
LIB61850_API void SVReceiver_stop(SVReceiver self)
Receiver stops listening for SV messages.
LIB61850_API void SVReceiver_destroy(SVReceiver self)
Destroy receiver instance (cleanup resources)
LIB61850_API SVReceiver SVReceiver_createRemote(RSession session)
Create a new R-SV receiver instance.
LIB61850_API void SVReceiver_removeSubscriber(SVReceiver self, SVSubscriber subscriber)
Disconnect subscriber and receiver.
LIB61850_API SVSubscriber SVSubscriber_create(const uint8_t *ethAddr, uint16_t appID)
LIB61850_API void SVReceiver_addSubscriber(SVReceiver self, SVSubscriber subscriber)
Add a subscriber instance to the receiver.
LIB61850_API void SVReceiver_stopThreadless(SVReceiver self)
void(* SVUpdateListener)(SVSubscriber subscriber, void *parameter, SVSubscriber_ASDU asdu)
Callback function for received SV messages.
Definition: sv_subscriber.h:117
LIB61850_API bool SVReceiver_isRunning(SVReceiver self)
Check if SV receiver is running.
LIB61850_API uint64_t SVSubscriber_ASDU_getRefrTmAsMs(SVSubscriber_ASDU self)
Get the RefrTim value included in SV ASDU as milliseconds timestamp.
LIB61850_API int8_t SVSubscriber_ASDU_getINT8(SVSubscriber_ASDU self, int index)
Get an INT8 data value in the data part of the ASDU.
LIB61850_API bool SVSubscriber_ASDU_hasRefrTm(SVSubscriber_ASDU self)
Check if RefrTm value is included in the SV ASDU.
LIB61850_API bool SVSubscriber_ASDU_hasSmpRate(SVSubscriber_ASDU self)
Check if SmpRate value is included in the SV ASDU.
LIB61850_API bool SVSubscriber_ASDU_hasDatSet(SVSubscriber_ASDU self)
Check if DatSet value is included in the SV ASDU.
LIB61850_API Timestamp SVSubscriber_ASDU_getTimestamp(SVSubscriber_ASDU self, int index)
Get a timestamp data value in the data part of the ASDU.
LIB61850_API nsSinceEpoch SVSubscriber_ASDU_getRefrTmAsNs(SVSubscriber_ASDU self)
Get the RefrTim value included in SV ASDU as nanoseconds timestamp.
LIB61850_API uint32_t SVSubscriber_ASDU_getConfRev(SVSubscriber_ASDU self)
return the ConfRev value included in the SV ASDU
LIB61850_API const char * SVSubscriber_ASDU_getDatSet(SVSubscriber_ASDU self)
return the DatSet value included in the SV ASDU
LIB61850_API Quality SVSubscriber_ASDU_getQuality(SVSubscriber_ASDU self, int index)
Get a quality value in the data part of the ASDU.
LIB61850_API int SVSubscriber_ASDU_getDataSize(SVSubscriber_ASDU self)
Returns the size of the data part of the ASDU.
LIB61850_API uint64_t SVSubscriber_ASDU_getINT64U(SVSubscriber_ASDU self, int index)
Get an INT64U data value in the data part of the ASDU.
LIB61850_API int64_t SVSubscriber_ASDU_getINT64(SVSubscriber_ASDU self, int index)
Get an INT64 data value in the data part of the ASDU.
LIB61850_API int32_t SVSubscriber_ASDU_getINT32(SVSubscriber_ASDU self, int index)
Get an INT32 data value in the data part of the ASDU.
LIB61850_API bool SVSubscriber_ASDU_hasSmpMod(SVSubscriber_ASDU self)
Check if SmpMod value is included in the SV ASDU.
LIB61850_API uint8_t SVSubscriber_ASDU_getSmpMod(SVSubscriber_ASDU self)
return the SmpMod value included in the SV ASDU
LIB61850_API uint16_t SVSubscriber_ASDU_getINT16U(SVSubscriber_ASDU self, int index)
Get an INT16U data value in the data part of the ASDU.
LIB61850_API uint32_t SVSubscriber_ASDU_getINT32U(SVSubscriber_ASDU self, int index)
Get an INT32U data value in the data part of the ASDU.
uint8_t SVSubscriber_ASDU_getSmpSynch(SVSubscriber_ASDU self)
return the SmpSynch value included in the SV ASDU
LIB61850_API double SVSubscriber_ASDU_getFLOAT64(SVSubscriber_ASDU self, int index)
Get an FLOAT64 data value in the data part of the ASDU.
LIB61850_API uint16_t SVSubscriber_ASDU_getSmpCnt(SVSubscriber_ASDU self)
return the SmpCnt value included in the SV ASDU
LIB61850_API uint8_t SVSubscriber_ASDU_getINT8U(SVSubscriber_ASDU self, int index)
Get an INT8U data value in the data part of the ASDU.
LIB61850_API int16_t SVSubscriber_ASDU_getINT16(SVSubscriber_ASDU self, int index)
Get an INT16 data value in the data part of the ASDU.
LIB61850_API const char * SVSubscriber_ASDU_getSvId(SVSubscriber_ASDU self)
return the SvID value included in the SV ASDU
LIB61850_API float SVSubscriber_ASDU_getFLOAT32(SVSubscriber_ASDU self, int index)
Get an FLOAT32 data value in the data part of the ASDU.
LIB61850_API uint16_t SVSubscriber_ASDU_getSmpRate(SVSubscriber_ASDU self)
return the SmpRate value included in the SV ASDU
Definition: iec61850_common.h:417