|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include "glbtypes.h"
|
|
|
|
|
#include "sysincs.h"
|
|
|
|
|
#include "signal.h"
|
|
|
|
|
#include "mmsdefs.h"
|
|
|
|
|
#include "mms_pvmd.h"
|
|
|
|
|
#include "mms_pvar.h"
|
|
|
|
|
#include "mms_vvar.h"
|
|
|
|
|
#include "mms_err.h"
|
|
|
|
|
#include "mms_pcon.h"
|
|
|
|
|
#include "asn1defs.h"
|
|
|
|
|
#include "mmsop_en.h"
|
|
|
|
|
#include "locale.h"
|
|
|
|
|
|
|
|
|
|
#include "mvl_acse.h"
|
|
|
|
|
#include "mvl_log.h"
|
|
|
|
|
#include "tp4api.h"
|
|
|
|
|
#include "clntobj.h"
|
|
|
|
|
#include "smpval.h"
|
|
|
|
|
|
|
|
|
|
#include "lean_a.h"
|
|
|
|
|
#include "scl.h"
|
|
|
|
|
#include "sx_arb.h"
|
|
|
|
|
#include "mloguser.h"
|
|
|
|
|
|
|
|
|
|
#include "mvl_defs.h"
|
|
|
|
|
#include "str_util.h"
|
|
|
|
|
|
|
|
|
|
#define MAX_REF_LEN 65 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>
|
|
|
|
|
#define MAX_NAME_LEN 128 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
|
|
|
|
|
#define MAX_FILE_NAME 255 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
|
|
|
|
|
|
|
|
|
|
#define MAX_NAME_BUF 5000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#define MAX_RPT_NAME_BUF 1000 //<2F><><EFBFBD><EFBFBD><F3B1A8B8><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#define MAX_OBJ_NAME 5000 //<2F><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#define MAX_RPT_DATA_NUM 5000 //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>ؽṹ<D8BD>嶨<EFBFBD><E5B6A8>
|
|
|
|
|
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_INT rcb_type; /* RCB_TYPE_UCA, RCB_TYPE_IEC_BRCB, etc. */
|
|
|
|
|
ST_INT rcb_create_type; /*rcb<63><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>0<EFBFBD><30>ʾ<EFBFBD><CABE>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE>̬<EFBFBD><CCAC><EFBFBD><EFBFBD> liwei 2012.07.13*/
|
|
|
|
|
/* 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;
|
|
|
|
|
|
|
|
|
|
} 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. */
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
ST_CHAR *RptID;
|
|
|
|
|
struct /* BVstring */
|
|
|
|
|
{
|
|
|
|
|
ST_UINT16 len_1;
|
|
|
|
|
ST_UCHAR data_1[2]; /* BVstring9 - need 2 bytes */
|
|
|
|
|
} *OptFlds;
|
|
|
|
|
ST_UINT16 *SqNum;
|
|
|
|
|
MMS_BTIME6 *TimeOfEntry;
|
|
|
|
|
ST_CHAR *DatSetNa;
|
|
|
|
|
ST_BOOLEAN *BufOvfl;
|
|
|
|
|
ST_UINT16 *SubSeqNum;
|
|
|
|
|
ST_BOOLEAN *MoreSegmentsFollow;
|
|
|
|
|
ST_UINT8 *EntryID; /* 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 */
|
|
|
|
|
ST_VOID **Value;
|
|
|
|
|
MMS_BVSTRING **Reason; /* ptr to array of Reason bitstrings */
|
|
|
|
|
|
|
|
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3>洢<EFBFBD>˱<EFBFBD><CBB1>淢<EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĸ<DDB5><C4B8><EFBFBD> */
|
|
|
|
|
ST_INT num_data;
|
|
|
|
|
|
|
|
|
|
}RPT_INFO;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
time_t time; /* number of seconds elapsed since midnight (00:00:00), January 1, 1970 */
|
|
|
|
|
}MMS_GTIME;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
ST_UCHAR value[1];
|
|
|
|
|
}MMS_BSTRING;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
ST_INT32 numMSec; /* Number of milliseconds since midnight */
|
|
|
|
|
}MMS_BTIME4;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
ST_UCHAR value[1];
|
|
|
|
|
}MMS_OSTRING;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
ST_INT16 data_len;
|
|
|
|
|
ST_UCHAR value[1];
|
|
|
|
|
}MMS_OVSTRING;
|
|
|
|
|
|
|
|
|
|
typedef wchar_t ST_WCHAR;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
ST_CHAR name[MAX_REF_LEN + 1]; /* ָ<><D6B8>Reference */
|
|
|
|
|
ST_INT type; /* ָ<><D6B8>rt->el_tag */
|
|
|
|
|
ST_INT len; /* ָ<><D6B8>rt->u.p.el_len */
|
|
|
|
|
|
|
|
|
|
ST_INT data_size; /* ָҶ<D6B8><D2B6><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
ST_BOOLEAN *bool_value;
|
|
|
|
|
ST_UCHAR *bcd_value;
|
|
|
|
|
|
|
|
|
|
ST_INT8 *int8_value;
|
|
|
|
|
ST_INT16 *int16_value;
|
|
|
|
|
ST_INT32 *int32_value;
|
|
|
|
|
|
|
|
|
|
ST_UINT8 *uint8_value;
|
|
|
|
|
ST_UINT16 *uint16_value;
|
|
|
|
|
ST_UINT32 *uint32_value;
|
|
|
|
|
|
|
|
|
|
ST_FLOAT *float_value;
|
|
|
|
|
ST_DOUBLE *double_value;
|
|
|
|
|
|
|
|
|
|
ST_CHAR *vstring_value;
|
|
|
|
|
ST_CHAR *fstring_value;
|
|
|
|
|
ST_WCHAR *utf8string_value;
|
|
|
|
|
ST_WCHAR *utf8vstring_value;
|
|
|
|
|
|
|
|
|
|
MMS_GTIME *gtime_value;
|
|
|
|
|
MMS_BTIME4 *btime4_value;
|
|
|
|
|
MMS_BTIME6 *btime6_value;
|
|
|
|
|
MMS_UTC_TIME *utctime_value;
|
|
|
|
|
|
|
|
|
|
MMS_BSTRING *bstring_value;
|
|
|
|
|
MMS_BVSTRING *bvstring_value;
|
|
|
|
|
|
|
|
|
|
MMS_OSTRING *ostring_value;
|
|
|
|
|
MMS_OVSTRING *ovstring_value;
|
|
|
|
|
|
|
|
|
|
ST_VOID *any_value;
|
|
|
|
|
}value;
|
|
|
|
|
|
|
|
|
|
MMS_BVSTRING *reason_code;
|
|
|
|
|
}PRIM_DATA;
|
|
|
|
|
|
|
|
|
|
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
|
|
|
|
|
static ST_CHAR *spareMem;
|
|
|
|
|
static ST_INT memErrDetected;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
typedef unsigned int (*SERVER_DISC_CALLBACK_FUN)(char *server_name, int reason);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
typedef unsigned int (*RPT_CALLBACK_FUN)(char *server_name, RPT_INFO *rpt_info);
|
|
|
|
|
//<2F><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
typedef unsigned int (*CTRL_RPT_CALLBACK_FUN)(char *server_name, char *oper_name, char oper_result);
|
|
|
|
|
|
|
|
|
|
//mms<6D><73><EFBFBD>ݽṹ<DDBD><E1B9B9>Ϣ
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
ST_CHAR name[MAX_REF_LEN + 1]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ST_INT type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ST_INT len; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|
|
|
|
ST_INT size; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|
|
|
|
}DATA_DIR;
|
|
|
|
|
|
|
|
|
|
//mms<6D>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1>ṹ<EFBFBD><E1B9B9>Ϣ
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
ST_UINT32 fsize; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ST_BOOLEAN mtimpres; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>־
|
|
|
|
|
time_t mtime; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
ST_CHAR filename [MAX_FILE_NAME+1]; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
} DIR_ENTRY;
|
|
|
|
|
|
|
|
|
|
//<2F>ͻ<EFBFBD><CDBB>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD>壬ÿ<E5A3AC><C3BF><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ýṹ<C3BD><E1B9B9>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
DBL_LNK l; //<2F><><EFBFBD><EFBFBD>˫<EFBFBD><CBAB>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ľṹ<C4BD><E1B9B9>
|
|
|
|
|
ST_CHAR sever_name[MAX_NAME_LEN]; //<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ST_UINT8 level;
|
|
|
|
|
MVL_NET_INFO *clientNetInfo; //<2F><><EFBFBD>ź<EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ľṹ<C4BD><E1B9B9>
|
|
|
|
|
MVL_VMD_CTRL *client_vmd; //<2F><><EFBFBD><EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ľṹ<C4BD><E1B9B9>
|
|
|
|
|
ALL_RCB_INFO *all_rcb_info;
|
|
|
|
|
SERVER_DISC_CALLBACK_FUN server_disk_callback_fun;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ӻص<D3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
RPT_CALLBACK_FUN rpt_callback_fun; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CTRL_RPT_CALLBACK_FUN ctrl_rpt_callback_fun; //<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}CLIENT_CTRL;
|
|
|
|
|
|
|
|
|
|
CLIENT_CTRL *head_client_ctrl_list;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ⲿ<EFBFBD>ӿں<D3BF><DABA><EFBFBD>*/
|
|
|
|
|
|
|
|
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_init();
|
|
|
|
|
__declspec(dllexport) unsigned int mms_quit();
|
|
|
|
|
__declspec(dllexport) unsigned int mms_connect(char *server_name, int level);
|
|
|
|
|
__declspec(dllexport) unsigned int mms_disconnect(char *server_name);
|
|
|
|
|
|
|
|
|
|
//Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_directory_service_fun(char *server_name);
|
|
|
|
|
__declspec(dllexport) unsigned int mms_directory_create_fun(char *server_name, char *scl_file_name, char *ied_name, char *access_point_name);//2010.5.26
|
|
|
|
|
__declspec(dllexport) unsigned int mms_free_directory_service_fun(char *server_name);//<2F><><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><DFBC>ڵ㡢<DAB5><E3A1A2><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_domain_name_list(char *server_name, char(**domain_names)[MAX_NAME_LEN], int *num_dom);
|
|
|
|
|
__declspec(dllexport) void mms_free_domain_name_list(char (*domain_names)[MAX_NAME_LEN]);
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_var_name_list(char *server_name, char *domain_name, char(**var_names)[MAX_NAME_LEN], int *num_var);
|
|
|
|
|
__declspec(dllexport) void mms_free_var_name_list(char (*var_names)[MAX_NAME_LEN]);
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_dataset_name_list(char *server_name, char *domain_name, char (**ds_names)[MAX_NAME_LEN], int *num_ds);
|
|
|
|
|
__declspec(dllexport) void mms_free_dataset_name_list(char (*ds_names)[MAX_NAME_LEN]);
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_dataset_entry_name_list(char *server_name, char *dataset_ref, char (**var_refs)[MAX_NAME_LEN], int *num_vars);
|
|
|
|
|
__declspec(dllexport) void mms_free_dataset_entry_name_list(char (*var_refs)[MAX_NAME_LEN]);
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_log_name_list(char *server_name, char *domain_name, char (**log_names)[MAX_NAME_LEN], int *log_num);
|
|
|
|
|
__declspec(dllexport) void mms_free_log_name_list(char (*log_names)[MAX_NAME_LEN]);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Ŀ¼ͨ<C2BC>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD><C9BB><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢĿ¼
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_data_directory(char *server_name, char *var_ref, DATA_DIR **dir_info, int *num);
|
|
|
|
|
__declspec(dllexport) void mms_free_data_directory(DATA_DIR *dir_info);
|
|
|
|
|
|
|
|
|
|
//Ҷ<>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>ݶ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_local_read_prim_data(char *server_name, char *prim_ref, void *prim_buf);
|
|
|
|
|
__declspec(dllexport) unsigned int mms_local_write_prim_data(char *server_name, char *prim_ref, void *prim_buf);
|
|
|
|
|
|
|
|
|
|
//Զ<>̶<EFBFBD>д1<D0B4><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_remote_read_1_data(char *server_name, char *data_ref);
|
|
|
|
|
__declspec(dllexport) unsigned int mms_remote_write_1_data(char *server_name, char *data_ref);
|
|
|
|
|
//Զ<>̶<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_remote_read_data(char *server_name, int var_num, char **var_refs, void *reserved);
|
|
|
|
|
__declspec(dllexport) unsigned int mms_remote_write_data(char *server_name, int var_num, char **var_refs, void *reserved);
|
|
|
|
|
|
|
|
|
|
//Զ<>̶<EFBFBD>дָ<D0B4><D6B8><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_remote_read_dataset(char *server_name, char *dataset_ref, void *reserved );
|
|
|
|
|
__declspec(dllexport) unsigned int mms_remote_write_dataset(char *server_name, char *dataset_ref, void *reserved );
|
|
|
|
|
|
|
|
|
|
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_create_dataset(char *server_name, char *dataset_ref, int var_num, char (*var_refs)[MAX_NAME_LEN], void *reserved);
|
|
|
|
|
__declspec(dllexport) unsigned int mms_delete_dataset(char *server_name, char *dataset_ref, void *reserved);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_register_rpt_callback(char *server_name, RPT_CALLBACK_FUN callback_fun);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>ע<EFBFBD><D7A2>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_register_server_disc_callback(char *server_name, SERVER_DISC_CALLBACK_FUN callback_fun);
|
|
|
|
|
//<2F><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_register_ctrl_rpt_callback(char *server_name, CTRL_RPT_CALLBACK_FUN callback_fun);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪҶ<CEAA>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_rpt_info_to_prim_data_list(char *server_name, RPT_INFO *rpt_info, PRIM_DATA **prims, int *num );
|
|
|
|
|
__declspec(dllexport) void mms_free_prim_data_list(PRIM_DATA *prim_list, int num );
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ͷ<EFBFBD><CDB7>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_get_file_list(char *server_name, char *fs_name, DIR_ENTRY **file_info, int *file_num, void *reserved );
|
|
|
|
|
__declspec(dllexport) unsigned int mms_free_file_list(char *server_name, DIR_ENTRY *dir_entries );
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡԶ<C8A1>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_get_file(char *server_name, char *rem_file_name, char *loc_file_name, void *reserved);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_rename_file(char *server_name, char *old_file_name, char *new_file_name, void *reserved );
|
|
|
|
|
//<2F>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_set_file(char *server_name, char *loc_file_name, char *rem_file_name, void *reserved );
|
|
|
|
|
//ɾ<><C9BE>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_delete_file(char *server_name, char *file_name, void *reserved);
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int mms_server_create_fun(char *server_name, char *scl_file_name, char *ied_name, char *access_point_name);
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int mms_modify_server_ip_addr(char *server_name, ST_ULONG ip_addr);
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////
|
|
|
|
|
__declspec(dllexport) unsigned int mms_jinit(char *server_name, char *log_ref);
|
|
|
|
|
__declspec(dllexport) unsigned int mms_jstat(char *server_name, char *log_ref);
|
|
|
|
|
__declspec(dllexport) unsigned int mms_jread(char *server_name, char *log_ref, int start_flag, int stop_flag,
|
|
|
|
|
char *start_entry, long num_of_entries, MMS_BTOD start_time, MMS_BTOD end_time);
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int set_opear_name(char *opear_name);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
char name[256];
|
|
|
|
|
int type;
|
|
|
|
|
int size;
|
|
|
|
|
char desc[1025];
|
|
|
|
|
}DATA_INFO;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_dataset_datainfo(char *server_name,
|
|
|
|
|
char *dataset_ref,
|
|
|
|
|
DATA_INFO **data_info,
|
|
|
|
|
int *num,
|
|
|
|
|
int desc_get_mode,
|
|
|
|
|
int leaf_mode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_leaf_data_info(char *server_name,
|
|
|
|
|
char *data_ref,
|
|
|
|
|
char *comp_name,
|
|
|
|
|
DATA_INFO *data_info,
|
|
|
|
|
int *leaf_num,
|
|
|
|
|
int leaf_mode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned int get_dU_str(char *server_name, char *in_str, char *out_str);
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
__declspec(dllexport) unsigned int mms_fetch_data_type(char *server_name, char *var_ref, int *data_type, int *data_size, int *data_len);
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ<CAB1>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD>ⲿ<EFBFBD>ӿ<EFBFBD>*/
|
|
|
|
|
MVL_VAR_ASSOC * fetch_vmd_var_ctrl(MVL_VMD_CTRL *vmd_ctrl, char *data_ref, char *data_name, char *ld_name, ST_UINT8 level);
|
|
|
|
|
MVL_NVLIST_CTRL * fetch_vmd_nvl_ctrl(MVL_VMD_CTRL *vmd_ctrl, char *dataset_ref, char *dataset_name, char *ld_name);
|
|
|
|
|
ST_RET fetch_remote_name_list(MVL_NET_INFO *clientNetInfo, char *name_dom, char(*name_list)[128], char(*rpt_list)[128], int *num_name, int *num_rpt, int mms_class, int objscope, ST_UINT8 level);
|
|
|
|
|
ST_RET fetch_remote_domain_name_list(MVL_NET_INFO *clientNetInfo, char(*name_list)[128], int *num_dom);
|
|
|
|
|
ST_RET fetch_remote_var_dom_list(MVL_NET_INFO *clientNetInfo, char *name_dom, char(*name_list)[128], char(*rpt_list)[128], int *num_var, int *num_rpt, ST_UINT8 level);
|
|
|
|
|
ST_RET fetch_remote_var_attr_dom(MVL_NET_INFO *clientNetInfo, MVL_VMD_CTRL *vmd_ctrl, char *name_dom, char *name_var, int *type_id, int *data_size);
|
|
|
|
|
ST_RET fetch_remote_nvl_dom_list(MVL_NET_INFO *clientNetInfo, char *name_dom, char(*name_list)[128], int *num_nvl);
|
|
|
|
|
ST_RET fetch_remote_nvl_attr_dom(MVL_NET_INFO *clientNetInfo, char *name_dom, char *name_nvl, OBJECT_NAME *var_obj, int *num_var_nvl);
|
|
|
|
|
MVL_NET_INFO *SearchConnectServer(char *server_name, CLIENT_CTRL **client_ctrl);
|
|
|
|
|
CLIENT_CTRL * FindConnectServer(MVL_NET_INFO *clientNetInfo);
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>Ϊmms<6D>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD>ⲿ<EFBFBD>ӿ<EFBFBD>*/
|
|
|
|
|
void client_server(LPVOID pParam);
|
|
|
|
|
static ST_VOID disc_ind_fun (MVL_NET_INFO *cc, ST_INT discType);
|
|
|
|
|
|
|
|
|
|
MVL_NET_INFO *connectToServer (ST_CHAR *clientARName, ST_CHAR *serverARName);
|
|
|
|
|
ST_RET disconnectFromServer (MVL_NET_INFO *clientNetInfo);
|
|
|
|
|
ST_RET waitReqDone (MVL_REQ_PEND *req, ST_INT timeout);
|
|
|
|
|
ST_VOID doCommService ();
|
|
|
|
|
|
|
|
|
|
unsigned int init_iec_rpt (MVL_NET_INFO *clientNetInfo, RPT_TYPEIDS *rpt_typeids,MVL_VMD_CTRL *vmd_ctrl,
|
|
|
|
|
ST_CHAR *dom_name, ST_CHAR *rcb_name);
|
|
|
|
|
|
|
|
|
|
ST_RET 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 nvl_read (MVL_NET_INFO *net_info, ST_CHAR *nvlName, ST_INT scope,
|
|
|
|
|
ST_CHAR *domName,ST_INT *type_id, ST_CHAR **dataDest,
|
|
|
|
|
ST_INT num_var, ST_INT timeOut);
|
|
|
|
|
|
|
|
|
|
ST_RET 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 nvl_write (MVL_NET_INFO *net_info, ST_CHAR (*varName)[MAX_REF_LEN], ST_INT scope,
|
|
|
|
|
ST_CHAR *domName,ST_INT *type_id, ST_CHAR **dataSrc,
|
|
|
|
|
ST_INT num_var, ST_INT timeOut);
|
|
|
|
|
|
|
|
|
|
ST_RET m_var_read (MVL_NET_INFO *net_info, ST_CHAR (*varName)[MAX_REF_LEN], ST_INT scope,
|
|
|
|
|
ST_CHAR (*domName)[MAX_REF_LEN], ST_INT *type_id, ST_CHAR **dataDest,
|
|
|
|
|
ST_INT num_var, ST_INT timeOut);
|
|
|
|
|
|
|
|
|
|
ST_RET m_var_write (MVL_NET_INFO *net_info, ST_CHAR (*varName)[MAX_REF_LEN], ST_INT scope,
|
|
|
|
|
ST_CHAR (*domName)[MAX_REF_LEN], ST_INT *type_id, ST_CHAR **dataSrc,
|
|
|
|
|
ST_INT num_var, ST_INT timeOut);
|
|
|
|
|
|
|
|
|
|
static ST_RET getFile (MVL_NET_INFO *clientNetInfo, ST_CHAR *loc_file, ST_CHAR *rem_file);
|
|
|
|
|
|
|
|
|
|
static ST_VOID init_mem ();
|
|
|
|
|
static ST_VOID free_mem();
|
|
|
|
|
|
|
|
|
|
static ST_VOID init_log_cfg (ST_VOID);
|
|
|
|
|
static ST_VOID mem_chk_error_detected (ST_VOID);
|
|
|
|
|
static ST_VOID *my_malloc_err (ST_UINT size);
|
|
|
|
|
static ST_VOID *my_calloc_err (ST_UINT num, ST_UINT size);
|
|
|
|
|
static ST_VOID *my_realloc_err (ST_VOID *old, ST_UINT size);
|
|
|
|
|
|
|
|
|
|
ST_RET rpt_typeids_find (RPT_TYPEIDS *rpt_typeids);
|
|
|
|
|
|
|
|
|
|
RCB_INFO *rcb_info_create (MVL_NET_INFO *net_info, ST_CHAR *domName, MVL_VMD_CTRL *vmd_ctrl,
|
|
|
|
|
ST_CHAR *rcbName, RPT_TYPEIDS *rpt_typeids, ST_INT timeOut);
|
|
|
|
|
ST_VOID rcb_info_destroy (RCB_INFO *rcb_info);
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
RPT_INFO *rpt_info);
|
|
|
|
|
ST_INT vmd_type_id_create (MVL_VMD_CTRL *vmd_ctrl, ST_CHAR *type_name, ST_UCHAR *asn1_data, ST_UINT asn1_len);
|
|
|
|
|
|
|
|
|
|
//liwei 2012.07.13
|
|
|
|
|
ST_INT my_type_id_create_from_tdl (ST_CHAR *type_name, ST_CHAR *tdl, MVL_VMD_CTRL *vmd_ctrl);
|
|
|
|
|
ST_RET rcb_info_var_create (RCB_INFO *rcb_info, RPT_TYPEIDS *rpt_typeids);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static ST_VOID kbService (ST_VOID);
|
|
|
|
|
|
|
|
|
|
//yhc
|
|
|
|
|
__declspec(dllexport) void mms_free_dataset_datainfo(DATA_INFO *data_info);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>osicfg
|
|
|
|
|
__declspec(dllexport) unsigned int mms_load_OsiCfg(); //yhc
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|