#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); } }