Files
microser/include/mmslite/smpval.h
2025-01-16 16:17:01 +08:00

139 lines
5.6 KiB
C

/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/* (c) Copyright Systems Integration Specialists Company, Inc., */
/* 2006-2006, All Rights Reserved. */
/* */
/* PROPRIETARY AND CONFIDENTIAL */
/* */
/* MODULE NAME : smpval.h */
/* PRODUCT(S) : */
/* */
/* MODULE DESCRIPTION : */
/* Structures, functions for sending/receiving IEC 61850 Sampled */
/* Value messages (according to IEC 61850-9-2). */
/* */
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE : */
/* */
/* MODIFICATION LOG : */
/* Date Who Rev Comments */
/* -------- --- ------ ------------------------------------------- */
/* 02/15/08 JRB 03 Fix securityLen type (ST_UINT -> ST_INT). */
/* 08/09/06 JRB 02 Fix svID len (Vstring65). */
/* Change DatSet to Vstring129 (ObjectReference)*/
/* 03/17/05 JRB 01 Created */
/************************************************************************/
#ifndef SMPVAL_INCLUDED
#define SMPVAL_INCLUDED
#include "asn1r.h" /* need MMS_UTC_TIME */
#include "ethertyp.h" /* need ETYPE_INFO */
#ifdef __cplusplus
extern "C" {
#endif
#define MAX_SMPVAL_SVID_LEN 65 /* 61850 MsvID, UsvID len */
#define MAX_SMPVAL_OBJREF_LEN 129 /* 61850 ObjectReference len */
#define MAX_SMPVAL_SECURITY_LEN 20 /* max len of security info */
/* Bit numbers in OptFlds bitstring (configured by SmvOpts in SCL file) */
#define SVOPT_BITNUM_SMPRATE 0
#define SVOPT_BITNUM_REFRTM 1
#define SVOPT_BITNUM_SMPSYNCH 2
/************************************************************************/
/* STRUCTURE DEFINITIONS */
/************************************************************************/
typedef struct
{
ST_UINT8 *SamplePtr; /* pointer to "Sample" data */
ST_INT SampleLen; /* length of "Sample" data in bytes */
ST_CHAR svID [MAX_SMPVAL_SVID_LEN+1]; /* MsvID or UsvID - Vstring65 */
ST_BOOLEAN DatSetPres; /* is "DatSet" present in ASDU? */
ST_CHAR DatSet [MAX_SMPVAL_OBJREF_LEN+1]; /* Vstring129 (ObjectReference)*/
/* (Optional) */
ST_UINT16 SmpCnt;
ST_UINT32 ConfRev;
ST_BOOLEAN SmpSynch;
ST_BOOLEAN RefrTmPres; /* is "RefrTm" present in ASDU? */
MMS_UTC_TIME RefrTm; /* Optional */
ST_BOOLEAN SmpRatePres; /* is "SmpRate" present in ASDU? */
ST_UINT16 SmpRate; /* Optional */
} SMPVAL_ASDU;
typedef struct
{
ST_UINT16 numASDU; /* Num of ASDU concatenated into one APDU */
SMPVAL_ASDU *asduArray; /* array of "numASDU" structs */
/* allocated by smpval_msg_create OR */
/* allocated during decode */
ST_UCHAR securityBuf [MAX_SMPVAL_SECURITY_LEN]; /* security info*/
ST_INT securityLen; /* len of security info */
}SMPVAL_MSG;
/************************************************************************/
/* Functions for sending SMPVAL messages. */
/************************************************************************/
SMPVAL_MSG *smpval_msg_create (
ST_UINT numASDU); /* Num of ASDU concatenated into one APDU*/
ST_VOID smpval_msg_destroy (SMPVAL_MSG *smpvalMsg);
/* Updates data stored for one ASDU to be sent in a SMPVAL message */
ST_RET smpval_asdu_data_update (
SMPVAL_MSG *smpvalMsg, /* SMPVAL msg info structure */
ST_INT asduIdx, /* index into array of ASDU for this SMPVAL msg*/
ST_UINT8 *SamplePtr, /* pointer to data */
ST_INT SampleLen, /* length of data in bytes */
ST_CHAR *svID,
ST_INT SmpCnt,
ST_BOOLEAN DatSetPres, /* SD_TRUE if optional DatSet should be sent*/
ST_CHAR *DatSet, /* Optional (chk DatSetPres arg) */
ST_UINT32 ConfRev,
ST_BOOLEAN SmpSynch,
ST_BOOLEAN RefrTmPres, /* SD_TRUE if optional RefrTm should be sent*/
MMS_UTC_TIME *RefrTm, /* Optional (chk_RefrTmPres arg) */
ST_BOOLEAN SmpRatePres, /* SD_TRUE if optional SmpRate should be sent*/
ST_UINT16 SmpRate); /* Optional (chk SmpRatePres arg) */
/* Encodes complete SMPVAL message (APDU plus Ethertype header). */
/* RETURNS: ptr to start of encoded message (or NULL on error) */
ST_UCHAR *smpval_msg_encode (
SMPVAL_MSG *smpvalMsg, /* SMPVAL msg info structure */
ETYPE_INFO *etypeInfo, /* Ethertype info */
ST_UCHAR *asn1DataBuf, /* buffer to encode in */
ST_INT asn1DataBufLen, /* len of buffer */
ST_INT *asn1DataLenOut);/* ptr to len encoded */
ST_RET smpval_msg_send (
SMPVAL_MSG *smpvalMsg, /* SMPVAL msg info structure */
ETYPE_INFO *etypeInfo, /* Ethertype info */
ST_UCHAR *dstMac); /* Destination (Multicast) MAC address */
/************************************************************************/
/* Functions for receiving SMPVAL messages. */
/************************************************************************/
/* Decode SMPVAL message and fill in SMPVAL_MSG struct.*/
SMPVAL_MSG *smpval_msg_decode (
SN_UNITDATA *sn_req, /* message to decode */
ETYPE_INFO *etypeInfo); /* where to store decoded Ethertype info*/
/* Must be called to free structure returned from smpval_msg_decode. */
ST_VOID smpval_msg_free (SMPVAL_MSG *smpvalMsg);
/************************************************************************/
/* Utility functions */
/************************************************************************/
/* Copies data from source to destination but reverses the order of the */
/* bytes (i.e. converts Big-Endian to Little-Endian or vice versa). */
ST_VOID reverse_bytes (
ST_UINT8 *dst, /* ptr to destination buffer */
ST_UINT8 *src, /* ptr to source buffer */
ST_INT numbytes); /* number of bytes to copy */
#ifdef __cplusplus
}
#endif
#endif /* included */