133 lines
3.3 KiB
C
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);
|
|
}
|
|
}
|
|
|