139 lines
5.6 KiB
C
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 */
|