3595 lines
118 KiB
C
3595 lines
118 KiB
C
#include "sys_config.h"
|
||
#include "sys_processor.h"
|
||
|
||
#include "UWater_eeprom_driver.h"
|
||
#include "UWater_timer1uS_driver.h"
|
||
#include "UWater_gp22_driver.h"
|
||
#include "UWater_valve_driver.h"
|
||
|
||
#include "UWater_rtcc_app.h"
|
||
#include "UWater_power_app.h"
|
||
#include "UWater_lcd_app.h"
|
||
#include "UWater_gp22_app.h"
|
||
#include "UWater_pt_app.h"
|
||
#include "UWater_DataTools_App.h"
|
||
#include "UWater_self_test.h"
|
||
#include "UWater_Valve_app.h"
|
||
#include "eeprom_app.h"
|
||
#include "SOE.h"
|
||
#include "UWater_QZ_Store_App.h"
|
||
#include "UWater_frame_func_ReplyNB.h"
|
||
#include "nb_upload_monitor.h"
|
||
|
||
|
||
static u8 check_addr[7] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
||
const u8 super_key[] = {113, 100, 46, 105, 101, 115, 108, 97, 98, 46, 99, 111, 109, 46, 99, 110};//超级密钥,默认 qd.ieslab.com.cn
|
||
static u8 key[16] = {81, 73, 78, 71, 68, 65, 79, 74, 73, 67, 72, 45, 78, 71, 78, 66}; //默认普通密钥
|
||
static u8 s_nb_eep_complete=0;
|
||
static u8 task_complete_ies = PTL_PACK_BUSY;
|
||
static u8 g_frame_temp_send_buf[UP_BUF_SIZE]; //数据部分缓冲区
|
||
static u16 g_frame_temp_len=0;
|
||
static u32 s_frame_temp_timer_tick;
|
||
static mtype16_ write_eeprom_address; //写EE数据地址
|
||
static u8 write_eeprom_length; //写EE数据长度
|
||
|
||
//static STRUCT_FLAG s_frame_flag_IES; //规约标志
|
||
static STRUCT_FRAME_IES frame_struct_IES; //规约信息
|
||
static u8 *new_message_data_rev_ies;
|
||
static u8 up_deal_stat_ies = UP_DEAL_S0;
|
||
static u8 frame_buffer[128];//规约数据帧缓存,防止解密时更改原始数据
|
||
///*******主动上传数据相关变量*****************************************/
|
||
#if (MODULE_BLE_USED)
|
||
//读取表计时间
|
||
static void frame_func_reply_NB_TimeFrequency(void)
|
||
{
|
||
|
||
DateTime date_time;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
g_frame_temp_len =0;
|
||
if(*new_message_data_rev_ies == 0x01)//读取时间
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++]=0x01;
|
||
RtccGetDateTime(&date_time);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.second;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.minute;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.hour;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.day;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.month;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.year;
|
||
g_frame_temp_len = 7;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
}
|
||
#else //NB 表
|
||
//积成UDP第二通道上报数据
|
||
static STRU_PROC_MSG upload_udp_frame;
|
||
static u8 upload_frame_stat_ies_udp=UP_DEAL_S0;
|
||
static u8 upload_task_complete_ies_udp=PTL_PACK_BUSY;
|
||
//生产规约上报状态
|
||
static STRU_SHORT_UPLOAD_FRAME short_upload_product_frame;
|
||
static u8 upload_frame_stat_product_ies=0; //主动上报组帧状态
|
||
static u8 upload_task_complete_product_ies = PTL_PACK_FAIL;
|
||
static u8 upload_frame_retry_times=0;
|
||
|
||
//读取IP及端口号
|
||
static void frame_func_reply_NB_ReadIpPort(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if(*(new_message_data_rev_ies - 2) == 0x02)//sta=2,读取UDP服务器地址
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_ip[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_ip[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_ip[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_ip[3];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_port.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_port.datas_map.data1;
|
||
}
|
||
else
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_ip[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_ip[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_ip[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_ip[3];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_port.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_port.datas_map.data1;
|
||
}
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//主动上传
|
||
static void frame_func_reply_NB_Upload(void)
|
||
{
|
||
FrameSetMsgApp(MsgNbUartSend);
|
||
g_frame_temp_len = 0;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
|
||
//读取信号值
|
||
static void frame_func_reply_NB_ReadSignal(void)
|
||
{
|
||
int i = 0;
|
||
static UNION_SIGNAL temp_signal_val;
|
||
u8 cell_id_data_frame[CELL_ID_SIZE];
|
||
s16 s_temp_data=0;
|
||
u8 s_temp_data1 = 0;
|
||
u16 s_temp_data2 = 0;
|
||
NbiotGetSNR(&s_temp_data);
|
||
g_frame_temp_len=0;
|
||
if(s_temp_data<0)
|
||
{
|
||
temp_signal_val.SignalStruct.snr.datas = (-s_temp_data)|0x8000;
|
||
}
|
||
else
|
||
{
|
||
temp_signal_val.SignalStruct.snr.datas = s_temp_data;
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.snr.data_buf[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.snr.data_buf[1];
|
||
//
|
||
NbiotGetECL(&s_temp_data);
|
||
if(s_temp_data<0)
|
||
{
|
||
temp_signal_val.SignalStruct.ecl = (-s_temp_data)|0x8000;
|
||
}
|
||
else
|
||
{
|
||
temp_signal_val.SignalStruct.ecl = s_temp_data;
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.ecl;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.ecl>>8;
|
||
//
|
||
NbiotGetRSRP(&s_temp_data);
|
||
temp_signal_val.SignalStruct.rsrp = -s_temp_data;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.rsrp;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.rsrp>>8;
|
||
//
|
||
NbiotGetCSQ(&s_temp_data1);
|
||
temp_signal_val.SignalStruct.csq = s_temp_data1;
|
||
temp_signal_val.SignalStruct.csq = (temp_signal_val.SignalStruct.csq / 10)*16 + (temp_signal_val.SignalStruct.csq%10);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.csq;
|
||
//
|
||
temp_signal_val.SignalStruct.faile_times = NB_SS_Control_GetPara(NB_UploadFailTimes);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.faile_times;
|
||
//
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
//
|
||
NbiotGetCell_ID(cell_id_data_frame);
|
||
temp_signal_val.SignalStruct.cell_id = 0;
|
||
for(i=0;i<CELL_ID_SIZE;i++)
|
||
{
|
||
if(cell_id_data_frame[i] != 0)
|
||
{
|
||
temp_signal_val.SignalStruct.cell_id <<= 4;
|
||
if(cell_id_data_frame[i] <= '9')
|
||
{
|
||
temp_signal_val.SignalStruct.cell_id |= cell_id_data_frame[i]-'0';
|
||
}
|
||
else if((cell_id_data_frame[i] <= 'f')&&(cell_id_data_frame[i] >= 'a'))
|
||
{
|
||
temp_signal_val.SignalStruct.cell_id |= cell_id_data_frame[i]-'a'+10;
|
||
}
|
||
else if((cell_id_data_frame[i] <= 'F')&&(cell_id_data_frame[i] >= 'A'))
|
||
{
|
||
temp_signal_val.SignalStruct.cell_id |= cell_id_data_frame[i]-'A'+10;
|
||
}
|
||
}
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.cell_id>>0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.cell_id>>8;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.cell_id>>16;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.cell_id>>24;
|
||
//
|
||
NbiotGetEARFCN(&s_temp_data2);//上报频率
|
||
temp_signal_val.SignalStruct.report_fre.datas = s_temp_data2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.report_fre.datas>>8;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_signal_val.SignalStruct.report_fre.datas;
|
||
|
||
g_frame_temp_len = 15;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//读取上报开始时间、结束时间
|
||
static void frame_func_reply_NB_ReadStartEnd(void)
|
||
{
|
||
int i;
|
||
g_frame_temp_len =0;
|
||
for(i=0;i<6;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_period_start[i];
|
||
}
|
||
for(i=0;i<6;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_period_end[i];
|
||
}
|
||
for(i=0;i<2;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_step_len.data_buf[i];
|
||
}
|
||
g_frame_temp_len = 14;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读取最小估长
|
||
static void frame_func_reply_NB_ReadStepLength(void)
|
||
{
|
||
g_frame_temp_len =0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_step_len.data_buf[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_step_len.data_buf[1];
|
||
g_frame_temp_len = 2;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读取表计时间频点
|
||
static void frame_func_reply_NB_TimeFrequency(void)
|
||
{
|
||
|
||
DateTime date_time;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
g_frame_temp_len =0;
|
||
if(*new_message_data_rev_ies == 0x01)//读取时间
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++]=0x01;
|
||
RtccGetDateTime(&date_time);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.second;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.minute;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.hour;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.day;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.month;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.year;
|
||
g_frame_temp_len = 7;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
else if(*new_message_data_rev_ies == 0x02)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++]=0x02;
|
||
u8 temp = NbiotGetNBAND();
|
||
u16 band_fre=0;
|
||
|
||
if(1 == temp)
|
||
{
|
||
band_fre = 1980;
|
||
}
|
||
else if(3 == temp)
|
||
{
|
||
band_fre = 1785;
|
||
}
|
||
else if(5 == temp)
|
||
{
|
||
band_fre = 850;
|
||
}
|
||
else if(8 == temp)
|
||
{
|
||
band_fre = 900;
|
||
}
|
||
else if(20 == temp)
|
||
{
|
||
band_fre = 800;
|
||
}
|
||
else if(34 == temp)
|
||
{
|
||
band_fre = 2025;
|
||
}
|
||
else if(38 == temp)
|
||
{
|
||
band_fre = 2620;
|
||
}
|
||
else if(39 == temp)
|
||
{
|
||
band_fre = 1920;
|
||
}
|
||
else if(40 == temp)
|
||
{
|
||
band_fre = 2400;
|
||
}
|
||
else if(41 == temp)
|
||
{
|
||
band_fre = 2655;
|
||
}
|
||
else
|
||
{
|
||
band_fre = 850;
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = band_fre&0xFF;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] =(band_fre>>8)&0xFF;//默认频点 800
|
||
|
||
g_frame_temp_len = 3;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
else if(*new_message_data_rev_ies == 0x10)//读取上报时间
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++]=0x01;
|
||
SystemGetUploadTime(&date_time);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.second;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.minute;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.hour;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.day;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.month;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.year;
|
||
g_frame_temp_len = 7;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//深水读取重试次数
|
||
static void frame_func_reply_NB_ReadRetryCount(void)
|
||
{
|
||
g_frame_temp_len=0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_retry_times;
|
||
g_frame_temp_len = 1;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//读取上报频率
|
||
static void frame_func_reply_NB_ReadReportingFrequency(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.s.type;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.s.period;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.s.hour;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.s.minute;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.s.second;
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读取密集上报时间控制码
|
||
static void frame_func_reply_NB_ReadReportStartTime(void)
|
||
{
|
||
int i;
|
||
g_frame_temp_len =0;
|
||
for(i=0;i<9;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_start_time[i];
|
||
}
|
||
g_frame_temp_len = 9;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读取APN
|
||
static void frame_func_reply_NB_ReadApn(void)
|
||
{
|
||
int i;
|
||
g_frame_temp_len =0;
|
||
for(i=0;i<20;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.apn[1+i];
|
||
}
|
||
g_frame_temp_len =(Sys_data_object.P1.apn[1]+1);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
|
||
//读取参数控制码
|
||
static void frame_func_reply_NB_UnifiedRead(void)
|
||
{
|
||
int i=0;
|
||
DateTime date_time;
|
||
u8 temp_band = NbiotGetNBAND();
|
||
RtccGetDateTime(&date_time);
|
||
g_frame_temp_len = 0;
|
||
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.buf[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.buf[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.buf[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.buf[3];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Time_upload_2006.buf[4];
|
||
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_ip[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_ip[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_ip[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_ip[3];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_port.data_buf[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.server_port.data_buf[1];
|
||
|
||
for(i=0;i<6;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_period_start[i];
|
||
}
|
||
for(i=0;i<6;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_period_end[i];
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_step_len.data_buf[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_step_len.data_buf[1];
|
||
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_retry_times;
|
||
for(i=0;i<9;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_start_time[i];
|
||
}
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.high_flow_alarm.data_buf[i];
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.second;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.minute;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.hour;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.day;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.month;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = date_time.s.year;
|
||
|
||
if(1 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 1980;
|
||
}
|
||
else if(3 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 1785;
|
||
}
|
||
else if(5 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 850;
|
||
}
|
||
else if(8 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 900;
|
||
}
|
||
else if(20 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 800;
|
||
}
|
||
else if(34 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 2025;
|
||
}
|
||
else if(38 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 2620;
|
||
}
|
||
else if(39 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 1920;
|
||
}
|
||
else if(40 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 2400;
|
||
}
|
||
else if(41 == temp_band)
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 2655;
|
||
}
|
||
else
|
||
{
|
||
Sys_data_object.P1.report_fre.datas = 850;
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_fre.data_buf[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.report_fre.data_buf[1];
|
||
|
||
for(i = 0; i < 19; i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.apn[1 + i];
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
//g_frame_temp_len = 67;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//深水读取IMEI控制码增加读取ICCID2019年5月16日
|
||
static void frame_func_reply_NB_ReadImei(void)
|
||
{
|
||
u8 temp_buf1[16];
|
||
u8 temp_buf2[16];
|
||
u8 temp_iccid_buf[20];
|
||
int i;
|
||
g_frame_temp_len=0;
|
||
NbiotGetIMEI((char*)temp_buf1);
|
||
temp_buf2[0] = temp_buf1[0] - 0x30;
|
||
for(i=1;i<8;i++)
|
||
{
|
||
temp_buf2[i] = (temp_buf1[2*i]-0x30)&0x0F;
|
||
temp_buf2[i] |= ((temp_buf1[2*i-1]-0x30)<<4)&0xF0;
|
||
}
|
||
for(i=0;i<8;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_buf2[7-i];
|
||
}
|
||
NbiotGetIMSI((char*)temp_buf1);
|
||
temp_buf2[0] = temp_buf1[0] - 0x30;
|
||
for(i=1;i<8;i++)
|
||
{
|
||
temp_buf2[i] = (temp_buf1[2*i]-0x30)&0x0F;
|
||
temp_buf2[i] |= ((temp_buf1[2*i-1]-0x30)<<4)&0xF0;
|
||
}
|
||
for(i=0;i<8;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_buf2[7-i];
|
||
}
|
||
NbiotGetICCID((char*)temp_iccid_buf);
|
||
for(i=0;i<20;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_iccid_buf[19-i];
|
||
}
|
||
//g_frame_temp_len = 36;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//读取上报重试间隔和附网次数
|
||
static void frame_func_reply_NB_ReadRetryTime(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Upload_again_interval_time.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.Upload_again_interval_time.datas_map.data1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.nb_para_login_ask_times.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.nb_para_login_ask_times.datas_map.data1;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//写IP和端口号
|
||
static void frame_func_s3_NB_WriteIpPort(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
int i =0;
|
||
g_frame_temp_len = 0;
|
||
|
||
if(*(new_message_data_rev_ies - 2) == 0x02)//sta=2,UDP服务器地址
|
||
{
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
Sys_data_object.P2.server_ip[i] = *(new_message_data_rev_ies +i);
|
||
}
|
||
Sys_data_object.P2.server_port.data_buf[0] = *(new_message_data_rev_ies +4);
|
||
Sys_data_object.P2.server_port.data_buf[1] = *(new_message_data_rev_ies +5);
|
||
|
||
EepWrite(&Sys_data_object.P2.server_ip[0], EEP_UPDATE_UDP_IP, 6, &s_nb_eep_complete);//保存到UDP IP
|
||
FrameSetMsgApp(MsgShenYang_UdpIpPortChange);
|
||
}
|
||
else
|
||
{
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
Sys_data_object.P1.server_ip[i] = *(new_message_data_rev_ies +i);
|
||
}
|
||
Sys_data_object.P1.server_port.data_buf[0] = *(new_message_data_rev_ies +4);
|
||
Sys_data_object.P1.server_port.data_buf[1] = *(new_message_data_rev_ies +5);
|
||
|
||
EepWrite(&Sys_data_object.P1.server_ip[0], FRAME_NBIot_IP, 6, &s_nb_eep_complete);
|
||
FrameSetMsgApp(MsgNbIpPortChange);
|
||
}
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//深水统一设置参数
|
||
static void frame_func_s3_NB_Unified_Setting(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
//DateTime temp_date_time;
|
||
int i=0;
|
||
u8* temp_data_p = (new_message_data_rev_ies + 1);
|
||
for(i=0;i<5;i++)
|
||
{
|
||
Sys_data_object.P1.Time_upload_2006.buf[i] = *(temp_data_p++);
|
||
}
|
||
for(i=0;i<4;i++)
|
||
{
|
||
Sys_data_object.P1.server_ip[i] = *(temp_data_p++);
|
||
}
|
||
Sys_data_object.P1.server_port.data_buf[0] = *(temp_data_p++);
|
||
Sys_data_object.P1.server_port.data_buf[1] = *(temp_data_p++);
|
||
for(i=0;i<6;i++)
|
||
{
|
||
Sys_data_object.P1.report_period_start[i] = *(temp_data_p++);
|
||
}
|
||
for(i=0;i<6;i++)
|
||
{
|
||
Sys_data_object.P1.report_period_end[i] = *(temp_data_p++);
|
||
}
|
||
Sys_data_object.P1.report_step_len.data_buf[0] = *(temp_data_p++);
|
||
Sys_data_object.P1.report_step_len.data_buf[1] = *(temp_data_p++);
|
||
Sys_data_object.P1.report_retry_times = *(temp_data_p++);
|
||
for(i=0;i<9;i++)
|
||
{
|
||
Sys_data_object.P1.report_start_time[i] = *(temp_data_p++);
|
||
}
|
||
for(i=0;i<4;i++)
|
||
{
|
||
Sys_data_object.P1.high_flow_alarm.data_buf[i] = *(temp_data_p++);
|
||
}
|
||
for(i=0;i<6;i++)//预留
|
||
{
|
||
temp_data_p++;
|
||
}
|
||
for(i=0;i<4;i++)
|
||
{
|
||
Sys_data_object.P1.report_fre.data_buf[i] = *(temp_data_p++);
|
||
}
|
||
for(i=0;i<20;i++)
|
||
{
|
||
Sys_data_object.P1.apn[i] = *(temp_data_p++);
|
||
}
|
||
EepWrite(&Sys_data_object.P1.Time_upload_2006.buf[0], FRAME_NBIot_FREQVAL, 67, &s_nb_eep_complete);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//深水设置最大流量报警门限
|
||
static void frame_func_s3_NB_SetThreshold(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
UNION_4U8TOU32 alarm_value;
|
||
memcpy(&alarm_value.datas_map.data0, new_message_data_rev_ies, 4);
|
||
if(alarm_value.datas >10000)//2018年12月29日14:09:11增加大流量报警门限防护
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
memcpy(&Sys_data_object.P1.high_flow_alarm.datas_map.data0, new_message_data_rev_ies,4);
|
||
EepWrite(&Sys_data_object.P1.high_flow_alarm.datas_map.data0, FRAME_NBIot_HIGHFLOW, 4, &s_nb_eep_complete);
|
||
FrameSetMsgApp(MsgNbFlowAlarm);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//深水设置上报起始结束时间
|
||
static void frame_func_s3_NB_SetStartEnd(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
UNION_2U8TOU16 temp_fram ;
|
||
temp_fram.datas_map.data0 = *(new_message_data_rev_ies + 12);
|
||
temp_fram.datas_map.data1 = *(new_message_data_rev_ies + 13);
|
||
if(temp_fram.datas >10)
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
memcpy(&Sys_data_object.P1.report_period_start[0],new_message_data_rev_ies,14);
|
||
EepWrite(&Sys_data_object.P1.report_period_start[0], FRAME_NBIot_REPORTSTART, 14, &s_nb_eep_complete);
|
||
FrameSetMsgApp(MsgNbStartEndChange);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//深水设置最小估长
|
||
static void frame_func_s3_NB_SetSteplength(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
UNION_2U8TOU16 temp_fram ;
|
||
temp_fram.datas_map.data0 = *(new_message_data_rev_ies + 0);
|
||
temp_fram.datas_map.data1 = *(new_message_data_rev_ies + 1);
|
||
if(temp_fram.datas >43)
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
memcpy(&Sys_data_object.P1.report_step_len.data_buf[0] ,new_message_data_rev_ies, 2);
|
||
EepWrite(&Sys_data_object.P1.report_step_len.data_buf[0], FRAME_NBIot_LENGTH, 2, &s_nb_eep_complete);
|
||
FrameSetMsgApp(MsgNbStepLengthChange);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//深水设置重试次数
|
||
static void frame_func_s3_NB_SetRetryCount(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
memcpy(&Sys_data_object.P1.report_retry_times ,new_message_data_rev_ies,1);
|
||
EepWrite(&Sys_data_object.P1.report_retry_times, EEP_RETRY_TIMES_ADDR, 1, &s_nb_eep_complete);
|
||
FrameSetMsgApp(MsgNbRetryTimesChange);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//深水设置上报频率规约(小时模式、天模式、月模式)
|
||
static void frame_func_s3_NB_SetReportingFrequency(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
memcpy(&Sys_data_object.P1.Time_upload_2006.buf[0] ,new_message_data_rev_ies,5);
|
||
EepWrite(&Sys_data_object.P1.Time_upload_2006.buf[0], FRAME_NBIot_FREQVAL, 5, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
FrameSetMsgApp(MsgNbUploadFreqChange);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//深水设置密集上报起始结束时间
|
||
static void frame_func_s3_NB_SetReportStartTime(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
memcpy(&Sys_data_object.P1.report_start_time [0],new_message_data_rev_ies,9);
|
||
if((Sys_data_object.P1.report_start_time[2]>Sys_data_object.P1.report_start_time[5]) ||((Sys_data_object.P1.report_start_time[2]==Sys_data_object.P1.report_start_time[5])&& (Sys_data_object.P1.report_start_time[1]>Sys_data_object.P1.report_start_time[4]))
|
||
|| ((Sys_data_object.P1.report_start_time[2]==Sys_data_object.P1.report_start_time[5])&& (Sys_data_object.P1.report_start_time[1]==Sys_data_object.P1.report_start_time[4]) &&(Sys_data_object.P1.report_start_time[0]>Sys_data_object.P1.report_start_time[3])))
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
EepWrite(&Sys_data_object.P1.report_start_time [0], FRAME_NBIot_STARTTIME, 9, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
FrameSetMsgApp(MsgNbIntensiveTime);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//设置APN
|
||
static void frame_func_s3_NB_SetApn(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if((0< *new_message_data_rev_ies) && (*new_message_data_rev_ies <19) )//APN长度判断
|
||
{
|
||
Sys_data_object.P1.apn[0] = 0x01;
|
||
Sys_data_object.P1.apn[1] = *(new_message_data_rev_ies);//apn长度
|
||
u8 i_temp = 0;
|
||
for(i_temp = 0; i_temp < Sys_data_object.P1.apn[1]; i_temp++)
|
||
{
|
||
Sys_data_object.P1.apn[2 + i_temp] = *(new_message_data_rev_ies + 1 + i_temp);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
EepWrite(&Sys_data_object.P1.apn[0], FRAME_NBIot_APN, (Sys_data_object.P1.apn[1]+2), &s_nb_eep_complete);
|
||
FrameSetMsgApp(MsgNbApnChange);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
//设置上报相关参数
|
||
static void frame_func_s3_NB_SetRetryTime(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())
|
||
{
|
||
g_frame_temp_len = 0;
|
||
Sys_data_object.P1.Upload_again_interval_time.datas_map.data0 = *(new_message_data_rev_ies + 0);
|
||
Sys_data_object.P1.Upload_again_interval_time.datas_map.data1 = *(new_message_data_rev_ies + 1);
|
||
Sys_data_object.P1.nb_para_login_ask_times.datas_map.data0 = *(new_message_data_rev_ies + 2);
|
||
Sys_data_object.P1.nb_para_login_ask_times.datas_map.data1 = *(new_message_data_rev_ies + 3);
|
||
|
||
EepWrite(&Sys_data_object.P1.Upload_again_interval_time.datas_map.data0, EEP_FRAME_NB_PARA_ADDR, 4, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
//短帧上报应答
|
||
static void frame_func_reply_NB_AckUploadShort(void)
|
||
{
|
||
g_frame_temp_len =0;
|
||
FrameSetMsgApp(MsgNbUplaod_AckOk);
|
||
task_complete_ies = PTL_PACK_FAIL;//这是上报应答帧,返回错误,表计不应答
|
||
}
|
||
//读取最大流量阈值
|
||
static void frame_func_reply_NB_ReadThreshole(void)
|
||
{
|
||
int i = 0;
|
||
g_frame_temp_len =0;
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.high_flow_alarm.data_buf[i];
|
||
}
|
||
g_frame_temp_len = 4;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
#endif
|
||
//新增规约:读取电池参数
|
||
static void frame_func_reply_NB_read_battery(void)
|
||
{
|
||
u16 temp_u32_data;
|
||
g_frame_temp_len = 0;
|
||
//待机时间
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.total_use_sum_times_sec.to_uint8[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.total_use_sum_times_sec.to_uint8[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.total_use_sum_times_sec.to_uint8[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.total_use_sum_times_sec.to_uint8[3];
|
||
//电池剩余电量
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.bat_surplus.to_uint8[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.bat_surplus.to_uint8[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.bat_surplus.to_uint8[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.bat_surplus.to_uint8[3];
|
||
//红外累计工作时间
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.use_sum_times_sec.to_uint8[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.use_sum_times_sec.to_uint8[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.use_sum_times_sec.to_uint8[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.use_sum_times_sec.to_uint8[3];
|
||
//NB累计工作时间
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.nb_use_sum_times_sec.to_uint8[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.nb_use_sum_times_sec.to_uint8[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.nb_use_sum_times_sec.to_uint8[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.nb_use_sum_times_sec.to_uint8[3];
|
||
//NB上报次数
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.nb_upload_happen_num&0xFF;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = (Sys_data_object.P1.run_information_object.nb_upload_happen_num>>8)&0xFF;
|
||
//阀门工作时间
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.run_information_object.valve_use_sum_times_sec&0xFF;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = (Sys_data_object.P1.run_information_object.valve_use_sum_times_sec>>8)&0xFF;
|
||
//剩余功耗和剩余时间比值
|
||
temp_u32_data = Sys_data_object.P1.run_information_object.ee_remain_para_energy_life*1000;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_u32_data&0xFF;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = (temp_u32_data>>8)&0xFF;
|
||
//电池电压
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = PowerCheckValueSys()&0xFF;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = ( PowerCheckValueSys()>>8)&0xFF;
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
////新增规约:清除电池参数
|
||
static void frame_func_reply_NB_read_batteryinit(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
//电池电量相关参数
|
||
Sys_data_object.P1.run_information_object.total_use_sum_times_sec.to_uint32 = 0;//表计工作总时间
|
||
Sys_data_object.P1.run_information_object.bat_surplus.to_uint32 = ENERGY_OF_26500;//电池电量uAH
|
||
Sys_data_object.P1.run_information_object.use_sum_times_sec.to_uint32 = 0;//红外累计工作时间
|
||
Sys_data_object.P1.run_information_object.nb_use_sum_times_sec.to_uint32 = 0;//nb累计工作时间
|
||
Sys_data_object.P1.run_information_object.nb_upload_happen_num = 0;//nb激活次数
|
||
Sys_data_object.P1.run_information_object.valve_use_sum_times_sec = 0;//阀门工作时间
|
||
Sys_data_object.P1.run_information_object.ee_remain_para_energy_life = 3;//比值
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//新规约共用控制字:写UDP IP和端口号
|
||
static void frame_func_s3_NB_WriteUdpIpPort(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
|
||
Sys_data_object.P2.server_ip[0] = *(new_message_data_rev_ies+0);
|
||
Sys_data_object.P2.server_ip[1] = *(new_message_data_rev_ies+1);
|
||
Sys_data_object.P2.server_ip[2] = *(new_message_data_rev_ies+2);
|
||
Sys_data_object.P2.server_ip[3] = *(new_message_data_rev_ies+3);
|
||
Sys_data_object.P2.server_port.data_buf[0] = *(new_message_data_rev_ies+4);
|
||
Sys_data_object.P2.server_port.data_buf[1] = *(new_message_data_rev_ies+5);
|
||
|
||
EepWrite(&Sys_data_object.P2.server_ip[0], EEP_UPDATE_UDP_IP, 6, &s_nb_eep_complete);//保存到UDP IP
|
||
FrameSetMsgApp(MsgShenYang_UdpIpPortChange);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
//新规约共用控制字:读取UDP IP及端口号
|
||
static void frame_func_reply_NB_ReadUdpIpPort(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_ip[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_ip[1];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_ip[2];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_ip[3];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_port.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.server_port.datas_map.data1;
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//终端重启
|
||
static void frame_func_reply_NB_TernalRestart(void)
|
||
{
|
||
FrameSetMsgApp(BootloaderMsg);
|
||
if(01 == LcdCheckStateApp()) //检定状态
|
||
{
|
||
FrameSetMsgApp(OutVerificationMsg); //出检定msg
|
||
}
|
||
NVIC_SystemReset(); //重启
|
||
g_frame_temp_len = 0;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//设置为全显状态
|
||
static void frame_func_reply_NB_SetLcdDisplay(void)
|
||
{
|
||
FrameSetMsgApp(LcdDisplayAllMsg);//
|
||
g_frame_temp_len = 0;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//控阀
|
||
static void frame_func_reply_NB_ValveControl(void)
|
||
{
|
||
g_frame_temp_len =0;
|
||
#if defined(VALVE)
|
||
u8 fram_valve_sta = *new_message_data_rev_ies;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
if(0x55 == fram_valve_sta)//开阀门
|
||
{
|
||
ValveDealAppStart(VALVE_STATE_OPEN);
|
||
g_frame_temp_send_buf[0] = 0x10;
|
||
}
|
||
else if(0x99 == fram_valve_sta) //应急关阀
|
||
{
|
||
ValveDealAppStart(VALVE_STATE_CLOSE_EMERGENCY);
|
||
g_frame_temp_send_buf[0] = 0x20;
|
||
}
|
||
else if(0xBB == fram_valve_sta) //普通关阀
|
||
{
|
||
ValveDealAppStart(VALVE_STATE_CLOSE);
|
||
g_frame_temp_send_buf[0] = 0x20;
|
||
}
|
||
else if(0xCC== fram_valve_sta) //权限关阀
|
||
{
|
||
ValveDealAppStart(VALVE_STATE_CLOSE_LOCK);
|
||
g_frame_temp_send_buf[0] = 0x20;
|
||
}
|
||
else
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
g_frame_temp_len = 2;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
# else
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
#endif
|
||
}
|
||
|
||
//读取普通秘钥
|
||
static void frame_func_reply_NB_ReadCommonKey(void)
|
||
{
|
||
int i;
|
||
g_frame_temp_len =0;
|
||
for(i=0;i<16;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.key[i];
|
||
}
|
||
g_frame_temp_len = 16;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读取物理地址
|
||
static void frame_func_reply_NB_ReadMac(void)
|
||
{
|
||
int i;
|
||
g_frame_temp_len =0;
|
||
for(i=0;i<7;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.mac_addr[i];
|
||
}
|
||
//g_frame_temp_len = 7;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//加密下初值
|
||
static void frame_func_reply_NB_WriteInitValue(void)
|
||
{
|
||
g_frame_temp_len=0;
|
||
if (0x01 == Sys_data_object.P1.start_using_flg) //出厂启用
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
FrameSetMsgApp(InitialDataMsg); //累计流量防护2019年7月8日
|
||
UNION_4U8TOU32 tmp_datas_buf1,tmp_datas_buf2;
|
||
fram_tools_writeU32ByBuf(tmp_datas_buf1.data_buf, new_message_data_rev_ies, 0);
|
||
fram_tools_writeU32ByBuf(tmp_datas_buf2.data_buf, (new_message_data_rev_ies + 5), 0);
|
||
FrameSetMsgApp(MsgBLE_AdvChange);//修改蓝牙广播信息
|
||
Gp30InitDataApp(tmp_datas_buf1.datas,tmp_datas_buf2.datas);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读取软件版本号
|
||
static void frame_func_reply_NB_ReadSwVersion(void)
|
||
{
|
||
g_frame_temp_len=0;
|
||
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = (PROGRAME_VERSION>>24)&0xFF;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = (PROGRAME_VERSION>>16)&0xFF;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = (PROGRAME_VERSION>>8)&0xFF;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = (PROGRAME_VERSION>>0)&0xFF;
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//退出检定状态
|
||
static void frame_func_reply_NB_OutVerificationState(void)
|
||
{
|
||
g_frame_temp_len=0;
|
||
if(01 == LcdCheckStateApp()) //检定状态
|
||
{
|
||
FrameSetMsgApp(OutVerificationMsg); //出检定msg
|
||
}
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//加密读表数据
|
||
static void frame_func_reply_NB_ReadData(void)
|
||
{
|
||
int i=0;
|
||
static MET_STATE temp_state; //状态字
|
||
UNION_4U8TOU32 tmp_datas_buf;
|
||
UNION_FLOAT_STORAGE tmp_float_datas_buf1,tmp_float_datas_buf2;
|
||
DateTime tmp_date_buf;
|
||
g_frame_temp_len=0;
|
||
/*组应答*/
|
||
tmp_float_datas_buf1.float_storage_format.datas = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW);
|
||
tmp_datas_buf.datas = (u32) tmp_float_datas_buf1.float_datas;
|
||
tmp_datas_buf.datas = HexToBcd32(tmp_datas_buf.datas);
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0x2C;
|
||
|
||
tmp_float_datas_buf2.float_storage_format.datas = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW_REVERSE);
|
||
tmp_datas_buf.datas = (u32) tmp_float_datas_buf2.float_datas;
|
||
tmp_datas_buf.datas = HexToBcd32(tmp_datas_buf.datas);
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0x2C;
|
||
|
||
RtccGetDateTime(&tmp_date_buf);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_date_buf.s.day; //日
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_date_buf.s.hour; //时
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_date_buf.s.minute; //分
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_date_buf.s.second; //秒
|
||
FrameGetByte();
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat3;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat4;
|
||
|
||
//g_frame_temp_len = 19;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读出厂序列号
|
||
static void frame_func_reply_NB_ReadSerialnum(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
task_complete_ies = PTL_PACK_SUCCESS;;
|
||
}
|
||
//校时
|
||
static void frame_func_reply_NB_CalibrateTime(void)
|
||
{
|
||
DateTime tmp_data_time_buf;
|
||
g_frame_temp_len = 0;
|
||
tmp_data_time_buf.s.year = *(new_message_data_rev_ies + 2);
|
||
tmp_data_time_buf.s.month = *(new_message_data_rev_ies + 3);
|
||
tmp_data_time_buf.s.day = *(new_message_data_rev_ies + 4);
|
||
tmp_data_time_buf.s.hour = *(new_message_data_rev_ies + 5);
|
||
tmp_data_time_buf.s.minute =*(new_message_data_rev_ies + 6);
|
||
tmp_data_time_buf.s.second =*(new_message_data_rev_ies + 7);
|
||
|
||
RtccSetDateTime(&tmp_data_time_buf);
|
||
RtccClearError();
|
||
PowerUnSleepClearSumSys(); //休眠管理,如果长时间不休眠的处理 2015-7-15 增加的接口。。。
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读通讯地址
|
||
static void frame_func_reply_NB_ReadAddr(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//清表数据
|
||
static void frame_func_reply_NB_ClearMeterData(void)
|
||
{
|
||
static u8 s_clear_history_index=0;
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
if (0x01 == Sys_data_object.P1.start_using_flg) //出厂启用
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
g_frame_temp_len =0;
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
break;
|
||
case UP_DEAL_S1://清累计工作时间
|
||
{
|
||
if (EepIfIdle())
|
||
{
|
||
for(int i=0;i<256;i++)
|
||
{
|
||
g_frame_temp_send_buf[i]=0xFF;
|
||
}
|
||
s_clear_history_index = 0;
|
||
Sys_data_object.ee_data.data.work_hour = 0; //清累计工作时间
|
||
Sys_data_object.ee_data.data.day_data = 0xFFFFFFFF; //结算日累计值
|
||
RtccGetDateTime(&Sys_data_object.ee_data.data.start_time_up);//重置出厂时间
|
||
EepWrite(Sys_data_object.ee_data.byte, EE_FIRST_USE_ADDR, sizeof (RTCC_EE_DATA), &s_nb_eep_complete);
|
||
up_deal_stat_ies = UP_DEAL_S2;
|
||
}
|
||
}
|
||
break;
|
||
case UP_DEAL_S2://清历史数据
|
||
{
|
||
if (EepIfIdle())
|
||
{
|
||
EepWrite(g_frame_temp_send_buf, FRAME_NBIot_HISTORY_READ_ADD + s_clear_history_index*256, 256, &s_nb_eep_complete);
|
||
up_deal_stat_ies = UP_DEAL_S3;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S3:
|
||
{
|
||
if (EepIfIdle())
|
||
{
|
||
s_clear_history_index++;
|
||
if (s_clear_history_index >= 96 )//0x2000~0x7FFF
|
||
{
|
||
SaveNewSoe(SOE_SY_CURRENT_CLEAR,SOE_REMARK_NOR);//清表数据记录报警
|
||
FrameSetMsgApp(ClearRealtimeDataMsg);//清实时表数据
|
||
FrameSetMsgApp(Msg_ClearHisOther);//清表数据给其他规约消息
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
else
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S2;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
//读流量系数
|
||
static void frame_func_reply_NB_ReadFlowCoefficient(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if(LOW_TYPE==*new_message_data_rev_ies)
|
||
{
|
||
memcpy(&g_frame_temp_send_buf[0], &(cal_flow_coefficient[0].datas_map.data0),24);
|
||
}
|
||
else if(MIDDLE_TYPE==*new_message_data_rev_ies)
|
||
{
|
||
memcpy(&g_frame_temp_send_buf[0], &(cal_flow_coefficient[6].datas_map.data0),24);
|
||
}
|
||
else if(LARGE_TYPE==*new_message_data_rev_ies)
|
||
{
|
||
memcpy(&g_frame_temp_send_buf[0], &(cal_flow_coefficient[12].datas_map.data0),24);
|
||
}
|
||
g_frame_temp_len = 24;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//设置为检定状态
|
||
static void frame_func_reply_NB_SetVerification(void)
|
||
{
|
||
g_frame_temp_len=0;
|
||
if (0 == Sys_data_object.P1.enable_verification_function)
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
Sys_data_object.P3.LCD_NoTestFlag = 0x0;
|
||
FrameSetMsgApp(SetVerificationMsg);
|
||
FrameClearMsgApp(MsgCaliberate);//清零 单程时间校准校准标志
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//工装进检定状态
|
||
static void frame_func_reply_TOOL_SetVerification(void)
|
||
{
|
||
g_frame_temp_len=0;
|
||
if (0 == Sys_data_object.P1.enable_verification_function)
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
Sys_data_object.P3.LCD_NoTestFlag = 0x55;
|
||
FrameSetMsgApp(SetVerificationMsg);
|
||
FrameClearMsgApp(MsgCaliberate);//清零 单程时间校准校准标志
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读温度系数
|
||
static void frame_func_reply_NB_ReadTemperatureCoefficient(void)
|
||
{
|
||
int i;
|
||
UNION_4U8TOU32 temp_4U8toU32_data;
|
||
g_frame_temp_len=0;
|
||
temp_4U8toU32_data.datas = FrameCheckParaApp(FramePara_Tc0);
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_4U8toU32_data.data_buf[i];
|
||
}
|
||
temp_4U8toU32_data.datas = FrameCheckParaApp(FramePara_Tc1);
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_4U8toU32_data.data_buf[i];
|
||
}
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读检定数据
|
||
static void frame_func_reply_NB_ReadVerificationData(void)
|
||
{
|
||
int i;
|
||
static MET_STATE temp_state; //状态字
|
||
static DateTime tmp_time_buf;
|
||
UNION_4U8TOU32 tmp_datas_buf;
|
||
UNION_FLOAT_STORAGE tmp_float_datas_buf;
|
||
float tempTempratureFlag;
|
||
g_frame_temp_len=0;
|
||
if(01 != LcdCheckStateApp()) //非检定状态
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
//温度
|
||
|
||
if(TRUE==Check_Start_STOP_Filter_Flag())//获取start-stop完成温度滤波标志
|
||
{
|
||
Clear_Start_STOP_Filter_Flag();//清零start-stop完成温度滤波标志
|
||
tempTempratureFlag = Check_Temperature_Parameter();//传递滤波的反算温度数据
|
||
}
|
||
else
|
||
{
|
||
tempTempratureFlag = TempCheckValueApp();//获取实时温度
|
||
}
|
||
|
||
if(tempTempratureFlag < 0)
|
||
{
|
||
tempTempratureFlag = -tempTempratureFlag;
|
||
tmp_datas_buf.datas = HexToBcd32((u32)(tempTempratureFlag*100));
|
||
tmp_datas_buf.datas|= 0x800000;
|
||
}
|
||
else
|
||
{
|
||
tmp_datas_buf.datas = HexToBcd32((u32)(tempTempratureFlag*100));
|
||
tmp_datas_buf.datas &= 0x7FFFFF;
|
||
}
|
||
for(i=0;i<3;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
//累计流量
|
||
tmp_float_datas_buf.float_storage_format.datas = Gp30CheckTestDataApp(GP30_APP_TOTAL_FLOW); //累计流量//BCD
|
||
tmp_datas_buf.datas = (u32) (tmp_float_datas_buf.float_datas);
|
||
tmp_datas_buf.datas = HexToBcd32(tmp_datas_buf.datas);
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0x2C; //m?
|
||
//瞬时流量
|
||
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_INS_FLOW); //瞬时流量(四位小数,放大100000倍)//BCD
|
||
tmp_datas_buf.datas = Gp30DataToBcd(tmp_datas_buf.datas, 100);
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0x35; //m?/h
|
||
//up单程时间
|
||
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_TOF);//up单程时间获取
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
//Magnify 100000 times(m3/h):Real-time instantaneous flow
|
||
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_INS_FLOW_LCD);
|
||
tmp_datas_buf.datas = Gp30DataToBcd(tmp_datas_buf.datas, 100);
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
//tof
|
||
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_DIFF); //时间差
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
////累计工作时间//BCD
|
||
tmp_datas_buf.datas = RtccGetWorkHourApp();
|
||
tmp_datas_buf.datas = HexToBcd32(tmp_datas_buf.datas);
|
||
for(i=0;i<3;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
//实时时间
|
||
RtccGetDateTime(&tmp_time_buf);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0x20;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.year;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.month;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.day;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.hour;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.minute;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.second;
|
||
//状态字
|
||
temp_state = FrameGetByte();
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat3;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat4;
|
||
//************************新增数据:15字节***********************/
|
||
//反算温度T0-T2(T2):3字节
|
||
//温度T0-T2(T2):3字节
|
||
#if WENDU_FANSUAN_OPEN
|
||
tempTempratureFlag = TempCheckValueApp();//传递实时的反算数据
|
||
|
||
if(tempTempratureFlag < 0)
|
||
{
|
||
tempTempratureFlag = -tempTempratureFlag;
|
||
tmp_datas_buf.datas = HexToBcd32((u32)(tempTempratureFlag*100));
|
||
tmp_datas_buf.datas|= 0x800000;
|
||
}
|
||
else
|
||
{
|
||
tmp_datas_buf.datas = HexToBcd32((u32)(tempTempratureFlag*100));
|
||
tmp_datas_buf.datas &= 0x7FFFFF;
|
||
}
|
||
for(i=0;i<3;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.data_buf[i];
|
||
}
|
||
tmp_datas_buf.datas = Gp30CheckDataApp(11); //TOF_UP补偿系数
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data3;
|
||
|
||
tmp_datas_buf.datas = Gp30CheckDataApp(12);//TOF_DOWN补偿系数
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data3;
|
||
#else//常规程序反算温度默认写0
|
||
for(i=0;i<3;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
}
|
||
//up amplitude(V1):4字节
|
||
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_PEAK_UP);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data3;
|
||
//down amplitude(V2):4字节
|
||
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_PEAK_DOWN);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data3;
|
||
#endif
|
||
//预留:4字节
|
||
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_DOWN);//down 的单程时间
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data3;
|
||
|
||
//g_frame_temp_len = 55;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读检定数据
|
||
static void frame_func_reply_TOOL_ReadVerificationData(void)
|
||
{
|
||
int i;
|
||
UNION_FLOAT_STORAGE tmp_float_datas_buf;
|
||
|
||
g_frame_temp_len=0;
|
||
//累计流量
|
||
tmp_float_datas_buf.float_storage_format.datas = Gp30CheckTestDataApp(GP30_APP_TOTAL_FLOW); //累计流量//BCD
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_float_datas_buf.float_storage_format.data_buf[i];
|
||
}
|
||
//负向也用这个值
|
||
for(i=0;i<4;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_float_datas_buf.float_storage_format.data_buf[i];
|
||
}
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读瞬时流量和温度
|
||
static void frame_func_reply_NB_ReadInstantFlowAndTemperature(void)
|
||
{
|
||
MET_STATE temp_state; //状态字
|
||
static DateTime tmp_time_buf;
|
||
UNION_4U8TOU32 tmp_datas_buf;
|
||
UNION_FLOAT_STORAGE tmp_float_datas_buf;
|
||
g_frame_temp_len=0;
|
||
tmp_float_datas_buf.float_storage_format.datas = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW); //当前累积流量
|
||
tmp_datas_buf.datas = (u32) tmp_float_datas_buf.float_datas;
|
||
tmp_datas_buf.datas = HexToBcd32(tmp_datas_buf.datas);
|
||
fram_tools_writeU32ByBuf(&g_frame_temp_send_buf[g_frame_temp_len], tmp_datas_buf.data_buf, 0);
|
||
g_frame_temp_len+=4;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0x2C;//m3
|
||
tmp_datas_buf.datas = Gp30CheckDataApp(GP30_APP_INS_FLOW); //瞬时流量(四位小数,放大100000倍)//BCD
|
||
tmp_datas_buf.datas = Gp30DataToBcd(tmp_datas_buf.datas, 100);
|
||
fram_tools_writeU32ByBuf(&g_frame_temp_send_buf[5], tmp_datas_buf.data_buf, 0);
|
||
g_frame_temp_len+=4;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0x35;//m3/h
|
||
float tmep = TempCheckValueApp(); //
|
||
if(tmep <0)
|
||
{
|
||
tmp_datas_buf.datas = (u32)(tmep*(-100));
|
||
tmp_datas_buf.datas &= 0x0FFFF;
|
||
tmp_datas_buf.datas |= 0x80000;
|
||
}
|
||
else
|
||
{
|
||
tmp_datas_buf.datas = (u32)(tmep*(100));
|
||
tmp_datas_buf.datas &= 0x7FFFF;
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_datas_buf.datas_map.data2;
|
||
RtccGetDateTime(&tmp_time_buf);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.day; //日
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.hour; //时
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.minute; //分
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = tmp_time_buf.s.second; //秒
|
||
temp_state = FrameGetByte();
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat1;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat2;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat3;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_state.stat4;
|
||
//g_frame_temp_len = 22;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//启动停止测试
|
||
static void frame_func_reply_NB_StartOrStopTest(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if(01 != LcdCheckStateApp())
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
#if WENDU_FANSUAN_OPEN
|
||
FrameClearMsgApp(MsgCaliberate);//清零 单程时间校准校准标志
|
||
GP30_tof_buchang_filter(NOT_ALLOW_CALIBREATE);//这里可以有效预防NB上位机导致表计校准
|
||
#endif
|
||
if(0x01 == *new_message_data_rev_ies) //start
|
||
{
|
||
Gp30StartMeasureApp(1);
|
||
}
|
||
else if(0x00 == *new_message_data_rev_ies) //stop
|
||
{
|
||
Gp30StartMeasureApp(0);
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = *new_message_data_rev_ies;
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//RTC校准
|
||
static void frame_func_reply_NB_RtcCalibtation(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if(0x01 == *new_message_data_rev_ies)
|
||
{
|
||
FrameSetMsgApp(CalibrateRtcMsg);//抛RTC校准msg
|
||
}
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = *new_message_data_rev_ies;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0; //sign + || -:0减 1加
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 200;//data 校准值
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//表计低功耗(测试规约)
|
||
static void frame_func_reply_NB_EnterLowPower(void)
|
||
{
|
||
g_frame_temp_len =0;
|
||
if(0x01 == ((*new_message_data_rev_ies) & 0x01)) //表计低功耗
|
||
{
|
||
if (0x01 == Sys_data_object.P1.start_using_flg) //出厂启用
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
FrameSetMsgApp(LowPowerMsg);//s_struct_msg.MsgStruct.low_power_msg = 1; //抛表计低功耗msg
|
||
if(01 == LcdCheckStateApp()) //检定状态
|
||
{
|
||
FrameSetMsgApp(OutVerificationMsg);//s_struct_msg.MsgStruct.out_verification_msg = 1; //出检定msg
|
||
}
|
||
}
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读功能配置字
|
||
static void frame_func_reply_NB_RdFunctionCfg(void)
|
||
{
|
||
int i=0;
|
||
g_frame_temp_len =0;
|
||
for(i = 0; i<32 ;i++)
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.func_cfg_bytes[i];
|
||
}
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读取始动流量
|
||
static void frame_func_reply_NB_ReadStartFlow(void)
|
||
{
|
||
UNION_2U8TOU16 temp_data;
|
||
g_frame_temp_len =0;
|
||
temp_data.datas = (Sys_data_object.P1.start_flow.datas *(float)250 /(float)65536/DIFTOF_COEFFICIENT*(float)100);//转化为L/h格式;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_data.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = temp_data.datas_map.data1;
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读取逆流计量开关
|
||
static void frame_func_reply_NB_ReadCounterCurrent(void)
|
||
{
|
||
g_frame_temp_len =0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.counter_current_flow.datas_map.data0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.counter_current_flow.datas_map.data1;
|
||
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//硬件自检控制字
|
||
static void frame_func_reply_NB_TestSelf(void)
|
||
{
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
g_frame_temp_len =0;
|
||
SelfTest_Start();
|
||
s_frame_temp_timer_tick = Timer1usGetTick();
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
break;
|
||
case UP_DEAL_S1:
|
||
{
|
||
SelfTest_Proc();//自检流程
|
||
u8 temp_len = SelfTest_GetResult(g_frame_temp_send_buf);
|
||
if(0 != temp_len)
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
g_frame_temp_len = temp_len;
|
||
}
|
||
else if((Timer1usGetTick() - s_frame_temp_timer_tick)>6000000)//6s
|
||
{
|
||
SelfTest_End();
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
//读取时间段SOE记录
|
||
static void frame_func_reply_NB_ReadSoe(void)
|
||
{
|
||
static u8 num_get,num_to_get,num_to_read,totalnum;
|
||
static mtype16_ temp_soe_type;
|
||
static ONE_SOE soe_event_read;
|
||
static DateTime_noweek start_time;
|
||
static DateTime_noweek end_time;
|
||
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
totalnum = 0;
|
||
num_get = 0;
|
||
num_to_read = Sys_data_object.P4.Point_SOE_write;
|
||
temp_soe_type.to_uint8[0] = *(new_message_data_rev_ies); //获取事件代码类型
|
||
temp_soe_type.to_uint8[1] = *(new_message_data_rev_ies+1);
|
||
start_time.s.year = *(new_message_data_rev_ies + 2); //起始时间
|
||
start_time.s.month = *(new_message_data_rev_ies + 3);
|
||
start_time.s.day = *(new_message_data_rev_ies + 4);
|
||
start_time.s.hour = *(new_message_data_rev_ies + 5);
|
||
start_time.s.minute = *(new_message_data_rev_ies + 6);
|
||
start_time.s.second = *(new_message_data_rev_ies + 7);
|
||
|
||
end_time.s.year = *(new_message_data_rev_ies + 8); //结束时间
|
||
end_time.s.month = *(new_message_data_rev_ies + 9);
|
||
end_time.s.day = *(new_message_data_rev_ies + 10);
|
||
end_time.s.hour = *(new_message_data_rev_ies + 11);
|
||
end_time.s.minute = *(new_message_data_rev_ies + 12);
|
||
end_time.s.second = *(new_message_data_rev_ies + 13);
|
||
|
||
num_to_get = *(new_message_data_rev_ies + 14); //读取数量
|
||
if((0 == num_to_get) || (MAX_NUM_READ_SOE <= num_to_get))
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S3;
|
||
}
|
||
else
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S1://读取一条SOE
|
||
{
|
||
if(totalnum >= TOTAL_NUM_SOE)//总共读TOTAL_NUM_SOE次 强制退出不能再读了
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S3;
|
||
break;
|
||
}
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
totalnum++;
|
||
if(num_to_read > TOTAL_NUM_SOE) //防止指针跑飞了
|
||
{
|
||
num_to_read = TOTAL_NUM_SOE;
|
||
}
|
||
if(num_to_read == 0)
|
||
{
|
||
num_to_read = TOTAL_NUM_SOE;
|
||
}
|
||
num_to_read--;
|
||
EepRead(EEP_ADDR_SOE_BASE + (u16)num_to_read*LENGTH_ONE_SOE,(u8*)&soe_event_read,LENGTH_ONE_SOE, &s_nb_eep_complete);
|
||
up_deal_stat_ies = UP_DEAL_S2;
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S2:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//读完了
|
||
{
|
||
if(TRUE == Check_One_Soe(temp_soe_type.to_uint16,&start_time,&end_time,&soe_event_read))//检测到一条有效的SOE
|
||
{
|
||
memcpy(g_frame_temp_send_buf + 1 + (u16)num_get * LENGTH_ONE_SOE,&soe_event_read,LENGTH_ONE_SOE);
|
||
num_get++;
|
||
if(num_get >= num_to_get)//读完了
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S3;
|
||
break;
|
||
}
|
||
}
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S3:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
g_frame_temp_send_buf[0] = num_get;
|
||
g_frame_temp_len = (1 + (u16) num_get * LENGTH_ONE_SOE);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
/*老升级规约不使用
|
||
//升级规约
|
||
static void frame_func_s3_NB_BootLoad(void)
|
||
{
|
||
static u8 s_bootloader_version_flg = 0; //远程升级版本比较结果
|
||
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())
|
||
{
|
||
g_frame_temp_len = 0;
|
||
Sys_data_object.P2.mcu = *(new_message_data_rev_ies); //平台类型
|
||
Sys_data_object.P2.mcu_model = *(new_message_data_rev_ies + 1);//MCU型号
|
||
Sys_data_object.P2.product_model = *(new_message_data_rev_ies + 2);//产品类型
|
||
Sys_data_object.P2.hardware_version = *(new_message_data_rev_ies + 3);//硬件版本
|
||
|
||
if ((Sys_data_object.P2.hardware_version == HARDWARE_VERSION_USED)&&//硬件版本2.0
|
||
(0x22== Sys_data_object.P2.mcu) && //高:0-MIC, 1-ST, 2-HC32; 低:0-水表,1-气表,2-超水,3-超气
|
||
(0x00 == Sys_data_object.P2.mcu_model)&&//0x00--HC32L196
|
||
#if defined(VALVE)
|
||
((BCD2HEX(GP30_APP_DNX)+1) == Sys_data_object.P2.product_model))//产品类型;有阀口径+1
|
||
#else
|
||
(BCD2HEX(GP30_APP_DNX) == Sys_data_object.P2.product_model))//产品类型;表计口径
|
||
#endif
|
||
{
|
||
//软件版本
|
||
fram_tools_writeU32ByBuf(Sys_data_object.P2.soft_version, (new_message_data_rev_ies + 10), 0);
|
||
//升级总字节数
|
||
fram_tools_writeU32ByBuf(Sys_data_object.P2.update_num.data_buf, (new_message_data_rev_ies + 4), 0);
|
||
//升级校验码
|
||
Sys_data_object.P2.update_check.datas_map.data0 = *(new_message_data_rev_ies + 8);
|
||
Sys_data_object.P2.update_check.datas_map.data1 = *(new_message_data_rev_ies + 9);
|
||
//升级标志
|
||
Sys_data_object.P2.bootloader_update_flg = 0x55;
|
||
//升级方式
|
||
if(frame_get_datasource() == UP_SOURCE_IR)//如果是串口
|
||
{
|
||
Sys_data_object.P2.bootloader_datas_sourse = 1;//串口升级
|
||
}
|
||
else if(frame_get_datasource() == UP_SOURCE_NB)//如果是NB通信
|
||
{
|
||
Sys_data_object.P2.bootloader_datas_sourse = 2;//NB升级
|
||
}
|
||
else if(frame_get_datasource() == UP_SOURCE_BLE)//如果是蓝牙
|
||
{
|
||
Sys_data_object.P2.bootloader_datas_sourse = 3;//蓝牙升级
|
||
}
|
||
//包号清0
|
||
Sys_data_object.P2.bootloader_paknum.datas =0;
|
||
//程序破坏标志清0
|
||
Sys_data_object.P2.bootloader_RSSI = 0;
|
||
s_bootloader_version_flg = 0x00;
|
||
FrameSetMsgApp(MsgUpdateSoftVersionCheckOk);
|
||
EepWrite(&Sys_data_object.P2.soft_version[0], EEP_SOFT_VERSION, 17, &s_nb_eep_complete);
|
||
}
|
||
else
|
||
{
|
||
s_bootloader_version_flg = 0x10;
|
||
if (0x22 != Sys_data_object.P2.mcu)
|
||
{
|
||
s_bootloader_version_flg = s_bootloader_version_flg|0x01;
|
||
}
|
||
if(0x00 != Sys_data_object.P2.mcu_model)
|
||
{
|
||
s_bootloader_version_flg = s_bootloader_version_flg|0x02;
|
||
}
|
||
if(Sys_data_object.P2.hardware_version != HARDWARE_VERSION_USED)
|
||
{
|
||
s_bootloader_version_flg = s_bootloader_version_flg|0x04;
|
||
}
|
||
#if defined(VALVE)
|
||
if((BCD2HEX(GP30_APP_DNX)+1) != Sys_data_object.P2.product_model)//产品类型;有阀口径+1
|
||
#else
|
||
if(BCD2HEX(GP30_APP_DNX) != Sys_data_object.P2.product_model)//产品类型;表计口径
|
||
#endif
|
||
{
|
||
s_bootloader_version_flg = s_bootloader_version_flg|0x08;
|
||
}
|
||
}
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
break;
|
||
case UP_DEAL_S1:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据完成
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.mcu;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.mcu_model;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.product_model;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.hardware_version;
|
||
fram_tools_writeU32ByBuf(&g_frame_temp_send_buf[4], Sys_data_object.P2.soft_version, 0);
|
||
g_frame_temp_len +=4;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = s_bootloader_version_flg;
|
||
//g_frame_temp_len = 9;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
break;
|
||
}
|
||
}*/
|
||
//新升级规约
|
||
static void frame_func_s3_NB_diff_BootLoad(void)
|
||
{
|
||
static u8 s_bootloader_version_flg = 0; //远程升级版本比较结果
|
||
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())
|
||
{
|
||
u8 temp_update_access=0;
|
||
g_frame_temp_len = 0;
|
||
Sys_data_object.P2.mcu = *(new_message_data_rev_ies + 0);//平台类型
|
||
Sys_data_object.P2.mcu_model = *(new_message_data_rev_ies + 1);//MCU型号
|
||
Sys_data_object.P2.product_model = *(new_message_data_rev_ies + 2);//产品型号
|
||
Sys_data_object.P2.hardware_version = *(new_message_data_rev_ies + 3);//硬件版本号
|
||
u16 software_version = (AsciiToHex(*(new_message_data_rev_ies + 10))<<12)+
|
||
(AsciiToHex(*(new_message_data_rev_ies + 11))<<8)+
|
||
(AsciiToHex(*(new_message_data_rev_ies + 12))<<4)+
|
||
(AsciiToHex(*(new_message_data_rev_ies + 13))<<0);
|
||
if(Sys_data_object.P2.product_model&0x80)//同版本升级标志位
|
||
{
|
||
if(software_version == (PROGRAME_VERSION>>16))
|
||
{
|
||
Sys_data_object.P2.product_model &= 0x7F;//去掉标志位,兼容已定义产品类型
|
||
temp_update_access =1;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(software_version != (PROGRAME_VERSION>>16))
|
||
{
|
||
temp_update_access =1;
|
||
}
|
||
}
|
||
if ((Sys_data_object.P2.hardware_version == HARDWARE_VERSION_USED)&&//硬件版本2.4
|
||
(0x22== Sys_data_object.P2.mcu) && //高:0-MIC, 1-ST, 2-HC32; 低:0-水表,1-气表,2-超水,3-超气
|
||
(0x00 == Sys_data_object.P2.mcu_model)&&//0x00--HC32L196
|
||
(temp_update_access)&&//版本号防护
|
||
#if defined(VALVE)
|
||
((BCD2HEX(GP30_APP_DNX)+1) == Sys_data_object.P2.product_model))//产品类型;有阀口径+1
|
||
#else
|
||
(BCD2HEX(GP30_APP_DNX) == Sys_data_object.P2.product_model))//产品类型;表计口径
|
||
#endif
|
||
{
|
||
//软件版本
|
||
fram_tools_writeU32ByBuf(Sys_data_object.P2.soft_version, (new_message_data_rev_ies + 10), 0);
|
||
//升级总字节数
|
||
fram_tools_writeU32ByBuf(Sys_data_object.P2.update_num.data_buf, (new_message_data_rev_ies + 4), 0);
|
||
//升级校验码
|
||
Sys_data_object.P2.update_check.datas_map.data0 = *(new_message_data_rev_ies + 8);
|
||
Sys_data_object.P2.update_check.datas_map.data1 = *(new_message_data_rev_ies + 9);
|
||
//升级通道:1-串口;2-coap;3-udp
|
||
Sys_data_object.P2.bootloader_datas_sourse = *(new_message_data_rev_ies + 14);
|
||
//升级标志/方式:1-完整升级;2-差分升级
|
||
if(*(new_message_data_rev_ies + 15) == 2)
|
||
{
|
||
Sys_data_object.P2.bootloader_update_flg = 0x77;//差分升级
|
||
}
|
||
else
|
||
{
|
||
Sys_data_object.P2.bootloader_update_flg = 0x55;//全包升级
|
||
}
|
||
#if UPLOAD_MODE_1
|
||
if(Sys_data_object.P2.bootloader_datas_sourse != 1)//不是串口升级
|
||
{
|
||
setUploadControlPara(UP_BOOT_MSG, Sys_data_object.P2.bootloader_update_flg);//升级功耗计算
|
||
}
|
||
#endif
|
||
|
||
//包号清0
|
||
Sys_data_object.P2.bootloader_paknum.datas =0;
|
||
//程序破坏标志清0
|
||
Sys_data_object.P2.bootloader_RSSI = 0;
|
||
s_bootloader_version_flg = 0x00;
|
||
FrameSetMsgApp(MsgUpdateSoftVersionCheckOk);
|
||
EepWrite(&Sys_data_object.P2.soft_version[0], EEP_SOFT_VERSION, 17, &s_nb_eep_complete);
|
||
}
|
||
else
|
||
{
|
||
s_bootloader_version_flg = 0x10;
|
||
if(software_version == (PROGRAME_VERSION>>16))//版本相同
|
||
{
|
||
s_bootloader_version_flg |= 0x20;
|
||
}
|
||
if (0x22 != Sys_data_object.P2.mcu)
|
||
{
|
||
s_bootloader_version_flg = s_bootloader_version_flg|0x01;
|
||
}
|
||
if(0x00 != Sys_data_object.P2.mcu_model)
|
||
{
|
||
s_bootloader_version_flg = s_bootloader_version_flg|0x02;
|
||
}
|
||
if(Sys_data_object.P2.hardware_version != HARDWARE_VERSION_USED)
|
||
{
|
||
s_bootloader_version_flg = s_bootloader_version_flg|0x04;
|
||
}
|
||
#if defined(VALVE)
|
||
if((BCD2HEX(GP30_APP_DNX)+1) != Sys_data_object.P2.product_model)//产品类型;有阀口径+1
|
||
#else
|
||
if(BCD2HEX(GP30_APP_DNX) != Sys_data_object.P2.product_model)//产品类型;表计口径
|
||
#endif
|
||
{
|
||
s_bootloader_version_flg = s_bootloader_version_flg|0x08;
|
||
}
|
||
}
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
break;
|
||
case UP_DEAL_S1:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据完成
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.mcu;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.mcu_model;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.product_model;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P2.hardware_version;
|
||
fram_tools_writeU32ByBuf(&g_frame_temp_send_buf[4], Sys_data_object.P2.soft_version, 0);
|
||
g_frame_temp_len +=4;
|
||
//升级版本后加升级通道与升级方式
|
||
g_frame_temp_send_buf[g_frame_temp_len++]=Sys_data_object.P2.bootloader_datas_sourse;//升级通道
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = *(new_message_data_rev_ies + 15);
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = s_bootloader_version_flg;
|
||
//g_frame_temp_len = 11;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
if(s_bootloader_version_flg==0)
|
||
{
|
||
FrameSetMsgApp(BootloaderMsg);
|
||
if(01 == LcdCheckStateApp()) //检定状态
|
||
{
|
||
FrameSetMsgApp(OutVerificationMsg);//出检定msg
|
||
}
|
||
}
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
//加密设置通讯地址和无磁兼容
|
||
static void frame_func_s3_NB_SetAddr(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if(0x01 == Sys_data_object.P1.start_using_flg)
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
for (int tmp_i = 0; tmp_i < 7; tmp_i++)
|
||
{
|
||
Sys_data_object.P1.met_addr[tmp_i] = *(new_message_data_rev_ies + tmp_i);
|
||
}
|
||
EepWrite(&Sys_data_object.P1.met_addr[0], EEP_FRAME_MET_ADDR, 7, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
FrameSetMsgApp(MsgAddr_Change);//更新MAC地址
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//写温度系数
|
||
static void frame_func_s3_NB_SetTempratureConefficient(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if(0x01 == Sys_data_object.P1.start_using_flg)
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
fram_tools_writeU32ByBuf(Sys_data_object.P1.temperature_coefficient0.data_buf, (new_message_data_rev_ies + 0), 1);
|
||
fram_tools_writeU32ByBuf(Sys_data_object.P1.temperature_coefficient1.data_buf, (new_message_data_rev_ies + 4), 1);
|
||
EepWrite(&Sys_data_object.P1.temperature_coefficient0.datas_map.data0, EEP_FRAME_TEMPERATURE_COEFFICIENT_ADDR, 8, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//写流量系数 **修改写流量系数限制(0.5-1.5)2019年7月5日
|
||
static void frame_func_s3_NB_SetFowcoefficient(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if(0x01 == Sys_data_object.P1.start_using_flg)
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
UNION_4U8TOU32 flow_small;
|
||
UNION_4U8TOU32 flow_medium0;
|
||
UNION_4U8TOU32 flow_medium1;
|
||
UNION_4U8TOU32 flow_medium2;
|
||
UNION_4U8TOU32 flow_medium3;
|
||
UNION_4U8TOU32 flow_large;
|
||
fram_tools_writeU32ByBuf(flow_small.data_buf, (new_message_data_rev_ies + 0), 0);
|
||
fram_tools_writeU32ByBuf(flow_medium0.data_buf, (new_message_data_rev_ies + 4), 0);
|
||
fram_tools_writeU32ByBuf(flow_medium1.data_buf, (new_message_data_rev_ies + 8), 0);
|
||
fram_tools_writeU32ByBuf(flow_medium2.data_buf, (new_message_data_rev_ies + 12), 0);
|
||
fram_tools_writeU32ByBuf(flow_medium3.data_buf, (new_message_data_rev_ies + 16), 0);
|
||
fram_tools_writeU32ByBuf(flow_large.data_buf, (new_message_data_rev_ies + 20), 0);
|
||
if(( (FLOW_COEFFICIENT_MIN < flow_small.datas) && (flow_small.datas < FLOW_COEFFICIENT_MAX) ) && ( (FLOW_COEFFICIENT_MIN < flow_medium0.datas) && (flow_medium0.datas < FLOW_COEFFICIENT_MAX) )
|
||
&& ( (FLOW_COEFFICIENT_MIN < flow_medium1.datas) && (flow_medium1.datas < FLOW_COEFFICIENT_MAX) ) && ( (FLOW_COEFFICIENT_MIN < flow_medium2.datas) && (flow_medium2.datas < FLOW_COEFFICIENT_MAX) )
|
||
&& ( (FLOW_COEFFICIENT_MIN < flow_medium3.datas) && (flow_medium3.datas < FLOW_COEFFICIENT_MAX) ) && ( (FLOW_COEFFICIENT_MIN < flow_large.datas) && (flow_large.datas < FLOW_COEFFICIENT_MAX) ))
|
||
{
|
||
if(LOW_TYPE==*(new_message_data_rev_ies + 24))
|
||
{
|
||
memcpy(&(cal_flow_coefficient[0].datas_map.data0), new_message_data_rev_ies, 24);
|
||
EepWrite(&(cal_flow_coefficient[0].datas_map.data0), FRAME_FLOW_LOW_COEFFICIENT_ADDR, 24, &s_nb_eep_complete);
|
||
}
|
||
else if(MIDDLE_TYPE==*(new_message_data_rev_ies + 24))
|
||
{
|
||
memcpy(&(cal_flow_coefficient[6].datas_map.data0), new_message_data_rev_ies, 24);
|
||
EepWrite(&(cal_flow_coefficient[6].datas_map.data0), FRAME_FLOW_MIDDLE_COEFFICIENT_ADDR, 24, &s_nb_eep_complete);
|
||
}
|
||
else if(LARGE_TYPE==*(new_message_data_rev_ies + 24))
|
||
{
|
||
memcpy(&(cal_flow_coefficient[12].datas_map.data0), new_message_data_rev_ies, 24);
|
||
EepWrite(&(cal_flow_coefficient[12].datas_map.data0), FRAME_FLOW_HIGH_COEFFICIENT_ADDR, 24, &s_nb_eep_complete);
|
||
}
|
||
else if(ALL_TYPE==*(new_message_data_rev_ies + 24))
|
||
{
|
||
memcpy(&(cal_flow_coefficient[0].datas_map.data0), default_flow_coefficient, sizeof (default_flow_coefficient));
|
||
EepWrite(&(cal_flow_coefficient[0].datas_map.data0), FRAME_FLOW_LOW_COEFFICIENT_ADDR, 72, &s_nb_eep_complete);
|
||
}
|
||
Frame_Para_Init();
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
else
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
//启用关闭检定或红外功能
|
||
static void frame_func_s3_NB_SwitchVerificationOrInfrared(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
Sys_data_object.P1.enable_verification_function = *(new_message_data_rev_ies + 0);
|
||
Sys_data_object.P1.enable_infrared_function = *(new_message_data_rev_ies + 1);
|
||
EepWrite(&Sys_data_object.P1.enable_verification_function, EEP_FRAME_VERIFICATION_FUNCTION_ADDR, 2, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//配置功能
|
||
static void frame_func_s3_NB_CfgFunctioncfg(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
UNION_4U8TOU32 temp_flag_bytes;
|
||
fram_tools_writeU32ByBuf(temp_flag_bytes.data_buf, (new_message_data_rev_ies + 0), 0);
|
||
if (temp_flag_bytes.datas > 0)
|
||
{
|
||
for(int temp_i = 0; temp_i < 32; temp_i++)
|
||
{
|
||
if (0x00000001 == ((temp_flag_bytes.datas >> temp_i) & 0x00000001))
|
||
{
|
||
Sys_data_object.P1.func_cfg_bytes[temp_i] = *(new_message_data_rev_ies + 4 + temp_i);
|
||
}
|
||
}
|
||
EepWrite(&Sys_data_object.P1.func_cfg_bytes[0], EEP_FRAME_FUNCCFGBYTES_ADDR, 32, &s_nb_eep_complete);
|
||
}
|
||
Frame_Para_Init();
|
||
FrameSetMsgApp(MsgBLE_ConfigChange);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//(清)出厂启用
|
||
static void frame_func_s3_NB_SetOrClearUsing_SAcrc(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if (0x01 == *(new_message_data_rev_ies + 0))
|
||
{
|
||
Sys_data_object.P1.start_using_flg = 0x01;
|
||
}
|
||
else if (0x00 == *(new_message_data_rev_ies + 0))
|
||
{
|
||
Sys_data_object.P1.start_using_flg = 0x00;
|
||
}
|
||
else
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
EepWrite(&Sys_data_object.P1.start_using_flg, EEP_FRAME_STARTUSING_ADDR, 1, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
|
||
//设置公共秘钥
|
||
static void frame_func_s3_NB_SetCommonKey(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())
|
||
{
|
||
g_frame_temp_len = 0;
|
||
for(int i = 0; i < 16; i++)
|
||
{
|
||
Sys_data_object.P1.key[i] = *(new_message_data_rev_ies + i);
|
||
}
|
||
EepWrite(&Sys_data_object.P1.key[0], FRAME_NBIot_KEY, 16, &s_nb_eep_complete);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//设置始动流量
|
||
static void frame_func_s3_NB_SetStartFlow(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if (0x01 == Sys_data_object.P1.start_using_flg) //出厂启用
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
UNION_2U8TOU16 temp_flow;
|
||
u16 convert_to_ps;//转为ps
|
||
temp_flow.datas_map.data0 = *(new_message_data_rev_ies + 0);
|
||
temp_flow.datas_map.data1= *(new_message_data_rev_ies + 1);
|
||
convert_to_ps= (temp_flow.datas * (float)10 *DIFTOF_COEFFICIENT);//转化为ps
|
||
if(( convert_to_ps <MIN_FLOW_TO_PS)||( convert_to_ps >MAX_FLOW_TO_PS))
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
temp_flow.datas = ((float)temp_flow.datas/(float)100*DIFTOF_COEFFICIENT*(float)65536/(float)250);//转化为Gp30格式;在Frame_Para_Init做转换
|
||
Sys_data_object.P1.start_flow.datas = temp_flow.datas;
|
||
EepWrite(&Sys_data_object.P1.start_flow.datas_map.data0, EEP_FRAME_START_FLOW_ADDR, 2, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//设置逆流计量方式
|
||
static void frame_func_s3_NB_SetCounterCurrent(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
UNION_2U8TOU16 frame_temp;
|
||
frame_temp.datas_map.data0 = *(new_message_data_rev_ies + 0);
|
||
frame_temp.datas_map.data1= *(new_message_data_rev_ies + 1);
|
||
if((frame_temp.datas !=0x2B1A)&&(frame_temp.datas !=0x4D3C))
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
else if(frame_temp.datas != Sys_data_object.P1.counter_current_flow.datas )
|
||
{
|
||
FrameSetMsgApp(ModelChangeMsg);
|
||
}
|
||
Sys_data_object.P1.counter_current_flow.datas_map.data0 = *(new_message_data_rev_ies + 0);
|
||
Sys_data_object.P1.counter_current_flow.datas_map.data1 = *(new_message_data_rev_ies + 1);
|
||
EepWrite(&Sys_data_object.P1.counter_current_flow.datas_map.data0, EEP_FRAME_COUNTER_CURRENT_FLOW_ADDR, 2, &s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
//设置零流量校准开关
|
||
static void frame_func_s3_NB_SetDiftofCalibration(void)
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())
|
||
{
|
||
UNION_2U8TOU16 frame_temp;
|
||
g_frame_temp_len = 0;
|
||
frame_temp.datas_map.data0 = *(new_message_data_rev_ies + 0);
|
||
frame_temp.datas_map.data1= *(new_message_data_rev_ies + 1);
|
||
if((frame_temp.datas !=0x2B1A)&&(frame_temp.datas !=0x4D3C))//防止下发的数据因为数据异常而发生误判断
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
return;
|
||
}
|
||
if(0x2B1A == frame_temp.datas)//启动校准
|
||
{
|
||
Gp30DiftofCalibration();
|
||
g_diftof_cal_data.s.diftof_calibration_flag.data = DIFTOF_CALIBRATION_FLAG;
|
||
EepWrite(&g_diftof_cal_data.data[0], DIFTOF_CALIBRATION_FLAG_ADDR, sizeof (GP30_DIFTOF_CAL_DATA), &s_nb_eep_complete);
|
||
}
|
||
else
|
||
{
|
||
g_diftof_cal_data.s.diftof_calibration_flag.data =0;//关闭校准
|
||
EepWrite(&g_diftof_cal_data.data[0], DIFTOF_CALIBRATION_FLAG_ADDR, 8, &s_nb_eep_complete);
|
||
}
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
}
|
||
|
||
|
||
//新增规约:读取应急用水量
|
||
static void frame_func_reply_NB_read_emergency(void)
|
||
{
|
||
g_frame_temp_len = 0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.ies_pulse_emergency.data_buf[0];
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.ies_pulse_emergency.data_buf[1];
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
|
||
//新增规约:设置应急用水量
|
||
static void frame_func_reply_NB_set_emergency(void)
|
||
{
|
||
#if (MODULE_BLE_USED)//蓝牙表用配置字设置
|
||
#else
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
s_nb_eep_complete = 0;
|
||
Sys_data_object.P1.ies_pulse_emergency.data_buf[0] = *(new_message_data_rev_ies);
|
||
Sys_data_object.P1.ies_pulse_emergency.data_buf[1] = *(new_message_data_rev_ies + 1);
|
||
EepWrite(&Sys_data_object.P1.ies_pulse_emergency.data_buf[0],ee_addr_compute((u8*)(&Sys_data_object.P1.ies_pulse_emergency.data_buf[0])),2,&s_nb_eep_complete);
|
||
Frame_Para_Init();
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
#endif
|
||
}
|
||
//设置/读取阀控参数
|
||
void ies_set_valve_para2_frame()
|
||
{
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
|
||
{
|
||
g_frame_temp_len = 0;
|
||
if(0xAA == *new_message_data_rev_ies)
|
||
{
|
||
if((*(new_message_data_rev_ies + 1) <= 36) && (*(new_message_data_rev_ies + 1) != 0))
|
||
{
|
||
Sys_data_object.P1.ies_valve_up_times.valve_up_times_pre = *(new_message_data_rev_ies + 1);
|
||
Sys_data_object.P1.ies_valve_up_times.valve_up_times_total = *(new_message_data_rev_ies + 2);
|
||
Sys_data_object.P1.ies_valve_up_times.valve_up_times_realtime = 0;
|
||
}
|
||
Sys_data_object.P1.ies_valve_up_times.valve_auto_check = *(new_message_data_rev_ies + 3);
|
||
EepWrite((u8*)(&Sys_data_object.P1.ies_valve_up_times.valve_up_times_pre),ee_addr_compute((u8*)(&Sys_data_object.P1.ies_valve_up_times.valve_up_times_pre)),4,&s_nb_eep_complete);
|
||
}
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S1:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM完成
|
||
{
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.ies_valve_up_times.valve_up_times_pre;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.ies_valve_up_times.valve_up_times_total;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.ies_valve_up_times.valve_auto_check;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = Sys_data_object.P1.ies_valve_up_times.valve_up_times_realtime;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
g_frame_temp_send_buf[g_frame_temp_len++] = 0;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = TRUE;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = TRUE;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
void frame_factory_test_upload(void)//新增规约:设置厂区发起上传测试
|
||
{
|
||
FrameSetMsgApp(Msg_FactoryUpload);
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
}
|
||
//读历史数据---日冻结
|
||
static void frame_func_reply_NB_ReadHistoryData_Daily(void)
|
||
{
|
||
u8 temp = 0;
|
||
u8 temp_read_index = 0;
|
||
u8 temp_read_code = *new_message_data_rev_ies;
|
||
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//读取历史数据
|
||
{
|
||
g_frame_temp_len =0;
|
||
temp_read_index = get_QZ_StorePara(QZ_StoreCurIndex_Daily);
|
||
if (temp_read_index >= temp_read_code)
|
||
{
|
||
temp = temp_read_index - temp_read_code;
|
||
}
|
||
else
|
||
{
|
||
temp = 100 - (temp_read_code - temp_read_index);
|
||
}
|
||
EepRead((EEP_ADDR_QZ_STORE_DAY +(temp*128)), g_frame_temp_send_buf, 128, &s_nb_eep_complete);
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
break;
|
||
case UP_DEAL_S1:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//读取历史数据完成
|
||
{
|
||
g_frame_temp_len = 128;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
//读历史数据---月冻结
|
||
static void frame_func_reply_NB_ReadHistoryData_Month(void)
|
||
{
|
||
u8 temp = 0;
|
||
u8 temp_read_index = 0;
|
||
u8 temp_read_code = *new_message_data_rev_ies;
|
||
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//读取历史数据
|
||
{
|
||
g_frame_temp_len =0;
|
||
temp_read_index = get_QZ_StorePara(QZ_StoreCurIndex_Month);
|
||
if (temp_read_index >= temp_read_code)
|
||
{
|
||
temp = temp_read_index - temp_read_code;
|
||
}
|
||
else
|
||
{
|
||
temp = 24 - (temp_read_code - temp_read_index);
|
||
}
|
||
EepRead((EEP_ADDR_QZ_STORE_MONTH +(temp*6)), g_frame_temp_send_buf, 6, &s_nb_eep_complete);
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S1:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//读取历史数据完成
|
||
{
|
||
g_frame_temp_len = 6;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
//读取任意EEPROM数据
|
||
static void ies_read_eeprom_data_frame(void)
|
||
{
|
||
mtype16_ read_eeprom_address;
|
||
static u8 read_eeprom_length;
|
||
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())
|
||
{
|
||
g_frame_temp_len =0;
|
||
read_eeprom_address.to_uint8[BYTE_L] = *(new_message_data_rev_ies + 0);
|
||
read_eeprom_address.to_uint8[BYTE_H] = *(new_message_data_rev_ies + 1);
|
||
read_eeprom_length = *(new_message_data_rev_ies + 2);
|
||
|
||
EepRead(read_eeprom_address.to_uint16, g_frame_temp_send_buf, read_eeprom_length, &s_nb_eep_complete);
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S1:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//读EEPROM完成
|
||
{
|
||
g_frame_temp_len = read_eeprom_length;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = TRUE;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
//写任意EEPROM数据
|
||
static void ies_write_eeprom_data_frame(void)
|
||
{
|
||
switch(up_deal_stat_ies)
|
||
{
|
||
case UP_DEAL_S0:
|
||
{
|
||
if( ('i' == *(new_message_data_rev_ies + 0)) && ('e' == *(new_message_data_rev_ies + 1))
|
||
&& ('s' == *(new_message_data_rev_ies + 2)) )
|
||
{
|
||
g_frame_temp_len =0;
|
||
write_eeprom_address.to_uint8[BYTE_L] = *(new_message_data_rev_ies + 3);
|
||
write_eeprom_address.to_uint8[BYTE_H] = *(new_message_data_rev_ies + 4);
|
||
write_eeprom_length = *(new_message_data_rev_ies + 5);
|
||
|
||
if((write_eeprom_address.to_uint16 > EE_ADDR_MAX) || (write_eeprom_length > 8))//最多一次写8个字节
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S3;
|
||
}
|
||
else
|
||
{
|
||
for (u8 i = 0; i < write_eeprom_length; i++)
|
||
{
|
||
g_frame_temp_send_buf[i] = *(new_message_data_rev_ies + 6 + i);
|
||
}
|
||
up_deal_stat_ies = UP_DEAL_S1;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S3;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S1:
|
||
{
|
||
if(TASK_IDLE == EepIfIdle())//写EEPROM
|
||
{
|
||
EepWrite(g_frame_temp_send_buf, write_eeprom_address.to_uint16, write_eeprom_length, &s_nb_eep_complete);
|
||
up_deal_stat_ies = UP_DEAL_S2;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S2:
|
||
{
|
||
if(TASK_IDLE == EeReadImportantDataIfIdle()) //写EEPROM完成
|
||
{
|
||
set_important_data_rd_state(); //写完后读取重要数据
|
||
up_deal_stat_ies = UP_DEAL_S3;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case UP_DEAL_S3:
|
||
{
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = TRUE;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
//读RAM数据
|
||
static void ies_read_ram_frame (void)
|
||
{
|
||
mtype32_ read_RAM_address;
|
||
u8 read_RAM_length;
|
||
u8 *ram_data;
|
||
|
||
read_RAM_address.to_uint8[WORD_L] = *(new_message_data_rev_ies + 0);
|
||
read_RAM_address.to_uint8[WORD_M] = *(new_message_data_rev_ies + 1);
|
||
read_RAM_address.to_uint8[WORD_H] = *(new_message_data_rev_ies + 2);
|
||
read_RAM_address.to_uint8[WORD_P] = *(new_message_data_rev_ies + 3);
|
||
|
||
read_RAM_length = *(new_message_data_rev_ies + 4);
|
||
ram_data = (u8*)read_RAM_address.to_uint32;
|
||
|
||
for(u8 i = 0; i < read_RAM_length; i++)
|
||
{
|
||
g_frame_temp_send_buf[i] = *(ram_data + i);
|
||
}
|
||
g_frame_temp_len = read_RAM_length;
|
||
task_complete_ies = PTL_PACK_SUCCESS;
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
/************************************************************************************************************/
|
||
//积成规约表地址判断
|
||
u8 check_met_addr_IES(u8 *p_buf,u8 *des_buf)
|
||
{
|
||
u8 tmp_i;
|
||
for (tmp_i = 0; tmp_i < 7; tmp_i++)
|
||
{
|
||
if (*(p_buf + 2 +tmp_i) != *(des_buf + tmp_i))
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
if(tmp_i >= 6)
|
||
{
|
||
return SUCCESS_IES;
|
||
}
|
||
if( (FM_READ_ADDR_ARGUMENT_CTRL == *(p_buf+9))
|
||
||(FM_ENC_SET_ADDR_ARGUMENT_CTRL == *(p_buf+9)))//读写表地址
|
||
{
|
||
for(tmp_i=0;tmp_i < 7;tmp_i++)
|
||
{
|
||
if(0xAA != *(p_buf + 2 + tmp_i))//广播读地址
|
||
break;
|
||
}
|
||
}
|
||
if((FM_BOOTLOADER_ARGUMENT_CTRL==*(p_buf+9))||(FM_BOOTLOADER_NEW_ARGUMENT_CTRL==*(p_buf+9)))
|
||
{
|
||
for(tmp_i=0;tmp_i < 7;tmp_i++)
|
||
{
|
||
if((0x00 != *(p_buf + 2 + tmp_i))&&(*(p_buf + 2 +tmp_i) != *(des_buf + tmp_i)))//升级指令下发0地址
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if(tmp_i >= 7)
|
||
{
|
||
return SUCCESS_IES;
|
||
}
|
||
return ERROR_IES;
|
||
}
|
||
|
||
|
||
//解积成规约
|
||
u8 crack_frame_IES_Base(u16 frame_lenth,u8 *frame_buffer, STRUCT_FRAME_IES* pFrameIES)
|
||
{
|
||
u16 tmp_i = 0;
|
||
u16 tmp_j = 0;
|
||
u8 tmp_check = 0;
|
||
|
||
for (tmp_i = 0; tmp_i < frame_lenth; tmp_i++)
|
||
{
|
||
if (FM_HEAD_MARK == *(frame_buffer + tmp_i))
|
||
{
|
||
if (MET_TYPE == *(frame_buffer + tmp_i + 1))
|
||
{
|
||
pFrameIES->head_site = tmp_i; //记录帧头
|
||
pFrameIES->sta = *(frame_buffer + tmp_i + 10);//增加一个字节的状态字,bit0为1时表示加密,即01H表示加密,bit1为1时表示主动上传,其他bit位预留
|
||
pFrameIES->len = *(frame_buffer + tmp_i + 11);//数据长度
|
||
pFrameIES->end_site = pFrameIES->head_site + pFrameIES->len + 13;
|
||
pFrameIES->check_len = pFrameIES->end_site - pFrameIES->head_site - 1;
|
||
|
||
//检测数据帧是否有效
|
||
if ((pFrameIES->end_site < frame_lenth) && (FM_END_MARK == *(frame_buffer + pFrameIES->end_site)))
|
||
{
|
||
//s_frame_flag_IES.enc_reply_flg = 0;
|
||
pFrameIES->ctrl = *(frame_buffer + pFrameIES->head_site + 9);
|
||
for (tmp_j = 0; tmp_j < 7; tmp_j++)
|
||
{
|
||
check_addr[tmp_j] = Sys_data_object.P1.met_addr[tmp_j];
|
||
}
|
||
//计算校验和
|
||
for (tmp_j = pFrameIES->head_site; tmp_j < (pFrameIES->end_site - 1); tmp_j++)
|
||
{
|
||
tmp_check += *(frame_buffer + tmp_j);
|
||
}
|
||
if (tmp_check == *(frame_buffer + pFrameIES->end_site - 1))
|
||
{
|
||
if((SS_SET_COMMON_KEY_CTRL == frame_struct_IES.ctrl) || (SS_RD_COMMON_KEY_CTRL == frame_struct_IES.ctrl))//需要超级密钥解码
|
||
{
|
||
for (int tmp_j = 0; tmp_j < 16; tmp_j++)
|
||
{
|
||
key[tmp_j] = super_key[tmp_j];
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (int tmp_j = 0; tmp_j < 16; tmp_j++)
|
||
{
|
||
key[tmp_j] = Sys_data_object.P1.key[tmp_j];
|
||
}
|
||
}
|
||
if (SUCCESS_IES == check_met_addr_IES(frame_buffer + pFrameIES->head_site, check_addr)) //检查指令包含的地址和本表地址是否相同,相同返回1,不同返回0
|
||
{
|
||
if((pFrameIES->sta & 0x01) == 0x01)//判断是否为加密规约
|
||
{
|
||
//还原成明文规约:解密,修改加密标志
|
||
AES_decrypt(frame_buffer+pFrameIES->head_site +12, *(frame_buffer+pFrameIES->head_site +11),key);
|
||
//非加密校验和
|
||
tmp_check = 0;
|
||
for (tmp_j = pFrameIES->head_site; tmp_j < (pFrameIES->end_site - 1); tmp_j++)
|
||
{
|
||
tmp_check += *(frame_buffer + tmp_j);
|
||
}
|
||
*(frame_buffer + pFrameIES->end_site - 1) = tmp_check;
|
||
}
|
||
pFrameIES->sta &= 0xFD; //表示非主动上传(bit1为1时表示主动上传,0表示应答)
|
||
pFrameIES->DI0 = *(frame_buffer + pFrameIES->head_site + 12);
|
||
pFrameIES->DI1 = *(frame_buffer + pFrameIES->head_site + 13);
|
||
pFrameIES->serial_num0 = *(frame_buffer + pFrameIES->head_site + 14);
|
||
pFrameIES->serial_num1 = *(frame_buffer + pFrameIES->head_site + 15);
|
||
return SUCCESS_IES;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return ERROR_IES;
|
||
}
|
||
|
||
u8 crack_frame_IES(u16 frame_lenth,u8 *in_frame_buffer)
|
||
{
|
||
memcpy(frame_buffer, in_frame_buffer, frame_lenth);
|
||
u8 temp_res = crack_frame_IES_Base(frame_lenth, frame_buffer, &frame_struct_IES);
|
||
if(temp_res == SUCCESS_IES)
|
||
{
|
||
if(
|
||
(frame_struct_IES.ctrl == SS_TERNAL_RESTART_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_LCD_DISPLAY_CTRL)||
|
||
(frame_struct_IES.ctrl == READ_IP_PORT_CTRL)||
|
||
(frame_struct_IES.ctrl == SMS_UPLOAD_CTRL)||
|
||
(frame_struct_IES.ctrl == VALVE_CONTROL_CTRL)||
|
||
(frame_struct_IES.ctrl == READ_SIGNAL_INTENSITY_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_READ_THRESHOLD_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_READ_START_END_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_READ_STEPLENGTH_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_READ_TIME_FREQUENCY_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_READ_RETRY_COUNT_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_READ_REPORTING_FREQUENCY_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_READ_REPORTSTARTTIME_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_RD_APN_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_RD_COMMON_KEY_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_UNIFIED_READ_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_READ_IMEI_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_MAC_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_ENC_WRITE_INITVALUE_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_SWVERSION_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_OUT_VERIFICATIONSTATE_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_ENC_READ_DATA_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_SERIALNUM_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_CALIBRATE_TIME_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_ADDR_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_CLEAR_METERDATA_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_FLOWCOEFFICIENT_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_SET_VERIFICATIONSTATE_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_TEMPERATURECOEFFICIENT_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_VERIFICATIONDATA_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_INSTANTANEOUSFLOW_AND_TEMPERATURE_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_START_OR_STOP_TEST_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_RTC_CALIBTATION_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_ENTER_LOWPOWER_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_RD_FUNCTIONCFG_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_START_FLOW_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_COUNTER_CURRENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_TEST_SLEF_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_READ_RETRY_TIME_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_BOOTLOADER_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_BOOTLOADER_NEW_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_ENC_SET_ADDR_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_SET_TEMPERATURECOEFFICIENT_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_SET_FLOWCOEFFICIENT_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_SWITCH_VERIFICATION_OR_INFRARED_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_CFG_FUNCTIONCFG_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_START_OR_CLEAR_USING_ARGUMENT_CTRL)||
|
||
(frame_struct_IES.ctrl == WRITE_IP_PORT_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_UNIFIED_SETTINGS_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_THRESHOLD_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_START_END_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_STEPLENGTH_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_RETRY_COUNT_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_REPORTING_FREQUENCY_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_REPORTSTARTTIME_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_APN_CTRL)||
|
||
(frame_struct_IES.ctrl == SS_SET_COMMON_KEY_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_SET_START_FLOW_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_SET_COUNTER_CURRENT_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_SET_DIFTOF_CALIBRATION_CTRL)||
|
||
(frame_struct_IES.ctrl == FM_SET_RETRY_TIME_CTRL)||
|
||
(frame_struct_IES.ctrl == IES_NEW_ADD_FRAME_CTRL)||
|
||
((frame_struct_IES.ctrl == SS_READ_HIS_CTRL)&&(frame_struct_IES.DI1==QZ_READ_HIS_DAILY_CTRL_ID1))||
|
||
((frame_struct_IES.ctrl == SS_READ_HIS_CTRL)&&(frame_struct_IES.DI1==QZ_READ_HIS_MONTH_CTRL_ID1))||
|
||
(frame_struct_IES.ctrl == RD_RAM_CTRL)
|
||
)
|
||
{
|
||
new_message_data_rev_ies = frame_buffer + frame_struct_IES.head_site + 16;
|
||
FrameSetMsgApp(MsgNb_FlagRcvNbFrame); //收到的不是应答帧时置位
|
||
return SUCCESS_IES;
|
||
}
|
||
else if(frame_struct_IES.ctrl == SHORT_ACK_UPLOAD_CTRL)
|
||
{
|
||
if(UPLOAD_TYPE_FRAME_ORDER == GetEventUploadType())//生产上报
|
||
{
|
||
return SUCCESS_IES;
|
||
}
|
||
}
|
||
}
|
||
return ERROR_IES;
|
||
}
|
||
|
||
|
||
//积成规约处理
|
||
u8 up_deal_code_ies(void)
|
||
{
|
||
task_complete_ies = PTL_PACK_BUSY;
|
||
switch(frame_struct_IES.ctrl)
|
||
{
|
||
#if (MODULE_BLE_USED)
|
||
#else
|
||
case READ_IP_PORT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadIpPort();
|
||
frame_struct_IES.ack_ctrl = ACK_READ_IP_PORT_CTRL;
|
||
}
|
||
break;
|
||
case SMS_UPLOAD_CTRL:
|
||
{
|
||
frame_func_reply_NB_Upload();
|
||
frame_struct_IES.ack_ctrl = ACK_SMS_UPLOAD_CTRL;
|
||
}
|
||
break;
|
||
case READ_SIGNAL_INTENSITY_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadSignal();
|
||
frame_struct_IES.ack_ctrl = ACK_READ_SIGNAL_INTENSITY_CTRL;
|
||
}
|
||
break;
|
||
case SS_READ_THRESHOLD_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadThreshole();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_THRESHOLD_CTRL;
|
||
}
|
||
break;
|
||
case SS_READ_START_END_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadStartEnd();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_START_END_CTRL;
|
||
}
|
||
break;
|
||
case SS_READ_STEPLENGTH_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadStepLength();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_STEPLENGTH_CTRL;
|
||
}
|
||
break;
|
||
// case SS_READ_TIME_FREQUENCY_CTRL:
|
||
// {
|
||
// frame_func_reply_NB_TimeFrequency();
|
||
// frame_struct_IES.ack_ctrl = SS_ACK_READ_TIME_FREQUENCY_CTRL;
|
||
// }
|
||
// break;
|
||
case SS_READ_RETRY_COUNT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadRetryCount();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_RETRY_COUNT_CTRL;
|
||
}
|
||
break;
|
||
case SS_READ_REPORTING_FREQUENCY_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadReportingFrequency();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_REPORTING_FREQUENCY_CTRL;
|
||
}
|
||
break;
|
||
case SS_READ_REPORTSTARTTIME_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadReportStartTime();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_REPORTSTARTTIME_CTRL;
|
||
}
|
||
break;
|
||
case SS_RD_APN_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadApn();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_RDT_APN_CTRL;
|
||
}
|
||
break;
|
||
// case SS_RD_COMMON_KEY_CTRL:
|
||
// {
|
||
// frame_func_reply_NB_ReadCommonKey();
|
||
// frame_struct_IES.ack_ctrl = ACK_SS_RD_COMMON_KEY_CTRL;
|
||
// }
|
||
// break;
|
||
case SS_UNIFIED_READ_CTRL:
|
||
{
|
||
frame_func_reply_NB_UnifiedRead();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_UNIFIED_READ_CTRL;
|
||
}
|
||
break;
|
||
case SS_READ_IMEI_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadImei();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_IMEI_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_RETRY_TIME_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadRetryTime();
|
||
frame_struct_IES.ack_ctrl = FM_READ_RETRY_TIME_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case WRITE_IP_PORT_CTRL:
|
||
{
|
||
frame_func_s3_NB_WriteIpPort();;
|
||
frame_struct_IES.ack_ctrl = ACK_WRTIE_IP_PORT_CTRL;
|
||
}
|
||
break;
|
||
case SS_UNIFIED_SETTINGS_CTRL:
|
||
{
|
||
frame_func_s3_NB_Unified_Setting();;
|
||
frame_struct_IES.ack_ctrl = SS_ACK_UNIFIED_SETTINGS_CTRL;
|
||
}
|
||
break;
|
||
case SS_SET_THRESHOLD_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetThreshold();;
|
||
frame_struct_IES.ack_ctrl = SS_ACK_SET_THRESHOLD_CTRL;
|
||
}
|
||
break;
|
||
case SS_SET_START_END_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetStartEnd();;
|
||
frame_struct_IES.ack_ctrl = SS_ACK_SET_START_END_CTRL;
|
||
}
|
||
break;
|
||
case SS_SET_STEPLENGTH_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetSteplength();;
|
||
frame_struct_IES.ack_ctrl = SS_ACK_SET_STEPLENGTH_CTRL;
|
||
}
|
||
break;
|
||
case SS_SET_RETRY_COUNT_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetRetryCount();;
|
||
frame_struct_IES.ack_ctrl = SS_ACK_SET_RETRY_COUNT_CTRL;
|
||
}
|
||
break;
|
||
case SS_SET_REPORTING_FREQUENCY_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetReportingFrequency();;
|
||
frame_struct_IES.ack_ctrl = SS_ACK_SET_REPORTING_FREQUENCY_CTRL;
|
||
}
|
||
break;
|
||
case SS_SET_REPORTSTARTTIME_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetReportStartTime();;
|
||
frame_struct_IES.ack_ctrl = SS_ACK_SET_REPORTSTARTTIME_CTRL;
|
||
}
|
||
break;
|
||
case SS_SET_APN_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetApn();;
|
||
frame_struct_IES.ack_ctrl = SS_ACK_SET_APN_CTRL;
|
||
}
|
||
break;
|
||
case FM_SET_RETRY_TIME_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetRetryTime();;
|
||
frame_struct_IES.ack_ctrl = FM_SET_RETRY_TIME_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case SHORT_ACK_UPLOAD_CTRL:
|
||
{
|
||
frame_func_reply_NB_AckUploadShort();
|
||
}
|
||
break;
|
||
#endif
|
||
case SS_TERNAL_RESTART_CTRL:
|
||
{
|
||
frame_func_reply_NB_TernalRestart();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_TERNAL_RESTART_CTRL;
|
||
}
|
||
break;
|
||
case SS_SET_LCD_DISPLAY_CTRL:
|
||
{
|
||
frame_func_reply_NB_SetLcdDisplay();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_SET_LCD_DISPLAY_CTRL;
|
||
}
|
||
break;
|
||
case VALVE_CONTROL_CTRL:
|
||
{
|
||
frame_func_reply_NB_ValveControl();
|
||
frame_struct_IES.ack_ctrl = ACK_VALVE_CONTROL_CTRL;
|
||
}
|
||
break;
|
||
case SS_READ_TIME_FREQUENCY_CTRL:
|
||
{
|
||
frame_func_reply_NB_TimeFrequency();
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_TIME_FREQUENCY_CTRL;
|
||
}
|
||
break;
|
||
case SS_RD_COMMON_KEY_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadCommonKey();
|
||
frame_struct_IES.ack_ctrl = ACK_SS_RD_COMMON_KEY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_MAC_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadMac();
|
||
frame_struct_IES.ack_ctrl = FM_READ_MAC_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_ENC_WRITE_INITVALUE_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_WriteInitValue();
|
||
frame_struct_IES.ack_ctrl = FM_ENC_WRITE_INITVALUE_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_SWVERSION_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadSwVersion();
|
||
frame_struct_IES.ack_ctrl = FM_READ_SWVERSION_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_OUT_VERIFICATIONSTATE_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_OutVerificationState();
|
||
frame_struct_IES.ack_ctrl = FM_OUT_VERIFICATIONSTATE_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_ENC_READ_DATA_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadData();
|
||
frame_struct_IES.ack_ctrl = FM_ENC_READ_DATA_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_SERIALNUM_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadSerialnum();
|
||
frame_struct_IES.ack_ctrl = FM_READ_SERIALNUM_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_CALIBRATE_TIME_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_CalibrateTime();
|
||
frame_struct_IES.ack_ctrl = FM_CALIBRATE_TIME_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_ADDR_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadAddr();
|
||
frame_struct_IES.ack_ctrl = FM_READ_ADDR_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_CLEAR_METERDATA_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ClearMeterData();
|
||
frame_struct_IES.ack_ctrl = FM_CLEAR_METERDATA_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_FLOWCOEFFICIENT_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadFlowCoefficient();
|
||
frame_struct_IES.ack_ctrl = FM_READ_FLOWCOEFFICIENT_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_SET_VERIFICATIONSTATE_ARGUMENT_CTRL:
|
||
{
|
||
if(FM_SET_VERIFICATIONSTATE_TOOL_DI1 == frame_struct_IES.DI1)
|
||
{
|
||
frame_func_reply_TOOL_SetVerification();
|
||
}
|
||
else
|
||
{
|
||
frame_func_reply_NB_SetVerification();
|
||
}
|
||
frame_struct_IES.ack_ctrl = FM_SET_VERIFICATIONSTATE_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_TEMPERATURECOEFFICIENT_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadTemperatureCoefficient();
|
||
frame_struct_IES.ack_ctrl = FM_READ_TEMPERATURECOEFFICIENT_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_VERIFICATIONDATA_ARGUMENT_CTRL:
|
||
{
|
||
if(FM_READ_VERIFICATIONDATA_TOOL_DI1 == frame_struct_IES.DI1)
|
||
{
|
||
frame_func_reply_TOOL_ReadVerificationData();
|
||
}
|
||
else
|
||
{
|
||
frame_func_reply_NB_ReadVerificationData();
|
||
}
|
||
frame_struct_IES.ack_ctrl = FM_READ_VERIFICATIONDATA_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_INSTANTANEOUSFLOW_AND_TEMPERATURE_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadInstantFlowAndTemperature();
|
||
frame_struct_IES.ack_ctrl = FM_READ_INSTANTANEOUSFLOW_AND_TEMPERATURE_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_START_OR_STOP_TEST_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_StartOrStopTest();
|
||
frame_struct_IES.ack_ctrl = FM_START_OR_STOP_TEST_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_RTC_CALIBTATION_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_RtcCalibtation();
|
||
frame_struct_IES.ack_ctrl = FM_RTC_CALIBTATION_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_ENTER_LOWPOWER_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_EnterLowPower();
|
||
frame_struct_IES.ack_ctrl = FM_ENTER_LOWPOWER_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_RD_FUNCTIONCFG_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_RdFunctionCfg();
|
||
frame_struct_IES.ack_ctrl = FM_RD_FUNCTIONCFG_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_START_FLOW_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadStartFlow();
|
||
frame_struct_IES.ack_ctrl = FM_READ_START_FLOW_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_READ_COUNTER_CURRENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_ReadCounterCurrent();
|
||
frame_struct_IES.ack_ctrl = FM_READ_COUNTER_CURRENT_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_TEST_SLEF_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_reply_NB_TestSelf();
|
||
frame_struct_IES.ack_ctrl = FM_TEST_SLEF_REPLY_CTRL;
|
||
}
|
||
break;
|
||
|
||
/*case FM_BOOTLOADER_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_s3_NB_BootLoad();
|
||
frame_struct_IES.ack_ctrl = FM_BOOTLOADER_REPLY_CTRL;
|
||
}
|
||
break;*/
|
||
case FM_BOOTLOADER_NEW_ARGUMENT_CTRL:
|
||
{
|
||
if((frame_struct_IES.DI0 == SET_RD_VALVE_PARA2_CTRL_DI0) && (frame_struct_IES.DI1 == SET_RD_VALVE_PARA2_CTRL_DI1))//检验数据ID
|
||
{
|
||
ies_set_valve_para2_frame();
|
||
frame_struct_IES.ack_ctrl = ACK_SET_RD_VALVE_PARA2_CTRL;
|
||
}
|
||
else if((frame_struct_IES.DI0 == FM_BOOTLOADER_NEW_DI0) && (frame_struct_IES.DI1 == FM_BOOTLOADER_NEW_DI1))
|
||
{
|
||
frame_func_s3_NB_diff_BootLoad();
|
||
frame_struct_IES.ack_ctrl = FM_BOOTLOADER_NEW_REPLY_CTRL;
|
||
}
|
||
}
|
||
break;
|
||
case FM_ENC_SET_ADDR_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetAddr();;
|
||
frame_struct_IES.ack_ctrl = FM_ENC_SET_ADDR_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_SET_TEMPERATURECOEFFICIENT_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetTempratureConefficient();;
|
||
frame_struct_IES.ack_ctrl = FM_SET_TEMPERATURECOEFFICIENT_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_SET_FLOWCOEFFICIENT_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetFowcoefficient();;
|
||
frame_struct_IES.ack_ctrl = FM_SET_FLOWCOEFFICIENT_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_SWITCH_VERIFICATION_OR_INFRARED_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_s3_NB_SwitchVerificationOrInfrared();;
|
||
frame_struct_IES.ack_ctrl = FM_SWITCH_VERIFICATION_OR_INFRARED_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_CFG_FUNCTIONCFG_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_s3_NB_CfgFunctioncfg();;
|
||
frame_struct_IES.ack_ctrl = FM_CFG_FUNCTIONCFG_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_START_OR_CLEAR_USING_ARGUMENT_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetOrClearUsing_SAcrc();;
|
||
frame_struct_IES.ack_ctrl = FM_START_OR_CLEAR_USING_REPLY_CTRL;
|
||
}
|
||
break;
|
||
|
||
case SS_SET_COMMON_KEY_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetCommonKey();;
|
||
frame_struct_IES.ack_ctrl = ACK_SS_SET_COMMON_KEY_CTRL;
|
||
}
|
||
break;
|
||
case FM_SET_START_FLOW_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetStartFlow();;
|
||
frame_struct_IES.ack_ctrl = FM_SET_START_FLOW_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_SET_COUNTER_CURRENT_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetCounterCurrent();;
|
||
frame_struct_IES.ack_ctrl = FM_SET_COUNTER_CURRENT_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case FM_SET_DIFTOF_CALIBRATION_CTRL:
|
||
{
|
||
frame_func_s3_NB_SetDiftofCalibration();;
|
||
frame_struct_IES.ack_ctrl = FM_SET_DIFTOF_CALIBRATION_REPLY_CTRL;
|
||
}
|
||
break;
|
||
case SS_READ_HIS_CTRL:
|
||
{
|
||
switch(frame_struct_IES.DI1)
|
||
{
|
||
case QZ_READ_HIS_DAILY_CTRL_ID1://日冻结
|
||
{
|
||
frame_func_reply_NB_ReadHistoryData_Daily();
|
||
}
|
||
break;
|
||
case QZ_READ_HIS_MONTH_CTRL_ID1://月冻结
|
||
{
|
||
frame_func_reply_NB_ReadHistoryData_Month();
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
}
|
||
frame_struct_IES.ack_ctrl = SS_ACK_READ_HIS_CTRL;
|
||
}
|
||
break;
|
||
case RD_RAM_CTRL:
|
||
{
|
||
ies_read_ram_frame();;
|
||
frame_struct_IES.ack_ctrl = ACK_RD_RAM_CTRL;
|
||
}
|
||
break;
|
||
case IES_NEW_ADD_FRAME_CTRL:
|
||
{
|
||
if(COM_WATER_ID1_0x10 == frame_struct_IES.DI1) //数据标识1统一为x010
|
||
{
|
||
switch(frame_struct_IES.DI0)
|
||
{
|
||
case READ_EEPROM_DATA_ID0://读EEPROM
|
||
{
|
||
ies_read_eeprom_data_frame();
|
||
}
|
||
break;
|
||
case WRITE_EEPROM_DATA_ID0://写EEPROM
|
||
{
|
||
ies_write_eeprom_data_frame();
|
||
}
|
||
break;
|
||
case SET_UDP_IP_PORT_ID0://设置udp
|
||
{
|
||
frame_func_s3_NB_WriteUdpIpPort();
|
||
}
|
||
break;
|
||
case READ_UDP_IP_PORT_ID0: // 读取UDP模式IP
|
||
{
|
||
frame_func_reply_NB_ReadUdpIpPort();
|
||
}
|
||
break;
|
||
case READ_TIMES_SOE_ID0:
|
||
{
|
||
frame_func_reply_NB_ReadSoe();
|
||
}
|
||
break;
|
||
case SET_EMERGENCY_NUM_ID0:
|
||
{
|
||
frame_func_reply_NB_set_emergency();
|
||
}
|
||
break;
|
||
case READ_EMERGENCY_NUM_ID0:
|
||
{
|
||
frame_func_reply_NB_read_emergency();
|
||
}
|
||
break;
|
||
case FACTORY_TEST_UPLOAD_ID0: //厂区测试上传
|
||
{
|
||
frame_factory_test_upload();
|
||
}
|
||
break;
|
||
case READ_BATERY_PARA:
|
||
{
|
||
frame_func_reply_NB_read_battery();
|
||
}
|
||
break;
|
||
case CLEAR_BATERY_PARA:
|
||
{
|
||
frame_func_reply_NB_read_batteryinit();
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
frame_struct_IES.ack_ctrl = ACK_IES_NEW_ADD_FRAME_CTRL;;
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
task_complete_ies = PTL_PACK_FAIL;
|
||
}
|
||
break;
|
||
}
|
||
return task_complete_ies;
|
||
}
|
||
void Frame_ResetDealState_Ies(void)
|
||
{
|
||
up_deal_stat_ies = UP_DEAL_S0;
|
||
}
|
||
|
||
/****************************************************************以下主动上报数据的处理*********************************************/
|
||
//NB发送数据组帧
|
||
void Frame_ack_IesBase(STRUCT_FRAME_IES temp_struct, u8* p_temp_buf, u16 p_temp_len, u8* p_send_buf, u16* p_send_len)
|
||
{
|
||
int i = 0;
|
||
UNION_2U8TOU16 temp_pack_len;
|
||
|
||
p_send_buf[0] = 0xFE;
|
||
p_send_buf[1] = 0xFE;
|
||
p_send_buf[2] = FM_HEAD_MARK;
|
||
p_send_buf[3] = MET_TYPE;
|
||
for (i = 0; i < 7; i++)
|
||
{
|
||
p_send_buf[4 + i] = Sys_data_object.P1.met_addr[i];
|
||
}
|
||
p_send_buf[11] = temp_struct.ack_ctrl;
|
||
p_send_buf[12] = temp_struct.sta;//sta 0x40标识主动上传帧 0x80 位加密帧 0xc0为加密的主动上传帧
|
||
if(p_temp_len <= (0xFF-4))
|
||
{
|
||
p_send_buf[13] = p_temp_len+4;//l
|
||
p_send_buf[14] = temp_struct.DI0; //DI0
|
||
p_send_buf[15] = temp_struct.DI1; //DI1
|
||
p_send_buf[16] = temp_struct.serial_num0; //SER
|
||
p_send_buf[17] = temp_struct.serial_num1; //SER
|
||
memcpy(&p_send_buf[18],p_temp_buf, p_temp_len);
|
||
if((temp_struct.sta & 0x01) == 0x01)
|
||
{
|
||
AES_encrypt(0,&p_send_buf[14],p_send_buf[13], key);//加密
|
||
p_send_buf[13]=(p_send_buf[13]/16+1)*16;
|
||
}
|
||
p_send_buf[14+p_send_buf[13]]=0;
|
||
for (i = 2; i < 14+p_send_buf[13]; i++)
|
||
{
|
||
p_send_buf[14+p_send_buf[13]] += p_send_buf[i];//校验和
|
||
}
|
||
p_send_buf[15+p_send_buf[13]] = FM_END_MARK; //帧结束符
|
||
*p_send_len = 16+p_send_buf[13];
|
||
}
|
||
else
|
||
{
|
||
temp_pack_len.datas = p_temp_len+4;
|
||
p_send_buf[13] = temp_pack_len.datas_map.data0;
|
||
p_send_buf[14] = temp_pack_len.datas_map.data1;
|
||
p_send_buf[15] = temp_struct.DI0; //DI0
|
||
p_send_buf[16] = temp_struct.DI1; //DI1
|
||
p_send_buf[17] = temp_struct.serial_num0; //SER
|
||
p_send_buf[18] = temp_struct.serial_num1; //SER
|
||
memcpy(&p_send_buf[19], p_temp_buf, p_temp_len);
|
||
if((temp_struct.sta & 0x01) == 0x01)
|
||
{
|
||
AES_encrypt(1,&p_send_buf[15], temp_pack_len.datas, key);//加密
|
||
temp_pack_len.datas = (temp_pack_len.datas/16+1)*16;
|
||
p_send_buf[13]=temp_pack_len.datas_map.data1;//高位在前,方便插件判断
|
||
p_send_buf[14]=temp_pack_len.datas_map.data0;
|
||
}
|
||
p_send_buf[15+temp_pack_len.datas]=0;
|
||
for (i = 2; i < 15+temp_pack_len.datas; i++)
|
||
{
|
||
p_send_buf[15+temp_pack_len.datas] += p_send_buf[i];//校验和
|
||
}
|
||
p_send_buf[16+temp_pack_len.datas] = FM_END_MARK; //帧结束符
|
||
*p_send_len = 17+temp_pack_len.datas;
|
||
}
|
||
}
|
||
//应答数据组帧
|
||
void Frame_ack_IES(u8* p_send_buf, u16* p_send_len)
|
||
{
|
||
STRUCT_FRAME_IES temp_struct;
|
||
|
||
temp_struct.ack_ctrl = frame_struct_IES.ack_ctrl;
|
||
temp_struct.DI0 = frame_struct_IES.DI0;
|
||
temp_struct.DI1 = frame_struct_IES.DI1;
|
||
temp_struct.sta = frame_struct_IES.sta;
|
||
temp_struct.serial_num0 = frame_struct_IES.serial_num0;
|
||
temp_struct.serial_num1 = frame_struct_IES.serial_num1;
|
||
|
||
Frame_ack_IesBase(temp_struct,g_frame_temp_send_buf, g_frame_temp_len, p_send_buf, p_send_len);
|
||
}
|
||
///////////////////////////////////////////////////////////数据上报组帧///////////////////////////////
|
||
#if (MODULE_BLE_USED)
|
||
#else
|
||
//获取信号相关数据
|
||
MEASURE_UPLOAD_INFO UploadGetInfo_Base(void)
|
||
{
|
||
s16 s_temp_data=0;
|
||
MEASURE_UPLOAD_INFO temp_UploadInfo;
|
||
|
||
NbiotGetSNR(&s_temp_data);
|
||
if(s_temp_data<0)
|
||
{
|
||
temp_UploadInfo.metinfo.snr_val =(-s_temp_data);
|
||
temp_UploadInfo.metinfo.snr_val |= 0x8000;
|
||
}
|
||
else
|
||
{
|
||
temp_UploadInfo.metinfo.snr_val = s_temp_data;
|
||
}
|
||
//
|
||
NbiotGetECL(&s_temp_data);
|
||
if(s_temp_data<0)
|
||
{
|
||
temp_UploadInfo.metinfo.ecl_val |= (-s_temp_data)&0x8000;
|
||
}
|
||
else
|
||
{
|
||
temp_UploadInfo.metinfo.ecl_val = s_temp_data;
|
||
}
|
||
//
|
||
NbiotGetRSRP(&s_temp_data);
|
||
temp_UploadInfo.metinfo.RSRP_val = -s_temp_data;
|
||
NbiotGetCSQ(&temp_UploadInfo.metinfo.single_val);
|
||
temp_UploadInfo.metinfo.single_val = (temp_UploadInfo.metinfo.single_val / 10)*16 + (temp_UploadInfo.metinfo.single_val%10);
|
||
//获取电压值
|
||
temp_UploadInfo.metinfo.bat_val.u16_data =HexToBcd16(PowerCheckValueSys());
|
||
temp_UploadInfo.metinfo.bat_threshold_val = 0x03;//欠压阈值3v
|
||
return temp_UploadInfo;
|
||
}
|
||
|
||
/////////////////////////////////////////////积成UDP上报////////////////////////////////
|
||
void GetUploadDataResetState_IesUDP(void)
|
||
{
|
||
upload_frame_stat_ies_udp =UP_DEAL_S1;
|
||
upload_task_complete_ies_udp = PTL_PACK_BUSY;
|
||
}
|
||
u8 GetUploadDataCheckIdle_IesUDP(void)
|
||
{
|
||
if(UP_DEAL_S0 == upload_frame_stat_ies_udp)
|
||
{
|
||
return TASK_IDLE;
|
||
}
|
||
else
|
||
{
|
||
return TASK_BUSY;
|
||
}
|
||
}
|
||
u8 GetUploadDataCheckTask_IesUDP(void)
|
||
{
|
||
return upload_task_complete_ies_udp;
|
||
}
|
||
void GetUploadDataMachine_IesUDP(u8 data_step, u8* p_send_buf, u16* p_send_len)
|
||
{
|
||
if(data_step == UPLOAD_FRAME_REQUEST_NEW)
|
||
{
|
||
STRUCT_FRAME_IES upload_struct_IES;
|
||
u8 cell_id_data_frame[CELL_ID_SIZE];
|
||
MET_STATE temp_state; //状态字
|
||
Fram_To_Float tmp_float;
|
||
s16 s_temp_data=0;
|
||
|
||
upload_udp_frame.ProcMsgData.GP30_PeakUp.datas = Gp30CheckTestDataApp(GP30_APP_PEAK_UP);//换能器接收信号幅值up
|
||
upload_udp_frame.ProcMsgData.GP30_PeakDown.datas = Gp30CheckTestDataApp(GP30_APP_PEAK_DOWN);//换能器接收信号幅值down 平台显示单位为V
|
||
//温度
|
||
float tempTempratureFlag;
|
||
tempTempratureFlag= TempCheckValueApp();
|
||
if(tempTempratureFlag < 0) //CMR还不能显示负温度
|
||
{
|
||
tempTempratureFlag = -tempTempratureFlag;
|
||
upload_udp_frame.ProcMsgData.TempX100.datas = (u32)(tempTempratureFlag*100);//HexToBcd32((u32)(tempTempratureFlag*100));
|
||
upload_udp_frame.ProcMsgData.TempX100.datas|= 0x8000;
|
||
}
|
||
else
|
||
{
|
||
upload_udp_frame.ProcMsgData.TempX100.datas = (u32)(tempTempratureFlag*100);//HexToBcd32((u32)(tempTempratureFlag*100));
|
||
upload_udp_frame.ProcMsgData.TempX100.datas &= 0x7FFF;
|
||
}
|
||
//反算温度
|
||
#if WENDU_FANSUAN_OPEN
|
||
upload_udp_frame.ProcMsgData.GP30_TempX100.datas = upload_udp_frame.ProcMsgData.TempX100.datas;
|
||
#else
|
||
upload_udp_frame.ProcMsgData.GP30_TempX100.datas = 0;
|
||
#endif
|
||
upload_udp_frame.ProcMsgData.GP30_Diff.datas = Gp30CheckTestDataApp(GP30_APP_DIFF);
|
||
upload_udp_frame.ProcMsgData.GP30_DiffBig[0].datas =PROGRAME_VERSION>>16;
|
||
upload_udp_frame.ProcMsgData.GP30_DiffBig[1].datas =(Sys_data_object.P1.run_information_object.ee_remain_para_energy_life*10);//电量比值;
|
||
upload_udp_frame.ProcMsgData.GP30_DiffBig[2].datas = Sys_data_object.P1.run_information_object.nb_upload_happen_num;//NB上报次数
|
||
upload_udp_frame.ProcMsgData.GP30_DiffBig[3].datas =0;
|
||
upload_udp_frame.ProcMsgData.ResetCount = (Meter_GetResetCount()>>8)&0xFF;
|
||
upload_udp_frame.ProcMsgData.ResetReason = Meter_GetResetCount()&0xFF;
|
||
upload_udp_frame.ProcMsgData.BateryPower =PowerCheckValueSys();
|
||
|
||
NbiotGetRSRP(&s_temp_data);
|
||
upload_udp_frame.ProcMsgData.Rsrp = -s_temp_data;
|
||
NbiotGetSNR(&s_temp_data);
|
||
if(s_temp_data<0)
|
||
{
|
||
upload_udp_frame.ProcMsgData.Snr =(-s_temp_data);
|
||
upload_udp_frame.ProcMsgData.Snr |= 0x8000;
|
||
}
|
||
else
|
||
{
|
||
upload_udp_frame.ProcMsgData.Snr = s_temp_data;
|
||
}
|
||
//upload_udp_frame.ProcMsgData.UploadLastFailCode =;
|
||
//cellid
|
||
NbiotGetCell_ID(cell_id_data_frame);
|
||
upload_udp_frame.ProcMsgData.CellId.datas = 0;
|
||
for(int i=0;i<CELL_ID_SIZE;i++)
|
||
{
|
||
if(cell_id_data_frame[i] != 0)
|
||
{
|
||
upload_udp_frame.ProcMsgData.CellId.datas <<= 4;
|
||
if(cell_id_data_frame[i] <= '9')
|
||
{
|
||
upload_udp_frame.ProcMsgData.CellId.datas |= cell_id_data_frame[i]-'0';
|
||
}
|
||
else if((cell_id_data_frame[i] <= 'f')&&(cell_id_data_frame[i] >= 'a'))
|
||
{
|
||
upload_udp_frame.ProcMsgData.CellId.datas |= cell_id_data_frame[i]-'a'+10;
|
||
}
|
||
else if((cell_id_data_frame[i] <= 'F')&&(cell_id_data_frame[i] >= 'A'))
|
||
{
|
||
upload_udp_frame.ProcMsgData.CellId.datas |= cell_id_data_frame[i]-'A'+10;
|
||
}
|
||
}
|
||
}
|
||
upload_udp_frame.ProcMsgData.Frequency =NbiotGetNBAND();
|
||
//upload_udp_frame.ProcMsgData.Reverse =;
|
||
//状态字
|
||
temp_state = FrameGetByte();
|
||
upload_udp_frame.ProcMsgData.Sta0 = temp_state.stat0;
|
||
upload_udp_frame.ProcMsgData.Sta1 = temp_state.stat1;
|
||
upload_udp_frame.ProcMsgData.Sta2 = temp_state.stat2;
|
||
upload_udp_frame.ProcMsgData.Sta3 = 0x02;
|
||
|
||
//流量
|
||
tmp_float.gp22_u32 = Gp30CheckDataApp(2);
|
||
upload_udp_frame.ProcMsgData.CurrentFlow_short.datas = (u32)(tmp_float.gp22_float*10);//当前累计流量;//当前累计流量
|
||
upload_udp_frame.ProcMsgData.null_buf.datas = 0; //大口径使用这4字节
|
||
|
||
upload_struct_IES.ack_ctrl = SS_UPLOAD_CTRL;
|
||
upload_struct_IES.DI0 = SS_UPLOAD_CTRL_UDP_ID0;
|
||
upload_struct_IES.DI1 = SS_UPLOAD_CTRL_ID1;
|
||
upload_struct_IES.sta = 0x03;//加密主动上传
|
||
//upload_serial_num++;
|
||
upload_struct_IES.serial_num0 = 0x12;//upload_serial_num&0xFF;
|
||
upload_struct_IES.serial_num1 = 0x34;//(upload_serial_num>>8)&0xFF;
|
||
|
||
Frame_ack_IesBase(upload_struct_IES, upload_udp_frame.buf, STRU_DATA_LEN_IES_UDP, p_send_buf, p_send_len);
|
||
//////////////
|
||
upload_task_complete_ies_udp = PTL_PACK_SUCCESS;// 成功
|
||
}
|
||
else
|
||
{
|
||
upload_task_complete_ies_udp = PTL_PACK_FAIL;// 失败
|
||
}
|
||
upload_frame_stat_ies_udp = UP_DEAL_S0;
|
||
}
|
||
/////////////////////////////////////////////产线生产上报////////////////////////////////
|
||
void GetUploadDataResetState_Product(void)
|
||
{
|
||
upload_frame_stat_product_ies =UP_DEAL_S1;
|
||
upload_task_complete_product_ies = PTL_PACK_BUSY;
|
||
}
|
||
u8 GetUploadDataCheckIdle_Product(void)
|
||
{
|
||
if(UP_DEAL_S0 == upload_frame_stat_product_ies)
|
||
{
|
||
return TASK_IDLE;
|
||
}
|
||
else
|
||
{
|
||
return TASK_BUSY;
|
||
}
|
||
}
|
||
u8 GetUploadDataCheckTask_Product(void)
|
||
{
|
||
return upload_task_complete_product_ies;
|
||
}
|
||
void GetUploadDataMachine_Product(u8 data_step, u8* p_send_buf, u16* p_send_len)
|
||
{
|
||
DateTime tempRtcc_time;
|
||
|
||
MET_STATE temp_state; //状态字
|
||
Fram_To_Float tmp_float;
|
||
MEASURE_UPLOAD_INFO temp_UploadInfo;
|
||
STRUCT_FRAME_IES upload_struct_IES;
|
||
if(data_step == UPLOAD_FRAME_REQUEST_NEW)
|
||
{
|
||
upload_frame_retry_times =0;
|
||
//流量
|
||
tmp_float.gp22_u32 = Gp30CheckDataApp(2);
|
||
short_upload_product_frame.data.null_buf.datas = 0;
|
||
short_upload_product_frame.data.CurrentFlow_short.datas = (u32)(tmp_float.gp22_float*10);//当前累计流量
|
||
//信号\电池相关
|
||
temp_UploadInfo = UploadGetInfo_Base();
|
||
short_upload_product_frame.data.RSRP_val = (u8)(temp_UploadInfo.metinfo.RSRP_val/10);
|
||
short_upload_product_frame.data.bat_voltage = PowerCheckValueSys();
|
||
short_upload_product_frame.data.mode_snr = temp_UploadInfo.metinfo.snr_val;
|
||
short_upload_product_frame.data.mode_ecl = temp_UploadInfo.metinfo.ecl_val;
|
||
//上报时间
|
||
RtccGetDateTime(&tempRtcc_time);
|
||
short_upload_product_frame.data.UploadTime[0] = tempRtcc_time.s.minute;
|
||
short_upload_product_frame.data.UploadTime[1] = tempRtcc_time.s.hour;
|
||
short_upload_product_frame.data.UploadTime[2] = tempRtcc_time.s.day;
|
||
short_upload_product_frame.data.UploadTime[3] = tempRtcc_time.s.month;
|
||
short_upload_product_frame.data.UploadTime[4] = tempRtcc_time.s.year;
|
||
//状态字
|
||
temp_state = FrameGetByte();
|
||
short_upload_product_frame.data.StateBytes[0] = temp_state.stat0;
|
||
short_upload_product_frame.data.StateBytes[1] = temp_state.stat1;
|
||
short_upload_product_frame.data.StateBytes[2] = temp_state.stat2;
|
||
short_upload_product_frame.data.StateBytes[3] = 0x02;
|
||
short_upload_product_frame.data.StateBytes[3] |= getUploadControlPara(UP_BAT_STATE);//剩余电池电量
|
||
//软件版本
|
||
short_upload_product_frame.data.soft_ver.datas_map.data1 =(FrameCheckParaApp(FramePara_ProgVersion)>>16)&0xFF;
|
||
short_upload_product_frame.data.soft_ver.datas_map.data0 =(FrameCheckParaApp(FramePara_ProgVersion)>>24)&0xFF;
|
||
//温度
|
||
short_upload_product_frame.data.temp_value.datas = (u16)TempCheckValueApp();
|
||
//////////////
|
||
upload_struct_IES.ack_ctrl = SHORT_UPLOAD_CTRL;
|
||
upload_struct_IES.DI0 = SHORT_UPLOAD_CTRL_ID0;
|
||
upload_struct_IES.DI1 = SHORT_UPLOAD_CTRL_ID1;
|
||
upload_struct_IES.sta = 0x03;//加密主动上传
|
||
upload_struct_IES.serial_num0 = 0x56;
|
||
upload_struct_IES.serial_num1 = 0x78;
|
||
Frame_ack_IesBase(upload_struct_IES, short_upload_product_frame.buf, STRU_DATA_LEN_IES_SHORT, p_send_buf, p_send_len);
|
||
//////////////
|
||
upload_task_complete_product_ies = PTL_PACK_SUCCESS;// 成功
|
||
}
|
||
else
|
||
{
|
||
if(data_step == UPLOAD_FRAME_UPLOAD_RETRY)
|
||
{
|
||
if(upload_frame_retry_times < 1)
|
||
{
|
||
upload_frame_retry_times++;
|
||
upload_task_complete_product_ies = PTL_PACK_SUCCESS;// 成功
|
||
}
|
||
else//重新发送失败3次的处理
|
||
{
|
||
upload_task_complete_product_ies = PTL_PACK_FAIL;
|
||
}
|
||
}
|
||
else if(data_step == UPLOAD_FRAME_ONLINE_FAIL)//上线失败
|
||
{
|
||
if((Sys_data_object.P1.func_cfg_bytes[0]>0)&&NbiotIfOnline())//厂区上报时间,如果有信号值,则不报故障
|
||
{
|
||
NB_SS_Control_SetPara(NB_UploadFailTimes, 0);
|
||
}
|
||
else
|
||
{
|
||
Sys_data_object.P3.ProductUpoadFailFlag = 50;
|
||
}
|
||
upload_task_complete_product_ies = PTL_PACK_FAIL;// 失败
|
||
}
|
||
else//应答成功
|
||
{
|
||
NB_SS_Control_SetPara(NB_UploadFailTimes, 0);//生产上报成功,清除失败次数
|
||
upload_task_complete_product_ies = PTL_PACK_FAIL;// 失败
|
||
}
|
||
}
|
||
upload_frame_stat_product_ies = UP_DEAL_S0;
|
||
}
|
||
#endif
|
||
|
||
|