libIEC61850  0.8.2
Open-source IEC 61850 MMS/GOOSE server and client library
 All Classes Files Functions Variables Typedefs Enumerations Enumerator 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 
331 bool
332 IedServer_getBooleanAttributeValue(IedServer self, DataAttribute* dataAttribute);
333 
334 int32_t
335 IedServer_getInt32AttributeValue(IedServer self, DataAttribute* dataAttribute);
336 
337 int64_t
338 IedServer_getInt64AttributeValue(IedServer self, DataAttribute* dataAttribute);
339 
340 uint32_t
341 IedServer_getUInt32AttributeValue(IedServer self, DataAttribute* dataAttribute);
342 
343 float
344 IedServer_getFloatAttributeValue(IedServer self, DataAttribute* dataAttribute);
345 
346 uint64_t
347 IedServer_getUTCTimeAttributeValue(IedServer self, DataAttribute* dataAttribute);
348 
349 uint32_t
350 IedServer_getBitStringAttributeValue(IedServer self, DataAttribute* dataAttribute);
351 
352 char*
353 IedServer_getStringAttributeValue(IedServer self, DataAttribute* dataAttribute);
354 
355 
371 MmsValue*
372 IedServer_getFunctionalConstrainedData(IedServer self, DataObject* dataObject, FunctionalConstraint fc);
373 
390 void
391 IedServer_updateAttributeValue(IedServer self, DataAttribute* dataAttribute, MmsValue* value);
392 
405 void
406 IedServer_updateFloatAttributeValue(IedServer self, DataAttribute* dataAttribute, float value);
407 
420 void
421 IedServer_updateInt32AttributeValue(IedServer self, DataAttribute* dataAttribute, int32_t value);
422 
435 void
436 IedServer_updateInt64AttributeValue(IedServer self, DataAttribute* dataAttribute, int64_t value);
437 
450 void
451 IedServer_updateUnsignedAttributeValue(IedServer self, DataAttribute* dataAttribute, uint32_t value);
452 
465 void
466 IedServer_updateBitStringAttributeValue(IedServer self, DataAttribute* dataAttribute, uint32_t value);
467 
480 void
481 IedServer_updateBooleanAttributeValue(IedServer self, DataAttribute* dataAttribute, bool value);
482 
495 void
496 IedServer_updateVisibleStringAttributeValue(IedServer self, DataAttribute* dataAttribute, char *value);
497 
510 void
511 IedServer_updateUTCTimeAttributeValue(IedServer self, DataAttribute* dataAttribute, uint64_t value);
512 
527 void
528 IedServer_updateQuality(IedServer self, DataAttribute* dataAttribute, Quality quality);
529 
549 void
550 IedServer_changeActiveSettingGroup(IedServer self, SettingGroupControlBlock* sgcb, uint8_t newActiveSg);
551 
560 uint8_t
561 IedServer_getActiveSettingGroup(IedServer self, SettingGroupControlBlock* sgcb);
562 
578 typedef bool (*ActiveSettingGroupChangedHandler) (void* parameter, SettingGroupControlBlock* sgcb,
579  uint8_t newActSg, ClientConnection connection);
580 
589 void
590 IedServer_setActiveSettingGroupChangedHandler(IedServer self, SettingGroupControlBlock* sgcb,
591  ActiveSettingGroupChangedHandler handler, void* parameter);
592 
610 typedef bool (*EditSettingGroupChangedHandler) (void* parameter, SettingGroupControlBlock* sgcb,
611  uint8_t newEditSg, ClientConnection connection);
612 
621 void
622 IedServer_setEditSettingGroupChangedHandler(IedServer self, SettingGroupControlBlock* sgcb,
623  EditSettingGroupChangedHandler handler, void* parameter);
624 
634 typedef void (*EditSettingGroupConfirmationHandler) (void* parameter, SettingGroupControlBlock* sgcb,
635  uint8_t editSg);
636 
645 void
646 IedServer_setEditSettingGroupConfirmationHandler(IedServer self, SettingGroupControlBlock* sgcb,
647  EditSettingGroupConfirmationHandler handler, void* parameter);
648 
660 typedef enum {
667 
671 typedef enum {
676 
693 typedef CheckHandlerResult (*ControlPerformCheckHandler) (void* parameter, MmsValue* ctlVal, bool test, bool interlockCheck,
694  ClientConnection connection);
695 
715 typedef ControlHandlerResult (*ControlWaitForExecutionHandler) (void* parameter, MmsValue* ctlVal, bool test, bool synchroCheck);
716 
734 typedef ControlHandlerResult (*ControlHandler) (void* parameter, MmsValue* ctlVal, bool test);
735 
749 void
750 IedServer_setControlHandler(IedServer self, DataObject* node, ControlHandler handler, void* parameter);
751 
766 void
767 IedServer_setPerformCheckHandler(IedServer self, DataObject* node, ControlPerformCheckHandler handler, void* parameter);
768 
784 void
785 IedServer_setWaitForExecutionHandler(IedServer self, DataObject* node, ControlWaitForExecutionHandler handler, void* parameter);
786 
805 typedef void (*AttributeChangedHandler) (DataAttribute* dataAttribute, ClientConnection connection);
806 
821 void
822 IedServer_observeDataAttribute(IedServer self, DataAttribute* dataAttribute,
823  AttributeChangedHandler handler);
824 
825 /***************************************************************************
826  * Access control
827  **************************************************************************/
828 
846 typedef bool (*WriteAccessHandler) (DataAttribute* dataAttribute, MmsValue* value, ClientConnection connection);
847 
862 void
863 IedServer_handleWriteAccess(IedServer self, DataAttribute* dataAttribute,
864  WriteAccessHandler handler);
865 
866 typedef enum {
869 } AccessPolicy;
870 
879 void
881 
886 #ifdef __cplusplus
887 }
888 #endif
889 
890 #endif /* IED_SERVER_API_H_ */