You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libiec61850/src/iec61850/inc_private/mms_mapping_internal.h

328 lines
10 KiB
C

/*
* mms_mapping_internal.h
*
* Copyright 2013-2020 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 <http://www.gnu.org/licenses/>.
*
* See COPYING file for the complete license text.
*/
#ifndef MMS_MAPPING_INTERNAL_H_
#define MMS_MAPPING_INTERNAL_H_
#include "stack_config.h"
#include "hal_thread.h"
#include "linked_list.h"
#if (CONFIG_IEC61850_SERVICE_TRACKING == 1)
typedef int IEC61850_ServiceType;
#define IEC61850_SERVICE_TYPE_UNKOWN 0
#define IEC61850_SERVICE_TYPE_ASSOCIATE 1
#define IEC61850_SERVICE_TYPE_ABORT 2
#define IEC61850_SERVICE_TYPE_RELEASE 3
#define IEC61850_SERVICE_TYPE_GET_SERVER_DIRECTORY 4
#define IEC61850_SERVICE_TYPE_GET_LOGICAL_DEVICE_DIRECTORY 5
#define IEC61850_SERVICE_TYPE_GET_ALL_DATA_VALUES 6
#define IEC61850_SERVICE_TYPE_GET_DATA_VALUES 7
#define IEC61850_SERVICE_TYPE_SET_DATA_VALUES 8
#define IEC61850_SERVICE_TYPE_GET_DATA_DIRECTORY 9
#define IEC61850_SERVICE_TYPE_GET_DATA_DEFINITION 10
#define IEC61850_SERVICE_TYPE_GET_DATA_SET_VALUES 11
#define IEC61850_SERVICE_TYPE_SET_DATA_SET_VALUES 12
#define IEC61850_SERVICE_TYPE_CREATE_DATA_SET 13
#define IEC61850_SERVICE_TYPE_DELETE_DATA_SET 14
#define IEC61850_SERVICE_TYPE_GET_DATA_SET_DIRECTORY 15
#define IEC61850_SERVICE_TYPE_SELECT_ACTIVE_SG 16
#define IEC61850_SERVICE_TYPE_SELECT_EDIT_SG 17
#define IEC61850_SERVICE_TYPE_SET_EDIT_SG_VALUE 18
#define IEC61850_SERVICE_TYPE_CONFIRM_EDIT_SG_VALUES 19
#define IEC61850_SERVICE_TYPE_GET_EDIT_SG_VALUE 20
#define IEC61850_SERVICE_TYPE_GET_SGCB_VALUES 21
#define IEC61850_SERVICE_TYPE_REPORT 22
#define IEC61850_SERVICE_TYPE_GET_BRCB_VALUES 23
#define IEC61850_SERVICE_TYPE_SET_BRCB_VALUES 24
#define IEC61850_SERVICE_TYPE_GET_URCB_VALUES 25
#define IEC61850_SERVICE_TYPE_SET_URCB_VALUES 26
#define IEC61850_SERVICE_TYPE_GET_LCB_VALUES 27
#define IEC61850_SERVICE_TYPE_SET_LCB_VALUES 28
#define IEC61850_SERVICE_TYPE_QUERY_LOG_BY_TIME 29
#define IEC61850_SERVICE_TYPE_QUERY_LOG_AFTER 30
#define IEC61850_SERVICE_TYPE_GET_LOG_STATUS 31
#define IEC61850_SERVICE_TYPE_SEND_GOOSE_MESSAGE 32
#define IEC61850_SERVICE_TYPE_GET_GOCB_VALUES 33
#define IEC61850_SERVICE_TYPE_SET_GOCB_VALUES 34
#define IEC61850_SERVICE_TYPE_GET_GO_REFERENCE 35
#define IEC61850_SERVICE_TYPE_GET_GOOSE_ELEMENT_NUMBER 36
#define IEC61850_SERVICE_TYPE_SEND_MSV_MESSAGE 37
#define IEC61850_SERVICE_TYPE_GET_MSVCB_VALUES 38
#define IEC61850_SERVICE_TYPE_SET_MSVCB_VALUES 39
#define IEC61850_SERVICE_TYPE_SEND_USV_MESSAGE 40
#define IEC61850_SERVICE_TYPE_GET_USVCB_VALUES 41
#define IEC61850_SERVICE_TYPE_SET_USVCB_VALUES 42
#define IEC61850_SERVICE_TYPE_SELECT 43
#define IEC61850_SERVICE_TYPE_SELECT_WITH_VALUES 44
#define IEC61850_SERVICE_TYPE_CANCEL 45
#define IEC61850_SERVICE_TYPE_OPERATE 46
#define IEC61850_SERVICE_TYPE_COMMAND_TERMINATION 47
#define IEC61850_SERVICE_TYPE_TIME_ACTIVATED_OPERATE 48
#define IEC61850_SERVICE_TYPE_GET_FILE 49
#define IEC61850_SERVICE_TYPE_SET_FILE 50
#define IEC61850_SERVICE_TYPE_DELETE_FILE 51
#define IEC61850_SERVICE_TYPE_GET_FILE_ATTRIBUTE_VALUES 52
#define IEC61850_SERVICE_TYPE_TIME_SYNCHRONISATION 53
#define IEC61850_SERVICE_TYPE_INTERNAL_CHANGE 54
typedef int IEC61850_ServiceError;
#define IEC61850_SERVICE_ERROR_NO_ERROR 0
#define IEC61850_SERVICE_ERROR_INSTANCE_NOT_AVAILABLE 1
#define IEC61850_SERVICE_ERROR_INSTANCE_IN_USE 2
#define IEC61850_SERVICE_ERROR_ACCESS_VIOLATION 3
#define IEC61850_SERVICE_ERROR_ACCESS_NOT_ALLOWED_IN_CURRENT_STATE 4
#define IEC61850_SERVICE_ERROR_PARAMETER_VALUE_INAPPROPRIATE 5
#define IEC61850_SERVICE_ERROR_PARAMETER_VALUE_INCONSISTENT 6
#define IEC61850_SERVICE_ERROR_CLASS_NOT_SUPPORTED 7
#define IEC61850_SERVICE_ERROR_INSTANCE_LOCKED_BY_OTHER_CLIENT 8
#define IEC61850_SERVICE_ERROR_CONTROL_MUST_BE_SELECTED 9
#define IEC61850_SERVICE_ERROR_TYPE_CONFLICT 10
#define IEC61850_SERVICE_ERROR_FAILED_DUE_TO_COMMUNICATION_CONSTRAINT 11
#define IEC61850_SERVICE_ERROR_FAILED_DUE_TO_SERVER_CONSTRAINT 12
typedef struct sServiceTrkInstance* ServiceTrkInstance;
struct sServiceTrkInstance
{
DataObject* dobj;
DataAttribute* objRef;
DataAttribute* serviceType;
DataAttribute* errorCode;
DataAttribute* originatorID; /* optional */
DataAttribute* t;
};
typedef struct sBrcbTrkInstance* BrcbTrkInstance;
struct sBrcbTrkInstance
{
/* inherited from ServiceTrkInstance */
DataObject* dobj;
DataAttribute* objRef;
DataAttribute* serviceType;
DataAttribute* errorCode;
DataAttribute* originatorID; /* optional */
DataAttribute* t;
/* BrcbTrk specific attributes */
DataAttribute* rptID;
DataAttribute* rptEna;
DataAttribute* datSet;
DataAttribute* confRev;
DataAttribute* optFlds;
DataAttribute* bufTm;
DataAttribute* sqNum;
DataAttribute* trgOps;
DataAttribute* intgPd;
DataAttribute* gi;
DataAttribute* purgeBuf;
DataAttribute* entryID;
DataAttribute* timeOfEntry;
DataAttribute* resvTms; /* optional */
};
typedef struct sUrcbTrkInstance* UrcbTrkInstance;
struct sUrcbTrkInstance
{
/* inherited from ServiceTrkInstance */
DataObject* dobj;
DataAttribute* objRef;
DataAttribute* serviceType;
DataAttribute* errorCode;
DataAttribute* originatorID; /* optional */
DataAttribute* t;
/* UrcbTrk specific attributes */
DataAttribute* rptID;
DataAttribute* rptEna;
DataAttribute* resv;
DataAttribute* datSet;
DataAttribute* confRev;
DataAttribute* optFlds;
DataAttribute* bufTm;
DataAttribute* sqNum;
DataAttribute* trgOps;
DataAttribute* intgPd;
DataAttribute* gi;
};
typedef struct sGocbTrkInstance* GocbTrkInstance;
struct sGocbTrkInstance
{
/* inherited from ServiceTrkInstance */
DataObject* dobj;
DataAttribute* objRef;
DataAttribute* serviceType;
DataAttribute* errorCode;
DataAttribute* originatorID; /* optional */
DataAttribute* t;
/* GocbTrk specific attributes */
DataAttribute* goEna;
DataAttribute* goID;
DataAttribute* datSet;
DataAttribute* confRev;
DataAttribute* ndsCom;
DataAttribute* dstAddress;
};
typedef struct sControlTrkInstance* ControlTrkInstance;
struct sControlTrkInstance
{
/* inherited from ServiceTrkInstance */
DataObject* dobj;
DataAttribute* objRef;
DataAttribute* serviceType;
DataAttribute* errorCode;
DataAttribute* originatorID; /* optional */
DataAttribute* t;
/* CTS specific attributes */
DataAttribute* ctlVal;
DataAttribute* operTm; /* conditional */
DataAttribute* origin;
DataAttribute* ctlNum;
DataAttribute* T;
DataAttribute* Test;
DataAttribute* Check;
DataAttribute* respAddCause;
};
typedef struct sSgcbTrkInstance* SgcbTrkInstance;
struct sSgcbTrkInstance
{
/* inherited from ServiceTrkInstance */
DataObject* dobj;
DataAttribute* objRef;
DataAttribute* serviceType;
DataAttribute* errorCode;
DataAttribute* originatorID; /* optional */
DataAttribute* t;
/* SgcbTrk specific attributes */
DataAttribute* numOfSG;
DataAttribute* actSG;
DataAttribute* editSG;
DataAttribute* cnfEdit;
DataAttribute* lActTm;
};
typedef struct sLocbTrkInstance* LocbTrkInstance;
struct sLocbTrkInstance
{
/* inherited from ServiceTrkInstance */
DataObject* dobj;
DataAttribute* objRef;
DataAttribute* serviceType;
DataAttribute* errorCode;
DataAttribute* originatorID; /* optional */
DataAttribute* t;
/* LocbTrk specific attributes */
DataAttribute* logEna;
DataAttribute* datSet;
DataAttribute* trgOps;
DataAttribute* intgPd;
DataAttribute* logRef;
};
#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */
struct sMmsMapping {
IedModel* model;
MmsDevice* mmsDevice;
MmsServer mmsServer;
LinkedList reportControls;
#if (CONFIG_IEC61850_LOG_SERVICE == 1)
LinkedList logControls;
LinkedList logInstances;
#endif
#if (CONFIG_INCLUDE_GOOSE_SUPPORT == 1)
LinkedList gseControls;
const char* gooseInterfaceId;
#endif
#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1)
LinkedList svControls;
const char* svInterfaceId;
#endif
LinkedList controlObjects;
LinkedList attributeAccessHandlers;
#if (CONFIG_IEC61850_SUPPORT_USER_READ_ACCESS_CONTROL == 1)
ReadAccessHandler readAccessHandler;
void* readAccessHandlerParameter;
#endif
#if (CONFIG_IEC61850_SETTING_GROUPS == 1)
LinkedList settingGroups;
#endif
#if (CONFIG_MMS_THREADLESS_STACK != 1)
bool reportThreadRunning;
Thread reportWorkerThread;
#endif
#if (CONFIG_IEC61850_SERVICE_TRACKING == 1)
BrcbTrkInstance brcbTrk;
UrcbTrkInstance urcbTrk;
GocbTrkInstance gocbTrk;
ControlTrkInstance spcTrk;
ControlTrkInstance dpcTrk;
ControlTrkInstance incTrk;
ControlTrkInstance encTrk1;
ControlTrkInstance apcFTrk;
ControlTrkInstance apcIntTrk;
ControlTrkInstance bscTrk;
ControlTrkInstance iscTrk;
ControlTrkInstance bacTrk;
SgcbTrkInstance sgcbTrk;
ServiceTrkInstance genTrk;
LocbTrkInstance locbTrk;
#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */
/* flag indicates if data model is locked --> prevents reports to be sent */
bool isModelLocked;
IedServer iedServer;
IedConnectionIndicationHandler connectionIndicationHandler;
void* connectionIndicationHandlerParameter;
};
#endif /* MMS_MAPPING_INTERNAL_H_ */