libIEC61850  0.8.4
Open-source IEC 61850 MMS/GOOSE server and client library
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
iec61850_server.h
Go to the documentation of this file.
1 /*
2  * iec61850_server.h
3  *
4  * IEC 61850 server API for libiec61850.
5  *
6  * Copyright 2013, 2014 Michael Zillgith
7  *
8  * This file is part of libIEC61850.
9  *
10  * libIEC61850 is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * libIEC61850 is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with libIEC61850. If not, see <http://www.gnu.org/licenses/>.
22  *
23  * See COPYING file for the complete license text.
24  *
25  */
26 
27 #ifndef IED_SERVER_API_H_
28 #define IED_SERVER_API_H_
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
38 #include "mms_server.h"
39 #include "iec61850_dynamic_model.h"
40 #include "iec61850_model.h"
41 #include "hal_filesystem.h"
43 
47 typedef struct sIedServer* IedServer;
48 
52 typedef struct sClientConnection* ClientConnection;
53 
68 IedServer
69 IedServer_create(IedModel* iedModel);
70 
76 void
77 IedServer_destroy(IedServer self);
78 
85 void
86 IedServer_start(IedServer self, int tcpPort);
87 
93 void
94 IedServer_stop(IedServer self);
95 
106 void
107 IedServer_startThreadless(IedServer self, int tcpPort);
108 
109 int
110 IedServer_waitReady(IedServer self, unsigned int timeoutMs);
111 
121 void
122 IedServer_processIncomingData(IedServer self);
123 
132 void
133 IedServer_performPeriodicTasks(IedServer self);
134 
140 void
141 IedServer_stopThreadless(IedServer self);
142 
150 IedModel*
151 IedServer_getDataModel(IedServer self);
152 
160 bool
161 IedServer_isRunning(IedServer self);
162 
173 MmsServer
174 IedServer_getMmsServer(IedServer self);
175 
183 IsoServer
184 IedServer_getIsoServer(IedServer self);
185 
196 void
197 IedServer_enableGoosePublishing(IedServer self);
198 
207 void
208 IedServer_disableGoosePublishing(IedServer self);
209 
230 void
231 IedServer_setAuthenticator(IedServer self, AcseAuthenticator authenticator, void* authenticatorParameter);
232 
233 
234 
244 const char*
245 ClientConnection_getPeerAddress(ClientConnection self);
246 
257 void*
258 ClientConnection_getSecurityToken(ClientConnection self);
259 
269 typedef void (*IedConnectionIndicationHandler) (IedServer self, ClientConnection connection, bool connected, void* parameter);
270 
278 void
279 IedServer_setConnectionIndicationHandler(IedServer self, IedConnectionIndicationHandler handler, void* parameter);
280 
281 
302 void
303 IedServer_lockDataModel(IedServer self);
304 
313 void
314 IedServer_unlockDataModel(IedServer self);
315 
328 MmsValue*
329 IedServer_getAttributeValue(IedServer self, DataAttribute* dataAttribute);
330 
342 bool
343 IedServer_getBooleanAttributeValue(IedServer self, const DataAttribute* dataAttribute);
344 
356 int32_t
357 IedServer_getInt32AttributeValue(IedServer self, const DataAttribute* dataAttribute);
358 
370 int64_t
371 IedServer_getInt64AttributeValue(IedServer self, const DataAttribute* dataAttribute);
372 
384 uint32_t
385 IedServer_getUInt32AttributeValue(IedServer self, const DataAttribute* dataAttribute);
386 
398 float
399 IedServer_getFloatAttributeValue(IedServer self, const DataAttribute* dataAttribute);
400 
412 uint64_t
413 IedServer_getUTCTimeAttributeValue(IedServer self, const DataAttribute* dataAttribute);
414 
430 uint32_t
431 IedServer_getBitStringAttributeValue(IedServer self, const DataAttribute* dataAttribute);
432 
444 char*
445 IedServer_getStringAttributeValue(IedServer self, const DataAttribute* dataAttribute);
446 
447 
463 MmsValue*
464 IedServer_getFunctionalConstrainedData(IedServer self, DataObject* dataObject, FunctionalConstraint fc);
465 
482 void
483 IedServer_updateAttributeValue(IedServer self, DataAttribute* dataAttribute, MmsValue* value);
484 
497 void
498 IedServer_updateFloatAttributeValue(IedServer self, DataAttribute* dataAttribute, float value);
499 
512 void
513 IedServer_updateInt32AttributeValue(IedServer self, DataAttribute* dataAttribute, int32_t value);
514 
527 void
528 IedServer_updateInt64AttributeValue(IedServer self, DataAttribute* dataAttribute, int64_t value);
529 
542 void
543 IedServer_updateUnsignedAttributeValue(IedServer self, DataAttribute* dataAttribute, uint32_t value);
544 
557 void
558 IedServer_updateBitStringAttributeValue(IedServer self, DataAttribute* dataAttribute, uint32_t value);
559 
572 void
573 IedServer_updateBooleanAttributeValue(IedServer self, DataAttribute* dataAttribute, bool value);
574 
587 void
588 IedServer_updateVisibleStringAttributeValue(IedServer self, DataAttribute* dataAttribute, char *value);
589 
602 void
603 IedServer_updateUTCTimeAttributeValue(IedServer self, DataAttribute* dataAttribute, uint64_t value);
604 
617 void
618 IedServer_updateTimestampAttributeValue(IedServer self, DataAttribute* dataAttribute, Timestamp* timestamp);
619 
634 void
635 IedServer_updateQuality(IedServer self, DataAttribute* dataAttribute, Quality quality);
636 
656 void
657 IedServer_changeActiveSettingGroup(IedServer self, SettingGroupControlBlock* sgcb, uint8_t newActiveSg);
658 
667 uint8_t
668 IedServer_getActiveSettingGroup(IedServer self, SettingGroupControlBlock* sgcb);
669 
685 typedef bool (*ActiveSettingGroupChangedHandler) (void* parameter, SettingGroupControlBlock* sgcb,
686  uint8_t newActSg, ClientConnection connection);
687 
696 void
697 IedServer_setActiveSettingGroupChangedHandler(IedServer self, SettingGroupControlBlock* sgcb,
698  ActiveSettingGroupChangedHandler handler, void* parameter);
699 
717 typedef bool (*EditSettingGroupChangedHandler) (void* parameter, SettingGroupControlBlock* sgcb,
718  uint8_t newEditSg, ClientConnection connection);
719 
728 void
729 IedServer_setEditSettingGroupChangedHandler(IedServer self, SettingGroupControlBlock* sgcb,
730  EditSettingGroupChangedHandler handler, void* parameter);
731 
741 typedef void (*EditSettingGroupConfirmationHandler) (void* parameter, SettingGroupControlBlock* sgcb,
742  uint8_t editSg);
743 
752 void
753 IedServer_setEditSettingGroupConfirmationHandler(IedServer self, SettingGroupControlBlock* sgcb,
754  EditSettingGroupConfirmationHandler handler, void* parameter);
755 
767 typedef enum {
774 
778 typedef enum {
783 
800 typedef CheckHandlerResult (*ControlPerformCheckHandler) (void* parameter, MmsValue* ctlVal, bool test, bool interlockCheck,
801  ClientConnection connection);
802 
822 typedef ControlHandlerResult (*ControlWaitForExecutionHandler) (void* parameter, MmsValue* ctlVal, bool test, bool synchroCheck);
823 
841 typedef ControlHandlerResult (*ControlHandler) (void* parameter, MmsValue* ctlVal, bool test);
842 
856 void
857 IedServer_setControlHandler(IedServer self, DataObject* node, ControlHandler handler, void* parameter);
858 
873 void
874 IedServer_setPerformCheckHandler(IedServer self, DataObject* node, ControlPerformCheckHandler handler, void* parameter);
875 
891 void
892 IedServer_setWaitForExecutionHandler(IedServer self, DataObject* node, ControlWaitForExecutionHandler handler, void* parameter);
893 
912 typedef void (*AttributeChangedHandler) (DataAttribute* dataAttribute, ClientConnection connection);
913 
928 void
929 IedServer_observeDataAttribute(IedServer self, DataAttribute* dataAttribute,
930  AttributeChangedHandler handler);
931 
932 /***************************************************************************
933  * Access control
934  **************************************************************************/
935 
953 typedef bool (*WriteAccessHandler) (DataAttribute* dataAttribute, MmsValue* value, ClientConnection connection);
954 
969 void
970 IedServer_handleWriteAccess(IedServer self, DataAttribute* dataAttribute,
971  WriteAccessHandler handler);
972 
973 typedef enum {
976 } AccessPolicy;
977 
986 void
988 
993 #ifdef __cplusplus
994 }
995 #endif
996 
997 #endif /* IED_SERVER_API_H_ */