Files
microser/mms/mmsclient.h
2025-01-16 16:17:01 +08:00

240 lines
8.3 KiB
C
Raw Permalink Blame History

/**
* @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