📄 rcv_process.c
字号:
#include "typedef.h"
#include "struct_def.h"
#include "string.h"
#include "common_function.h"
#include "Trans_process.h"
#include "Rcv_process.h"
#include "global.h"
#include "message.h"
#include "centerinterface.h"
#include "menuprocess.h"
#include "photo.h"
#include "systemmanager.h"
#include "16c554.h"
extern PROTOCOL_SEND_BUFFER sbuf;
extern DWord serial_number;
/*消息合法性检验*/
Uchar verify_process(void)
{
char *ptra;/*调试用*/
char * ptr;
Uchar *pl;
Word chksum;
Uchar rsync[4];
Uchar sync[4] = "NJPT";
unsigned int len = 0;
ptra = sbuf.buf[5];/*调试用*/ ;
if(udp_receive(&ptr) == 0)/*有无消息判断*/
{
return(0);
}
else
{
memcpy(rsync, ptr, 4);
pl = (ptr+12);
len = ((*(ptr+11))<<8)+(*(ptr+10));
chksum = 0;
while(len--)
{
chksum += *pl++;
}
if( (compare(rsync,sync,4)==0) && (*(ptr+9) == (Uchar)(chksum >> 8)) && (*(ptr+8) == (Uchar)chksum) )/*同步判断与校验和判断*/
{
return(1);
}
else
{
return(0);
}
}
}
/*判断调度类型*/
void judge(Int8 *ptr,Uchar command_type)
{
Uchar len;
long msgNo;
unsigned char tmp;
len = *(ptr + 10);
len = len - 20;
msgNo = *((long*)(ptr+12));
switch(command_type)
{
case 1:
message_write(1, (ptr+32), len, msgNo);
break;
case 4:
/*daily(ptr+33,len-1);*/
message_write(3, ptr+33, len-1, msgNo);
break;
case 7:
/*alarm_judge((ptr+32),len-1);*/
message_write(2, (ptr+33), len-1, msgNo);
break;
case 2:
case 3:
case 5:
case 6:
break;
case 8:
tmp = *(ptr + 32);
if(tmp== '1')
{
tmp = RUN_NORMAL;
set_work_state(&tmp);
}
else if( tmp == '3' )
{
tmp = RUN_NOTASK;
set_work_state(&tmp);
}
if ((tmp >= '1') && (tmp <= '4'))
{
if (1 == is_saveswitchmode())
set_loginmsg_response(len, ptr+32, *(Word*)(ptr+6));
}
else
set_loginmsg_response(len, ptr+32, *(Word*)(ptr+6));
break;
case 9:
tmp = *(ptr + 32);
if(tmp== '1')
tmp = RUN_NORMAL;
if( tmp=='2')
tmp = RUN_NOTASK;
set_work_state(&tmp);
break;
default:
break;
}
return;
}
/*应答消息处理*/
void res_process(Int8 *ptr)
{
Uchar rtype;
Uchar num[4];
PROTOCOL_SEND_BUFFER * message_info;
message_info = &sbuf;
memcpy(num, (ptr+12),4);
if (ptr[6] == 0x0c)
{
photo_setPacketState(ptr[18]-1);
}
else if(((rtype=*(ptr+7)) == (sbuf.buf[0][7]+0x40)) && (compare(num,&(sbuf.buf[0][12]),4) == 0))/*找出对应的请求消息*/
{
Byte msgLen, tmpLen, tmpValue;
tmpValue = ptr[23];
sbuf.valid[0] = 0;
if (ptr[6] == 0x03)
{
if (tmpValue == 0xdd)
{
set_systemlandflag();
msgLen = ptr[10];
if (msgLen >= 30)
{
msgLen -= 12;
tmpLen = 0;
while (tmpLen <= (msgLen-18))
{
add_alarmOneZone(ptr+12+12+tmpLen);
tmpLen += 18;
}
}
}
}
}
}
/*收到的请求消息处理*/
/*********************************************
*陈剑修改:添加远程程序更新处理;时间06-12-16
*********************************************/
void command_process(Int8 *ptr)
{
Uchar command_type;
unsigned int auto_time;
Uchar sync[4]="NJPT";
Uchar rtype[2];
Uchar update_type;
Uchar re_value;
Uchar send_block[2];
Uchar mess_num[4];
rtype[0] = *(ptr+7) + 0x40;
rtype[1] = *(ptr+6);
memcpy(mess_num,ptr+12,4);
switch(rtype[1])/*选择对应的应答消息打包*/
{
case 1: res_direct_message(mess_num);
command_type = *(ptr+31);
judge(ptr,command_type);/*判断调度类型*/
break;
case 2: res_seeconfiguer_message(mess_num);
auto_time = ptr[34] * 256 + ptr[33];
set_keyArea_value(auto_time, ptr[32], ptr[35], ptr[36]);
/* set_auto_time( &auto_time );
set_online_time( ptr+32 );
set_arrive_meter( ptr+35 );
set_left_meter( ptr+36 );*/
break;
case 3: res_seeposition_message(mess_num);
break;
case 4: res_seeterminal_message(mess_num);
break;
case 5: update_type = *(ptr + 16);
memcpy(send_block,ptr+31,2);
if(*(ptr+30) == 0x01)
{
res_update_message( mess_num, send_block, update_type, re_value = 0x06);
// update_firmware(update_type, up_flag = 5, ptr);
}
else if(*(ptr+30) == 0x04)
{
res_update_message( mess_num, send_block, update_type, re_value = 0x06);
// update_firmware(update_type, up_flag = 4, ptr);
}
else
{
res_update_message( mess_num, send_block, update_type, re_value = 0x15);
}
break;
case 6: res_seeconfugure_message(mess_num);
break;
/*******add by cj******/
case 7:
res_update_program(ptr);
break;
/******end of add*****/
case 0x0A: /*requir telephone list*/
res_requir_telephone_list_message(mess_num);
break;
case 0x0B: /*configure telephone list*/
res_configure_telephone_list_message(mess_num);
set_telephone_list(ptr+32);
break;
case 0x0e: /*photo request*/
photostart_photo(mess_num);
res_photo_message(mess_num);
break;
case 0x0f:/*photo stop*/
res_photostop_message(mess_num);
photo_stopphoto();
break;
default:return;
}
return;
}
/*接收处理*/
void serverRcv_process(void)
{
char * ptr;
Uchar rtype[2];
if(verify_process()==0)
{
udp_start_receive();
}
else
{
udp_receive(&ptr);
memcpy(rtype, (ptr+7), 1);
if(rtype[0]==0x60)
{
res_process(ptr);
udp_start_receive();
}
else if(rtype[0]==0x08)
{
command_process(ptr);
udp_start_receive();
}
else
{
udp_start_receive();
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -