Files
2025-12-15 16:07:49 +08:00

434 lines
7.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//#include "stdafx.h"
#include "sjframe.h"
#include "rtc_ext.h"
//#include "frame3762task.h"
//extern u8 send_buff[512];
//extern u16 send_buff_len;
//extern u8 recv_buff[512];
//extern u16 recv_buff_len;
extern u8 * get_uart_send();
extern u8 * addr_get();
extern bool sj_frame_recv(u8 * val,u16 vallen);
//static u8 send_serial = 0x70;
//舞?<3F>
unsigned char GetCK(unsigned char * Val, unsigned char Len)
{
unsigned char i = 0;
unsigned char ck = 0;
if(NULL == Val) return 0;
if(0 == Len) return 0;
for( i = 0; i < Len; i++)
{
ck += Val[i];
}
return ck;
}
//?u16?懋??圜 2?懋?。
void P2From16(unsigned char * P2,unsigned short Val)
{
P2[0] = (Val&0xFF);
P2[1] = ((Val)>>8)&0xFF;
}
//?2?懋???圜 u16?懋。
unsigned short U16From2(unsigned char * P2)
{
return (((P2[1]<<8) &0xFF00) + P2[0]);
}
/*
static u8 get_sendserial()
{
return (send_serial++);
}
*/
void sj_frame_rpdata(u8 * val,u16 * len,u16 num,u8 * sendval)
{
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
//68 20 00 20 00 68 88 03 13 01 00 00 96 60 00 00 01 00 03 00 00 87 21 66 27 38 35 00 62 99 00 F7 16
//68 20 00 20 00 68 88 03 13 01 00 00 96 60 00 00 01 00
//03 00
//00 87 21 66 27 38 35
//00 62 99 00
//F7 16
//2 + num * 11 + 12
u8 * p = val;
u16 datalen = (2 + num * 11 + 12) * 4 + 1;
u16 alllen = 2 + num * 11 + 20;
u8 * addr = addr_get();
p[0] = 0x68;
p[1] = datalen&0xFF;
p[2] = (datalen>>8)&0xFF;
p[3] = datalen&0xFF;
p[4] = (datalen>>8)&0xFF;
p[5] = 0x68;
p[6] = 0x88;
//addr
p[7] = addr[0];
p[8] = addr[1];
p[9] = addr[2];
p[10] = addr[3];
p[11] = 0;
//afn
p[12] = 0x96;
//ser
p[13] = 0x60;//get_sendserial();
//单元标识
p[14] = 0x00;
p[15] = 0x00;
p[16] = 0x01;
p[17] = 0x00;
//
p[18] = num&0xFF;
p[19] = (num>>8)&0xFF;
memmove(&p[20],sendval,num*11);
p[alllen-2] = GetCK(&p[6],2 + num * 11 + 12);
p[alllen-1] = 0x16;
* len = alllen;
}
void sj_frame_load(u8 * val,u16 * len)
{
//登陆
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//68 0C 00 0C 00 68 C9 03 13 01 00 00 95 70 00 00 01 00 E6 16
u8 * p = val;
u8 * addr = addr_get();
p[0] = 0x68;
p[1] = 49;
p[2] = 0x00;
p[3] = 49;
p[4] = 0x00;
p[5] = 0x68;
p[6] = 0xC9;
//addr
p[7] = addr[0];
p[8] = addr[1];
p[9] = addr[2];
p[10] = addr[3];
p[11] = 0;
//afn
p[12] = 0x95;
//ser
p[13] = 0x70;//get_sendserial();
//单元标识
p[14] = 0x00;
p[15] = 0x00;
p[16] = 0x01;
p[17] = 0x00;
p[18] = GetCK(&p[6],0x0C);
p[19] = 0x16;
* len = 20;
}
void sj_frame_heart(u8 * val,u16 * len)
{
//登陆
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//68 0C 00 0C 00 68 C9 03 13 01 00 00 95 70 00 00 01 00 E6 16
u8 * p = val;
u8 * addr = addr_get();
p[0] = 0x68;
p[1] = 0x12*4+1;
p[2] = 0x00;
p[3] = 0x12*4+1;
p[4] = 0x00;
p[5] = 0x68;
p[6] = 0xC9;
//addr
p[7] = addr[0];
p[8] = addr[1];
p[9] = addr[2];
p[10] = addr[3];
p[11] = 0;
//afn
p[12] = 0x94;
//ser
p[13] = 0x70;//get_sendserial();
//单元标识
p[14] = 0x00;
p[15] = 0x00;
p[16] = 0x01;
p[17] = 0x00;
//时间
p[18] = 0x00;
p[19] = 0x00;
p[20] = 0x00;
p[21] = 0x09;
p[22] = 0x10;
p[23] = 0x19;
p[24] = GetCK(&p[6],0x12);
p[25] = 0x16;
* len = 26;
}
u8 send_buff[512];
u16 send_buff_len = 0;
u8 recv_buff[512];
u16 recv_buff_len = 0;
u8 * get_uart_recv()
{
return recv_buff;
}
u16 get_uart_recv_len()
{
return recv_buff_len;
}
u8 * get_uart_send()
{
return send_buff;
}
void set_uart_recv(u8 * val,u16 len)
{
memmove(recv_buff,val,len);
recv_buff_len = len;
//?锶猊钴唔知?濂郫?嘴
// set_recvserial(U16From2(&val[3]));
}
u16 get_uart_send_len()
{
return send_buff_len;
}
u16 * get_uart_send_plen()
{
return (&send_buff_len);
}
void concent_send_uart(u8 * val,u16 len)
{
memmove(send_buff,val,len);
send_buff_len = len;
// gprs_send_proc_direct(get_uart_send(),get_uart_send_len());
gprs_send_flag();
}
void concent_send_gprs()
{
gprs_send_proc_direct(get_uart_send(),get_uart_send_len());
}
void frame_process(u8 * val,u16 len)
{
memmove(recv_buff,val,len);
recv_buff_len = len;
set_uart_recv(val,len);
u8 ck1 = 0;
u8 ck2 = 0;
for(int j = 0;j<recv_buff_len;j++)
{
//0 1 2 3 4 5
//68 71 00 71 00 68 40 12 34 56 78 00 93 71 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 59 16
u16 vallen = U16From2(&val[j+1]);
vallen = vallen>>2;
// vallen = vallen - 1;
vallen = vallen + 8;
if(0x68 == val[j] && 0x16 == val[j+vallen-1])
{
ck1 = val[j+vallen-2];
ck2 = GetCK(&val[j+6],vallen-8);
if(ck1 == ck2)
{
//妪妄<E5A6AA>??扉蛄?锶。
gprs_recv_judge_timeset();
if(0x94 == val[j+12] || 0x95 == val[j+12])
{
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
//68 51 00 51 00 68 40 07 55 00 08 00 94 60 00 00 01 00 94 00 16 11 15 25 10 19 b7 16
if(0x94 == val[j+12])
{
st_rtc_ext rtc_dat;
rtc_dat.sec = val[j+20];
rtc_dat.min = val[j+21];
rtc_dat.hour = val[j+22];
rtc_dat.day = val[j+23];
rtc_dat.month = val[j+24];
rtc_dat.year = val[j+25];
rtc_dat.week = 1;
set_rtc_time(rtc_dat);
}
//Time_Set();
}
else
{
sj_frame_recv(&val[j],vallen-j);
}
//break;
}
}
}
#if 0
return;
//??诉萋?
//??槟<>
u16 ck1 = 0;
u16 ck2 = 0;
u8 kkk = 0;
for(int j = 0;j<recv_buff_len;j++)
{
u16 vallen = U16From2(&val[j+1]);
if(0x68 == val[j] && 0x16 == val[j+vallen-1])
{
ck1 = get_crc(&val[j+1],vallen-4);
ck2 = U16From2(&val[j+vallen-3]);
if(ck1 == ck2)
{
if(kkk==0)
{
memmove(recv_buff1,&val[j],vallen);
recv_buff_len1 = vallen;
}
else if(kkk==1)
{
memmove(recv_buff2,&val[j],vallen);
recv_buff_len2 = vallen;
kkk++;
break;
}
kkk++;
}
}
}
if(kkk==1)
{
set_uart_recv(val,len);
if(frame_recv())
{
//妪妄<E5A6AA>??扉蛄?锶。
gprs_recv_judge_timeset();
}
}
if(kkk==2)
{
memmove(recv_buff,recv_buff1,recv_buff_len1);
recv_buff_len = recv_buff_len1;
if(!frame_recv_noack())
{
memmove(recv_buff,recv_buff1,recv_buff_len1);
recv_buff_len = recv_buff_len1;
}
else
{
memmove(recv_buff,recv_buff2,recv_buff_len2);
recv_buff_len = recv_buff_len2;
}
set_uart_recv(recv_buff,recv_buff_len);
if(frame_recv())
{
//妪妄<E5A6AA>??扉蛄?锶。
gprs_recv_judge_timeset();
}
}
#endif
}