326 lines
12 KiB
C
326 lines
12 KiB
C
![]() |
/****************************************************************************/
|
|||
|
/* Copyright (c) 2007,<2C><><EFBFBD>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾ */
|
|||
|
/* All rights reserved. */
|
|||
|
/* */
|
|||
|
/* ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
/** asn1<6E><31><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ȡֵ<C8A1><D6B5><EFBFBD><EFBFBD>ֵ<EFBFBD>ӿ<EFBFBD>
|
|||
|
* @file gsv_asn1.h */
|
|||
|
/* */
|
|||
|
/* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ע<><D7A2> */
|
|||
|
/* 2007/12/10 DJF <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> */
|
|||
|
/****************************************************************************/
|
|||
|
#ifndef GSMV_GSV_ASN1_INC
|
|||
|
#define GSMV_GSV_ASN1_INC
|
|||
|
|
|||
|
#include "glbtypes.h"
|
|||
|
#include "sysincs.h"
|
|||
|
#include "as_damap.h"
|
|||
|
#include "gse_rx.h"
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C" {
|
|||
|
#endif
|
|||
|
|
|||
|
/** ASN.1 <20><EFBFBD>Ԫ<EFBFBD><D4AA>Ϣ */
|
|||
|
typedef struct ASN_1_UNIT_struct
|
|||
|
{
|
|||
|
ST_UINT16 tag; /**< <20><>Ԫ<EFBFBD><D4AA>ǩ */
|
|||
|
ST_UINT16 size; /**< <20><>Ԫ<EFBFBD><D4AA><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
|
|||
|
ST_UINT16 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;
|
|||
|
|
|||
|
/** Goose <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>Ա<EFBFBD><D4B1>ǩֵ */
|
|||
|
#define TAG_GS_gocbRef 0
|
|||
|
#define TAG_GS_timeToLive 1
|
|||
|
#define TAG_GS_dataSet 2
|
|||
|
#define TAG_GS_goId 3
|
|||
|
#define TAG_GS_t 4
|
|||
|
#define TAG_GS_stNum 5
|
|||
|
#define TAG_GS_sqNum 6
|
|||
|
#define TAG_GS_test 7
|
|||
|
#define TAG_GS_confRev 8
|
|||
|
#define TAG_GS_ndsCom 9
|
|||
|
#define TAG_GS_entryNum 10
|
|||
|
#define TAG_GS_MAX 10
|
|||
|
|
|||
|
/** SMV-9-2 ASDUͷ<55><CDB7>Ա<EFBFBD><D4B1>ǩindex */
|
|||
|
#define TAG_SMV_NOASDU 0
|
|||
|
#define TAG_SMV_ASDU_svID 0
|
|||
|
#define TAG_SMV_ASDU_DatSet 1
|
|||
|
#define TAG_SMV_ASDU_SmpCnt 2
|
|||
|
#define TAG_SMV_ASDU_ConfRev 3
|
|||
|
#define TAG_SMV_ASDU_RefrTm 4
|
|||
|
#define TAG_SMV_ASDU_SmpSynch 5
|
|||
|
#define TAG_SMV_ASDU_SmpRate 6
|
|||
|
#define TAG_SMV_ASDU_ENTRY 7 /**< entry<72><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
|||
|
/** ASN1<4E><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
#define ASN1_UNITS_MAX 400
|
|||
|
|
|||
|
/************************************************************************/
|
|||
|
/* <20><><EFBFBD><EFBFBD> asn.1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
/************************************************************************/
|
|||
|
|
|||
|
#define asn1_GetBOOL(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
value = pdata[(punit)->offset] & 0x01; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_SetBOOL(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
pdata[(punit)->offset] = value & 0x01; \
|
|||
|
}
|
|||
|
|
|||
|
/************************************************************************
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>asn1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>asn1<EFBFBD>涨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ1<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>Ϊ5<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><EFBFBD>ֽ<EFBFBD>ֵΪ0<EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD><EFBFBD>ֽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ1
|
|||
|
************************************************************************/
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>asn1<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>
|
|||
|
* @param pdata asn1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĵ<EFBFBD>ַ<EFBFBD><EFBFBD>Ҫ<EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD>asn1_Parse<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
* @param punit asn1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><EFBFBD>ASN_1_UNIT<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD>asn1_parse<EFBFBD>õ<EFBFBD>
|
|||
|
* @param value <EFBFBD><EFBFBD>punit<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Ҫд<EFBFBD><EFBFBD>punit<EFBFBD>е<EFBFBD>ֵ
|
|||
|
*/
|
|||
|
#define asn1_GetINT(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
PASN_1_UNIT pu = punit; \
|
|||
|
ST_UINT8 * p = &pdata[pu->offset]; \
|
|||
|
ST_UINT size = pu->size; \
|
|||
|
ST_INT v; \
|
|||
|
if (size == 4) \
|
|||
|
{ \
|
|||
|
v = (* p++) << 24; \
|
|||
|
v |= (* p++) << 16; \
|
|||
|
v |= (* p++) << 8; \
|
|||
|
v |= (* p); \
|
|||
|
} \
|
|||
|
else \
|
|||
|
{ \
|
|||
|
v = * p & 0x80 ? 0xFFFFFF00 : 0; \
|
|||
|
while (1) \
|
|||
|
{ \
|
|||
|
v |= (* p++) & 0xFF; \
|
|||
|
if (--size == 0) \
|
|||
|
break; \
|
|||
|
v <<= 8; \
|
|||
|
} \
|
|||
|
} \
|
|||
|
value = v; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_SetINT(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
ST_INT v = value; \
|
|||
|
* p++ = (v >> 24) & 0xFF; \
|
|||
|
* p++ = (v >> 16) & 0xFF; \
|
|||
|
* p++ = (v >> 8) & 0xFF; \
|
|||
|
* p = v & 0xFF; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_GetUINT(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
PASN_1_UNIT pu = punit; \
|
|||
|
ST_UINT8 * p = &pdata[pu->offset]; \
|
|||
|
ST_UINT size = pu->size; \
|
|||
|
ST_UINT v = 0; \
|
|||
|
while (1) \
|
|||
|
{ \
|
|||
|
v |= (* p++) & 0xFF; \
|
|||
|
if (--size == 0) \
|
|||
|
break; \
|
|||
|
v <<= 8; \
|
|||
|
} \
|
|||
|
value = v; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_SetUINT(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
ST_UINT v = value; \
|
|||
|
if((punit)->size == 5) \
|
|||
|
{ \
|
|||
|
* p++ = 0; \
|
|||
|
} \
|
|||
|
* p++ = (v >> 24) & 0xFF; \
|
|||
|
* p++ = (v >> 16) & 0xFF; \
|
|||
|
* p++ = (v >> 8) & 0xFF; \
|
|||
|
* p = v & 0xFF; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_GetFLOAT(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
if (SD_BYTE_ORDER == SD_LITTLE_ENDIAN) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * psrc = &pdata[(punit)->offset] + 4; \
|
|||
|
ST_FLOAT v ; \
|
|||
|
ST_UINT8 * p = ( ST_UINT8 * )&v; \
|
|||
|
* p++ = *psrc--; \
|
|||
|
* p++ = *psrc--; \
|
|||
|
* p++ = *psrc--; \
|
|||
|
* p = *psrc; \
|
|||
|
value = v; \
|
|||
|
} \
|
|||
|
else \
|
|||
|
{ \
|
|||
|
ST_UINT8 * psrc = &pdata[(punit)->offset] + 1; \
|
|||
|
ST_FLOAT v ; \
|
|||
|
ST_UINT8 * p = ( ST_UINT8 * )&v; \
|
|||
|
* p++ = *psrc++; \
|
|||
|
* p++ = *psrc++; \
|
|||
|
* p++ = *psrc++; \
|
|||
|
* p = *psrc; \
|
|||
|
value = v; \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_SetFLOAT(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
if (SD_BYTE_ORDER == SD_LITTLE_ENDIAN) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
ST_FLOAT v = value; \
|
|||
|
ST_UINT8 * psrc = ( ST_UINT8 * )&v; \
|
|||
|
* p++ = 8; \
|
|||
|
* p++ = *psrc++; \
|
|||
|
* p++ = *psrc++; \
|
|||
|
* p++ = *psrc++; \
|
|||
|
* p = *psrc; \
|
|||
|
} \
|
|||
|
else \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
ST_FLOAT v = value; \
|
|||
|
ST_UINT8 * psrc = ( ST_UINT8 * )&v + 3; \
|
|||
|
* p++ = 8; \
|
|||
|
* p++ = *psrc--; \
|
|||
|
* p++ = *psrc--; \
|
|||
|
* p++ = *psrc--; \
|
|||
|
* p = *psrc; \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_GetUTC(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
ST_INT v; \
|
|||
|
v = (* p++) << 24; \
|
|||
|
v |= (* p++) << 16; \
|
|||
|
v |= (* p++) << 8; \
|
|||
|
v |= (* p++); \
|
|||
|
value.secs = v; \
|
|||
|
v = (* p++) << 16; \
|
|||
|
v |= (* p++) << 8; \
|
|||
|
v |= (* p++); \
|
|||
|
value.fraction = v; \
|
|||
|
value.qflags = * p; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_SetUTC(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
ST_INT v; \
|
|||
|
v = value.secs; \
|
|||
|
* p++ = (ST_UCHAR)((v >> 24) & 0xFF); \
|
|||
|
* p++ = (ST_UCHAR)((v >> 16) & 0xFF); \
|
|||
|
* p++ = (ST_UCHAR)((v >> 8) & 0xFF); \
|
|||
|
* p++ = (ST_UCHAR)(v & 0xFF); \
|
|||
|
v = value.fraction; \
|
|||
|
* p++ = (ST_UCHAR)((v >> 16) & 0xFF); \
|
|||
|
* p++ = (ST_UCHAR)((v >> 8) & 0xFF); \
|
|||
|
* p++ = (ST_UCHAR)(v & 0xFF); \
|
|||
|
* p = (ST_UCHAR)(value.qflags & 0xFF); \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_GetBstr13(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset] + 1; \
|
|||
|
value[0] = * p++; \
|
|||
|
value[1] = * p; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_SetBstr13(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
* p++ = 0x03; \
|
|||
|
* p++ = value[0]; \
|
|||
|
* p = value[1]; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_GetBstr2(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
value[0] = *(p+1); \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_SetBstr2(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
* p++ = 0x06; \
|
|||
|
* p = value[0]; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_GetEntryTime(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
ST_INT v; \
|
|||
|
v = (* p++) << 24; \
|
|||
|
v |= (* p++) << 16; \
|
|||
|
v |= (* p++) << 8; \
|
|||
|
v |= (* p++); \
|
|||
|
value.btime6_ms = v; \
|
|||
|
v = (* p++) << 8; \
|
|||
|
v |= (* p); \
|
|||
|
value.btime6_days = v; \
|
|||
|
}
|
|||
|
|
|||
|
#define asn1_SetEntryTime(pdata, punit, value) \
|
|||
|
{ \
|
|||
|
ST_UINT8 * p = &pdata[(punit)->offset]; \
|
|||
|
ST_INT v; \
|
|||
|
v = value.btime6_ms; \
|
|||
|
* p++ = (ST_UCHAR)((v >> 24) & 0xFF); \
|
|||
|
* p++ = (ST_UCHAR)((v >> 16) & 0xFF); \
|
|||
|
* p++ = (ST_UCHAR)((v >> 8) & 0xFF); \
|
|||
|
* p++ = (ST_UCHAR)(v & 0xFF); \
|
|||
|
v = value.btime6_days; \
|
|||
|
* p++ = (ST_UCHAR)((v >> 8) & 0xFF); \
|
|||
|
* p = (ST_UCHAR)(v & 0xFF); \
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD> asn.1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param data asn.1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param datalen <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>ȡ<EFBFBD>
|
|||
|
* @param unit <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param maxnum unit<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @return ʵ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
|||
|
**/
|
|||
|
ST_INT asn1_Parse( ST_UINT8 * data, ST_INT datalen, ASN_1_UNIT * unit, ST_INT maxnum );
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD>GSV_UNIT_DATA<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵд<EFBFBD><EFBFBD>ASN_1_UNIT<EFBFBD><EFBFBD>
|
|||
|
* @param asn1buf <EFBFBD><EFBFBD><EFBFBD><EFBFBD>asn1_parseʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>asn1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>aunits<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
|||
|
* @param gunits GSV_UNIT_DATA<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param num <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param aunits ASN_1_UNIT<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
**/
|
|||
|
//ST_VOID gsv_set_asn1_unit_val(ST_UCHAR *asn1buf, GSV_UNIT_DATA *gunits, ST_INT num, ASN_1_UNIT *aunits);
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD>ASN_1_UNIT<EFBFBD>ж<EFBFBD>ֵ<EFBFBD><EFBFBD>DATA_MAP<EFBFBD><EFBFBD>
|
|||
|
* @param asn1buf <EFBFBD><EFBFBD><EFBFBD><EFBFBD>asn1_parseʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>asn1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>aunits<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
|||
|
* @param aunits ASN_1_UNIT<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param num <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param goosemap<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>Աda_map_num<EFBFBD><EFBFBD><EFBFBD><EFBFBD>==0,da_maps<EFBFBD><EFBFBD><EFBFBD><EFBFBD> == NULL
|
|||
|
**/
|
|||
|
ST_RET gse_get_asn1_unit_val( ST_UCHAR * asn1buf, ASN_1_UNIT * aunits, ST_INT num, GOOSE_MAP_CTRL * goose_maps );
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
#endif
|