/* * ied_connection_private.h * * Copyright 2013 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" struct sIedConnection { MmsConnection connection; IedConnectionState state; LinkedList enabledReports; LinkedList logicalDevices; LinkedList clientControls; LastApplError lastApplError; Semaphore stateMutex; 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; }; IedClientError private_IedConnection_mapMmsErrorToIedError(MmsError mmsError); bool private_IedConnection_doesControlObjectMatch(char* objRef, char* cntrlObj); void private_IedConnection_addControlClient(IedConnection self, ControlObjectClient control); void private_IedConnection_removeControlClient(IedConnection self, ControlObjectClient control); bool private_ClientReportControlBlock_updateValues(ClientReportControlBlock self, MmsValue* values); void private_IedConnection_handleReport(IedConnection self, MmsValue* value); IedClientError iedConnection_mapMmsErrorToIedError(MmsError mmsError); IedClientError iedConnection_mapDataAccessErrorToIedError(MmsDataAccessError mmsError); ClientReport ClientReport_create(void); void ClientReport_destroy(ClientReport self); void private_ControlObjectClient_invokeCommandTerminationHandler(ControlObjectClient self); /* some declarations that are shared with server side ! */ char* MmsMapping_getMmsDomainFromObjectReference(const char* objectReference, char* buffer); char* MmsMapping_createMmsVariableNameFromObjectReference(const char* objectReference, FunctionalConstraint fc, char* buffer); char* MmsMapping_varAccessSpecToObjectReference(MmsVariableAccessSpecification* varAccessSpec); MmsVariableAccessSpecification* MmsMapping_ObjectReferenceToVariableAccessSpec(char* objectReference); #endif /* IED_CONNECTION_PRIVATE_H_ */