#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); } }