📄 sysframe.c
字号:
/****************************************************************
** *
** FILE : SYSFrame.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "structs.h"
#include "tools.h"
#include "public.h"
#include "stream.h"
#include "sm_list.h"
#include "sysframe.h"
/*
********************************************************************************
* DEFINE CONFIG PARAMETERS
********************************************************************************
*/
#define SIZE_BUF 256
/*
********************************************************************************
* DEFINE MODULE VARIANT
********************************************************************************
*/
static INT8U version[2] = {0x30, 0x00};
static STREAM wstrm;
static INT8U buffer[SIZE_BUF];
/*
***************************************************************************************
* NOTE: if ((code1 & 11111111,11000000) == (code2 & 11111111, 11000000)) return TRUE
***************************************************************************************
*/
static BOOLEAN EgcodePass(INT16U code1, INT16U code2)
{
ConvertData((INT8U *)&code1, sizeof(code1), 0x0, 0x7f);
ConvertData((INT8U *)&code2, sizeof(code2), 0x0, 0x7f);
if ((code1 & 0xffc0) == (code2 & 0xffc0)) return TRUE;
else return FALSE;
}
INT8U GetSysFrameVersion(void)
{
return version[1];
}
BOOLEAN ChkSum_SYSFrame(SYSFRAME_STRUCT *frame, INT16U framelen)
{
if (GetChkSum_7C((INT8U *)frame, framelen - 1) == ((INT8U *)frame)[framelen - 1]) return TRUE;
else return FALSE;
}
void ConvertEgcode(SYSFRAME_STRUCT *frame)
{
ConvertData((INT8U *)&frame[0], 2, 0x0, 0x7f);
}
INT16U GetEgcode_SYSFrame(SYSFRAME_STRUCT *frame)
{
HWORD_UNION egcode;
egcode.bytes.low = frame->EGCODE[1];
egcode.bytes.high = frame->EGCODE[0];
return egcode.hword;
}
INT16U GetType_SYSFrame(SYSFRAME_STRUCT *frame)
{
HWORD_UNION type;
type.bytes.low = frame->type[1];
type.bytes.high = frame->type[0];
return type.hword;
}
BOOLEAN ChkEgcode_SYSFrame(SYSFRAME_STRUCT *frame)
{
if (!PubParaValid(EGCODE_)) return FALSE;
else return EgcodePass(GetEgcode_SYSFrame(frame), EgCode.egcode);
}
BOOLEAN ChkMyTel_SYSFrame(SYSFRAME_STRUCT *frame)
{
TEL_STRUCT temptel;
if (PubParaValid(MYTEL_)) {
temptel.len = DecodeTel(temptel.tel, frame->DTel, sizeof(frame->DTel));
if (ACmpString(CASESENSITIVE, temptel.tel, MyTel.tel, temptel.len, MyTel.len) == STR_EQUAL) {
return TRUE;
} else {
return FALSE;
}
} else {
return FALSE;
}
}
void StoreMyTel_SYSFrame(SYSFRAME_STRUCT *frame)
{
MyTel.len = DecodeTel(MyTel.tel, frame->DTel, sizeof(frame->DTel));
StorePubPara(MYTEL_);
}
void ASMSYSFrameHead_MODE1(STREAM *sp, SYSFRAME_STRUCT *frame, INT16U type)
{
if (!PubParaValid(MYTEL_)) {
ClearPubPara(MYTEL_);
}
WriteHWORD_Strm(sp, GetEgcode_SYSFrame(frame));
WriteBYTE_Strm(sp, version[0]);
WriteHWORD_Strm(sp, type);
EncodeTel(GetStrmPtr(sp), MyTel.tel, MyTel.len, SYS_TELLEN);
MovStrmPtr(sp, SYS_TELLEN);
}
void ASMSYSFrameHead_MODE2(STREAM *sp, INT16U egcode, INT16U type)
{
if (!PubParaValid(MYTEL_)) {
ClearPubPara(MYTEL_);
}
WriteHWORD_Strm(sp, egcode);
WriteBYTE_Strm(sp, version[0]);
WriteHWORD_Strm(sp, type);
EncodeTel(GetStrmPtr(sp), MyTel.tel, MyTel.len, SYS_TELLEN);
MovStrmPtr(sp, SYS_TELLEN);
}
void ASMSYSAckFrame(STREAM *sp, SYSFRAME_STRUCT *frame, INT16U type, INT8U acktype)
{
ASMSYSFrameHead_MODE1(sp, frame, type);
WriteBYTE_Strm(sp, acktype);
}
BOOLEAN SendSYSFrame_MODE1(STREAM *sp, SYSFRAME_STRUCT *frame, INT16U attrib)
{
INT8U tellen;
tellen = GetAckTellen_SYSFrame(frame);
ConvertData(GetStrmStartPtr(sp), GetStrmLen(sp), 0x7f, 0x00);
WriteBYTE_Strm(sp, GetChkSum_7C(GetStrmStartPtr(sp), GetStrmLen(sp)));
return SendSM(attrib, frame->STel, tellen, GetStrmStartPtr(sp), GetStrmLen(sp), (void (*)(INT8U)) 0);
}
BOOLEAN SendSYSFrame_MODE2(STREAM *sp, INT8U *tel, INT8U tellen, INT16U attrib, void (*fp)(INT8U))
{
ConvertData(GetStrmStartPtr(sp), GetStrmLen(sp), 0x7f, 0x00);
WriteBYTE_Strm(sp, GetChkSum_7C(GetStrmStartPtr(sp), GetStrmLen(sp)));
return SendSM(attrib, tel, tellen, GetStrmStartPtr(sp), GetStrmLen(sp), fp);
}
STREAM *GetSYSFrameStream(void)
{
InitStrm(&wstrm, buffer, sizeof(buffer));
return &wstrm;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -