X2UWaterWmbusEEI/app/UWater_Frame/UWater_frame_func_ReplySYNB.c

1351 lines
40 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "sys_config.h"
#if PRODUCT_SY
#include "sys_processor.h"
#include "UWater_eeprom_driver.h"
#include "UWater_rtcc_app.h"
#include "UWater_power_app.h"
#include "UWater_gp22_app.h"
#include "UWater_pt_app.h"
#include "UWater_DataTools_App.h"
#include "UWater_SY_Store_App.h"
#include "SOE.h"
#include "UWater_frame_func_ReplyNB.h"
#include "UWater_frame_func_ReplySYNB.h"
static STRUCT_FRAME_SY frame_struct_SY; //沈阳规约信息
static u8 *new_message_data_rev_sy;
static u8 up_deal_stat_sy = UP_DEAL_S0;
static u8 s_sy_eep_complete=0;
static u8 task_complete_sy = PTL_PACK_BUSY;
static u8 g_frame_temp_send_buf_sy[UP_BUF_SIZE]; //数据部分缓冲区
static u16 g_frame_temp_len_sy=0;
static u8 *temp_send_start_p;
static u8 *temp_send_end_p;
static u8 *temp_send_end_p1;
static u8 temp_check_addr[7];
static u8 upload_serial_num_sy=0;
static u8 temp_upload_step=0;
static u8 upload_frame_retry_times = 0;
//上报周期数据获取
static TYP_STATE_SY upload_frame_stat_sy=SY_STATE_S0;
static u8 task_complete_upload_sy = PTL_PACK_BUSY;
static u8 task_complete_warning_sy = PTL_PACK_BUSY;
static u8 SY_CircleUploadPackets=0; //需要上报的总包数
static u8 SY_CircleThisPacketNum=0;//当前包序号
static u8 SY_CircleThisUploadPacket_Index=0;//当前要上报的数据位置
static u8 SY_CiecleThisUploadPacket_Cnt=0;//当前要上报的数据包数据条数
static u8 SY_CircleUploadBuf[400];//10+16x24=394//周期上报数据缓存
static u16 SY_UploadDataLen=0;
static STRUCT_FRAME_SY temp_struct_upload_SY;
//上报报警数据获取
static TYP_STATE_SY step_UploadWarningSY = SY_STATE_S0;
static u8* temp_warning_start_p;
static u8* temp_warning_end_p;
//水表向平台端主动发送数据规约
//上传冻结数据101应答1 上报未冻结数据、水表状态、报警等信息
void frame_func_reply_SYNB_UploadFrozenData(void)
{
task_complete_sy = PTL_PACK_FAIL;//这是上报应答帧,返回错误,表计不应答
}
//上报周期数据(102,应答2) 上报周期采集的数据
void frame_func_reply_SYNB_UploadCycleData(void)
{
if(*(new_message_data_rev_sy + 14) == upload_serial_num_sy) //判断序列号是否正确
{
if(*(new_message_data_rev_sy + 19) == 0) //上报是否成功
{
FrameSetMsgApp(MsgShenYang_NbUplaod_AckOk);
}
}
task_complete_sy = PTL_PACK_FAIL;//这是上报应答帧,返回错误,表计不应答
}
//突发报警上传(103,应答3) 在发生报警等级为1的报警事件时随时上传
void frame_func_reply_SYNB_SuddenAlarmUpload(void)
{
if(*(new_message_data_rev_sy + 14) == upload_serial_num_sy) //判断序列号是否正确
{
if(*(new_message_data_rev_sy + 19) == 0) //上报是否成功
{
FrameSetMsgApp(MsgShenYang_NbUplaod_AckOk);
}
}
task_complete_sy = PTL_PACK_FAIL;//这是上报应答帧,返回错误,表计不应答
}
//冻结数据查询(8,应答108) 查询日冻结数据、年冻结数据、月冻结数据
void frame_func_reply_SYNB_ACK_FrozenDataQuery(void)
{
static u8 num_get,num_to_get,num_to_read,totalnum,totalPackts,curPackt,send_totalPackts;
static u8 temp_all_num=0;
static u8 check_num=0;
static UNION_SY_STORE_FROZEN temp_read_frozen_data;//冻结数据读取缓存
static u16 temp_frozen_addr=EEP_ADDR_SY_STORE_FROZEN_DAILY;
switch(up_deal_stat_sy)
{
case UP_DEAL_S0:
{
temp_send_start_p = g_frame_temp_send_buf_sy;
temp_send_end_p = g_frame_temp_send_buf_sy;
temp_send_end_p1 = g_frame_temp_send_buf_sy;
if(*(new_message_data_rev_sy + 19) == 0)//日
{
num_to_read = get_SY_StorePara(SY_StoreCurIndex_Daily);//日冻结当前存储指针
temp_all_num = 7;//最大读取条数7天
temp_frozen_addr=EEP_ADDR_SY_STORE_FROZEN_DAILY;
}
else if(*(new_message_data_rev_sy + 19) == 1)//月
{
num_to_read = get_SY_StorePara(SY_StoreCurIndex_Month);
temp_all_num = 18;//18月
temp_frozen_addr=EEP_ADDR_SY_STORE_FROZEN_MONTH;
}
else if(*(new_message_data_rev_sy + 19) == 2)//年
{
num_to_read = get_SY_StorePara(SY_StoreCurIndex_Year);
temp_all_num = 6;//6年
temp_frozen_addr=EEP_ADDR_SY_STORE_FROZEN_YEAR;
}
totalnum = 0;
num_get = 0;
num_to_get = *(new_message_data_rev_sy + 20);//需要读取条数
totalPackts = *(new_message_data_rev_sy + 21);//总包数
curPackt = *(new_message_data_rev_sy + 22);//当前包
*temp_send_end_p++ = 0;//返回总包数
*temp_send_end_p++ = 0;//返回当前包
*temp_send_end_p++ = 0;//返回数据条数
up_deal_stat_sy = UP_DEAL_S1;
}
break;
case UP_DEAL_S1:
{
if(totalnum >= temp_all_num)//最大读取条数temp_all_num
{
send_totalPackts = totalPackts;
up_deal_stat_sy = UP_DEAL_S3;
break;
}
if(TASK_IDLE == EepIfIdle())//存储数据到EEPROM
{
if(num_to_read > temp_all_num) //防止指针跑飞了
{
num_to_read = temp_all_num;
}
if(num_to_read == 0)
{
num_to_read = temp_all_num;
}
totalnum++;
num_to_read--;
EepRead(temp_frozen_addr + num_to_read*STORE_SIZE_DATA_FROZEN, &temp_read_frozen_data.data_buf[0], STORE_SIZE_DATA_FROZEN, &s_sy_eep_complete);
up_deal_stat_sy = UP_DEAL_S2;
}
}
break;
case UP_DEAL_S2:
{
if(TASK_IDLE == EepIfIdle())//读完了
{
check_num = 0;
for(int i = 0; i<(STORE_SIZE_DATA_FROZEN-1); i++)
{
check_num += temp_read_frozen_data.data_buf[i];
}
if(check_num == temp_read_frozen_data.Data.CheckSum)
{
temp_read_frozen_data.Data.FrozenDataTime.s.year = BCD2HEX(temp_read_frozen_data.Data.FrozenDataTime.s.year);
temp_read_frozen_data.Data.FrozenDataTime.s.month = BCD2HEX(temp_read_frozen_data.Data.FrozenDataTime.s.month);
temp_read_frozen_data.Data.FrozenDataTime.s.day = BCD2HEX(temp_read_frozen_data.Data.FrozenDataTime.s.day);
temp_read_frozen_data.Data.FrozenDataTime.s.hour = BCD2HEX(temp_read_frozen_data.Data.FrozenDataTime.s.hour);
temp_read_frozen_data.Data.FrozenDataTime.s.minute= BCD2HEX(temp_read_frozen_data.Data.FrozenDataTime.s.minute);
temp_read_frozen_data.Data.FrozenDataTime.s.second= BCD2HEX(temp_read_frozen_data.Data.FrozenDataTime.s.second);
num_get++;
if(num_get >= num_to_get)//达到了要获取的条数
{
for(int i = 0; i<(STORE_SIZE_DATA_FROZEN-2); i++)
{
*temp_send_end_p++ = temp_read_frozen_data.data_buf[i];
}
up_deal_stat_sy = UP_DEAL_S3;
break;
}
else
{
if(curPackt==1)
{
if(num_get<=9)//超过9条数据开始拆分成两包
{
for(int i = 0; i<(STORE_SIZE_DATA_FROZEN-2); i++)
{
*temp_send_end_p++ = temp_read_frozen_data.data_buf[i];
}
totalPackts =1;
}
else
{
totalPackts = 2;//总包数为2
if(num_get>0)
{
num_get--;
}
up_deal_stat_sy = UP_DEAL_S3;
break;
}
}
else if(curPackt==2)
{
if(num_get>9)//超过9条数据开始拆分成两包
{
for(int i = 0; i<(STORE_SIZE_DATA_FROZEN-2); i++)
{
*temp_send_end_p++ = temp_read_frozen_data.data_buf[i];
}
}
}
else
{
totalPackts = 0;
up_deal_stat_sy = UP_DEAL_S3;
break;
}
}
}
up_deal_stat_sy = UP_DEAL_S1;
}
}
break;
case UP_DEAL_S3:
{
send_totalPackts = totalPackts;
*temp_send_end_p1++ = send_totalPackts;//总包数
*temp_send_end_p1++ = curPackt;//当前包
if(num_get>9)
{
num_get = num_get - 9;
}
*temp_send_end_p1++ = num_get;//数据条数
g_frame_temp_len_sy = (temp_send_end_p - temp_send_start_p);//需要发送数据的长度
up_deal_stat_sy = UP_DEAL_S0;
task_complete_sy = PTL_PACK_SUCCESS;
}
break;
default:
{
up_deal_stat_sy = UP_DEAL_S0;
task_complete_sy = PTL_PACK_FAIL;
}
break;
}
}
//周期数据查询(9,应答109)
void frame_func_reply_SYNB_ACK_CycleDataQuery(void)
{
static u8 temp_data_cnt=0;//要读取包的数据条数
static u8 temp_packet_cnt=0;//总包数
static u8 curPacket;
static u8 packet_index_buf[6];
static u8 curPacketIndex=0;//要读取包的索引
u8 readDays=0;//要读取的天数
switch(up_deal_stat_sy)
{
case UP_DEAL_S0:
{
g_frame_temp_len_sy = 0;
temp_send_start_p = g_frame_temp_send_buf_sy;
temp_send_end_p = g_frame_temp_send_buf_sy;
readDays = *(new_message_data_rev_sy + 19); //查询天数
curPacket = *(new_message_data_rev_sy + 21);//当前包号
temp_packet_cnt = getSY_CircleDataPackets(readDays, packet_index_buf);//获取总包数和包号
*temp_send_end_p++ = temp_packet_cnt;//总包数
//当前包序号
if((curPacket > temp_packet_cnt)||(curPacket == 0))//要读取的当前包无效
{
*temp_send_end_p++ = 0;
up_deal_stat_sy = UP_DEAL_S2;
}
else
{
*temp_send_end_p++ = curPacket;
up_deal_stat_sy = UP_DEAL_S1;
}
}
break;
case UP_DEAL_S1:
{
if(TASK_IDLE == EepIfIdle())
{
DateTime temp_time;
curPacketIndex = packet_index_buf[curPacket-1];
//计算数据条数
temp_data_cnt = SY_GetCircleReadStartEnd(curPacketIndex,1) - SY_GetCircleReadStartEnd(curPacketIndex,0);
//起始日期时间
SY_GetCircleDateTime(&temp_time,curPacketIndex, 1);//起始时间日期
*temp_send_end_p++ = BCD2HEX(temp_time.s.year);//年
*temp_send_end_p++ = BCD2HEX(temp_time.s.month);//月
*temp_send_end_p++ = BCD2HEX(temp_time.s.day);//日
*temp_send_end_p++ = BCD2HEX(temp_time.s.hour); //时
*temp_send_end_p++ = BCD2HEX(temp_time.s.minute);//分
*temp_send_end_p++ = BCD2HEX(temp_time.s.second);//秒
//时间间隔
*temp_send_end_p++ = 6;//30分钟
//数据条数
*temp_send_end_p++ = temp_data_cnt;
//读取间隔数据
u16 temp_ee_addr=0;
temp_ee_addr = EEP_ADDR_SY_STORE_CIRCLE + curPacketIndex*16*24 + SY_GetCircleReadStartEnd(curPacketIndex,0)*16;
EepRead(temp_ee_addr, temp_send_end_p, 16*temp_data_cnt, &s_sy_eep_complete);
temp_send_end_p += 16*temp_data_cnt;
up_deal_stat_sy = UP_DEAL_S2;
}
}
break;
case UP_DEAL_S2:
{
if(TASK_IDLE == EepIfIdle())//读完了
{
g_frame_temp_len_sy = (temp_send_end_p - temp_send_start_p);//需要发送数据的长度
up_deal_stat_sy = UP_DEAL_S0;
task_complete_sy = PTL_PACK_SUCCESS;
}
}
break;
default:
{
up_deal_stat_sy = UP_DEAL_S0;
task_complete_sy = PTL_PACK_FAIL;
}
break;
}
}
//报警历史数据查询10应答110 查询历史报警数据
void frame_func_reply_SYNB_ACK_AlarmHistoryDataQuery(void)
{
static u8 *new_message_data_rev_ies;
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;
static u8 *temp_alarm_cnt;
static u8 *temp_all_packets_p;
static u8 all_packets, cur_packet;
switch(up_deal_stat_sy)
{
case UP_DEAL_S0:
{
DateTime tempDataTime;
new_message_data_rev_ies = (new_message_data_rev_sy + 19);
temp_send_start_p = g_frame_temp_send_buf_sy;
temp_send_end_p = g_frame_temp_send_buf_sy;
temp_all_packets_p = g_frame_temp_send_buf_sy;
totalnum = 0;
num_get = 0;
RtccGetDateTime(&tempDataTime);//获取当前时间
num_to_read = Sys_data_object.P4.Point_SOE_write;
temp_soe_type.to_uint16 = SOE_ALL_TYPE;
start_time = getBackDateTimeNoWeek(*(new_message_data_rev_ies + 0));//获取起始时间
all_packets = *(new_message_data_rev_ies + 1);//总包数
cur_packet = *(new_message_data_rev_ies + 2);//当前包,最大值 4 (7*25条=175字节一包,4包100条)
//结束时间
end_time.s.year = tempDataTime.s.year;
end_time.s.month = tempDataTime.s.month;
end_time.s.day = tempDataTime.s.day;
end_time.s.hour = tempDataTime.s.hour;
end_time.s.minute = tempDataTime.s.minute;
end_time.s.second = tempDataTime.s.second;
//读取数量
if((0 == cur_packet)||(cur_packet > 4))
{
up_deal_stat_sy = UP_DEAL_S3;
}
num_to_get = 25;//25条一个分包
{
*temp_send_end_p++ = all_packets;//总包数(站位)
*temp_send_end_p++ = cur_packet;//当前包
temp_alarm_cnt = temp_send_end_p++; //报警数量,需要后面计算
up_deal_stat_sy = UP_DEAL_S1;
}
}
break;
case UP_DEAL_S1://读取一条SOE
{
if(totalnum >= TOTAL_NUM_SOE)//总共读TOTAL_NUM_SOE次 强制退出不能再读了
{
all_packets = (num_get/25);
if(num_get%25)
{
all_packets++;
}
*temp_all_packets_p = all_packets;
up_deal_stat_sy = 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_sy_eep_complete);
up_deal_stat_sy = 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
{
num_get++;
if((num_get > (cur_packet-1)*25)&&(num_get < (cur_packet*num_to_get)))//比如,要读取第二包就从第26条开始放数据给发送区到50条结束
{
*temp_send_end_p++ = soe_event_read.soe_type-1000;
*temp_send_end_p++ = BCD2HEX(soe_event_read.soe_time.s.year);
*temp_send_end_p++ = BCD2HEX(soe_event_read.soe_time.s.month);
*temp_send_end_p++ = BCD2HEX(soe_event_read.soe_time.s.day);
*temp_send_end_p++ = BCD2HEX(soe_event_read.soe_time.s.hour);
*temp_send_end_p++ = BCD2HEX(soe_event_read.soe_time.s.minute);
*temp_send_end_p++ = BCD2HEX(soe_event_read.soe_time.s.second);
}
}
up_deal_stat_sy = UP_DEAL_S1;
}
}
break;
case UP_DEAL_S3:
{
*temp_alarm_cnt = ((g_frame_temp_len_sy-3)/7); //计算报警信息条数
g_frame_temp_len_sy = (temp_send_end_p - temp_send_start_p);//需要发送数据的长度
up_deal_stat_sy = UP_DEAL_S0;
task_complete_sy = PTL_PACK_SUCCESS;
}
break;
default:
{
up_deal_stat_sy = UP_DEAL_S0;
task_complete_sy = PTL_PACK_FAIL;
}
break;
}
}
//清空数据(51,应答151) 清空冻结数据、历史数据、报警数据
void frame_func_reply_SYNB_ACK_ClearAllData(void)
{
temp_send_start_p = g_frame_temp_send_buf_sy;
temp_send_end_p = g_frame_temp_send_buf_sy;
*temp_send_end_p++ = *(new_message_data_rev_sy + 19);
*temp_send_end_p++ = *(new_message_data_rev_sy + 20);
*temp_send_end_p++ = *(new_message_data_rev_sy + 21);
if(*(new_message_data_rev_sy + 19) == 1) //清空冻结数据
{
*temp_send_end_p++ = 1; //0不清空 1成功 2失败
FrameSetMsgApp(MsgShenYang_FrozenClear);
}
if(*(new_message_data_rev_sy + 20) == 1) //清空报警数据
{
*temp_send_end_p++ = 1; //0不清空 1成功 2失败
FrameSetMsgApp(MsgShenYang_WarningClear);
}
if(*(new_message_data_rev_sy + 21) == 1) //清空周期数据
{
*temp_send_end_p++ = 1; //0不清空 1成功 2失败
FrameSetMsgApp(MsgShenYang_CircleClear);
}
g_frame_temp_len_sy = 3;
task_complete_sy = PTL_PACK_SUCCESS;
}
//重启、恢复出厂设置(52,应答152)
void frame_func_reply_SYNB_ACK_RestoreFactorySetting(void)
{
temp_send_start_p = g_frame_temp_send_buf_sy;
temp_send_end_p = g_frame_temp_send_buf_sy;
*temp_send_end_p++ = *(new_message_data_rev_sy + 19);
*temp_send_end_p++ = *(new_message_data_rev_sy + 20);
if(*(new_message_data_rev_sy + 20) == 1) //恢复出厂设置
{
FrameSetMsgApp(MsgShenYang_FactorySettingAndReset);
}
else
{
if(*(new_message_data_rev_sy + 19) == 1) //重启
{
FrameSetMsgApp(MsgShenYang_SysReset);
}
}
g_frame_temp_len_sy = 2;
task_complete_sy = PTL_PACK_SUCCESS;
}
//调试指令(71,应答171) 由厂家自行定义的报文,数据域由厂家自行设置
void frame_func_reply_SYNB_DebugInstruction(void)
{
g_frame_temp_len_sy = 0;
task_complete_sy = PTL_PACK_SUCCESS;
}
/**
5、水表参数设置
此报文数据域采用TLV格式可同时设置若干报文数据ID(Tag)的定义详见附表2不同的Tag对应的数据长度也不同。
请求报文:
**/
//水表应答平台请求规约
//参数设置6应答106 设置上传时间、开关阀门、报警参数等
void frame_func_reply_SYNB_ACK_ParameterSetting(void)
{
static u8 tlv_para_cnt=0;//要设置的参数数量
switch(up_deal_stat_sy)
{
case UP_DEAL_S0:
{
u8 temp_tag=0;
u8 temp_len=0;
u8 temp_value[32];
u8 *temp_rev_p;
temp_rev_p = (new_message_data_rev_sy + 19);
temp_send_start_p = g_frame_temp_send_buf_sy;
temp_send_end_p = g_frame_temp_send_buf_sy;
tlv_para_cnt = *temp_rev_p++; //要设置的参数数量
if(tlv_para_cnt <= TLV_STR_BUF_LEN)
{
*temp_send_end_p++ = tlv_para_cnt;
for(int i=0; i<tlv_para_cnt; i++)
{
temp_tag = *temp_rev_p++;
temp_len = *temp_rev_p++;
*temp_send_end_p++ = temp_tag;
*temp_send_end_p++ = temp_len;
for(int j=0; j<temp_len; j++)
{
temp_value[j] = *temp_rev_p++;
*temp_send_end_p++ = temp_value[j];
}
if(SUCCESS_IES == SetTLVData(temp_tag, temp_len, temp_value))
{
*temp_send_end_p++ = 0;//成功
}
else
{
*temp_send_end_p++ = 1;//失败
}
}
}
else
{
tlv_para_cnt = 0;
}
g_frame_temp_len_sy = (temp_send_end_p - temp_send_start_p);//需要发送数据的长度
task_complete_sy = PTL_PACK_SUCCESS;
up_deal_stat_sy = UP_DEAL_S0;
}
break;
default:
{
up_deal_stat_sy = UP_DEAL_S0;
task_complete_sy = PTL_PACK_FAIL;
}
break;
}
}
//参数查询7应答107 在发生报警等级为1的报警事件时随时上传
void frame_func_reply_SYNB_ACK_ParameterQuery(void)
{
static u8 tlv_para_cnt=0;//要设置的参数数量
u8 temp_tag=0;
u8 temp_value[32];
u8 index=0;
u8 *temp_rev_p;
tlv_para_cnt = *(new_message_data_rev_sy + 19);//要查询的参数数量
temp_send_start_p = g_frame_temp_send_buf_sy;
temp_send_end_p = g_frame_temp_send_buf_sy;
temp_rev_p = (new_message_data_rev_sy + 20); //tag起始位置
if(tlv_para_cnt <= TLV_STR_BUF_LEN)
{
*temp_send_end_p++ = tlv_para_cnt;//应答要查询的参数数量
for(int i=0; i<tlv_para_cnt; i++)
{
temp_tag = *temp_rev_p++;
index = getTlvTagIndex(temp_tag);
if(GetTLVData(temp_tag, TlvStrBuf[index].Len, temp_value) == SUCCESS_IES)
{
*temp_send_end_p++ = temp_tag;
*temp_send_end_p++ = TlvStrBuf[index].Len;
for(int j=0; j<TlvStrBuf[index].Len; j++)
{
*temp_send_end_p++ = temp_value[j];
}
}
}
g_frame_temp_len_sy = (temp_send_end_p - temp_send_start_p);
}
else
{
g_frame_temp_len_sy = 0;
tlv_para_cnt = 0;
}
task_complete_sy = PTL_PACK_SUCCESS;
}
/**************************************************************************************
沈阳规约查地址
水表地址6字节BCD码为每一个水表设置唯一的地址格式为厂家代码2位+年份2位+流水号8位
当地址为AA AA AA AA AA AA时为广播地址。广播地址只能应用于点对点的通讯中。
***************************************************************************************/
u8 check_met_addr_SYNB(u8 *p_buf,u8 *des_buf)
{
u8 tmp_i;
if(UP_SOURCE_IR == frame_get_datasource()) //红外近端通信支持广播地址
{
for(tmp_i=0;tmp_i < 6;tmp_i++)
{
if((0xAA != *(p_buf + 2 + tmp_i)) && (*(p_buf + 2 +tmp_i) != *(des_buf + tmp_i))) //广播读地址和表地址
{
break;
}
}
}
else //远端不支持广播地址
{
for (tmp_i = 0; tmp_i < 6; tmp_i++)
{
if (*(p_buf + 2 +tmp_i) != *(des_buf + tmp_i))
{
break;
}
}
}
if(tmp_i >= 6)
{
return SUCCESS_IES;
}
return ERROR_IES;
}
//解沈阳NB规约
u8 crack_frame_SY(u16 frame_lenth,u8 *frame_buffer)
{
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_SY == *(frame_buffer + tmp_i + 1))
{
frame_struct_SY.head_site = tmp_i; //记录帧头
frame_struct_SY.sta = *(frame_buffer + tmp_i + 16);//状态字bit0为1时表示加密即01H表示加密bit1为1时表示主动上传其他bit位预留
frame_struct_SY.len.data_buf[0] = *(frame_buffer + tmp_i + 17);//数据长度,沈阳规约数据长度为2字节低字节在前高字节在后
frame_struct_SY.len.data_buf[1] = *(frame_buffer + tmp_i + 18);
frame_struct_SY.end_site = frame_struct_SY.head_site + frame_struct_SY.len.datas + 20;
frame_struct_SY.check_len = frame_struct_SY.end_site - frame_struct_SY.head_site - 1;
frame_struct_SY.serial_num0 = *(frame_buffer + tmp_i + 14); //序列号,应答使用
//检测数据帧是否有效
if ((frame_struct_SY.end_site < frame_lenth) && (FM_END_MARK == *(frame_buffer + frame_struct_SY.end_site)))
{
frame_struct_SY.ctrl = *(frame_buffer + frame_struct_SY.head_site + 15);
new_message_data_rev_sy = frame_buffer + frame_struct_SY.head_site;
for (tmp_j = 0; tmp_j < 6; tmp_j++) //沈阳规约地址只有6字节的BCD
{
temp_check_addr[tmp_j] = Sys_data_object.P1.met_addr[tmp_j];
}
//计算校验和
for (tmp_j = frame_struct_SY.head_site; tmp_j < (frame_struct_SY.end_site - 1); tmp_j++)
{
tmp_check += *(frame_buffer + tmp_j);
}
if (tmp_check == *(frame_buffer + frame_struct_SY.end_site - 1))
{
frame_struct_SY.sta &= 0xFD; //表示非主动上传bit1为1时表示主动上传0表示应答
frame_lenth = 0;
if (ERROR_IES == check_met_addr_SYNB(frame_buffer + frame_struct_SY.head_site, temp_check_addr)) //检查指令包含的地址和本表地址是否相同相同返回1不同返回0
{
return (ERROR_IES);
}
return SUCCESS_IES;
}
}
}
}
}
return ERROR_IES;
}
//沈阳规约处理
u8 up_deal_code_sy(void)
{
task_complete_sy = PTL_PACK_BUSY;
switch(frame_struct_SY.ctrl)
{
case FM_UPLOAD_FROZEN_DATA_REPLY_CTRL://冻结数据的上报应答
{
frame_func_reply_SYNB_UploadFrozenData();
frame_struct_SY.ack_ctrl = FM_UPLOAD_FROZEN_DATA_CTRL;
}
break;
case FM_UPLOAD_CYCLE_DATA_REPLY_CTRL://周期数据的上报应答
{
frame_func_reply_SYNB_UploadCycleData();
frame_struct_SY.ack_ctrl = FM_UPLOAD_CYCLE_DATA_CTRL;
}
break;
case FM_SUDDEN_ALARM_UPLOAD_REPLY_CTRL://报警信息的上报应答
{
frame_func_reply_SYNB_SuddenAlarmUpload();
frame_struct_SY.ack_ctrl = FM_SUDDEN_ALARM_UPLOAD_CTRL;
}
break;
case FM_FROZEN_DATA_QUERY_CTRL://冻结数据查询
{
frame_func_reply_SYNB_ACK_FrozenDataQuery();
frame_struct_SY.ack_ctrl = FM_FROZEN_DATA_QUERY_REPLY_CTRL;
}
break;
case FM_CYCLE_DATA_QUERY_CTRL://周期数据查询
{
frame_func_reply_SYNB_ACK_CycleDataQuery();
frame_struct_SY.ack_ctrl = FM_CYCLE_DATA_QUERY_REPLY_CTRL;
}
break;
case FM_ALARM_HISTORY_DATA_QUERY_CTRL://报警信息查询
{
frame_func_reply_SYNB_ACK_AlarmHistoryDataQuery();
frame_struct_SY.ack_ctrl = FM_ALARM_HISTORY_DATA_QUERY_REPLY_CTRL;
}
break;
case FM_CLEAR_ALL_DATA_CTRL://清空数据
{
frame_func_reply_SYNB_ACK_ClearAllData();
frame_struct_SY.ack_ctrl = FM_CLEAR_ALL_DATA_REPLY_CTRL;
}
break;
case FM_RESTORE_FACTORY_SETTING_CTRL:
{
frame_func_reply_SYNB_ACK_RestoreFactorySetting();
frame_struct_SY.ack_ctrl = FM_RESTORE_FACTORY_SETTING_REPLY_CTRL;
}
break;
case FM_DEBUG_INSTRUCTION_CTRL:
{
frame_func_reply_SYNB_DebugInstruction();
frame_struct_SY.ack_ctrl = FM_DEBUG_INSTRUCTION_REPLY_CTRL;
}
break;
case FM_PARAMENTER_SETTING_CTRL:
{
frame_func_reply_SYNB_ACK_ParameterSetting();
frame_struct_SY.ack_ctrl = FM_PARAMENTER_SETTING_REPLY_CTRL;
}
break;
case FM_PARAMENTER_QUERY_CTRL:
{
frame_func_reply_SYNB_ACK_ParameterQuery();
frame_struct_SY.ack_ctrl = FM_PARAMENTER_QUERY_REPLY_CTRL;
}
break;
default:
{
up_deal_stat_sy = UP_DEAL_S0;
task_complete_sy = PTL_PACK_FAIL;
}
break;
}
return task_complete_sy;
}
void Frame_ResetDealState_Shenyang(void)
{
up_deal_stat_sy = UP_DEAL_S0;
}
void get_imei_and_signal_parameters(u8 *tmp_data_buf)
{
u8 i = 0;
u8 s_temp_data1 = 0;
u8 temp_buf1[16];
u8 temp_buf2[16];
s16 s_temp_data=0;
UNION_2U8TOU16 s_temp_singal;
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++)
{
*tmp_data_buf ++ = temp_buf2[7-i];
}
*tmp_data_buf ++ =0;
*tmp_data_buf ++ =0;
*tmp_data_buf ++ =0;
NbiotGetRSRP(&s_temp_data);
s_temp_singal.datas = (s_temp_data*0.1);
s_temp_singal.datas = (~ s_temp_singal.datas) | 0x8000;
*tmp_data_buf ++ = s_temp_singal.datas_map .data0 ;
*tmp_data_buf ++ = s_temp_singal.datas_map .data1;
NbiotGetSNR(&s_temp_data); //沈阳平台解析未放大10倍2字节有符号整数
s_temp_data = s_temp_data*0.1;
if(s_temp_data<0)
{
s_temp_singal.datas = (-s_temp_data);
s_temp_singal.datas = (~s_temp_singal.datas) |0x8000;
}
else
{
s_temp_singal.datas = s_temp_data;
}
*tmp_data_buf ++ = s_temp_singal.data_buf[0];
*tmp_data_buf ++ = s_temp_singal.data_buf[1];
NbiotGetECL(&s_temp_data);
s_temp_singal.datas = s_temp_data*0.1;
*tmp_data_buf ++ = (u8)(s_temp_singal.datas); //沈阳规约ECL要一个字节整数0、1、2
NbiotGetCSQ(&s_temp_data1); //沈阳规约CSQ上传1字节正数
*tmp_data_buf ++ = s_temp_data1;
}
//沈阳NB规约组帧
void Frame_ack_ShenYangBase(STRUCT_FRAME_SY temp_struct, u8* p_temp_buf, u16 p_temp_len, u8* p_send_buf, u16* p_send_len)
{
u8 i = 0;
u16 j = 0;
UNION_2U8TOU16 frame_pack_len;
p_send_buf[0] = 0xFE; //沈阳规约没要求加前导
p_send_buf[1] = 0xFE;
p_send_buf[2] = FM_HEAD_MARK; //包头68H
p_send_buf[3] = MET_TYPE_SY; //规约版本02H
//ASCII格式的IMEI11字节(imei实际有15个数)
//信号参数6字节 //信号强度(RSRP),2字节有符号整数
// 信噪比(SNR),2字节有符号整数
// 覆盖等级1字节整数0,1,2
//信号质量(CSQ)1字节正数
//表地址6字节
//序列号1字节 自加
//功能码1字节
//加密版本1字节 0或1
//数据域长度2字节
//数据域N字节
//校验码1字节
//包尾16H
get_imei_and_signal_parameters(&p_send_buf[4]); //共18字节
for (i = 0; i < 6; i++) //沈阳规约地址是6字节BCD
{
p_send_buf[21 + i] = Sys_data_object.P1.met_addr[i];
}
p_send_buf[27] = temp_struct.serial_num0; //应答序列号
p_send_buf[28] = temp_struct.ack_ctrl;
p_send_buf[29] = temp_struct.sta;
frame_pack_len.datas = p_temp_len;
p_send_buf[30] = frame_pack_len.datas_map .data0 ;//沈阳规约数据长度2字节低字节在前高字节在后
p_send_buf[31] = frame_pack_len.datas_map .data1 ;
memcpy(&p_send_buf[32], p_temp_buf, p_temp_len);
p_send_buf[32+frame_pack_len.datas]=0;
for (j = 2; j < 32+frame_pack_len.datas; j++)
{
p_send_buf[32+frame_pack_len.datas] += p_send_buf[j];//校验和
}
p_send_buf[33+frame_pack_len.datas] = FM_END_MARK; //帧结束符
*p_send_len = 34+frame_pack_len.datas;
}
//沈阳NB规约应答帧格式组帧
void Sy_Frame_nb_read_ack(u8* p_send_buf, u16* p_send_len)
{
Frame_ack_ShenYangBase(frame_struct_SY, g_frame_temp_send_buf_sy, g_frame_temp_len_sy, p_send_buf, p_send_len);
}
////////////////////////////////////////////////////////////////以下为主动上报相关//////////////////////////////
//沈阳NB规约数据上报组帧
void Sy_Frame_nb_upload(u8* p_send_buf, u16* p_send_len)
{
Frame_ack_ShenYangBase(temp_struct_upload_SY, SY_CircleUploadBuf, SY_UploadDataLen, p_send_buf, p_send_len);
}
//报警数据上传组帧
void Nb_SY_ReadWarningRecord(u8 *p_send_buf, u16 *p_send_len)
{
static u8 num_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(step_UploadWarningSY)
{
case SY_STATE_S0:
{
DateTime tempDataTime;
temp_warning_start_p = p_send_buf;
temp_warning_end_p = p_send_buf;
RtccGetDateTime(&tempDataTime);//获取当前时间
num_to_read = Sys_data_object.P4.Point_SOE_write;
temp_soe_type.to_uint16 = SOE_ALL_TYPE;
//起始时间
start_time.s.year = tempDataTime.s.year;
start_time.s.month = tempDataTime.s.month;
start_time.s.day = tempDataTime.s.day;
start_time.s.hour = 0x00;
start_time.s.minute = 0x00;
start_time.s.second = 0x00;
//结束时间
end_time.s.year = tempDataTime.s.year;
end_time.s.month = tempDataTime.s.month;
end_time.s.day = tempDataTime.s.day;
end_time.s.hour = tempDataTime.s.hour;
end_time.s.minute = tempDataTime.s.minute;
end_time.s.second = tempDataTime.s.second;
//读取数量
num_get = 0;
totalnum = 0;
SY_UploadDataLen = 9;
temp_warning_end_p += 9;
step_UploadWarningSY = SY_STATE_S1;
}
break;
case SY_STATE_S1://读取一条SOE
{
if(totalnum >= TOTAL_NUM_SOE)//总共读TOTAL_NUM_SOE次 强制退出不能再读了
{
step_UploadWarningSY = SY_STATE_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_sy_eep_complete);
}
step_UploadWarningSY = SY_STATE_S2;
}
break;
case SY_STATE_S2:
{
if(TASK_IDLE == EepIfIdle())//读完了
{
if(TRUE == Check_One_Soe(temp_soe_type.to_uint16,&start_time,&end_time,&soe_event_read))//检测到一条有效的SOE
{
*temp_warning_end_p++ = soe_event_read.soe_type-1000;
*temp_warning_end_p++ = BCD2HEX(soe_event_read.soe_time.s.year);
*temp_warning_end_p++ = BCD2HEX(soe_event_read.soe_time.s.month);
*temp_warning_end_p++ = BCD2HEX(soe_event_read.soe_time.s.day);
*temp_warning_end_p++ = BCD2HEX(soe_event_read.soe_time.s.hour);
*temp_warning_end_p++ = BCD2HEX(soe_event_read.soe_time.s.minute);
*temp_warning_end_p++ = BCD2HEX(soe_event_read.soe_time.s.second);
num_get++;
if(num_get >= 20)//最多读20条
{
step_UploadWarningSY = SY_STATE_S3;
break;
}
}
step_UploadWarningSY = SY_STATE_S1;
}
}
break;
case SY_STATE_S3:
{
DateTime tempRtcc_time;
RtccGetDateTime(&tempRtcc_time);;//获取当前时间
//发送日期 3字节
*temp_warning_start_p++ = BCD2HEX(tempRtcc_time.s.year);
*temp_warning_start_p++ = BCD2HEX(tempRtcc_time.s.month);
*temp_warning_start_p++ = BCD2HEX(tempRtcc_time.s.day);
//发送时间 3字节
*temp_warning_start_p++ = BCD2HEX(tempRtcc_time.s.hour);
*temp_warning_start_p++ = BCD2HEX(tempRtcc_time.s.minute);
*temp_warning_start_p++ = BCD2HEX(tempRtcc_time.s.second);
//表计状态
*temp_warning_start_p++ = getWaterState();
//阀门状态
*temp_warning_start_p++ = 0;//无阀
*temp_warning_start_p++ = ((SY_UploadDataLen-9)/7);//报警数量
*p_send_len = temp_warning_end_p-temp_warning_start_p;
task_complete_warning_sy = PTL_PACK_SUCCESS;
step_UploadWarningSY = SY_STATE_S0;
}
break;
default:
{
step_UploadWarningSY = SY_STATE_S0;
}
break;
}
}
void GetUploadDataResetState_ShenYangUDP(void)
{
upload_frame_stat_sy =SY_STATE_S0;
}
u8 GetUploadDataCheckIdle_ShenYangUDP(void)
{
if(SY_STATE_S0 == upload_frame_stat_sy)
{
return TASK_IDLE;
}
else
{
return TASK_BUSY;
}
}
u8 GetUploadDataCheckTask_ShenYangUDP(void)
{
return task_complete_upload_sy;
}
void GetUploadDataMachine_ShenYangUDP(u8 data_step, u8* p_send_buf, u16* p_send_len)
{
switch(upload_frame_stat_sy)
{
case SY_STATE_S0:
{
if(data_step == UPLOAD_FRAME_REQUEST_NEW)//请求新数据包
{
temp_upload_step = 0;
upload_frame_retry_times = 0;
upload_frame_stat_sy = SY_STATE_S1;
}
else if(data_step == UPLOAD_FRAME_UPLOAD_OK)//发送成功
{
if(temp_upload_step == SY_STATE_S2)//当前包数据发送成功,任务结束
{
task_complete_upload_sy = PTL_PACK_FAIL;//任务完成
upload_frame_stat_sy = SY_STATE_S0;
}
if(temp_upload_step == SY_STATE_S3)//历史数据发送成功,存储已发送位置,获取下一包数据
{
upload_frame_stat_sy = SY_STATE_S10;
}
if(temp_upload_step == SY_STATE_S4)//报警数据发送成功,任务结束
{
task_complete_upload_sy = PTL_PACK_FAIL;//任务完成
upload_frame_stat_sy = SY_STATE_S0;
}
upload_frame_retry_times = 0;
SystemClearUploadAgain();//重传清0
}
else if(data_step == UPLOAD_FRAME_UPLOAD_RETRY)//请求重新发送
{
upload_frame_stat_sy = SY_STATE_S21;
}
else if(data_step == UPLOAD_FRAME_ONLINE_FAIL) //联网失败
{
if(UPLOAD_TYPE_FIX_TIME == GetEventUploadType()||
(UPLOAD_TYPE_RETRY_AGAIN == GetEventUploadType()))//定时上传
{
SystemAddUploadAgain();//重传增加
}
task_complete_upload_sy = PTL_PACK_FAIL;
upload_frame_stat_sy = SY_STATE_S0;
}
else
{
task_complete_upload_sy = PTL_PACK_FAIL;
upload_frame_stat_sy = SY_STATE_S0;
}
}
break;
case SY_STATE_S1://获取上报总包数
{
SY_CircleUploadPackets = getSY_CircleUploadPackets();//上报总包数
if(SY_CircleUploadPackets == 0)//还没有存储数据,则上报当前数据
{
upload_frame_stat_sy = SY_STATE_S2;
}
else
{
SY_CircleThisPacketNum = 0;
SY_CircleThisUploadPacket_Index = getSY_ThisCirclePacket_Index(SY_CircleThisPacketNum);//要上报的位置
upload_frame_stat_sy = SY_STATE_S3;
}
}
break;
case SY_STATE_S2://只上报当前数据
{
temp_upload_step = SY_STATE_S2;
temp_struct_upload_SY.ack_ctrl = FM_UPLOAD_CYCLE_DATA_CTRL;
temp_struct_upload_SY.sta = 0;
upload_serial_num_sy++;//序列号增加
temp_struct_upload_SY.serial_num0 = upload_serial_num_sy;
SY_UploadDataLen = NB_SY_Frame_Upload_CurrentData(&SY_CircleUploadBuf[0]);//获取数据部分
Sy_Frame_nb_upload(p_send_buf, p_send_len);//上报数据组帧
task_complete_upload_sy = PTL_PACK_SUCCESS;//任务完成
upload_frame_stat_sy = SY_STATE_S0;
}
break;
case SY_STATE_S3://上报历史数据:根据上报位置获取数据
{
SY_CiecleThisUploadPacket_Cnt = NB_SY_Frame_Upload_Data(SY_CircleThisUploadPacket_Index, &SY_CircleUploadBuf[10]);
if(SY_CiecleThisUploadPacket_Cnt > 0)
{
temp_upload_step = SY_STATE_S3;
DateTime tempRtcc_time;
SY_CircleUploadBuf[0] = SY_CircleUploadPackets; //总包数 1字节
SY_CircleUploadBuf[1] = SY_CircleThisPacketNum+1; //当前包序号 1字节
SY_GetCircleDateTime(&tempRtcc_time, SY_CircleThisUploadPacket_Index, 0);
//起始日期 3字节
SY_CircleUploadBuf[2] = BCD2HEX(tempRtcc_time.s.year);//BCD转成hex
SY_CircleUploadBuf[3] = BCD2HEX(tempRtcc_time.s.month);
SY_CircleUploadBuf[4] = BCD2HEX(tempRtcc_time.s.day);
//起始时间 3字节
SY_CircleUploadBuf[5] = BCD2HEX(tempRtcc_time.s.hour);
SY_CircleUploadBuf[6] = BCD2HEX(tempRtcc_time.s.minute);
SY_CircleUploadBuf[7] = BCD2HEX(tempRtcc_time.s.second);
SY_CircleUploadBuf[8] = 6; //6:表示30分钟5x6时间间隔1字节
SY_CircleUploadBuf[9] = SY_CiecleThisUploadPacket_Cnt; //数据条数1字节
SY_UploadDataLen = 10 + 16*SY_CiecleThisUploadPacket_Cnt;//根据数据条数计算数据长度
temp_struct_upload_SY.ack_ctrl = FM_UPLOAD_CYCLE_DATA_CTRL;
temp_struct_upload_SY.sta = 0;
upload_serial_num_sy++;//序列号增加
temp_struct_upload_SY.serial_num0 = upload_serial_num_sy;
Sy_Frame_nb_upload(p_send_buf, p_send_len);//上报数据组帧
task_complete_upload_sy = PTL_PACK_SUCCESS;//任务完成
upload_frame_stat_sy = SY_STATE_S0;
}
}
break;
case SY_STATE_S4://报警上传
{
if(FrameCheckMsgApp(MsgShenYang_NbUploadWarningWithCircle))//判断是否上报报警信息
{
FrameClearMsgApp(MsgShenYang_NbUploadWarningWithCircle);
step_UploadWarningSY = SY_STATE_S0;
task_complete_warning_sy = PTL_PACK_BUSY;
upload_frame_stat_sy = SY_STATE_S5;
}
else
{
task_complete_upload_sy = PTL_PACK_FAIL;//任务失败
upload_frame_stat_sy = SY_STATE_S0;
}
}
break;
case SY_STATE_S5://报警上传
{
Nb_SY_ReadWarningRecord(SY_CircleUploadBuf, &SY_UploadDataLen);
if(task_complete_warning_sy == PTL_PACK_SUCCESS)
{
temp_struct_upload_SY.ack_ctrl = FM_SUDDEN_ALARM_UPLOAD_CTRL;
temp_struct_upload_SY.sta = 0;
upload_serial_num_sy++;//序列号增加
temp_struct_upload_SY.serial_num0 = upload_serial_num_sy;
Sy_Frame_nb_upload(p_send_buf, p_send_len);//上报数据组帧
temp_upload_step = SY_STATE_S4;
task_complete_upload_sy = PTL_PACK_SUCCESS;//任务完成
upload_frame_stat_sy = SY_STATE_S0;
}
}
break;
case SY_STATE_S10://当前包上报成功后,更新存储指针
{
if(ShenYang_CircleDataStore_ClearUploadIndex(SY_CircleThisUploadPacket_Index))
{
SY_CircleThisPacketNum ++;
if(SY_CircleThisPacketNum < SY_CircleUploadPackets)
{
SY_CircleThisUploadPacket_Index = getSY_ThisCirclePacket_Index(SY_CircleThisPacketNum);//要上报的位置
upload_frame_stat_sy = SY_STATE_S3;//继续上报数据
}
else
{
upload_frame_stat_sy = SY_STATE_S4;//上报数据完成,开始上报报警信息
}
}
}
break;
case UP_DEAL_S21://重试
{
if(upload_frame_retry_times < 3)
{
upload_frame_retry_times++;
if(temp_upload_step == SY_STATE_S2)//当前包数据发送失败,继续发送当前包
{
upload_frame_stat_sy = SY_STATE_S2;
}
else if(temp_upload_step == SY_STATE_S3)//历史数据发送失败,继续发送该包历史数据
{
upload_frame_stat_sy = SY_STATE_S3;
}
else if(temp_upload_step == SY_STATE_S4)//报警数据发送失败,继续发送报警数据
{
upload_frame_stat_sy = SY_STATE_S4;
}
else
{
task_complete_upload_sy = PTL_PACK_FAIL;
upload_frame_stat_sy = SY_STATE_S0;
}
}
else//重新发送失败3次的处理
{
if((UPLOAD_TYPE_FIX_TIME == GetEventUploadType())||
(UPLOAD_TYPE_RETRY_AGAIN == GetEventUploadType()))//定时上传
{
if((temp_upload_step == SY_STATE_S2)||(temp_upload_step == SY_STATE_S3))//如果上报的是数据,允许重传
{
SystemAddUploadAgain();//重传增加
}
}
task_complete_upload_sy = PTL_PACK_FAIL;
upload_frame_stat_sy = SY_STATE_S0;
}
}
break;
default:
{
upload_frame_stat_sy = SY_STATE_S0;
break;
}
}
}
/*******************************************************************************
* @fun_name:NB_SS_Control_GetPara
* @brief :
* @param[in] :读取上报控制相关参数
* @param[out]: None
* @retval : None
* @other :
******************************************************************************/
u8 NB_SS_Control_GetPara(NB_SS_ControlParaTypeDef paraType)
{
return 0;
}
/*******************************************************************************
* @fun_name:NB_SS_Control_SetPara
* @param[in] :设置上报控制相关参数
******************************************************************************/
void NB_SS_Control_SetPara(NB_SS_ControlParaTypeDef paraType, u8 data)
{
switch(paraType)
{
case NB_HistroyReadIndex://历史数据的读指针
{
Sys_data_object.P1.histroy_w = data;
break;
}
case NB_UploadFailTimes://失败次数
{
SystemClearUploadAgain();
Sys_data_object.P1.Supplemental_send_flag.datas = data;
Sys_data_object.P3.ProductUpoadFailFlag = 0;
break;
}
case NB_SS_FormatError://上报数据格式错误
{
break;
}
default:
break;
}
}
//规约数据存储部分初始化
void DataStoreInit(void)
{
Quanzhou_Store_InitApp();
ShenYang_Store_InitApp();
}
//规约数据存储状态机
void DataStoreMachine(void)
{
Quanzhou_Store_Machine();//日、月冻结数据存储
ShenYang_Store_Machine();//沈阳数据存储
ShenYang_SOE_Machine();//SOE记录存储
ShenYang_TlvDataStoreMachine(); //沈阳参数
}
//规约数据存储休眠判断
u8 DataStoreIfIdle(void)
{
if((QuanzhouStore_IfSleep() == TRUE) && (ShenYangStore_IfSleep() == TRUE))
{
return TRUE;
}
return FALSE;
}
#endif