commCPU_SUPV/code/protect/demo/iec61850lib.h

360 lines
11 KiB
C
Raw Normal View History

2025-04-30 16:24:29 +08:00
/****************************************************************************
<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>: iec61850lib.h
----------------------------------------------------------------------------
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : iec61850lib <EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
----------------------------------------------------------------------------
<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־ :
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
----------------------------------------------------------------------------
2010-06-11 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
****************************************************************************/
#ifndef _IEC61850LIB_H_
#define _IEC61850LIB_H_
#ifdef __cplusplus
extern "C"{
#endif
/******************* <20><><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ؽṹ<D8BD><E1B9B9><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD> ***********************/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ȣ<EFBFBD><C8A3><EFBFBD>9-2<><32>14
#define SV2_MAX_VSTRING_LEN 35
#define SV2_MAX_OBJREF_LEN 64
#define SV2_MAX_SVID_LEN 34
#define SV2_MAX_ASDU_NUM 10 //<2F><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>һ<EFBFBD><D2BB>apdu<64>а<EFBFBD><D0B0><EFBFBD>10<31><30>asdu
/**
* smv9-2<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*/
typedef struct
{
int eth_index;
int timeout;
unsigned short int appid;
char svID[SV2_MAX_SVID_LEN+1]; /**< svID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
}GSV_SV2RECV_INI;
typedef struct
{
unsigned short int smpCnt; /**< <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
unsigned int confRev; /**< <20><><EFBFBD>øı<C3B8><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
char smpSynch; /**< <20><>0<EFBFBD><30>1<EFBFBD><31>2<EFBFBD><32><EFBFBD><EFBFBD>ֵ,<2C><>9-2le7.2.2 */
char *ds_buf; /**< <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʽ<EFBFBD><CABD>9-2le figure5 */
int buf_len; /**< ds_buf<75>ij<EFBFBD><C4B3><EFBFBD> */
}SV2_ASDU_VAL;
/** ASN.1 <20>򵥵<EFBFBD>Ԫ<EFBFBD><D4AA>Ϣ */
typedef struct ASN_1_UNIT_struct
{
unsigned short int tag; /**< <20><>Ԫ<EFBFBD><D4AA>ǩ */
unsigned short int size; /**< <20><>Ԫ<EFBFBD><D4AA><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
unsigned short int offset; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>asn1<6E><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC>õ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> */
} ASN_1_UNIT, * PASN_1_UNIT;
typedef struct
{
char *apdu;
ASN_1_UNIT smpCnt;
ASN_1_UNIT confRev;
ASN_1_UNIT smpSynch;
ASN_1_UNIT ds_buf;
ASN_1_UNIT svId;
}SV2_ASDU_AU;
/**2012-03-27<32><37><EFBFBD><EFBFBD><EFBFBD>ӽṹ<D3BD><EFBFBD><E5A3AC>GOOSE_SMV.txt<78>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϣ**/
typedef struct
{
char daRef[SV2_MAX_OBJREF_LEN+1];
char outVarName[SV2_MAX_OBJREF_LEN+1];
int entryIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>1<EFBFBD><31>ʼ
int userIndex; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
float rating; //<2F>ֵ<EEB6A8><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2012-03-30, from int to float
} SV2_ASDU_USER;
/**
* smv9-2<EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
typedef struct
{
int eth_index; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
unsigned short int appid;
unsigned short int reserved1;
unsigned short int reserved2;
char svId[SV2_MAX_SVID_LEN+1];
SV2_ASDU_VAL *asdu_vals;
SV2_ASDU_AU *val_asdu_au;
unsigned char asdu_num; /**< apdu<64><75>asdu<64>ĸ<EFBFBD><C4B8><EFBFBD> */
unsigned short int apdu_len; /**< <20><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6><CFB1>Ļ<EFBFBD>asdu<64><75><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>仯 */
SV2_ASDU_USER *asdu_user; //hsj add 2012-03-27
int entryNumAct; //<2F><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B3A4>
int entryNumDataset; //<2F><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD>
int delayPoint; //<2F>ϲ<EFBFBD><CFB2><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD>ͣ<EFBFBD><CDA3>ӳٵ<D3B3><D9B5><EFBFBD>
int ctrlIndex; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>0<EFBFBD><30>ʼ add 2012-05-10
}GSV_SV2RECV_CTRL;
/**
* <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>9-2<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻش<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>
* sv2_ctrl<EFBFBD>е<EFBFBD>ds_buffs<EFBFBD><EFBFBD>ȡֵ
* svIndex<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>svNum<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>SV<EFBFBD>ܸ<EFBFBD><EFBFBD><EFBFBD>, recvTime<EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>λns
*/
typedef void (*U_SMV2RECV_CALLBACK)(GSV_SV2RECV_CTRL *sv2_ctrl, int svIndex, int svNum, unsigned int recvTime );
/************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GOOSE<53><45><EFBFBD>ؽṹ<D8BD><E1B9B9><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD> ******************/
#define MAX_IDENT_LEN 64 /* length of an Identifier variable */
#define MVL61850_MAX_OBJREF_LEN 129 /* Value specified by Tissue 141*/
//<2F><>ֹ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
#ifndef GEN_LIST_INCLUDED
typedef struct dbl_lnk
{
/* Note: adding/removing fields to/from this struct will make older */
/* !!! applications incompatible with new security DLLs. */
struct dbl_lnk * next;
struct dbl_lnk * prev;
} DBL_LNK;
#endif
typedef struct mms_utc_time_tag
{
unsigned long secs; /* Number of seconds since January 1, 1970 */
unsigned long fraction; /* Fraction of a second */
unsigned long qflags; /* Quality flags, 8 least-significant bits only */
} MMS_UTC_TIME;
typedef enum{
AS_DA_TYPE_UNKNOWN = 0,
AS_DA_TYPE_BOOLEAN,
AS_DA_TYPE_INT8,
AS_DA_TYPE_INT16,
AS_DA_TYPE_INT32,
AS_DA_TYPE_INT128,
AS_DA_TYPE_INT8U,
AS_DA_TYPE_INT16U,
AS_DA_TYPE_INT32U,
AS_DA_TYPE_FLOAT32,
AS_DA_TYPE_FLOAT64,
AS_DA_TYPE_CODEDENUM, //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD>ȵ<EFBFBD>bitstring, 2bit
// AS_DA_TYPE_TCMD, //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD>ȵ<EFBFBD>bitstring, 2bit
AS_DA_TYPE_OSTRING8, //<2F>䳤octet string,<2C><><EFBFBD>󳤶<EFBFBD>8<EFBFBD><38><EFBFBD>ֽ<EFBFBD>
AS_DA_TYPE_OSTRING64, //<2F>䳤octet string,<2C><><EFBFBD>󳤶<EFBFBD>64<36><34><EFBFBD>ֽ<EFBFBD>
AS_DA_TYPE_VSTRING64, //<2F><><EFBFBD>ӱ䳤<D3B1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>64
AS_DA_TYPE_VSTRING65, //<2F><><EFBFBD>ӱ䳤<D3B1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>65
AS_DA_TYPE_VSTRING129, //<2F><><EFBFBD>ӱ䳤<D3B1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>129
AS_DA_TYPE_VSTRING255 , //<2F><><EFBFBD>ӱ䳤<D3B1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>255
AS_DA_TYPE_UNISTRING255, //utf-8<>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>255<35><35><EFBFBD>ַ<EFBFBD>
AS_DA_TYPE_QUALITY, //<2F>䳤bitstring 13bit
AS_DA_TYPE_TIMESTAMP, //utctime
AS_DA_TYPE_ENTRYTIME, //binary time<6D><65>btime6<65><36>ʽ
AS_DA_TYPE_OPTFLDS, //<2F>䳤bitstring 10bit
AS_DA_TYPE_TRGC, //<2F>䳤bitstring 6bit
AS_DA_TYPE_CHECK, //<2F>䳤bitstring 2bit
AS_DA_TYPE_ENTRYID, //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD>ȵ<EFBFBD>octet string, 8<><38><EFBFBD>ֽ<EFBFBD>
AS_DA_TYPE_STRUCT //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
}AS_DA_TYPE;
/**add 2012-03-27, <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>index<65><78><EFBFBD><EFBFBD>ȡ<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***/
typedef struct
{
DBL_LNK l;
//MVL_VAR_ASSOC * var;
unsigned int index; //<2F><>Ϊ<EFBFBD><EFBFBD><E6B4A2>userinfo<66>ж<EFBFBD>ȡ<EFBFBD><C8A1>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
unsigned char gse_trged;//<2F>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>goose
}MVL_VAR_LIST;
typedef struct
{
char da_ref [MAX_IDENT_LEN + 1]; /* <20><><EFBFBD><EFBFBD>da<64><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:E1Q1SB1Ld1/LN$ST$Mod$stVal*/
char usr_data_info [MAX_IDENT_LEN + 1];
void * dataPtr;
void * dataType; /* data type of this leaf */
AS_DA_TYPE type; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void * do_map; /* <20><>da<64><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>do<64><6F>map<61>ṹ,ʹ<><CAB9>ʱǿ<CAB1><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊas_do_map*/
MVL_VAR_LIST * var_list;//<2F><>data_map<61><70><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC>ij<EFBFBD>Ա added djf 20090807
void * last_data;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱȽ<DDB1> added djf 20090807
} AS_DA_MAP;
typedef struct
{
int da_map_num;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>damap<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>==0
AS_DA_MAP ** da_maps;//<2F><><EFBFBD>飬ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>damap<61><70>ָ<EFBFBD><D6B8>ln<6C>µ<EFBFBD>datamap<61><70><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>==NULL
}GOOSE_MAP_CTRL;
typedef struct
{
unsigned char connected;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
int eth_index;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double rx_time;//ʱ<><CAB1>
}GOOSE_RX_CHNL;
typedef struct
{
DBL_LNK l;
struct
{
unsigned short etypeAppid; //ͨ<>Ų<EFBFBD><C5B2>ֵ<EFBFBD>appid
unsigned char dstMac[6];//<2F><EFBFBD><E9B2A5>ַ
//char gcRef [MVL61850_MAX_OBJREF_LEN + 1]; /* GoCBRef in IEC 61850 */
//char dataSetRef [MVL61850_MAX_OBJREF_LEN + 1];/* DatSet in IEC 61850 */
//char appID [MVL61850_MAX_OBJREF_LEN + 1]; /* GoID in IEC 61850 */
int timeValidate; //GOOSE<53><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч,hsj add 2012-03-30
int ctrlIndex; //<2F><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>0<EFBFBD><30>ʼ 2012-05-09
}ini_info;//<2F><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD>goose<73>õ<EFBFBD><C3B5><EFBFBD>
char gcRef [MVL61850_MAX_OBJREF_LEN + 1]; /* GoCBRef in IEC 61850 */
unsigned long timeToLive;
char dataSetRef [MVL61850_MAX_OBJREF_LEN + 1];/* DatSet in IEC 61850 */
unsigned char appID_pres;
char appID [MVL61850_MAX_OBJREF_LEN + 1]; /* GoID in IEC 61850 */
MMS_UTC_TIME utcTime;
unsigned long stNum;
unsigned long sqNum;
unsigned char test;
unsigned long confRev;
unsigned char needsCommissioning;
unsigned long entryNum;
signed long numUnits; //dataset<65>а<EFBFBD><D0B0><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
GOOSE_MAP_CTRL * goose_maps;//ÿ<><C3BF>unit<69><74>Ӧһ<D3A6><D2BB>GOOSE_MAP_CTRL<52><EFBFBD><E1B9B9>
int chnl_num;//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GOOSE_RX_CHNL * chnls;//<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
}GSE_RX_CTRL;
/************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GOOSE<53><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽṹ<D8BD><E1B9B9><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD> ******************/
#define GOOSE_SENDBUFF__MAX_LEN 1540
#define MAC_ADDR_SIZE 6
#define MVL61850_MAX_RPTID_LEN 65
typedef union
{
MMS_UTC_TIME utcTime;
unsigned short quality;
unsigned char dpi;
unsigned char spi;
unsigned long int1;
float fl1;
} USER_DATA_VAL;
typedef struct
{
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
char Ref[MVL61850_MAX_OBJREF_LEN+1];
char typeStr[MVL61850_MAX_RPTID_LEN+1];
char InVarName[MVL61850_MAX_OBJREF_LEN+1];
int act; //act <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD>õ<EFBFBD>
unsigned long varIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AS_DA_TYPE type;
USER_DATA_VAL valNow;
USER_DATA_VAL valLast;
} GSE_IEC_DATA_USER;
typedef struct
{
unsigned char *goEna;
char gcRef [MVL61850_MAX_OBJREF_LEN + 1]; /* GoCBRef in IEC 61850 */
unsigned long timeToLive;
char dataSetRef [MVL61850_MAX_OBJREF_LEN + 1];/* DatSet in IEC 61850 */
unsigned char appID_pres;
char appID [MVL61850_MAX_RPTID_LEN + 1]; /* GoID in IEC 61850 */
/* (was AppID in Ed 1) */
MMS_UTC_TIME utcTime;
unsigned long stNum;
unsigned long sqNum;
unsigned char test;
unsigned long confRev;
unsigned char needsCommissioning;
long numDataEntries;
void * dataEntries; /* array of data entry structs */
long numDataMaps;
AS_DA_MAP ** data_maps;
GSE_IEC_DATA_USER *userData;
int ethIndex;
unsigned char *sendPst;
int sendLen;
unsigned char asn1Buf[GOOSE_SENDBUFF__MAX_LEN];
unsigned char *pstSqNum;
unsigned char *pstStNum;
unsigned char *pstTest;
unsigned char *pstutcTime;
unsigned char *pstTimeAllow;
}GSE_IEC_CTRL;
typedef struct iec_goose_send_user_info
{
struct iec_goose_send_user_info * next;
struct iec_goose_send_user_info * prev;
unsigned int goose_state; /*TRUE, ready to send GOOSE */
double next_time; /*<2A>´η<C2B4><CEB7><EFBFBD>ʱ<EFBFBD><CAB1> */
unsigned int retrans_curve_offset; /*offset to current retrans curve */
void * curve_pointer; /*pointer to retransmission curve*/
GSE_IEC_CTRL * gptr; /*pointer to GOOSE Control */
// MVL_NVLIST_CTRL * nvl; /*pointer to Data Set associated with GOOSE*/
// MVL_IND_PEND * scan_ind; /*pointer to structure that allows for polling*/
unsigned char dstAddress[MAC_ADDR_SIZE]; /*destination MAC address to which GOOSE will be sent */
unsigned short etype_tci; /* Ethertype TCI */
unsigned short etype_id; /* Ethertype ID */
unsigned short etype_appID; /* Ethertype AppID */
unsigned char val_changed; /* <20><><EFBFBD><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>goose */
}IEC_GOOSE_SEND_USER_INFO;
/********************* <20><><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><EFBFBD><E5B2BB>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******************/
typedef struct
{
unsigned char devAddr;
unsigned char devCpu;
union
{
struct
{
#ifdef CONFIG_CPU_BIG_ENDIAN
unsigned char infHigh;
unsigned char infLow;
#else
unsigned char infLow;
unsigned char infHigh;
#endif
} inf_struc;
unsigned short inf;
} inf_union;
unsigned int unique; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһֵ
char infType; //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2A3>C/ң<><D2A3>X/ң<><D2A3>K/<2F><>ֲZ/GOOSE S/
} DATAMAP_USER_INFO;
#ifdef __cplusplus
}
#endif
#endif