#include "1gprs.h"
|
|
#include "para.h"
|
#include "AES128.h"
|
#include "ex_rtc.h"
|
#include "ReadDeviceData.h"
|
#include "1billing.h"
|
#include "e2p.h"
|
#include "RW_VERIFICATION.h"
|
#include "devicegpioinit.h"
|
#include "1ValveControl.h"
|
#include "RS232.h"
|
#include "project_test.h"
|
|
volatile GPRS_SEND_DATA gprs_send_set_g;
|
|
STRLINK LinkDlg;
|
volatile GPRS_PARAMETER gprs_parameter;
|
VARIABLE VariaDlg;
|
GPRS_PROTOCOL_HEADER gprs_protocol_header;
|
GPRS_DATA_PACKAGE gprs_data_package;
|
|
uint16_t CS_addr;
|
uint8_t GPRS_SEND_BUFF[599];
|
uint8_t GPRSbeginflag;
|
uint8_t awaken_flag;
|
uint8_t GPRS_sendFlag;
|
|
/*Êý¾Ý±êÖ¾*/
|
#define DATA_INDEX 0x01
|
#define DATA_EVENT 0x02
|
#define DATA_WARNING 0x03
|
#define DATA_OK_1 0x5a
|
|
/*Êý¾Ý״̬*/
|
#define DATA_DATA_OK 0x01
|
#define DATA_ERROR 0x02
|
#define DATA_OK_2 0xa5
|
|
void Gprs_Open(void)
|
{
|
u8 buffer[30] = {0};
|
u8 i_index;
|
//delay_ms(1000);
|
buffer[0] = 0x1a;
|
buffer[1] = 0x1a;
|
for (i_index = 0; i_index < 8; i_index++)
|
{
|
buffer[2 + i_index] = 0;
|
}
|
|
// gprs_parameter.ip[0]= VariaDlg.ServerIP[0];
|
// gprs_parameter.ip[1]= VariaDlg.ServerIP[1];
|
// gprs_parameter.ip[2]= VariaDlg.ServerIP[2];
|
// gprs_parameter.ip[3]= VariaDlg.ServerIP[3];
|
// buffer[14] = VariaDlg.ServerPort[0];
|
// buffer[15] = VariaDlg.ServerPort[1];
|
gprs_parameter.ip[0] = 39;
|
gprs_parameter.ip[1] = 108;
|
gprs_parameter.ip[2] = 81;
|
gprs_parameter.ip[3] = 105;
|
buffer[14] = 0xAA;
|
buffer[15] = 0x26;
|
|
for (i_index = 0; i_index < 4; i_index++)
|
{
|
buffer[10 + i_index] = gprs_parameter.ip[i_index];
|
}
|
|
buffer[16] =255; //60;//device_Parm.GPRS_RESTARTTIME; //³¬Ê±´¦Àí
|
buffer[17] = 0;
|
for (i_index = 0; i_index < 7; i_index++)
|
{
|
buffer[18 + i_index] = 0;
|
}
|
buffer[25] = 0;
|
for (i_index = 0; i_index < 25; i_index++)
|
{
|
buffer[25] = buffer[25] + buffer[i_index];
|
}
|
buffer[26] = 0x16; //**½áÊøÖ¡ÊÇ0x16,²»ÊÇ0x68½øÐиü¸Ä
|
Gprs_Send_date(buffer, sizeof(buffer));
|
}
|
|
#define x1
|
unsigned char LinkHandleProc(unsigned char type)
|
{
|
#ifdef x1
|
unsigned char retflag = 0;
|
|
Gprs_Uart1_Rx_DMA_CH3_Check();
|
|
if (LinkDlg.Gprs_Finish_Flag) // ½ÓÊÕ»º´æÇøÄÚÓÐÊý¾Ý
|
{
|
LinkDlg.Gprs_Finish_Flag = 0;
|
memset((char *)LinkDlg.HandBuff, 0, sizeof(LinkDlg.HandBuff));
|
memcpy(LinkDlg.HandBuff, LinkDlg.UartBuff, LinkDlg.WritePtr);
|
|
switch (type) // ÅжϷÖÎöÄÄÌõÖ¸Áî
|
{
|
case GSM_DATA:
|
LinkErrorProcess(); // ´¦Àí¹Ø¼ü×Ö
|
break;
|
|
default:
|
LinkDlg.WritePtr = 0;
|
LinkDlg.HandlePtr = 0;
|
|
break;
|
}
|
}
|
return (retflag);
|
#endif
|
|
#ifdef x2
|
unsigned char retflag = 0; // ¶¨Òå·µ»ØÖµ=1ʱ£¬¿ªÊ¼ÏÂÒ»ÌõÖ¸Áî
|
|
if (LinkDlg.Gprs_Finish_Flag) // ½ÓÊÕ»º´æÇøÄÚÓÐÊý¾Ý
|
{
|
LinkDlg.Gprs_Finish_Flag = 0;
|
memset((char *)LinkDlg.HandBuff, 0, sizeof(LinkDlg.HandBuff));
|
memcpy(LinkDlg.HandBuff, LinkDlg.UartBuff, LinkDlg.WritePtr);
|
|
switch (type) // ÅжϷÖÎöÄÄÌõÖ¸Áî
|
{
|
case GSM_DATA:
|
LinkErrorProcess(); // ´¦Àí¹Ø¼ü×Ö
|
break;
|
|
default:
|
LinkDlg.WritePtr = 0;
|
LinkDlg.HandlePtr = 0;
|
|
break;
|
}
|
}
|
return (retflag);
|
|
#endif
|
}
|
|
void LinkErrorProcess(void)
|
{
|
int mmm;
|
uint16_t Command_flag, RECV_dataNUM;
|
uint8_t Contral_code, RECV_key, RTC_set_result, CS_RECV;
|
char *KeyPtr;
|
char *NextPtr1;
|
|
LinkDlg.WritePtr = 0;
|
LinkDlg.HandlePtr = 0;
|
KeyPtr = NULL;
|
|
for (mmm = 0; mmm < 100; mmm++)
|
{
|
if ((LinkDlg.HandBuff[mmm] == 0x41) && (LinkDlg.HandBuff[mmm + 1] == 0x41))
|
{
|
KeyPtr = (char *)(&(LinkDlg.HandBuff[mmm]));
|
mmm = 100;
|
}
|
}
|
|
if (KeyPtr != NULL)
|
{
|
CS_RECV = 0;
|
for (mmm = 0; mmm < 25; mmm++)
|
{
|
GPRS_SEND_BUFF[mmm] = *(KeyPtr + mmm);
|
CS_RECV = CS_RECV + GPRS_SEND_BUFF[mmm];
|
}
|
|
if ((CS_RECV == *(KeyPtr + 25)) && (*(KeyPtr + 26) == 0x16))
|
{
|
if (*(KeyPtr + 2) == 0x01)
|
{
|
if (*(KeyPtr + 3) > 1)
|
{
|
VariaDlg.netgrade = *(KeyPtr + 3);
|
}
|
else
|
{
|
}
|
|
for (mmm = 0; mmm < 20; mmm++)
|
{
|
gprs_protocol_header.moduleSeq[mmm] = *(KeyPtr + 4 + mmm);
|
}
|
|
if (*(KeyPtr + 24) == 0)
|
{
|
}
|
else
|
{
|
VariaDlg.Net_info = *(KeyPtr + 24);
|
}
|
}
|
else if (*(KeyPtr + 2) == 0x00)
|
{
|
}
|
VariaDlg.NetLinkFlag = 0x01; // ·þÎñÆ÷Á¬½Ó³É¹¦
|
VariaDlg.HandleStep = SYS_DATA; // ½øÈë·¢ËÍÊý¾ÝÁ÷³Ì
|
VariaDlg.RestartTime = 120; // Á¬½Ó³É¹¦Ö®ºóµ¹¼ÆÊ±120S
|
}
|
else // УÑéʧ°Ü
|
{
|
}
|
}
|
|
KeyPtr = strstr((char *)LinkDlg.HandBuff, "+R"); // ²éѯ¹Ø¼ü×Ö+RΪÓнÓÊÕÊý¾Ý£¬Êµ¼ÊÊý¾ÝÓ¦¸ÃÒÔ
|
if (KeyPtr != NULL)
|
{
|
NextPtr1 = strstr(KeyPtr, ",");
|
if (NextPtr1 != NULL)
|
{
|
mmm = 0;
|
NextPtr1 = NextPtr1 + 1; // ÐÞÕýÆ«ÒÆ
|
while (*(NextPtr1 + 1) != 0x68)
|
{
|
mmm++;
|
NextPtr1 = NextPtr1 + 1;
|
if (mmm > 10)
|
{
|
break;
|
}
|
}
|
|
VariaDlg.RestartTime = 120; // ÿ´ÎÊÕµ½Êý¾Ý³¬Ê±Ê±¼ä¸üÐÂΪ60Ãë
|
Contral_code = *(NextPtr1 + 11);
|
RECV_dataNUM = (uint16_t) * (NextPtr1 + 12) + (uint16_t)(*(NextPtr1 + 13)) * 256;
|
Command_flag = (uint16_t) * (NextPtr1 + 21) + (uint16_t)(*(NextPtr1 + 22)) * 256;
|
RECV_key = *(NextPtr1 + FIRST_DATA_SHIFT);
|
|
CS_RECV = 0;
|
for (mmm = 0; mmm < RECV_dataNUM + 13; mmm++)
|
{
|
CS_RECV = CS_RECV + *(NextPtr1 + 1 + mmm);
|
}
|
|
if (CS_RECV == (*(NextPtr1 + RECV_dataNUM + 14)))
|
{
|
if (*(NextPtr1 + 1) == 0x68) // Ö¡Æðʼ·û
|
{
|
if (*(NextPtr1 + 10) == 0x68) // Êý¾ÝÆðʼ·û
|
{
|
|
Get_Time(); // »ñÈ¡µ±Ç°Ê±¼ä
|
|
gprs_protocol_header.Systemclock_year = calendar.year & 0x00FF;
|
gprs_protocol_header.Systemclock_month = calendar.month;
|
gprs_protocol_header.Systemclock_day = calendar.date;
|
gprs_protocol_header.Systemclock_hour = calendar.hour;
|
gprs_protocol_header.Systemclock_min = calendar.min;
|
gprs_protocol_header.Systemclock_sec = calendar.sec;
|
|
if ((Contral_code == CONTROL_CODE_DATAUP_DOWN) && (Command_flag == CAMMAND_FLAG_DATAUP))
|
{
|
|
if ((RECV_key & 0x80) == 0x00)
|
{
|
if (*(NextPtr1 + FIRST_DATA_SHIFT + 1) == 0x00)
|
{
|
}
|
else if (*(NextPtr1 + FIRST_DATA_SHIFT + 1) == 0x01)
|
{
|
}
|
}
|
else
|
{
|
|
for (mmm = 0; mmm < 16; mmm++)
|
{
|
GPRS_SEND_BUFF[mmm] = *(NextPtr1 + FIRST_DATA_SHIFT + 1 + mmm);
|
}
|
AES128_ECB_decrypt(GPRS_SEND_BUFF, KVer_AES_128, GPRS_SEND_BUFF);
|
if (GPRS_SEND_BUFF[0] == 0x00)
|
{
|
}
|
else if (GPRS_SEND_BUFF[0] == 0x01)
|
{
|
}
|
}
|
|
if (gprs_protocol_header.frameSeq < gprs_protocol_header.totalTSeq)
|
{
|
VariaDlg.send_finish_ok = 0;
|
}
|
else
|
{
|
}
|
|
gprs_protocol_header.frameSeq++; // Ö¡ÐòºÅ
|
if (Last_Data_DDR >= FRAME_DATA_MAX)
|
{
|
Last_Data_DDR = Last_Data_DDR - FRAME_DATA_MAX;
|
}
|
else
|
{
|
Last_Data_DDR = 0;
|
}
|
}
|
|
if ((Contral_code == CONTROL_CODE_END_DOWN) && (Command_flag == CAMMAND_FLAG_END))
|
{ // ½áÊøÖ¡
|
if (calendar.min <= (*(NextPtr1 + 18)))
|
{
|
if ((*(NextPtr1 + 18)) > (calendar.min + 3))
|
{
|
if ((calendar.min + 0x60 - (*(NextPtr1 + 18))) <= 9)
|
{
|
// RTC_cor = 0;
|
}
|
else
|
{
|
RTC_cor = 1;
|
}
|
}
|
}
|
else
|
{
|
if (calendar.min > ((*(NextPtr1 + 18)) + 3))
|
{
|
if (((*(NextPtr1 + 18)) + 0x60 - calendar.min) <= 9)
|
{
|
// RTC_cor = 0;
|
}
|
else
|
{
|
RTC_cor = 1;
|
}
|
}
|
}
|
|
if (RTC_cor == 1) // µÚÒ»´ÎÉÏ´«»òÕßÎó²î5·ÖÖÓ Ð£Ê±Ò»´Î
|
{
|
net_now_time.yearN = *(NextPtr1 + 14);
|
net_now_time.monthN = *(NextPtr1 + 15);
|
net_now_time.dateN = *(NextPtr1 + 16);
|
net_now_time.hourN = *(NextPtr1 + 17);
|
net_now_time.minN = *(NextPtr1 + 18);
|
net_now_time.secN = *(NextPtr1 + 19);
|
|
Time_Set(net_now_time.yearN + 0x2000, net_now_time.monthN, net_now_time.dateN, 1, net_now_time.hourN, net_now_time.minN, net_now_time.secN);
|
|
RTC_cor = 0;
|
}
|
|
GPRS_UartSendCode("ATCLOSE"); // ¹Ø±Õ·þÎñÆ÷Á¬½Ó
|
delay_ms(500);
|
delay_ms(500);
|
delay_ms(500);
|
delay_ms(500);
|
|
memset(LinkDlg.UartBuff, 0, sizeof(LinkDlg.UartBuff));
|
memset(LinkDlg.HandBuff, 0, sizeof(LinkDlg.HandBuff));
|
LinkDlg.WritePtr = 0;
|
LinkDlg.HandlePtr = 0;
|
VariaDlg.send_finish_ok = 0;
|
|
Last_Data_DDR = 0;
|
|
gprs_protocol_header.frameSeq = 1;
|
|
GPRSbeginflag = 0;
|
GPRS_sendFlag = 0;
|
|
system_alarm.alarm_l = 0;
|
system_alarm.alarm_Send_failed_time = 0;
|
system_alarm.Data_Send_failed_time = 0;
|
}
|
}
|
}
|
}
|
else
|
{
|
}
|
}
|
}
|
}
|
|
void Gprs_Send_Pro()
|
{
|
if (VariaDlg.send_finish_ok == 0)
|
{
|
Get_Time(); // »ñÈ¡µ±Ç°Ê±¼ä
|
gprs_protocol_header.Systemclock_year = calendar.year & 0x00FF;
|
gprs_protocol_header.Systemclock_month = calendar.month & 0xFF;
|
gprs_protocol_header.Systemclock_day = calendar.date & 0xFF;
|
gprs_protocol_header.Systemclock_hour = calendar.hour & 0xFF;
|
gprs_protocol_header.Systemclock_min = calendar.min & 0xFF;
|
gprs_protocol_header.Systemclock_sec = calendar.sec & 0xFF;
|
|
// if((system_alarm.alarm_l >= 1)&&(gprs_protocol_header.frameSeq == 1))
|
// {
|
// //Óб¨¾¯ÏÈ·¢Ëͱ¨¾¯×´Ì¬£¬ÔÙ·¢ËÍÊý¾Ý
|
// SendAlarm();
|
// delay_ms(1000);
|
// delay_ms(1000);
|
// delay_ms(1000);
|
// IWDT_Clr();
|
// }
|
|
if (NOW_Data_DDR > 0)
|
{
|
total_dataGroupNum = NOW_Data_DDR;
|
yushu = total_dataGroupNum;
|
while (yushu > FRAME_DATA_MAX)
|
{
|
yushu = yushu - FRAME_DATA_MAX;
|
}
|
if (yushu == FRAME_DATA_MAX)
|
{
|
gprs_protocol_header.totalTSeq = total_dataGroupNum / FRAME_DATA_MAX; // ¼ÆËãÒ»ÅúÊý¾ÝÉÏ´«ÐèÒªµÄÖ¡Êý
|
}
|
else
|
{
|
gprs_protocol_header.totalTSeq = total_dataGroupNum / FRAME_DATA_MAX + 1;
|
}
|
|
gprs_protocol_header.Control_code = CONTROL_CODE_DATAUP_UP;
|
gprs_protocol_header.Cammand_flag = CAMMAND_FLAG_DATAUP;
|
gprs_protocol_header.Signal_intensity = VariaDlg.netgrade;
|
gprs_protocol_header.Data_Acq_type = parameter_bil.cDataObtainType;
|
gprs_protocol_header.AccountStatus_g = device_Parm.AccountStatus;
|
gprs_protocol_header.Billing_type = parameter_bil.cBillingType;
|
|
yushu_16 = (DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * yushu) % 16; // ¼ÓÃÜËã·¨¹æ¶¨Êý¾ÝÄÚÈݲ¹Î»ÖÁ16µÄ±¶Êý£¬¸ÕºÃ16µÄ±¶ÊýÔòÌî³ä16¸ö×Ö½Ú
|
shang_16 = (DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * yushu) / 16;
|
|
if (gprs_protocol_header.totalTSeq > 1)
|
{
|
|
if (gprs_protocol_header.frameSeq < gprs_protocol_header.totalTSeq)
|
{
|
|
gprs_protocol_header.dataGroup_Num = FRAME_DATA_MAX;
|
|
if ((gprs_protocol_header.KVer & 0x80) == 0x00) // ÅжÏÊý¾ÝÊÇ·ñÐèÒª¼ÓÃÜ
|
{
|
gprs_protocol_header.Data_length = 14 + DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * FRAME_DATA_MAX;
|
}
|
else
|
{
|
gprs_protocol_header.Data_length = 30 + ((uint16_t)((DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * FRAME_DATA_MAX) / 16)) * 16;
|
}
|
gprs_data_send(0);
|
}
|
else if (gprs_protocol_header.frameSeq == gprs_protocol_header.totalTSeq)
|
{
|
|
gprs_protocol_header.dataGroup_Num = yushu;
|
|
if ((gprs_protocol_header.KVer & 0x80) == 0x00)
|
{
|
gprs_protocol_header.Data_length = 14 + DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * yushu;
|
}
|
else
|
{
|
gprs_protocol_header.Data_length = shang_16 * 16 + 30; // 30=16+14
|
}
|
|
gprs_data_send(1); // Êý¾Ý´ò°ü·¢ËÍ
|
}
|
}
|
else if (gprs_protocol_header.totalTSeq == 1)
|
{
|
|
gprs_protocol_header.frameSeq = 1;
|
gprs_protocol_header.dataGroup_Num = yushu;
|
|
if ((gprs_protocol_header.KVer & 0x80) == 0x00)
|
{
|
gprs_protocol_header.Data_length = 14 + DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * yushu;
|
}
|
else
|
{
|
gprs_protocol_header.Data_length = shang_16 * 16 + 30; // 30=16+14
|
}
|
|
gprs_data_send(1);
|
}
|
else
|
{
|
}
|
}
|
}
|
}
|
|
void gprs_data_send(uint8_t flag) // flag 0 ÂúÖ¡ 1 ²»Âú
|
{
|
int j;
|
u8 MAX_shang_16;
|
u8 MAX_yushu_16;
|
gprs_protocol_header_2buff((uint8_t *)&gprs_protocol_header, (uint8_t *)&GPRS_SEND_BUFF[0], FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH);
|
|
if (flag == 0) // flag==0±êʶ·¢ËÍÖ¡ÊÇÂúÊý¾Ý£¬¼´ÀïÃæ°üº¬6×é¶³½áÊý¾Ý
|
{
|
|
if ((gprs_protocol_header.KVer & 0x80) == 0x00)
|
{
|
for (j = 0; j < FRAME_DATA_MAX; j++)
|
{
|
getSampledata();
|
gprs_data_2buff((uint8_t *)&gprs_data_package, (uint8_t *)&GPRS_SEND_BUFF[DATA_PACKET_DATA_LENGTH * j + FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH]);
|
k_index++;
|
|
if (k_index >= NumStoredLength)
|
{
|
k_index = 0;
|
}
|
}
|
|
CS_addr = FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * FRAME_DATA_MAX;
|
GPRS_SEND_BUFF[CS_addr] = 0;
|
for (j = 0; j < CS_addr; j++)
|
{
|
GPRS_SEND_BUFF[CS_addr] = (uint8_t)(GPRS_SEND_BUFF[CS_addr] + GPRS_SEND_BUFF[j]);
|
}
|
GPRS_SEND_BUFF[CS_addr + 1] = 0x16;
|
SendDataToSTM32();
|
VariaDlg.send_finish_ok = 1;
|
}
|
else
|
{
|
for (j = 0; j < FRAME_DATA_MAX; j++)
|
{
|
getSampledata();
|
gprs_data_2buff((uint8_t *)&gprs_data_package, (uint8_t *)&GPRS_SEND_BUFF[DATA_PACKET_DATA_LENGTH * j + FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH]);
|
k_index++;
|
if (k_index >= NumStoredLength)
|
{
|
k_index = 0;
|
}
|
}
|
|
GPRS_SEND_BUFF[DATA_PACKET_DATA_LENGTH * FRAME_DATA_MAX + FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH] = 0x80; //????,??0x80,???0x00
|
|
MAX_yushu_16 = (DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * FRAME_DATA_MAX) % 16; // ¼ÓÃÜËã·¨¹æ¶¨Êý¾ÝÄÚÈݲ¹Î»ÖÁ16µÄ±¶Êý£¬¸ÕºÃ16µÄ±¶ÊýÔòÌî³ä16¸ö×Ö½Ú
|
MAX_shang_16 = (DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * FRAME_DATA_MAX) / 16;
|
for (j = 0; j < MAX_shang_16 + 1; j++)
|
{
|
AES128_ECB_encrypt(&GPRS_SEND_BUFF[j * 16 + FIRST_DATA_SHIFT], KVer_AES_128, &GPRS_SEND_BUFF[j * 16 + FIRST_DATA_SHIFT]);
|
}
|
|
CS_addr = DATA_PACKET_DATA_LENGTH * FRAME_DATA_MAX + FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH + 16 - MAX_yushu_16;
|
|
GPRS_SEND_BUFF[CS_addr] = 0;
|
for (j = 0; j < CS_addr; j++)
|
{
|
GPRS_SEND_BUFF[CS_addr] = (uint8_t)(GPRS_SEND_BUFF[CS_addr] + GPRS_SEND_BUFF[j]);
|
}
|
|
GPRS_SEND_BUFF[CS_addr + 1] = 0x16;
|
SendDataToSTM32();
|
VariaDlg.send_finish_ok = 1;
|
}
|
}
|
else
|
{
|
|
if ((gprs_protocol_header.KVer & 0x80) == 0x00)
|
{
|
for (j = 0; j < yushu; j++)
|
{
|
getSampledata();
|
gprs_data_2buff((uint8_t *)&gprs_data_package, (uint8_t *)&GPRS_SEND_BUFF[DATA_PACKET_DATA_LENGTH * j + FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH]);
|
k_index++;
|
|
if (k_index >= NumStoredLength)
|
{
|
k_index = 0;
|
}
|
}
|
|
CS_addr = FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH + DATA_PACKET_DATA_LENGTH * yushu;
|
GPRS_SEND_BUFF[CS_addr] = 0;
|
for (j = 0; j < CS_addr; j++)
|
{
|
GPRS_SEND_BUFF[CS_addr] = (uint8_t)(GPRS_SEND_BUFF[CS_addr] + GPRS_SEND_BUFF[j]);
|
}
|
GPRS_SEND_BUFF[CS_addr + 1] = 0x16;
|
SendDataToSTM32();
|
VariaDlg.send_finish_ok = 1;
|
}
|
else
|
{
|
|
for (j = 0; j < yushu; j++)
|
{
|
getSampledata();
|
gprs_data_2buff((uint8_t *)&gprs_data_package, (uint8_t *)&GPRS_SEND_BUFF[DATA_PACKET_DATA_LENGTH * j + FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH]);
|
k_index++;
|
if (k_index >= NumStoredLength)
|
{
|
k_index = 0;
|
}
|
}
|
|
GPRS_SEND_BUFF[DATA_PACKET_DATA_LENGTH * yushu + FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH] = 0x80; //????,??0x80,???0x00
|
for (j = 0; j < 15 - yushu_16; j++)
|
{
|
GPRS_SEND_BUFF[DATA_PACKET_DATA_LENGTH * yushu + FIRST_DATA_SHIFT + 1 + DATA_PACKET_HEADEA_LENGTH + j] = 0x00;
|
}
|
|
for (j = 0; j < shang_16 + 1; j++)
|
{
|
AES128_ECB_encrypt(&GPRS_SEND_BUFF[j * 16 + FIRST_DATA_SHIFT], KVer_AES_128, &GPRS_SEND_BUFF[j * 16 + FIRST_DATA_SHIFT]);
|
}
|
|
CS_addr = DATA_PACKET_DATA_LENGTH * yushu + FIRST_DATA_SHIFT + DATA_PACKET_HEADEA_LENGTH + 16 - yushu_16;
|
|
GPRS_SEND_BUFF[CS_addr] = 0;
|
for (j = 0; j < CS_addr; j++)
|
{
|
GPRS_SEND_BUFF[CS_addr] = (uint8_t)(GPRS_SEND_BUFF[CS_addr] + GPRS_SEND_BUFF[j]);
|
}
|
|
GPRS_SEND_BUFF[CS_addr + 1] = 0x16;
|
SendDataToSTM32();
|
VariaDlg.send_finish_ok = 1;
|
}
|
}
|
}
|
|
void SendAlarm()
|
{
|
uint16 mmm;
|
uint32 Alarm_Addr = 0;
|
uint32 alarm_index = 0;
|
uint16 alarm_num = 0;
|
uint16 shang16 = 0;
|
uint16 yushu16 = 0;
|
|
gprs_protocol_header.Control_code = CONTROL_CODE_ALARM_UP;
|
gprs_protocol_header.Cammand_flag = CAMMAND_FLAG_ALARM;
|
// gprs_protocol_header.frameSeq = 1;
|
gprs_protocol_header.totalTSeq = 1;
|
|
alarm_num = system_alarm.alarm_l;
|
if (alarm_num > 40)
|
{
|
// Èç¹ûÀۼƳ¬¹ý40ÌõÊý¾Ýδ·¢ËÍ£¬Ö»·¢ËÍ×î½ü40Ìõ
|
alarm_num = 40;
|
}
|
if (system_alarm.u16AlarmStoreNum < alarm_num)
|
{
|
alarm_index = system_alarm.u16AlarmStoreNum + ALARM_RECORD_NUM - alarm_num; // ¼ÆËãÊý¾Ý¶ÁÈ¡µÄStart address
|
}
|
else
|
{
|
alarm_index = system_alarm.u16AlarmStoreNum - alarm_num;
|
}
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT] = alarm_num;
|
|
for (mmm = 0; mmm < alarm_num; mmm++)
|
{
|
Alarm_Addr = FIRST_ALARM_RECORD_ADDR + alarm_index * ALARM_RECORD_LENGTH;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + mmm * 8 + 1] = FM25V02_data_read(Alarm_Addr);
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + mmm * 8 + 2] = FM25V02_data_read(Alarm_Addr + 1);
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + mmm * 8 + 3] = FM25V02_data_read(Alarm_Addr + 2);
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + mmm * 8 + 4] = FM25V02_data_read(Alarm_Addr + 3);
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + mmm * 8 + 5] = FM25V02_data_read(Alarm_Addr + 4);
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + mmm * 8 + 6] = FM25V02_data_read(Alarm_Addr + 5);
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + mmm * 8 + 7] = 0xff & FM25V02_data_read_uint16(Alarm_Addr + 6);
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + mmm * 8 + 8] = ((FM25V02_data_read_uint16(Alarm_Addr + 6)) >> 8) & 0xff;
|
|
alarm_index++;
|
|
if (alarm_index >= ALARM_RECORD_NUM)
|
{
|
alarm_index = 0;
|
}
|
}
|
|
if ((gprs_protocol_header.KVer & 0x80) == 0x00)
|
{
|
gprs_protocol_header.Data_length = 15 + 8 * alarm_num; // 14+1 14ÊÇÐÒé13-26Byte£¬1ÊÇ27Byte£¬±¨¾¯×ÜÌõÊý
|
gprs_protocol_header_2buff((uint8_t *)&gprs_protocol_header, (uint8_t *)&GPRS_SEND_BUFF[0], FIRST_DATA_SHIFT);
|
CS_addr = gprs_protocol_header.Data_length + 13;
|
GPRS_SEND_BUFF[CS_addr] = 0;
|
|
for (mmm = 0; mmm < CS_addr; mmm++)
|
{
|
GPRS_SEND_BUFF[CS_addr] = (uint8_t)(GPRS_SEND_BUFF[CS_addr] + GPRS_SEND_BUFF[mmm]);
|
}
|
GPRS_SEND_BUFF[CS_addr + 1] = 0x16;
|
SendDataToSTM32();
|
// system_alarm.alarm_l = 0;
|
}
|
else
|
{
|
gprs_protocol_header.Data_length = 1 + 8 * alarm_num; // 1×Ö½Ú±¨¾¯×ÜÌõÊý+±¨¾¯ÄÚÈÝ
|
yushu16 = gprs_protocol_header.Data_length % 16;
|
shang16 = gprs_protocol_header.Data_length / 16;
|
|
gprs_protocol_header.Data_length = shang16 * 16 + 30; // 13-26×Ö½Ú+Ìî³äºóµÄ16×Ö½Ú
|
gprs_protocol_header_2buff((uint8_t *)&gprs_protocol_header, (uint8_t *)&GPRS_SEND_BUFF[0], FIRST_DATA_SHIFT);
|
CS_addr = gprs_protocol_header.Data_length + 13;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 1 + 8 * alarm_num] = 0x80;
|
for (mmm = 0; mmm < (15 - yushu16); mmm++)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 2 + 8 * alarm_num + mmm] = 0;
|
}
|
|
for (mmm = 0; mmm < shang16 + 1; mmm++)
|
{
|
AES128_ECB_encrypt(&GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 16 * mmm], KVer_AES_128, &GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 16 * mmm]);
|
}
|
|
GPRS_SEND_BUFF[CS_addr] = 0;
|
for (mmm = 0; mmm < CS_addr; mmm++)
|
{
|
GPRS_SEND_BUFF[CS_addr] = (uint8_t)(GPRS_SEND_BUFF[CS_addr] + GPRS_SEND_BUFF[mmm]);
|
}
|
GPRS_SEND_BUFF[CS_addr + 1] = 0x16;
|
SendDataToSTM32();
|
// system_alarm.alarm_l = 0;
|
}
|
|
if (NOW_Data_DDR == 0)
|
{
|
delay_ms(1000);
|
// GPRS_POWER_OFF;
|
memset(LinkDlg.UartBuff, 0, sizeof(LinkDlg.UartBuff));
|
memset(LinkDlg.HandBuff, 0, sizeof(LinkDlg.HandBuff));
|
LinkDlg.WritePtr = 0;
|
LinkDlg.HandlePtr = 0;
|
VariaDlg.send_finish_ok = 0;
|
GPRSbeginflag = 0;
|
GPRS_sendFlag = 0;
|
}
|
}
|
|
void getSampledata()
|
{
|
uint32_t SC_Accumulation;
|
uint32_t WC_Accumulation;
|
float SC_instant;
|
float WC_instant;
|
|
float Temperature;
|
float Pressure;
|
|
double ddBalance;
|
double ddGasUsageTotal;
|
double ddGasFeeUsageTotal;
|
|
if (parmAccess.VbT_permission == 1)
|
{
|
SC_Accumulation = FM25V02_data_read_uint32_Check(SCACC_addr + 4 * k_index);
|
}
|
else
|
{
|
SC_Accumulation = 0;
|
}
|
if (parmAccess.VT_permission == 1)
|
{
|
WC_Accumulation = FM25V02_data_read_uint32(WCACC_addr + 4 * k_index);
|
}
|
else
|
{
|
WC_Accumulation = 0;
|
}
|
if (parmAccess.TEMP_permission == 1)
|
{
|
Temperature = FM25V02_data_read_float(TEM_addr + 4 * k_index);
|
}
|
else
|
{
|
Temperature = 0;
|
}
|
if (parmAccess.PRES_permission == 1)
|
{
|
Pressure = FM25V02_data_read_float(PRE_addr + 4 * k_index);
|
Pressure = parmAccess.u32P_Bar * Pressure;
|
}
|
else
|
{
|
Pressure = 0;
|
}
|
|
if (parmAccess.Qb_permission == 1)
|
{
|
SC_instant = FM25V02_data_read_float(SCINS_addr + 4 * k_index);
|
}
|
else
|
{
|
SC_instant = 0;
|
}
|
if (parmAccess.Q_permission == 1)
|
{
|
WC_instant = FM25V02_data_read_float(WCINS_addr + 4 * k_index);
|
}
|
else
|
{
|
WC_instant = 0;
|
}
|
|
ddBalance = FM25V02_data_read_double(BALANCE_ADDR + 8 * k_index);
|
ddGasUsageTotal = FM25V02_data_read_double(CUMULATIVE_GAS_USAGE_ADDR + 8 * k_index);
|
ddGasFeeUsageTotal = FM25V02_data_read_double(CUMULATIVE_FEE_USAGE_ADDR + 8 * k_index);
|
|
gprs_data_package.Sample_year = FM25V02_data_read(YEAR_addr + k_index);
|
gprs_data_package.Sample_month = FM25V02_data_read(MONTH_addr + k_index);
|
gprs_data_package.Sample_day = FM25V02_data_read(DAY_addr + k_index);
|
gprs_data_package.Sample_hour = FM25V02_data_read(HOUR_addr + k_index);
|
gprs_data_package.Sample_min = FM25V02_data_read(MIN_addr + k_index);
|
gprs_data_package.Sample_sec = FM25V02_data_read(SEC_addr + k_index);
|
|
gprs_data_package.fBalance_xs = (uint32_t)((ddBalance - (uint32_t)ddBalance) * 10000);
|
gprs_data_package.fBalance_zs = (uint32_t)ddBalance;
|
if (ddBalance < 0)
|
{
|
ddBalance = 0 - ddBalance;
|
gprs_data_package.fBalance_xs = ((uint32_t)((ddBalance - (uint32_t)ddBalance) * 10000));
|
gprs_data_package.fBalance_zs = ((uint32_t)(ddBalance)) | 0x80000000;
|
}
|
|
gprs_data_package.fGasUsageTotal_xs = (uint32_t)((ddGasUsageTotal - (uint32_t)ddGasUsageTotal) * 10000);
|
gprs_data_package.fGasUsageTotal_zs = (uint32_t)ddGasUsageTotal;
|
gprs_data_package.fGasFeeUsageTotal_xs = (uint32_t)((ddGasFeeUsageTotal - (uint32_t)ddGasFeeUsageTotal) * 10000);
|
gprs_data_package.fGasFeeUsageTotal_zs = (uint32_t)ddGasFeeUsageTotal;
|
|
gprs_data_package.SC_Accumulation_xs = 0;
|
gprs_data_package.SC_Accumulation_zs = SC_Accumulation;
|
gprs_data_package.WC_Accumulation_xs = 0;
|
gprs_data_package.WC_Accumulation_zs = WC_Accumulation;
|
gprs_data_package.SC_instant_xs = (uint32_t)((SC_instant - (uint32_t)SC_instant) * 10000);
|
gprs_data_package.SC_instant_zs = (uint32_t)SC_instant;
|
gprs_data_package.WC_instant_xs = (uint32_t)((WC_instant - (uint32_t)WC_instant) * 10000);
|
gprs_data_package.WC_instant_zs = (uint32_t)WC_instant;
|
|
gprs_data_package.Temperature = Temperature;
|
gprs_data_package.Pressure = Pressure;
|
|
gprs_data_package.Lith_battery_V_xs = (int)((LLJ_data_g.Lith_Battery_V - (int)LLJ_data_g.Lith_Battery_V) * 100);
|
gprs_data_package.Lith_battery_V_zs = (int)LLJ_data_g.Lith_Battery_V;
|
|
gprs_data_package.Alka_battery_V_xs = (int)((LLJ_data_g.Alka_Battery_V - (int)LLJ_data_g.Alka_Battery_V) * 100);
|
gprs_data_package.Alka_battery_V_zs = (int)LLJ_data_g.Alka_Battery_V;
|
|
gprs_data_package.EX_battery_V_xs = (int)((LLJ_data_g.EX_Battery_V - (int)LLJ_data_g.EX_Battery_V) * 100);
|
gprs_data_package.EX_battery_V_zs = (int)LLJ_data_g.EX_Battery_V;
|
|
gprs_data_package.reservation1 = 0;
|
gprs_data_package.reservation2 = 0;
|
gprs_data_package.reservation3 = 0;
|
}
|
|
void gprs_protocol_header_2buff(uint8_t *header_in, uint8_t *buff, uint8_t len)
|
{
|
int iii;
|
for (iii = 0; iii < len; iii++)
|
{
|
*buff++ = *header_in++;
|
}
|
}
|
|
void gprs_data_2buff(uint8_t *data_in, uint8_t *buff)
|
{
|
int iii;
|
|
for (iii = 0; iii < DATA_PACKET_DATA_LENGTH; iii++)
|
{
|
*buff++ = *data_in++;
|
}
|
}
|
|
void GPRS_Send_process(void)
|
{
|
uint16_t index_i;
|
uint32_t index_break = 0;
|
VariaDlg.NetLinkFlag = 0;
|
GPRSbeginflag = 0;
|
IWDT_Clr();
|
|
NOW_Data_DDR = ddr_index_2 + Last_Data_DDR;
|
Last_Data_DDR = NOW_Data_DDR;
|
ddr_index_2 = 0;
|
|
if (NOW_Data_DDR > 100)
|
{
|
// Èç¹ûÀۼƳ¬¹ý72ÌõÊý¾Ýδ·¢ËÍ£¬Ö»·¢ËÍ×î½ü24Ìõ
|
NOW_Data_DDR = 1;
|
}
|
if (NumDataStored < NOW_Data_DDR)
|
{
|
k_index = NumDataStored + NumStoredLength - NOW_Data_DDR; // ¼ÆËãÊý¾Ý¶ÁÈ¡µÄStart address
|
}
|
else
|
{
|
k_index = NumDataStored - NOW_Data_DDR;
|
}
|
|
// POWER_3V8_Init();
|
// GPRS_RS232_GPIO_Init();
|
// GPRS_Usart_Init(115200);
|
// GPRS_POWER_EN_H; // ±¸Óã¬ÎÞʵ¼Ê×÷ÓÃ
|
// GPRS_POWER_ON;
|
// delay_ms(10);
|
|
// delay_ms(1000);
|
|
Gprs_Open();
|
|
VariaDlg.HandleStep = SYS_WAIT_SIM_OPEN; // µÈ´ýSIM800CÁ¬½ÓTCP³É¹¦
|
VariaDlg.CmdType = GSM_DATA;
|
VariaDlg.RestartTime = device_Parm.GPRS_RESTARTTIME; // Ò»´Î·¢Ëͳ¬Ê±Ê±¼ä
|
|
gprs_protocol_header.frameSeq = 1;
|
if ((VariaDlg.RestartTime < 30) || (VariaDlg.RestartTime > 255))
|
{
|
VariaDlg.RestartTime = 90;
|
}
|
index_break = 0;
|
while (GPRSbeginflag)
|
{
|
IWDT_Clr();
|
delay_ms(10);
|
index_break++;
|
|
//====================================================================================
|
if (VariaDlg.HandleStep == SYS_WAIT)
|
{
|
}
|
else if (VariaDlg.HandleStep == SYS_DATA) // TCPÁ¬½Ó³É¹¦£¬¿ªÊ¼Êý¾ÝÊÕ·¢
|
{
|
if (VariaDlg.NetLinkFlag) // Á¬½ÓÕý³£
|
{
|
// Gprs_Send_Pro();
|
}
|
}
|
else
|
{
|
}
|
|
if (VariaDlg.HandleStep != SYS_WAIT)
|
{
|
LinkHandleProc(VariaDlg.CmdType); // ½ÓÊÕ´¦Àí·þÎñÆ÷Ï·¢Êý¾Ý
|
}
|
|
if ((!VariaDlg.RestartTime) || (index_break >= 50000)) // Á¬½Ó³¬Ê±£¬¹Ø±Õ
|
{
|
GPRS_UartSendCode("ATCLOSE"); // ¹Ø±Õ·þÎñÆ÷Á¬½Ó
|
IWDT_Clr();
|
delay_ms(200);
|
delay_ms(800);
|
delay_ms(200);
|
delay_ms(800);
|
// GPRS_POWER_OFF;
|
GPRS_sendFlag = 0;
|
GPRSbeginflag = 0;
|
// awaken_flag = dormancy_awaken;
|
gprs_protocol_header.frameSeq = 1;
|
system_alarm.Data_Send_failed_time++;
|
|
if (system_alarm.alarm_l > 0)
|
{
|
system_alarm.alarm_Send_failed_time++;
|
}
|
|
LinkDlg.WritePtr = 0;
|
LinkDlg.HandlePtr = 0;
|
|
VariaDlg.send_finish_ok = 0; // jlc set 0 to reset send data
|
|
IWDT_Clr();
|
}
|
}
|
|
for (index_i = 0; index_i < 20; index_i++)
|
{
|
IWDT_Clr();
|
delay_ms(200);
|
delay_ms(800);
|
}
|
}
|