📄 trans_process.c
字号:
/**照片停止拍摄应答**/
void res_photostop_message(Uchar* messID)
{
RES_PHOTOMESSAGE_STR *gprs_info;
gprs_info = (RES_PHOTOMESSAGE_STR *) sbuf.buf[1];
memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
gprs_info->mess_head.mess_version = 2;
gprs_info->mess_head.mess_reserve = 0;
gprs_info->mess_head.mess_type = (Word)(RES_PHOTOSTOPMSG);
memcpy(gprs_info->messID, messID, 4);
get_bus_id(gprs_info->bus_id);
gprs_info->mess_head.mess_length = 11;
swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));
sbuf.valid[1] = 1;
}
/*发送处理*/
void serverTrans_process(void)
{
Int8 *ptr;
Uint16 len = 0;
struct _mess_head_info *head_info;
Uint16 gps_send_num;
Uchar heart_send_num;
Uint16 heart_send_number;
gps_num++;
heart_num++;
get_auto_time(&gps_send_num);
get_online_time(&heart_send_num);
heart_send_number = heart_send_num * 20;
/********************发送相片数据使用***********************/
if (1 == sbufPhoto.valid)
{
head_info = (struct _mess_head_info *)(sbufPhoto.buf);
len = Le16(head_info->mess_length);
if (udp_send(sbufPhoto.buf, len) == 0)
{
//for debug
// memcpy(testBuf, sbufPhoto.buf, 200);
//sioc_send(testBuf, 200);
//end of debug
sbufPhoto.valid = 0;
}
return;
}
if (PHOTO_DATASENDING != photo_getdatastatus())
{
/*************************专门为远程程序更新来处理*************/
if (sbuf.valid[REMOTE_BUFFER_ID] == 1)
{
ptr = sbuf.buf[REMOTE_BUFFER_ID];
head_info = (struct _mess_head_info *)(sbuf.buf[REMOTE_BUFFER_ID]);
len = (Uchar)(head_info->mess_length >> 8);
if (udp_send(sbuf.buf[REMOTE_BUFFER_ID],len) == 0)
{
sbuf.valid[REMOTE_BUFFER_ID] = 0;
}
return;
}
/**********************************************************/
if (gps_num >= (gps_send_num * 20)) /*gps消息处理(不要求响应)*/
{
make_gps_message();
head_info = (struct _mess_head_info *)(sbuf.buf[4]);
ptr = sbuf.buf[4];
len = (Uchar)((head_info->mess_length >> 8));
if(udp_send(ptr,len) == 0)
{
gps_num = 0;
}
return;
}
if (sbuf.valid[0] == 1)/*未收到响应的消息重发*/
{
ptr = sbuf.buf[0];
retry_num++;
if(retry_num >= 20 * 5) /*重发时间间隔5秒*/
{
retry_num = 0;
trans_num ++;
if(trans_num < 6)/*重发3次*/
{
head_info = (struct _mess_head_info *)(sbuf.buf[0]);
len = (Uchar)(head_info->mess_length >> 8);
if( udp_send(ptr,len) == 0 )
{
heart_num = 0;
}
}
else
{
sbuf.valid[0] = 0;
gprs_reset(6);
}
}
return;
}
if (sbuf.valid[1] == 1)/*应答发送*/
{
ptr = sbuf.buf[1];
head_info = (struct _mess_head_info *)(sbuf.buf[1]);
len = (Uchar)(head_info->mess_length >> 8);
if (udp_send(sbuf.buf[1],len) == 0)
{
sbuf.valid[1] = 0;
}
return;
}
if (sbuf.valid[2] == 1)/*需要等待应答消息*/
{
ptr = sbuf.buf[2];
head_info = (struct _mess_head_info *)(sbuf.buf[2]);
len = (Uchar)((head_info->mess_length) >> 8);
if(udp_send(ptr,len) == 0);
{
memcpy(sbuf.buf[0], sbuf.buf[2], len +12 );
sbuf.valid[0] = 1;
trans_num = 0;
retry_num = 0;
sbuf.valid[2] = 0;
heart_num = 0;
}
return;
}
if (heart_num >= heart_send_number)/*心跳包*/
{
make_heartbeat_message();
head_info = (struct _mess_head_info *)(sbuf.buf[5]);
ptr = sbuf.buf[5];
len = (Uchar)((head_info->mess_length >> 8));
if(udp_send(ptr,len) == 0)
{
heart_num = 0;
memcpy(sbuf.buf[0], sbuf.buf[5], len +12 );
sbuf.valid[0] = 1;
trans_num = 0;
retry_num = 0;
}
return;
}
}
}
/***xhb add***/
void res_requir_telephone_list_message(char *mess_num)
{
RES_GENERAL *gprs_info;
char *ptr;
gprs_info = (RES_GENERAL *) sbuf.buf[1];
memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
gprs_info->mess_head.mess_version = 2;
gprs_info->mess_head.mess_reserve = 0;
gprs_info->mess_head.mess_type = (Word)(RES_GET_TELEPHONE_LIST);
gprs_info->mess_head.mess_length = 231;
swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));
ptr = gprs_info->memo;
memcpy(ptr, mess_num, 4);
ptr += 4;
get_device_id(ptr);
ptr += 3;
get_bus_id(ptr);
ptr += 7;
*ptr ++ = 0;
get_telephone_list(ptr);
sbuf.valid[1] = 1;
}
void res_configure_telephone_list_message(char *mess_num)
{
RES_GENERAL *gprs_info;
char *ptr;
gprs_info = (RES_GENERAL *) sbuf.buf[1];
memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
gprs_info->mess_head.mess_version = 2;
gprs_info->mess_head.mess_reserve = 0;
gprs_info->mess_head.mess_type = (Word)(RES_SET_TELEPHONE_LIST);
gprs_info->mess_head.mess_length = 231;
swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));
ptr = gprs_info->memo;
memcpy(ptr, mess_num, 4);
ptr += 4;
get_device_id(ptr);
ptr += 3;
get_bus_id(ptr);
ptr += 7;
*ptr ++ = 0;
sbuf.valid[1] = 1;
}
/*以下代码,在一体式中暂不考虑*/
/*******************************cj add****************/
//远程下载程序应答
#define UPDATA_TERM 2//更新终端
#define UPDATA_HOST 1//更新主机
/***********cj add***************/
/*type:1 为发送;2为接收
***********************************/
Uint16 gProgramCurNum = 0;
Uint32 gtestremoteAddrPro= 0;
void res_update_program(Uchar* ptr)
{
PACKET_UPDATEPRO* pPacket;
U16 nLen;
U32 addr;
RES_GENERAL *gprs_info;
U8* tmpPtr;
Byte nValue = KO;
//先将程序写如E2
pPacket = (PACKET_UPDATEPRO*)ptr;
nLen = Le16(pPacket->len);
//把信息打印出来
if (UPDATA_HOST == pPacket->programType)
{
if (gProgramCurNum != pPacket->curPacket)
{
addr = pPacket->startAddr[0]+(pPacket->startAddr[1]<<8)+(pPacket->startAddr[2]<<16)+(pPacket->startAddr[3]<<24);
// addr = ;
//是否需要置相关的位,用来表示更新是否允许完成?
if (pPacket->totalPacket == pPacket->curPacket)
{
//最后一个包
if (nLen >= (sizeof(PACKET_UPDATEPRO)-6))
{
nValue = write_programtoFlash(ptr+sizeof(PACKET_UPDATEPRO), (nLen-sizeof(PACKET_UPDATEPRO)+6), gtestremoteAddrPro, NFUPDATE_REMOTE);
}
//将更新时间保存,启动更新任务
if (OK == nValue)
write_updatetime(ptr+nLen+6);
}
else
{
//中间的一个包
if (nLen > (sizeof(PACKET_UPDATEPRO)-12))
nValue = write_programtoFlash(ptr+sizeof(PACKET_UPDATEPRO), (nLen-sizeof(PACKET_UPDATEPRO)+12), gtestremoteAddrPro, NFUPDATE_REMOTE);
if (OK == nValue)
gtestremoteAddrPro += 256;
}
}
else
nValue = OK;
//生成响应包
if (OK == nValue)
{
gProgramCurNum = pPacket->curPacket;
gprs_info = (RES_GENERAL *) sbuf.buf[REMOTE_BUFFER_ID];
memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
gprs_info->mess_head.mess_version = 2;
gprs_info->mess_head.mess_reserve = 0;
gprs_info->mess_head.mess_type = (Word)(RES_UPDATE_PROGRAM);
gprs_info->mess_head.mess_length = sizeof(PACKET_UPDATEPRO)-sizeof(struct _mess_head_info);
swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));
tmpPtr = gprs_info->memo;
memcpy(tmpPtr, pPacket->seq, 4);
tmpPtr += 4;
*tmpPtr++ = UPDATA_HOST;
get_bus_id(tmpPtr);
tmpPtr += 7;
memcpy(tmpPtr, (Uchar*)&(pPacket->totalPacket), 2);
tmpPtr += 2;
memcpy(tmpPtr, (Uchar*)&(pPacket->curPacket), 2);
tmpPtr += 2;
memcpy(tmpPtr, (Uchar*)&(pPacket->startAddr), 4);
tmpPtr += 2;
sbuf.valid[REMOTE_BUFFER_ID] = 1;
}
}
}
/*查询广告通告应答*/
/**********************
*pnum:消息ID
*type:值取LED_QUERYNOTICE和LED_QUERYADVERTICE
*seq:值为LED_QUERYADVERTICE时,取值为1-20
*pContent:内容
*len:内容的长度
**********************/
void res_query_notice(Byte* pnum, Byte type, Byte seq, Byte* pContent, Byte len)
{
RES_QUERYNOTICE_STRUCT* gprs_info;
Byte* pTmpPtr;
gprs_info = (RES_QUERYNOTICE_STRUCT *) sbuf.buf[1];
memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
gprs_info->mess_head.mess_version = 2;
gprs_info->mess_head.mess_reserve = 0;
gprs_info->mess_head.mess_type = (Word)(RES_QUERYNOTICE);
memcpy(&(gprs_info->res_messageid), pnum, 4);
get_bus_id(gprs_info->bus_id);
gprs_info->seq = seq;
gprs_info->type = type;
get_term_data(gprs_info->date);
get_term_time(gprs_info->time);
pTmpPtr = sbuf.buf[1]+sizeof(RES_QUERYNOTICE_STRUCT);
if (len > 0)
memcpy(pTmpPtr, pContent, len);
gprs_info->mess_head.mess_length = len+sizeof(RES_QUERYNOTICE_STRUCT)-12;
swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));
sbuf.valid[1] = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -