/* * ied_connection_private.h * * Copyright 2013-2018 Michael Zillgith * * This file is part of libIEC61850. * * libIEC61850 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * libIEC61850 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with libIEC61850. If not, see . * * See COPYING file for the complete license text. */ #ifndef IED_CONNECTION_PRIVATE_H_ #define IED_CONNECTION_PRIVATE_H_ #ifndef DEBUG_IED_CLIENT #define DEBUG_IED_CLIENT 0 #endif #include "hal_thread.h" typedef struct sIedConnectionOutstandingCall* IedConnectionOutstandingCall; struct sIedConnectionOutstandingCall { bool used; uint32_t invokeId; void* callback; void* callbackParameter; void* specificParameter; /* function/service specific parameter */ void* specificParameter2; /* function/service specific parameter */ }; struct sIedConnection { MmsConnection connection; IedConnectionState state; LinkedList enabledReports; LinkedList logicalDevices; LinkedList clientControls; LastApplError lastApplError; Semaphore stateMutex; Semaphore reportHandlerMutex; Semaphore outstandingCallsLock; IedConnectionOutstandingCall outstandingCalls; IedConnectionClosedHandler connectionCloseHandler; void* connectionClosedParameter; uint32_t connectionTimeout; }; struct sClientReportControlBlock { char* objectReference; bool isBuffered; MmsValue* rptId; MmsValue* rptEna; MmsValue* resv; MmsValue* datSet; MmsValue* confRev; MmsValue* optFlds; MmsValue* bufTm; MmsValue* sqNum; MmsValue* trgOps; MmsValue* intgPd; MmsValue* gi; MmsValue* purgeBuf; MmsValue* entryId; MmsValue* timeOfEntry; MmsValue* resvTms; MmsValue* owner; }; LIB61850_INTERNAL bool iedConnection_doesControlObjectMatch(const char* objRef, const char* cntrlObj); LIB61850_INTERNAL void iedConnection_addControlClient(IedConnection self, ControlObjectClient control); LIB61850_INTERNAL void iedConnection_removeControlClient(IedConnection self, ControlObjectClient control); LIB61850_INTERNAL bool clientReportControlBlock_updateValues(ClientReportControlBlock self, MmsValue* values); LIB61850_INTERNAL void iedConnection_handleReport(IedConnection self, MmsValue* value); LIB61850_INTERNAL IedClientError iedConnection_mapMmsErrorToIedError(MmsError mmsError); LIB61850_INTERNAL IedClientError iedConnection_mapDataAccessErrorToIedError(MmsDataAccessError mmsError); LIB61850_INTERNAL IedConnectionOutstandingCall iedConnection_allocateOutstandingCall(IedConnection self); LIB61850_INTERNAL void iedConnection_releaseOutstandingCall(IedConnection self, IedConnectionOutstandingCall call); LIB61850_INTERNAL IedConnectionOutstandingCall iedConnection_lookupOutstandingCall(IedConnection self, uint32_t invokeId); LIB61850_INTERNAL ClientReport ClientReport_create(void); LIB61850_INTERNAL void ClientReport_destroy(ClientReport self); LIB61850_INTERNAL void controlObjectClient_invokeCommandTerminationHandler(ControlObjectClient self); /* some declarations that are shared with server side ! */ LIB61850_INTERNAL char* MmsMapping_getMmsDomainFromObjectReference(const char* objectReference, char* buffer); LIB61850_INTERNAL char* MmsMapping_createMmsVariableNameFromObjectReference(const char* objectReference, FunctionalConstraint fc, char* buffer); LIB61850_INTERNAL char* MmsMapping_varAccessSpecToObjectReference(MmsVariableAccessSpecification* varAccessSpec); LIB61850_INTERNAL MmsVariableAccessSpecification* MmsMapping_ObjectReferenceToVariableAccessSpec(char* objectReference); #endif /* IED_CONNECTION_PRIVATE_H_ */