📄 gpsser.c
字号:
/****************************************************************
** *
** FILE : GpsSer.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "bsp.h"
#include "tools.h"
#include "public.h"
#include "stream.h"
#include "sysframe.h"
#include "stream.h"
#include "rx_frame.h"
#include "sm_list.h"
#include "monitor.h"
#include "alarmer.h"
#include "gpsser.h"
static STREAM rstrm, *wstrm;
static INT16U hdlframelen;
static INT16U channeltype;
static SYSFRAME_STRUCT *hdlframe;
static MONITORENTRY_STRUCT monitorentry;
static void SetMonitorEntry_BASE(void)
{
monitorentry.egcode = GetEgcode_SYSFrame(hdlframe);
monitorentry.mttellen = DecodeTellen(hdlframe->STel, SYS_TELLEN);
monitorentry.mttel = hdlframe->STel;
}
static void SetMonitorEntry(void)
{
HWORD_UNION temp;
SetMonitorEntry_BASE();
monitorentry.servicetype = ReadBYTE_Strm(&rstrm);
monitorentry.monitortime = ReadHWORD_Strm(&rstrm);
monitorentry.periodtime = ReadHWORD_Strm(&rstrm);
monitorentry.fixedspace = ReadHWORD_Strm(&rstrm);
ConvertData((INT8U *)&monitorentry.monitortime, sizeof(monitorentry.monitortime), 0x0, 0x7f);
ConvertData((INT8U *)&monitorentry.periodtime, sizeof(monitorentry.periodtime), 0x0, 0x7f);
ConvertData((INT8U *)&monitorentry.fixedspace, sizeof(monitorentry.fixedspace), 0x0, 0x7f);
temp.hword = monitorentry.periodtime;
temp.bytes.low &= 0x3f;
monitorentry.periodtime = temp.hword;
}
/*
********************************************************************************
* Handler: MSG_0x0101
********************************************************************************
*/
static void HdlMsg_0x0101(void)
{
INT8U acktype;
SetMonitorEntry();
acktype = AddCommonMonitor(&monitorentry);
ASMSYSFrameHead_MODE1(wstrm, hdlframe, 0x0141);
WriteBYTE_Strm(wstrm, acktype);
if (acktype == _ADD_SUCCESS) {
MovStrmPtr(wstrm, QueryPosition(GetStrmPtr(wstrm)));
}
SendSYSFrame_MODE1(wstrm, hdlframe, SM_ATTR_SUCCESS | channeltype);
}
/*
********************************************************************************
* Handler: MSG_0x0102
********************************************************************************
*/
static void HdlMsg_0x0102(void)
{
INT8U acktype;
SetMonitorEntry_BASE();
if (DelCommonMonitor(&monitorentry)) {
acktype = _SYSFRAME_ACK;
} else {
acktype = _SYSFRAME_NAK;
}
ASMSYSFrameHead_MODE1(wstrm, hdlframe, 0x0142);
WriteBYTE_Strm(wstrm, acktype);
SendSYSFrame_MODE1(wstrm, hdlframe, SM_ATTR_SUCCESS | channeltype);
}
/*
********************************************************************************
* Handler: MSG_0x0103
********************************************************************************
*/
static void HdlMsg_0x0103(void)
{
INT8U acktype;
monitorentry.oldtellen = DecodeTellen(GetStrmPtr(&rstrm), SYS_TELLEN);
monitorentry.oldtel = GetStrmPtr(&rstrm);
MovStrmPtr(&rstrm, SYS_TELLEN);
SetMonitorEntry();
if (ModifyCommonMonitor(&monitorentry)) {
acktype = _SYSFRAME_ACK;
} else {
acktype = _SYSFRAME_NAK;
}
ASMSYSFrameHead_MODE1(wstrm, hdlframe, 0x0143);
WriteBYTE_Strm(wstrm, acktype);
SendSYSFrame_MODE1(wstrm, hdlframe, SM_ATTR_SUCCESS | channeltype);
}
/*
********************************************************************************
* Handler: MSG_0x0104
********************************************************************************
*/
static void HdlMsg_0x0104(void)
{
}
/*
********************************************************************************
* Handler: MSG_0x0105
********************************************************************************
*/
static void HdlMsg_0x0105(void)
{
INT8U acktype;
switch (ReadBYTE_Strm(&rstrm))
{
case 0x01:
if (RespondAlarmer(TRUE)) {
acktype = _SYSFRAME_ACK;
} else {
acktype = _SYSFRAME_NAK;
}
break;
case 0x02:
RespondAlarmer(FALSE);
SetMonitorEntry_BASE();
if (DelCommonMonitor(&monitorentry)) {
acktype = _SYSFRAME_ACK;
} else {
acktype = _SYSFRAME_NAK;
}
break;
case 0x03:
RespondAlarmer(FALSE);
monitorentry.oldtellen = DecodeTellen(hdlframe->STel, SYS_TELLEN);
monitorentry.oldtel = hdlframe->STel;
SetMonitorEntry();
if (ModifyCommonMonitor(&monitorentry)) {
acktype = _SYSFRAME_ACK;
} else {
acktype = _SYSFRAME_NAK;
}
break;
default:
return;
}
ASMSYSFrameHead_MODE1(wstrm, hdlframe, 0x0152);
WriteBYTE_Strm(wstrm, acktype);
SendSYSFrame_MODE1(wstrm, hdlframe, SM_ATTR_SUCCESS | channeltype);
}
/*
********************************************************************************
* Handler: MSG_0x0111
********************************************************************************
*/
static void HdlMsg_0x0111(void)
{
ASMSYSFrameHead_MODE1(wstrm, hdlframe, 0x0151);
if (CanMonitor()) {
WriteBYTE_Strm(wstrm, _SYSFRAME_ACK);
MovStrmPtr(wstrm, QueryPosition(GetStrmPtr(wstrm)));
} else {
WriteBYTE_Strm(wstrm, _SYSFRAME_NAK);
}
SendSYSFrame_MODE1(wstrm, hdlframe, SM_ATTR_SUCCESS | channeltype);
}
/*
********************************************************************************
* Handler: MSG_0x0112
********************************************************************************
*/
static void HdlMsg_0x0112(void)
{
INT16U querytime;
querytime = ReadHWORD_Strm(&rstrm);
ConvertData((INT8U *)&querytime, sizeof(querytime), 0x0, 0x7f);
SetMonitorEntry_BASE();
QueryCommonMonitor(&monitorentry, querytime);
}
static FUNCENTRY_STRUCT functionentry[] = { 0x0101, HdlMsg_0x0101,
0x0102, HdlMsg_0x0102,
0x0103, HdlMsg_0x0103,
0x0104, HdlMsg_0x0104,
0x0105, HdlMsg_0x0105,
0x0111, HdlMsg_0x0111,
0x0112, HdlMsg_0x0112
};
void InformGpsSer(SYSFRAME_STRUCT *curframe, INT16U framelen, INT8U type)
{
hdlframe = curframe;
hdlframelen = framelen - (sizeof(curframe->EGCODE) + sizeof(curframe->version) + sizeof(curframe->type) +
sizeof(curframe->DTel) + sizeof(curframe->STel) + 1);
if (type == RX_FRAME_TCP) {
channeltype = SM_ATTR_TCP;
} else if (type == RX_FRAME_UDP) {
channeltype = SM_ATTR_UDP;
} else if (type == RX_FRAME_SM) {
channeltype = SM_ATTR_SM;
} else {
channeltype = SM_ATTR_SM;
}
InitStrm(&rstrm, curframe->data, hdlframelen);
wstrm = GetSYSFrameStream();
FindProcEntry(GetType_SYSFrame(curframe), functionentry, sizeof(functionentry)/sizeof(functionentry[0]));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -