240 lines
8.3 KiB
C
240 lines
8.3 KiB
C
/**
|
||
* @file: $RCSfile: mmsclient.h,v $
|
||
* @brief: $IEC 61850 Protocol
|
||
*
|
||
* @version: $Revision: 1.1 $
|
||
* @date: $Date: 2018/11/24 06:54:50 $
|
||
* @author: $Author: lizhongming $
|
||
* @state: $State: Exp $
|
||
*
|
||
* @latest: $Id: mmsclient.h,v 1.1 2018/11/24 06:54:50 lizhongming Exp $
|
||
*
|
||
*/
|
||
//$Header: /JoyProject/jspqfe/src/pt61850netd_pqfe/source/mms/mmsclient.h,v 1.1 2018/11/24 06:54:50 lizhongming Exp $
|
||
/************************************************************************/
|
||
/* SISCO SOFTWARE MODULE HEADER *****************************************/
|
||
/************************************************************************/
|
||
/* (c) Copyright Systems Integration Specialists Company, Inc., */
|
||
/* 2003 - 2003, All Rights Reserved */
|
||
/* */
|
||
/* MODULE NAME : mmsclient.h */
|
||
/* PRODUCT(S) : MMSEASE-LITE */
|
||
/* */
|
||
/* MODULE DESCRIPTION : */
|
||
/* Defines for sample "client" application. */
|
||
/* */
|
||
/* MODIFICATION LOG : */
|
||
/* Date Who Rev Comments */
|
||
/* -------- --- ------ ------------------------------------------- */
|
||
/* 07/22/05 JRB 05 Add rcb_type, RptID, varNameArray to RCB_INFO.*/
|
||
/* Add ALL_RCB_INFO struct. */
|
||
/* Chg u_iec_rpt_ind_data 4th arg to (RCB_INFO *).*/
|
||
/* 07/15/05 JRB 04 Add mvl_defs.h */
|
||
/* 05/13/04 JRB 03 Chg SqNum to INT16U to match 61850-7-2. */
|
||
/* 12/17/03 JRB 02 61850-8-1 FDIS changes: */
|
||
/* Add ConfRev to RCB_DATA & RCB_VAR. */
|
||
/* Chg bvstring9 to bvstring10 for OptFlds. */
|
||
/* 10/09/03 JRB 01 New */
|
||
/************************************************************************/
|
||
#ifndef SAC_MMSCLIENT_H
|
||
#define SAC_MMSCLIENT_H
|
||
|
||
#include "mvl_defs.h" /* need base MVL types. */
|
||
|
||
/* Defines required by Foundry generated code. */
|
||
/* Default values defined in "mvl_defs.h" but we don't like the defaults*/
|
||
/* so we undefine and redefine them here. */
|
||
|
||
#undef MVL_NUM_DYN_DOMS
|
||
#undef MVL_NUM_DYN_VMD_VARS
|
||
#undef MVL_NUM_DYN_VMD_NVLS
|
||
#undef MVL_NUM_DYN_JOUS
|
||
#undef MVL_NUM_DYN_DOM_VARS
|
||
#undef MVL_NUM_DYN_DOM_NVLS
|
||
#undef MVL_NUM_DYN_AA_VARS
|
||
#undef MVL_NUM_DYN_AA_NVLS
|
||
#undef MVLU_NUM_DYN_TYPES
|
||
|
||
#define MVL_NUM_DYN_DOMS 10
|
||
#define MVL_NUM_DYN_VMD_VARS 100
|
||
#define MVL_NUM_DYN_VMD_NVLS 10
|
||
#define MVL_NUM_DYN_JOUS 10
|
||
#define MVL_NUM_DYN_DOM_VARS 100
|
||
#define MVL_NUM_DYN_DOM_NVLS 10
|
||
#define MVL_NUM_DYN_AA_VARS 10
|
||
#define MVL_NUM_DYN_AA_NVLS 10
|
||
|
||
//???? should change if servers num is large ??????
|
||
#define MVLU_NUM_DYN_TYPES 65535+20000 /* important for UCA */
|
||
|
||
/* Struct to store common type ids needed for IEC/UCA Reports. */
|
||
typedef struct
|
||
{
|
||
ST_INT mmsbool; /* named so not confused with C++ 'bool' type */
|
||
ST_INT int8u;
|
||
ST_INT int16u; /* for SqNum. */
|
||
/* NOTE: UCA server sends int8u for SqNum */
|
||
/* but it's safe to decode it as int16u */
|
||
ST_INT int32u; /* for IntgPd */
|
||
ST_INT vstring65; /* for RptID & ObjectReference */
|
||
ST_INT btime6; /* for EntryTime */
|
||
ST_INT ostring8; /* for EntryID */
|
||
ST_INT vstring32; /* for RptId */
|
||
ST_INT bvstring6; /* for TrgOps (IEC) */
|
||
ST_INT bvstring8; /* for OptFlds,TrgOps (UCA) */
|
||
ST_INT bvstring10; /* for OptFlds (IEC) */
|
||
ST_INT bstr6; /* for Reason (IEC) */
|
||
ST_INT bstr8; /* for Reason (UCA) */
|
||
ST_INT bstr9; /* for Writing OptFlds (IEC). Can't write all 10 bits.*/
|
||
} RPT_TYPEIDS;
|
||
|
||
typedef struct
|
||
{
|
||
ST_CHAR RptID[66];
|
||
struct /* BVstring */
|
||
{
|
||
ST_INT16 len_1;
|
||
ST_UCHAR data_1[2]; /* BVstring9 - need 2 bytes */
|
||
} OptFlds;
|
||
ST_UINT16 SqNum;
|
||
MMS_BTIME6 TimeOfEntry;
|
||
ST_CHAR DatSetNa[66];
|
||
ST_BOOLEAN BufOvfl;
|
||
ST_UINT16 SubSeqNum;
|
||
ST_BOOLEAN MoreSegmentsFollow;
|
||
ST_UINT8 EntryID [8]; /* ostring8 */
|
||
ST_UINT32 ConfRev;
|
||
ST_UINT8 *Inclusion; /* ptr to bitstring */
|
||
/* Must alloc appropriate size */
|
||
/* buffer for bitstring. */
|
||
ST_CHAR *dataRefName; /* ptr to array of dataRefName */
|
||
MMS_BVSTRING *Reason; /* ptr to array of Reason bitstrings */
|
||
/* WARNING: this only works for variable*/
|
||
/* len bitstring up to 8 bits. */
|
||
} RCB_DATA;
|
||
|
||
typedef struct
|
||
{
|
||
MVL_VAR_ASSOC * RptID;
|
||
MVL_VAR_ASSOC * OptFlds;
|
||
MVL_VAR_ASSOC * SqNum;
|
||
MVL_VAR_ASSOC * TimeOfEntry;
|
||
MVL_VAR_ASSOC * DatSetNa;
|
||
MVL_VAR_ASSOC * BufOvfl;
|
||
MVL_VAR_ASSOC * SubSeqNum;
|
||
MVL_VAR_ASSOC * MoreSegmentsFollow;
|
||
MVL_VAR_ASSOC * EntryID;
|
||
MVL_VAR_ASSOC * ConfRev;
|
||
MVL_VAR_ASSOC * Inclusion;
|
||
MVL_VAR_ASSOC ** dataRefName; /* array of ptrs */
|
||
MVL_VAR_ASSOC ** dataValue; /* array of ptrs */
|
||
MVL_VAR_ASSOC ** Reason; /* array of ptrs */
|
||
} RCB_VAR;
|
||
|
||
typedef struct
|
||
{
|
||
DBL_LNK link; /* allows linked list of this struct */
|
||
ST_CHAR dom_Name[MAX_IDENT_LEN + 1];//WW 2023-08-29 <20><><EFBFBD><EFBFBD>
|
||
ST_CHAR rcb_name[MAX_IDENT_LEN + 1];//WW 2023-08-29 <20><><EFBFBD><EFBFBD>
|
||
ST_INT rcb_type; /* RCB_TYPE_UCA, RCB_TYPE_IEC_BRCB, etc. */
|
||
/* see RCB_TYPE.. defines in 'mvl_uca.h'. */
|
||
ST_CHAR RptID [66]; /* RptID of this RCB (Vstring65) */
|
||
OBJECT_NAME **varNameArray; /* array of variable names in NVL */
|
||
ST_INT numDsVar; /* num variables in rpt dataset */
|
||
ST_INT *typeIdArr; /* array of type ids */
|
||
ST_INT InclusionTypeid; /*Type ID for Inclusion Bitstring*/
|
||
RCB_DATA rcb_data;
|
||
RCB_VAR rcb_var;
|
||
ST_CHAR ds_Nam[MAX_IDENT_LEN * 2];//WW 2023-08-29 <20><><EFBFBD><EFBFBD>
|
||
} RCB_INFO;
|
||
|
||
typedef struct
|
||
{
|
||
RPT_TYPEIDS *rpt_typeids;
|
||
RCB_INFO *rcb_info_list; /* linked list of RCB_INFO structs */
|
||
} ALL_RCB_INFO; /* used to track multiple RCBs. */
|
||
/////////////////////////////////
|
||
//WW 2023-08-29 <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ն˲<D5B6><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
|
||
typedef struct
|
||
{
|
||
DBL_LNK l; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>ַ
|
||
ST_CHAR IP[MAX_IDENT_LEN]; //װ<><D7B0>IP[64]
|
||
int Port; //<2F>˿ں<CBBF>
|
||
} Dev_IP_Port_INFO; //װ<><D7B0>IP<49><50><EFBFBD>˿ںŽṹ
|
||
|
||
typedef struct
|
||
{
|
||
DBL_LNK l; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>ַ
|
||
ST_CHAR dev_type_name[MAX_IDENT_LEN * 2]; //װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[128]
|
||
Dev_IP_Port_INFO * dev_ip_port_list; //װ<><D7B0>IP<49><50><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||
RCB_INFO *rcb_info_list; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||
} Dev_RCB_INFO; //װ<>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>ṹ
|
||
|
||
typedef struct //zl 2019-12-26 12:24:06
|
||
{
|
||
DBL_LNK l; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>ַ
|
||
Dev_RCB_INFO *dev_rcb_info_Head;
|
||
} DEV_TYPE_LIST; //
|
||
extern DEV_TYPE_LIST gDev_rcb_list; //ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
//WW 2023-08-29 end
|
||
/////////////////////////////////////
|
||
/************************************************************************/
|
||
/* Global variables. */
|
||
/************************************************************************/
|
||
/* NONE */
|
||
|
||
/************************************************************************/
|
||
/* Function prototypes. */
|
||
/************************************************************************/
|
||
ST_RET waitReqDone (MVL_REQ_PEND *req, ST_INT timeout);
|
||
|
||
void doCommForSecs (ST_INT timeout);
|
||
|
||
ST_VOID doCommService (ST_VOID);
|
||
|
||
ST_RET rpt_typeids_find (RPT_TYPEIDS *rpt_typeids);
|
||
|
||
RCB_INFO *rcb_info_create (MVL_NET_INFO *net_info, ST_CHAR *domName,
|
||
ST_CHAR *rcbName, RPT_TYPEIDS *rpt_typeids, ST_INT timeOut);
|
||
ST_VOID rcb_info_destroy (RCB_INFO *rcb_info);
|
||
|
||
ST_RET rcb_enable (MVL_NET_INFO *netInfo, ST_CHAR *domName,
|
||
ST_CHAR *rcbName, ST_UCHAR *OptFlds, ST_UCHAR *TrgOps,
|
||
ST_UINT32 IntgPd, RPT_TYPEIDS *rpt_typeids, ST_INT timeOut);
|
||
|
||
ST_RET rcb_disable (MVL_NET_INFO *netInfo, ST_CHAR *domName,
|
||
ST_CHAR *rcbName, RPT_TYPEIDS *rpt_typeids, ST_INT timeOut);
|
||
/* Simple functions to read/write a single variable. */
|
||
ST_RET mms_named_var_read (MVL_NET_INFO *net_info, ST_CHAR *varName,
|
||
ST_INT scope, ST_CHAR *domName,
|
||
ST_INT type_id, ST_VOID *dataDest, ST_INT timeOut);
|
||
ST_RET mms_named_var_write (MVL_NET_INFO *netInfo, ST_CHAR *varName,
|
||
ST_INT scope, ST_CHAR *domName,
|
||
ST_INT type_id, ST_VOID *dataSrc, ST_INT timeOut);
|
||
|
||
ST_RET mms_release_connection (MVL_NET_INFO *clientNetInfo);
|
||
|
||
ST_RET u_iec_rpt_ind (MVL_COMM_EVENT *event);
|
||
ST_VOID u_iec_rpt_ind_data (MVL_VAR_ASSOC **info_va,
|
||
ST_UINT8 *OptFldsData, /* ptr to data part of OptFlds bvstring */
|
||
ST_UINT8 *InclusionData, /* ptr to Inclusion bstring */
|
||
RCB_INFO *rcb_info,
|
||
ST_INT va_total,
|
||
MVL_NET_INFO *net_info);
|
||
|
||
////////////////////////////////
|
||
//WW 2023-08-30<33><30><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD>ṹ
|
||
ST_RET u_iec_rpt_ind_by_devtype(MVL_COMM_EVENT *event);
|
||
ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC **info_va,
|
||
ST_UINT8 *OptFldsData, /* ptr to data part of OptFlds bvstring */
|
||
ST_UINT8 *InclusionData, /* ptr to Inclusion bstring */
|
||
RCB_INFO *rcb_info,
|
||
ST_INT va_total,
|
||
MVL_NET_INFO *net_info);
|
||
//WW 2023-08-30 end
|
||
////////////////////////////////
|
||
|
||
#endif //SAC_MMSCLIENT_H
|
||
|