Files
HBshuiwuConcentrator/rp/rpprocess.c
2025-12-15 16:07:49 +08:00

133 lines
3.3 KiB
C

#include "stdafx.h"
#include "include.h"
#include "FreeRTOS.h"
#include "task.h"
#include "gprs.h"
#include "general.h"
//#include "frame3762task.h"
//#include "jpmeter.h"
//#include "dlresult.h"
/*
Éϱ¨¹ý³Ì
*/
#define PAGE_NUM_MAX (10)
extern u8* GetCurrentTime( void );
extern void concent_rp_data(u8 * val,u16 * len,u16 datalen);
extern u32 time_cur;
extern u8 * get_uart_send();
extern u16 * get_uart_send_plen();
extern bool is_report_time();
extern bool gprs_connect_status();
extern void gprs_send_flag();
extern void jp_dl_up(u8 * data,u16 datalen);
extern void jp_dl_ack_up(u8 * val,u16 len);
extern void gprs_recv_judge_timeset();
extern bool meter_find_id_fromaddr(u8 * addr,u16 * id);
extern bool meter_getaddress_fromid(u16 id,u8 * addr);
extern void cur_dl_grouphistroy(u8 curnum,u8 * cur_addrgroup,u8 *outnum,u8 * outaddrgroup);
extern bool meter_get_addr(u16 index,u8 * addr);
extern u16 meter_get_count();
extern bool manager_get_data(u8 * addr,u8* data,u8* state,u8 * state2);
extern bool hb_data_rp_pro(u16 index,u8 * val,u16 * len);
extern bool hb_data_rp_cur_pro(u8 * val,u16 * len,u8 * currentdata,u8 * sumdata,u8 * surplus,u8 * ala,u8 year,u8 month,u8 day,u8 hour);
extern void datarp_sucess_write(u16 index);
void rp_start();
SemaphoreHandle_t xSemaphore_rp;
static u16 rp_count = 0;
static bool is_rp_current = false;
static u8 rp_cur_time_year = 0;
static u8 rp_cur_time_month = 0;
static u8 rp_cur_time_day = 0;
static u8 rp_cur_time_hour = 0;
static u8 rp_currentdata[CUR_DATA_LEN];
static u8 rp_sumdata[SUM_DATA_LEN];
static u8 rp_surplusadta[SURPLUS_DATA_LEN];
static u8 rp_ala[ALA_DATA_LEN];
void rp_setcount(u16 count)
{
rp_count = count;
}
void rp_current(u16 count,
u8 * current,
u8 * sumdata,u8 * surplus,u8 * ala,
u8 year,u8 month,u8 day,u8 hour)
{
is_rp_current = true;
rp_count = count;
MemCpy(rp_currentdata,current,sizeof(rp_currentdata));
MemCpy(rp_sumdata,sumdata,sizeof(rp_sumdata));
MemCpy(rp_surplusadta,surplus,sizeof(rp_surplusadta));
MemCpy(rp_ala,ala,sizeof(rp_ala));
rp_cur_time_year = year;
rp_cur_time_month = month;
rp_cur_time_day = day;
rp_cur_time_hour = hour;
rp_start();
}
void rpprocess1()
{
if(is_rp_current)
{
is_rp_current = false;
hb_data_rp_cur_pro(get_uart_send(),get_uart_send_plen(),
rp_currentdata,rp_sumdata,rp_surplusadta,rp_ala,
rp_cur_time_year,rp_cur_time_month,rp_cur_time_day,rp_cur_time_hour);
gprs_send_flag();
}
else
{
if(hb_data_rp_pro(rp_count,get_uart_send(),get_uart_send_plen()))
{
gprs_send_flag();
}
}
}
void rpprocess_recv_ack()
{
datarp_sucess_write(rp_count);
printf("\r\n[RP] count = %d sucess\r\n",rp_count);
}
void rp_start()
{
xSemaphoreGive(xSemaphore_rp);
}
void rp_task()
{
MemSet(rp_currentdata,0,sizeof(rp_currentdata));
MemSet(rp_sumdata,0,sizeof(rp_sumdata));
MemSet(rp_surplusadta,0,sizeof(rp_surplusadta));
MemSet(rp_ala,0,sizeof(rp_ala));
vSemaphoreCreateBinary(xSemaphore_rp);
xSemaphoreTake(xSemaphore_rp, 0);
for (;;)
{
xSemaphoreTake(xSemaphore_rp, portMAX_DELAY);
if(gprs_connect_status())
{
rpprocess1();
}
xSemaphoreTake(xSemaphore_rp, 0);
}
}