X1UWaterWmbusISK/app/UWater_JX_Store_App.c

714 lines
22 KiB
C
Raw Normal View History

2024-06-03 15:49:39 +08:00
#include "sys_config.h"
#if PRODUCT_JS
#include "UWater_frame_app.h"
#include "UWater_eeprom_driver.h"
#include "UWater_rtcc_app.h"
#include "UWater_power_app.h"
#include "UWater_lcd_app.h"
#include "UWater_gp22_app.h"
#include "sys_processor.h"
#include "UWater_DataTools_App.h"
#include "UWater_JX_Store_App.h"
#include "UWater_sys.h"
/******************************************************************************************************
com_rxbuf_wcount_copy<EFBFBD><EFBFBD>com_rxbuf_rcount_copy <EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>¼<EFBFBD>ϱ<EFBFBD>ʱ<EFBFBD>̵<EFBFBD>com_rxbuf_wcount<EFBFBD><EFBFBD> com_rxbuf_rcount;
<EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ󣬻com_rxbuf_rcount_copy<EFBFBD><EFBFBD><EFBFBD><EFBFBD>com_rxbuf_rcount<EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD>
*/
#define __no_init __attribute__((zero_init))
__no_init volatile u32 jx_com_rxbuf_wcount_copy __attribute__((section(".ARM.__at_0x20007F28")));
__no_init volatile u32 jx_com_rxbuf_rcount_copy __attribute__((section(".ARM.__at_0x20007F2C")));
__no_init volatile u16 jx_com_rxbuf_check_copy __attribute__((section(".ARM.__at_0x20007F30")));
UNION_4U8TOU32 com_rxbuf_wcount, com_rxbuf_rcount; //<2F><EFBFBD><E6B4A2><EFBFBD>ݶ<EFBFBD>дָ<D0B4><D6B8>
UNION_4U8TOU32 com_rxbuf_wcount_copy, com_rxbuf_rcount_copy; //<2F><EFBFBD><E6B4A2><EFBFBD>ݶ<EFBFBD>дָ<D0B4><D6B8><EFBFBD>ϴ<EFBFBD>ʱ<EFBFBD><EFBFBD><E4B6B3>ָ<EFBFBD><D6B8>
u32 temp_rxbuf_rcount=0;
//<2F>ϴ<EFBFBD>ʱcom_rxbuf_rcount_copy<70>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>ǰcom_rxbuf_rcount_copy=temp_rxbuf_rcount<6E><74><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>temp_rxbuf_rcount=com_rxbuf_rcount_copy
/******************************************************************************************************/
/*
old_miji_interval_flow<EFBFBD><EFBFBD>new_miji_interval_flow<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>new_miji_interval_flow<EFBFBD><EFBFBD>old_miji_interval_flow<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,
<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>ֵnew_miji_interval_flow-old_miji_interval_flow<EFBFBD><EFBFBD>Ϊ
*/
U32_To_Float old_miji_interval_flow;
U32_To_Float new_miji_interval_flow;
U32_To_Float temp_base_flow;
static u8 miji_interval_time;//<2F>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
/******************************************************************************************************/
static DateTime s_temp_store_Time;//<2F><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ǰʱ<C7B0><CAB1>
UNION_JX_STORE_PackHead u_temp_store_data;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>ݸ<EFBFBD>ʽ
u8 upload_store_buf[JX_UPLOAD_LEN];//364 <20>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB>棺8<E6A3BA>ֽڼ<D6BD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD><EFBFBD>45<34><35>+4<>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 upload_store_count=0; //<2F><>¼<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ʵ<EFBFBD>ʵļ<CAB5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ಹ0xFF
u8 s_temp_store_ee_msg; //EEPROM<4F><4D><EFBFBD><EFBFBD>״̬
static u8 jiangxi_store_first_power_flag=0;//<2F><>һ<EFBFBD><D2BB><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>־
static TYP_STATE_JX jiangxi_store_init_step=JX_STATE_S0;//<2F>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC>״̬
static TYP_STATE_JX step_jx_store=JX_STATE_S0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢״̬
/******************************************************************************************************
JiangXiStore_InitApp
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
******************************************************************************************************/
void JiangXiStore_InitApp(void)
{
jiangxi_store_init_step = JX_STATE_S1;
while(jiangxi_store_init_step)
{
switch(jiangxi_store_init_step)
{
case JX_STATE_S0:
{
break;
}
case JX_STATE_S1:
{
if (TASK_IDLE == EepIfIdle())
{
EepRead(EEP_ADDR_JX_STORE_FIRST_POWER, &jiangxi_store_first_power_flag, 1, &s_temp_store_ee_msg);
jiangxi_store_init_step = JX_STATE_S2;
}
break;
}
case JX_STATE_S2:
{
if (TASK_IDLE == EepIfIdle())
{
if (0x55 == jiangxi_store_first_power_flag)
{
jiangxi_store_init_step = JX_STATE_S20;
}
else //<2F><>һ<EFBFBD><D2BB><EFBFBD>ϵ<EFBFBD>
{
com_rxbuf_wcount.datas = 0;
com_rxbuf_rcount.datas = 0;
StoreRWIndex_2_Ram();
jiangxi_store_init_step = JX_STATE_S10;
}
}
break;
}
//<2F><>һ<EFBFBD><D2BB><EFBFBD>ϵ<EFBFBD>
case JX_STATE_S10://<2F><><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
{
if (TASK_IDLE == EepIfIdle())
{
EepWrite(&com_rxbuf_wcount.data_buf[0], EEP_ADDR_JX_STORE_WRITE, 4, &s_temp_store_ee_msg);
jiangxi_store_init_step = JX_STATE_S11;
}
break;
}
case JX_STATE_S11://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
{
if ((SUCCESS == EepCheckMsg(s_temp_store_ee_msg)) && (TASK_IDLE == EepIfIdle()))
{
EepWrite(&com_rxbuf_rcount.data_buf[0], EEP_ADDR_JX_STORE_READ, 4, &s_temp_store_ee_msg);
jiangxi_store_init_step = JX_STATE_S12;
}
break;
}
case JX_STATE_S12://<2F><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>־
{
if (TASK_IDLE == EepIfIdle())
{
jiangxi_store_first_power_flag = 0x55;
EepWrite(&jiangxi_store_first_power_flag, EEP_ADDR_JX_STORE_FIRST_POWER, 1, &s_temp_store_ee_msg);
jiangxi_store_init_step = JX_STATE_S30;
}
break;
}
//<2F>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϵ<EFBFBD>
case JX_STATE_S20://<2F><>ȡдָ<D0B4><D6B8>
{
if (TASK_IDLE == EepIfIdle())
{
EepRead(EEP_ADDR_JX_STORE_WRITE, com_rxbuf_wcount.data_buf, 4, &s_temp_store_ee_msg);
jiangxi_store_init_step = JX_STATE_S21;
}
break;
}
case JX_STATE_S21://<2F><>ȡ<EFBFBD><C8A1>ָ<EFBFBD><D6B8>
{
if (TASK_IDLE == EepIfIdle())
{
EepRead(EEP_ADDR_JX_STORE_READ, com_rxbuf_rcount.data_buf, 4, &s_temp_store_ee_msg);
jiangxi_store_init_step = JX_STATE_S30;
}
break;
}
//<2F>ȴ<EFBFBD>EE<45><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case JX_STATE_S30:
{
if (TASK_IDLE == EepIfIdle())
{
if(jx_com_rxbuf_check_copy == getCRC_HisIndex(jx_com_rxbuf_wcount_copy, jx_com_rxbuf_rcount_copy))
{
com_rxbuf_wcount.datas = jx_com_rxbuf_wcount_copy;
com_rxbuf_rcount.datas = jx_com_rxbuf_rcount_copy;
}
jiangxi_store_init_step = JX_STATE_S0;
}
break;
}
default:
{
jiangxi_store_init_step = JX_STATE_S0;
break;
}
}
EepMachineDriver();
}
}
/*************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>write_com_rx_data
˵ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:UNION_JX_STORE_PackHead<EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ÿ45<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>Ӧһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
*************************************************************************/
int write_com_rx_data(UNION_JX_STORE_PackHead *dat)
{
static TYP_STATE_JX step_store_write=JX_STATE_S0;
switch(step_store_write)
{
case JX_STATE_S0://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(TASK_IDLE == EepIfIdle())
{
if(com_rxbuf_wcount.datas == 0xFFFFFFFF)//<2F>ж<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
{
com_rxbuf_wcount.datas = 0;//<2F><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>ָ<EFBFBD><D6B8>
com_rxbuf_rcount.datas = 0;
StoreRWIndex_2_Ram();
}
EepWrite(dat->Stru.StepUnion.buf, (EEP_ADDR_JX_STORE_STEP_START + (com_rxbuf_wcount.datas%COM_RXBUF_MAX)*8), 8, &s_temp_store_ee_msg);
step_store_write = JX_STATE_S1;
}
break;
}
case JX_STATE_S1://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(TASK_IDLE == EepIfIdle())
{
if((com_rxbuf_wcount.datas % 45) == 0)
{
EepWrite(dat->Stru.BaseFlowData.data_buf, EEP_ADDR_JX_STORE_BASE_START + ((com_rxbuf_wcount.datas%COM_RXBUF_MAX)/45)*4, 4, &s_temp_store_ee_msg);
}
step_store_write = JX_STATE_S2;
}
break;
}
case JX_STATE_S2://<2F><><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
{
if(TASK_IDLE == EepIfIdle())//eeд<65><D0B4><EFBFBD><EFBFBD>
{
com_rxbuf_wcount.datas ++;
StoreRWIndex_2_Ram();
step_store_write = JX_STATE_S0;
return SUCCESS;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
}
default:
{
step_store_write = JX_STATE_S0;
}
}
return ERROR;
}
/*************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Copy_R_W_Count
˵ <EFBFBD><EFBFBD>:<EFBFBD>ϴ<EFBFBD>ʱ<EFBFBD>̶<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>дָ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD>0xFF
*************************************************************************/
u8 Copy_R_W_Count(void)
{
static TYP_STATE_JX step_store_read_count_copy=JX_STATE_S0;
switch(step_store_read_count_copy)
{
case JX_STATE_S0:
{
if(TASK_IDLE == EepIfIdle())
{
if((com_rxbuf_wcount.datas == 0xFFFFFFFF)||(com_rxbuf_rcount.datas == 0xFFFFFFFF))//<2F>ж<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
{
com_rxbuf_wcount.datas = 0;
com_rxbuf_rcount.datas = 0;
StoreRWIndex_2_Ram();
step_store_read_count_copy = JX_STATE_S1;
}
else
{
com_rxbuf_wcount_copy.datas = com_rxbuf_wcount.datas;//6cb7
com_rxbuf_rcount_copy.datas = com_rxbuf_rcount.datas;//1f2f
if (com_rxbuf_wcount_copy.datas >= com_rxbuf_rcount_copy.datas )
{
if((com_rxbuf_wcount_copy.datas - com_rxbuf_rcount_copy.datas) > COM_RXBUF_MAX)
{
com_rxbuf_rcount_copy.datas = (com_rxbuf_wcount_copy.datas - COM_RXBUF_MAX);//6177
}
}
else
{
com_rxbuf_rcount_copy.datas = com_rxbuf_wcount_copy.datas;
}
if(com_rxbuf_wcount_copy.datas > (com_rxbuf_rcount_copy.datas + COM_RXBUF_MAX -45))//<2F>ж<EFBFBD><D0B6>Ƿ񸲸<C7B7><F1B8B2B8><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>ݵĻ<DDB5><C4BB><EFBFBD><EFBFBD><EFBFBD>
{
com_rxbuf_rcount_copy.datas = com_rxbuf_rcount_copy.datas + (45 - com_rxbuf_rcount_copy.datas%45);//<2F><>ȥ<EFBFBD>װ<EFBFBD><D7B0>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
step_store_read_count_copy = JX_STATE_S0;//38941---38970
return SUCCESS;
}
}
break;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч,<2C><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
case JX_STATE_S1:
{
if(TASK_IDLE == EepIfIdle())
{
EepWrite(com_rxbuf_wcount.data_buf, EEP_ADDR_JX_STORE_WRITE, 4, &s_temp_store_ee_msg);
step_store_read_count_copy = JX_STATE_S2;
}
break;
}
case JX_STATE_S2:
{
if(TASK_IDLE == EepIfIdle())
{
EepWrite(com_rxbuf_rcount.data_buf, EEP_ADDR_JX_STORE_READ, 4, &s_temp_store_ee_msg);
step_store_read_count_copy = JX_STATE_S0;
}
break;
}
default:
{
step_store_read_count_copy = JX_STATE_S0;
break;
}
}
return ERROR;
}
/*************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Renew_Rcount
˵ <EFBFBD><EFBFBD>:<EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>com_rxbuf_rcount_copy<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>com_rxbuf_rcount.
Ŀ<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ֹ<EFBFBD>ϱ<EFBFBD>ʧ<EFBFBD>ܻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʧ<EFBFBD><EFBFBD>.
<EFBFBD>ɹ<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD>ϱ<EFBFBD>Ӧ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
temp_rxbuf_rcount<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>com_rxbuf_rcount_copy<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>com_rxbuf_rcount_copy,<EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>com_rxbuf_rcount_copy
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD>0xFF
*************************************************************************/
u8 Renew_Rcount(void)
{
static TYP_STATE_JX step_renew_Rcount=JX_STATE_S0;
switch(step_renew_Rcount)
{
case JX_STATE_S0://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
{
if(TASK_IDLE == EepIfIdle())//eeд<65><D0B4><EFBFBD><EFBFBD>
{
com_rxbuf_rcount_copy.datas = temp_rxbuf_rcount;
com_rxbuf_rcount.datas = com_rxbuf_rcount_copy.datas;
EepWrite(com_rxbuf_rcount.data_buf, EEP_ADDR_JX_STORE_READ, 4, &s_temp_store_ee_msg);
step_renew_Rcount = JX_STATE_S1;
}
break;
}
case JX_STATE_S1:
{
if(TASK_IDLE == EepIfIdle())//eeд<65><D0B4><EFBFBD><EFBFBD>
{
step_renew_Rcount = JX_STATE_S0;
return SUCCESS;
}
break;
}
default:
{
step_renew_Rcount = JX_STATE_S0;
break;
}
}
return ERROR;
}
/************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:get_com_rx_num_copy
˵ <EFBFBD><EFBFBD>:<EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϱ<EFBFBD><EFBFBD>ļ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>COM_RXBUF_MAX,<EFBFBD><EFBFBD>ȡCOM_RXBUF_MAX
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD>0xFF
*************************************************************************/
u16 get_com_rx_num_copy(void)
{
if (com_rxbuf_wcount_copy.datas >= com_rxbuf_rcount_copy.datas )
{
if((com_rxbuf_wcount_copy.datas - com_rxbuf_rcount_copy.datas) > COM_RXBUF_MAX)
{
com_rxbuf_rcount_copy.datas = (com_rxbuf_wcount_copy.datas - COM_RXBUF_MAX);
}
return (com_rxbuf_wcount_copy.datas - com_rxbuf_rcount_copy.datas);
}
return 0;
}
/*************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:get_com_rx_data
˵ <EFBFBD><EFBFBD>:<EFBFBD><EFBFBD>ȡ<EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************/
int get_com_rx_data(void)
{
static TYP_STATE_JX step_store_read=JX_STATE_S0;
switch(step_store_read)
{
case JX_STATE_S0://<2F><>ȡ<EFBFBD>洢ָ<E6B4A2><D6B8>
{
int i=0;
for(i=0;i<JX_UPLOAD_LEN;i++)
{
upload_store_buf[i] = 0xFF;//<2F><><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7>ͻ<EFBFBD><CDBB><EFBFBD><E6A3AC><EFBFBD>ھͲ<DABE><CDB2><EFBFBD><EFBFBD>ٲ<EFBFBD>0xFF
}
if(get_com_rx_num_copy() > 0)
{
temp_rxbuf_rcount = com_rxbuf_rcount_copy.datas - com_rxbuf_rcount_copy.datas%45;
upload_store_count = 0;
step_store_read = JX_STATE_S1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
}
else if(get_com_rx_num_copy() == 0) //<2F><><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>¼ʱ,<2C>ظ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>0
{
RtccGetDateTime(&s_temp_store_Time);
u_temp_store_data.Stru.StepUnion.StepData.Day = s_temp_store_Time.s.day;
u_temp_store_data.Stru.StepUnion.StepData.Hour = s_temp_store_Time.s.hour;
u_temp_store_data.Stru.StepUnion.StepData.Minute = s_temp_store_Time.s.minute;
u_temp_store_data.Stru.StepUnion.StepData.StepTime = miji_interval_time;
u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.gp22_float = 0;
RTCC_To_Float temp_flow;
temp_rxbuf_rcount = com_rxbuf_rcount_copy.datas;
temp_flow.gp22_u32 = Gp30CheckDataApp(2);
upload_store_buf[0] = u_temp_store_data.Stru.StepUnion.StepData.Day;
upload_store_buf[1] = u_temp_store_data.Stru.StepUnion.StepData.Hour;
upload_store_buf[2] = u_temp_store_data.Stru.StepUnion.StepData.Minute;
upload_store_buf[3] = u_temp_store_data.Stru.StepUnion.StepData.StepTime;
upload_store_buf[4] = u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.buf[0];
upload_store_buf[5] = u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.buf[1];
upload_store_buf[6] = u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.buf[2];
upload_store_buf[7] = u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.buf[3];
upload_store_buf[360] = temp_flow.buf[0];
upload_store_buf[361] = temp_flow.buf[1];
upload_store_buf[362] = temp_flow.buf[2];
upload_store_buf[363] = temp_flow.buf[3];
return SUCCESS;// <20>ڴ˾ͷ<CBBE><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
}
case JX_STATE_S1://<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(TASK_IDLE == EepIfIdle())//(temp_rxbuf_rcount%COM_RXBUF_MAX)/45=<3D><>2a=42<34><32><EFBFBD><EFBFBD>ʼ,<2C><><EFBFBD>µ<EFBFBD>43<34><33>44<34><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>ġ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>3<EFBFBD><33>...<2E><><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
{
EepRead(EEP_ADDR_JX_STORE_BASE_START + ((temp_rxbuf_rcount%COM_RXBUF_MAX)/45)*4, &upload_store_buf[360], 4, &s_temp_store_ee_msg);
step_store_read = JX_STATE_S2;
}
break;
}
case JX_STATE_S2://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(TASK_IDLE == EepIfIdle())
{
//<2F>жϻ<D0B6><CFBB><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>Ч<EFBFBD><D0A7>
temp_base_flow.buf[0] = upload_store_buf[360];
temp_base_flow.buf[1] = upload_store_buf[361];
temp_base_flow.buf[2] = upload_store_buf[362];
temp_base_flow.buf[3] = upload_store_buf[363];
if((temp_base_flow.gp22_float > 10000000)||(temp_base_flow.gp22_float < 0)||(temp_base_flow.gp22_u32 == 0Xffffffff))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ݣ<EFBFBD><DDA3>ҳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
com_rxbuf_wcount.datas = 0;
com_rxbuf_rcount.datas = 0;
com_rxbuf_wcount_copy.datas = 0;
com_rxbuf_rcount_copy.datas = 0;
StoreRWIndex_2_Ram();
temp_rxbuf_rcount = com_rxbuf_rcount_copy.datas;
temp_base_flow.gp22_u32 = Gp30CheckDataApp(2);
upload_store_buf[0] = u_temp_store_data.Stru.StepUnion.StepData.Day;
upload_store_buf[1] = u_temp_store_data.Stru.StepUnion.StepData.Hour;
upload_store_buf[2] = u_temp_store_data.Stru.StepUnion.StepData.Minute;
upload_store_buf[3] = u_temp_store_data.Stru.StepUnion.StepData.StepTime;
upload_store_buf[4] = u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.buf[0];
upload_store_buf[5] = u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.buf[1];
upload_store_buf[6] = u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.buf[2];
upload_store_buf[7] = u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.buf[3];
upload_store_buf[360] = temp_base_flow.buf[0];
upload_store_buf[361] = temp_base_flow.buf[1];
upload_store_buf[362] = temp_base_flow.buf[2];
upload_store_buf[363] = temp_base_flow.buf[3];
step_store_read = JX_STATE_S5;
}
else
{
if(temp_rxbuf_rcount < com_rxbuf_wcount_copy.datas)
{
EepRead(EEP_ADDR_JX_STORE_STEP_START + (temp_rxbuf_rcount%COM_RXBUF_MAX)*8, &upload_store_buf[8*upload_store_count], 8, &s_temp_store_ee_msg);
step_store_read = JX_STATE_S3;
}
else
{
step_store_read = JX_STATE_S4;
}
}
}
break;
}
case JX_STATE_S3:
{
if(TASK_IDLE == EepIfIdle())
{
temp_rxbuf_rcount++;
upload_store_count++;
if(upload_store_count < 45)
{
step_store_read = JX_STATE_S2;
}
else
{
step_store_read = JX_STATE_S4;
}
}
break;
}
case JX_STATE_S4:
{
if(TASK_IDLE == EepIfIdle())
{
step_store_read = JX_STATE_S0;
return SUCCESS; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч,<2C><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
case JX_STATE_S5:
{
if(TASK_IDLE == EepIfIdle())
{
EepWrite(com_rxbuf_wcount.data_buf, EEP_ADDR_JX_STORE_WRITE, 4, &s_temp_store_ee_msg);
step_store_read = JX_STATE_S6;
}
break;
}
case JX_STATE_S6:
{
if(TASK_IDLE == EepIfIdle())
{
EepWrite(com_rxbuf_rcount.data_buf, EEP_ADDR_JX_STORE_READ, 4, &s_temp_store_ee_msg);
step_store_read = JX_STATE_S4;
}
break;
}
default:
{
break;
}
}
return ERROR;
}
/**************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>JiangXiStore_Machine
˵ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ݴ״̬<EFBFBD><EFBFBD>;
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD>0ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-30s; 1-1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 2-2<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
***************************************************************************/
void JiangXiStore_Machine(void)
{
switch(step_jx_store)
{
case JX_STATE_S0:
{
if(Gp30CheckDataApp(1) > 0)//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
old_miji_interval_flow.gp22_u32 = Gp30CheckDataApp(2);
u_temp_store_data.Stru.BaseFlowData.datas = Gp30CheckDataApp(2);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><><D2AA><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯֮ǰ
miji_interval_time = FrameCheckParaApp(FramePara_StoreFrequency);
if(miji_interval_time == 0x00)
{
RtccSetTimer(RTCC_MIJI_WAIT_TIME,30);//Ĭ<><C4AC>30s<30><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
}
else
{
RtccSetTimer(RTCC_MIJI_WAIT_TIME,60*miji_interval_time);
}
step_jx_store = JX_STATE_S1;
}//8900+5000+1000+2980+7000+6200+2000=11.4 3.2+2.2=5.4 5.8
break;
}
case JX_STATE_S1:
{
if(RtccCheckTimer(RTCC_MIJI_WAIT_TIME) == 0)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʽ
RtccGetDateTime(&s_temp_store_Time);
u_temp_store_data.Stru.StepUnion.StepData.Day = s_temp_store_Time.s.day;
u_temp_store_data.Stru.StepUnion.StepData.Hour = s_temp_store_Time.s.hour;
u_temp_store_data.Stru.StepUnion.StepData.Minute = s_temp_store_Time.s.minute;
u_temp_store_data.Stru.StepUnion.StepData.StepTime = miji_interval_time;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
new_miji_interval_flow.gp22_u32 = Gp30CheckDataApp(2);
u_temp_store_data.Stru.StepUnion.StepData.StepFlowData.gp22_float = (new_miji_interval_flow.gp22_float - old_miji_interval_flow.gp22_float)/100;
step_jx_store = JX_STATE_S2;
}
break;
}
case JX_STATE_S2:
{
if(write_com_rx_data(&u_temp_store_data) == SUCCESS)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢
{
step_jx_store = JX_STATE_S0;
}
break;
}
default:
{
step_jx_store = JX_STATE_S0;
break;
}
}
}
/**
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϱ<EFBFBD><EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD>
*/
u8 JiangXiStore_UploadPacks(void)
{
u16 temp_upload_record_cnts=0;
u8 temp_upload_total_packs=0;
if((com_rxbuf_wcount.datas == 0xFFFFFFFF)||(com_rxbuf_rcount.datas == 0xFFFFFFFF))//<2F>ж<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
{
com_rxbuf_wcount.datas = 0;
com_rxbuf_rcount.datas = 0;
}
else
{
if (com_rxbuf_wcount.datas >= com_rxbuf_rcount_copy.datas )
{
if((com_rxbuf_wcount.datas - com_rxbuf_rcount.datas) > COM_RXBUF_MAX)
{
com_rxbuf_rcount.datas = (com_rxbuf_wcount.datas - COM_RXBUF_MAX);//6177
}
}
if(com_rxbuf_wcount.datas > (com_rxbuf_rcount.datas + COM_RXBUF_MAX -45))//<2F>ж<EFBFBD><D0B6>Ƿ񸲸<C7B7><F1B8B2B8><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>ݵĻ<DDB5><C4BB><EFBFBD><EFBFBD><EFBFBD>
{
com_rxbuf_rcount.datas = com_rxbuf_rcount.datas + (45 - com_rxbuf_rcount.datas%45);//<2F><>ȥ<EFBFBD>װ<EFBFBD><D7B0>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
temp_upload_record_cnts = com_rxbuf_wcount.datas - com_rxbuf_rcount.datas;
temp_upload_total_packs = (temp_upload_record_cnts/45);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ܰ<EFBFBD><DCB0><EFBFBD>,45<34><35><EFBFBD><EFBFBD>¼һ<C2BC><D2BB>
if(temp_upload_record_cnts % 45)
{
temp_upload_total_packs += 1;
}
if(temp_upload_total_packs>64)//<2F><><EFBFBD><EFBFBD>64<36><34>
{
temp_upload_total_packs = 64;
}
return temp_upload_total_packs;
}
/**
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRCУ<EFBFBD><EFBFBD>,
*/
u16 getCRC_HisIndex(u32 data1, u32 data2)
{
u8 tempBuf[8];
tempBuf[0] = data1&0xFF;
tempBuf[1] = (data1>>8)&0xFF;
tempBuf[2] = (data1>>16)&0xFF;
tempBuf[3] = (data1>>24)&0xFF;
tempBuf[4] = data2&0xFF;
tempBuf[5] = (data2>>8)&0xFF;
tempBuf[6] = (data2>>16)&0xFF;
tempBuf[7] = (data2>>24)&0xFF;
return CRC16(tempBuf,8);
}
void StoreRWIndex_2_Ram(void)
{
jx_com_rxbuf_wcount_copy = com_rxbuf_wcount.datas;
jx_com_rxbuf_rcount_copy = com_rxbuf_rcount.datas;
jx_com_rxbuf_check_copy = getCRC_HisIndex(jx_com_rxbuf_wcount_copy, jx_com_rxbuf_rcount_copy);
}
/***********************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
***********************************************/
void NB_JX_Frame_Upload_Data(u8* psend_buf, u16* psend_len, u8 totalPack, u8 curPack)
{
u16 tmp_i =0;
s16 s_temp_data=0;
MET_STATE temp_state; //״̬<D7B4><CCAC>
//u16 s_g_data_len = PACK_NUM_GPRS_TOTAL;
UNION_2U8TOU16 temp_data;
*psend_buf++ = totalPack;//<2F><>Ҫ<EFBFBD>ϱ<EFBFBD><CFB1>ܱ<EFBFBD><DCB1><EFBFBD>;
*psend_buf++ = curPack;//<2F><>ǰ<EFBFBD>ϱ<EFBFBD><CFB1>İ<EFBFBD><C4B0><EFBFBD>;
for (tmp_i = 0; tmp_i < 360; tmp_i++) //8<><38><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
{
*psend_buf++ = upload_store_buf[tmp_i];
}
//<2F><>ѹֵ
temp_data.datas =FramHexToBcd16(PowerCheckValueSys());
*psend_buf++ = temp_data.datas_map.data0;
*psend_buf++ = temp_data.datas_map.data1;
//<2F><><EFBFBD><EFBFBD>
*psend_buf++ = upload_store_buf[360];
*psend_buf++ = upload_store_buf[361];
*psend_buf++ = upload_store_buf[362];
*psend_buf++ = upload_store_buf[363];
//<2F>ź<EFBFBD>ǿ<EFBFBD><C7BF>
NbiotGetRSRP(&s_temp_data);
temp_data.datas = -s_temp_data;
*psend_buf++ =temp_data.data_buf[0];
*psend_buf++ =temp_data.data_buf[1];
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
*psend_buf++=GetUploadConnectTime_JX(0)&0xFF;
*psend_buf++=(GetUploadConnectTime_JX(0)>>8)&0xFF;
*psend_buf++= GetUploadConnectTime_JX(1)&0xFF;
*psend_buf++= (GetUploadConnectTime_JX(1)>>8)&0xFF;
//״̬<D7B4><CCAC>
temp_state = FrameGetByte();
*psend_buf++ = temp_state.stat0;
*psend_buf++ = temp_state.stat1;
*psend_buf++ = temp_state.stat2;
*psend_buf++ = 0x02;
*psend_len = PACK_NUM_GPRS_TOTAL;
}
u8 JiangXiStore_IfSleep(void)
{
if((step_jx_store == JX_STATE_S0) ||(step_jx_store == JX_STATE_S1) )
{
return TRUE;
}
else
{
return FALSE;
}
}
#endif