forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-29 6c7e61a54ef9b96f79704f0b965664e89f57dd52
Function/WirelessRemoteComm/wireless_remote_comm.c
@@ -3,8 +3,10 @@
#include "gpio.h"
#include "system_mem_para.h"
#include "wrc_sizhu_v4.h"
#include "system_general_para.h"
#include "linked_list.h"
WRC_CTRL_PARA_T wrc_ctrl_para_g={.wrc_state=WRC_IDLE};
WRC_CTRL_PARA_T wrc_ctrl_para_g={.wrc_state=WRC_IDLE,.link_status = LINK_NONE,.wrc_err_code = WRC_ERR_NONE,.report_result_flag = FAIL};
WRC_UART_PARA_T   wrc_uart_para_g = {.recv_flag = RESET};
LINK_INFO_T   link_info_g;
@@ -51,8 +53,8 @@
   uint8_t   i_index;
   
   //?·¢ËÍÄÚÈÝ´¦Àí
   buffer[0] = 0x1b;
   buffer[1] = 0x1b;
   buffer[0] = WRC_MODULE_CMD_OPEN;
   buffer[1] = WRC_MODULE_CMD_OPEN;
   buffer[2] = 0x00;      
   
   arrayA_2_arrayB((uint8_t*)wrc_para_sizhu_g.ip1, &buffer[3], 4, LITTLE_ENDIAN);
@@ -94,7 +96,7 @@
   }
   buffer[204] = 0x16;
   
   WRC_SEND_NORMAL(buffer,205);
   WRC_UART_SEND(buffer,205);
}
LINK_STATUS      LinkDataAnalysis(uint8_t *receive_buf)
@@ -105,7 +107,7 @@
   LINK_STATUS   return_flag = LINK_NONE;
   
   for(count_i = 0;count_i< 100;count_i++){
      if((receive_buf[count_i]==0x41)&&(receive_buf[count_i+1]==0x41))
      if((receive_buf[count_i]==WRC_MODULE_CMD_LINK_STATUS_ACK)&&(receive_buf[count_i+1]==WRC_MODULE_CMD_LINK_STATUS_ACK))
      {
         buf_p = (char *)(&(receive_buf[count_i]));
         break;
@@ -117,7 +119,7 @@
      for(count_i = 0;count_i< 89;count_i++)
         check_sum += *(buf_p + count_i);
      if((*(buf_p + 89) == check_sum)&&(*(buf_p + 90) == 0x16)){
      if(*(buf_p + 89) == check_sum){
         if(*(buf_p + 2) == 1){
            return_flag = LINK_OK;
            if((*(buf_p+3) != 1)&&(*(buf_p+3) <0x39)){
@@ -144,18 +146,19 @@
}
WRC_STATUS   ProtocolDataAnalysis(uint8_t *receive_buf)
WRC_STATUS   ProtocolDataAnalysis(uint8_t *receive_buf,uint8_t *ack_buf,uint16_t *ack_buf_length)
{
   char *buf_p = NULL;
   char *buf_next_p = NULL;
//   uint16_t check_crc = 0;
   uint16_t count_i = 0;
   
   buf_p = strstr((char *)receive_buf , "+R");
   buf_p = strstr((char *)receive_buf , WRC_MODULE_CMD_DATA_RECV);
   if(buf_p != NULL){
      buf_next_p = strstr(buf_p , ",");
      if(buf_next_p != NULL){
         return SizhuV4ProtocolDataAnalysis((uint8_t *)buf_next_p);
         __SYS_DELAY_SEC_TIME_SET_(wrc_timeout_para,wrc_ctrl_para_g.time_out_time_sec);//ÔÝʱ·ÅÔÚ½ÓÊÕµ½+R¾Í³äÖµ³¬Ê±Ê±¼ä£¬¸üºÏÀíµÄÓ¦¸Ã·ÅÔÚЭÒéÖ¡¸ñʽÅжϳɹ¦²¢ÏìÓ¦Êý¾ÝÖ®ºó
         return SizhuV4ProtocolDataAnalysis((uint8_t *)buf_next_p,ack_buf,ack_buf_length);
         
      }
   }
@@ -173,7 +176,9 @@
   delay_us(10);
   WRC_PWR_ON;
   
   //?±ØÒªµÄͨѶ²ÎÊý³õʼ»¯¿ÉÒÔ·ÅÔÚÕâÀï,Ò²¿ÉÒÔ·ÅÔÚÁªÍø³É¹¦Ö®ºó
   wrc_ctrl_para_g.wrc_err_code = WRC_ERR_NONE;
   wrc_ctrl_para_g.wrc_OFF_cnt = 0;
   //?±ØÒªµÄͨѶ²ÎÊý³õʼ»¯¿ÉÒÔ·ÅÔÚÕâÀï
   SizhuV4SendParaInit();
   
   return WRC_SEND_DATA;
@@ -190,6 +195,7 @@
   WrcSendCreateLinkCmd();
   wrc_ctrl_para_g.link_status = LINK_NONE;
   
   __SYS_DELAY_SEC_TIME_SET_(wrc_timeout_para,wrc_ctrl_para_g.time_out_time_sec);
   
   return WRC_WAIT_REC_DATA;
}
@@ -197,17 +203,35 @@
WRC_STATUS   WrcSendDataPro(void)
{
   uint8_t send_buf[3+1024] = {0};
   uint16_t   send_length;
   //?·¢ËÍÊý¾Ý´¦Àí
   send_length = SizhuV4SendNormalData2buf(&send_buf[3]);
//   wrc_ctrl_para_g.time_out_cnt = wrc_ctrl_para_g.time_out_time_sec;
   
   send_buf[0] = WRC_MODULE_CMD_DATA_UP;
   send_buf[1] = send_length &0x0f;
   send_buf[2] = send_length >>8;
   
   if(send_length > sizeof(send_buf)){
      wrc_ctrl_para_g.wrc_err_code = WRC_ERR_SEND_DATA;
      wrc_ctrl_para_g.wrc_OFF_cnt = 0;
      return WRC_OFF;
   }
   WRC_UART_SEND(send_buf,send_length);
   __SYS_DELAY_SEC_TIME_SET_(wrc_timeout_para,wrc_ctrl_para_g.time_out_time_sec);
   return WRC_WAIT_REC_DATA;
}
WRC_STATUS   WrcWaitRecDataPro(void)
{
   WRC_STATUS   return_status;
   uint8_t send_buf[3+1024] = {0};
   uint16_t   send_length = 0;
   //½ÓÊÕbuf´¦Àí
   WRC_RX_DMA_check(&wrc_uart_para_g);
   
@@ -221,32 +245,102 @@
            return WRC_SEND_DATA;
         }
      }else if(wrc_ctrl_para_g.link_status ==LINK_OK){
         return_status = ProtocolDataAnalysis(wrc_uart_para_g.recv_buf);
         return_status = ProtocolDataAnalysis(wrc_uart_para_g.recv_buf,&send_buf[3],&send_length);
         if((send_length > 0)&&(send_length < sizeof(send_buf))){ //ÓÐÏìÓ¦Êý¾ÝÐèÒª·¢ËÍ
            send_buf[0] = WRC_MODULE_CMD_DATA_UP;
            send_buf[1] = send_length &0x0f;
            send_buf[2] = send_length >>8;
            WRC_UART_SEND(send_buf,send_length);
            __SYS_DELAY_SEC_TIME_SET_(wrc_timeout_para,wrc_ctrl_para_g.time_out_time_sec);
         }
         memset(wrc_uart_para_g.recv_buf,0,sizeof(wrc_uart_para_g.recv_buf));
         return return_status;
      }
   }
   if(__SYS_DELAY_SEC_FLAG_GET(wrc_timeout_para) == SET){
      //Åжϳ¬Ê±Í˳ö
      if(wrc_ctrl_para_g.link_status ==LINK_NONE)
         wrc_ctrl_para_g.wrc_err_code = WRC_ERR_WAIT_LINK_TIME_OUT;
      else if(wrc_ctrl_para_g.link_status ==LINK_OK)
         wrc_ctrl_para_g.wrc_err_code = WRC_ERR_WAIT_ACK_TIME_OUT;
      wrc_ctrl_para_g.wrc_OFF_cnt = 0;
   return WRC_OFF;
   }
   
   //Åжϳ¬Ê±Í˳ö
   return WRC_CLOSE_PWR;
   return WRC_WAIT_REC_DATA;
   
}
WRC_STATUS   WrcClosePwrPro(void)
{
   char   send_buf[7] = {'A','T','C','L','O','S','E'};
   
   //»ñÈ¡²»Í¬Ð­ÒéµÄͨѶ½á¹û
   wrc_ctrl_para_g.wrc_result_flag = wrc_sizhuV4_result_flag;
   wrc_ctrl_para_g.report_result_flag = (report_sizhuV4_result_flag == PASS)? PASS: wrc_ctrl_para_g.wrc_result_flag;//Ö»Óгɹ¦²Å¸Ä±ä״̬£¬·ñÔò±£³ÖÔ­Öµ
   report_sizhuV4_result_flag = FAIL;
   wrc_ctrl_para_g.wrc_OFF_cnt ++;
   if(wrc_ctrl_para_g.wrc_OFF_cnt == 1){
      WRC_UART_SEND((uint8_t *)send_buf,sizeof(send_buf));
      return WRC_OFF;
   }else if(wrc_ctrl_para_g.wrc_OFF_cnt == 3){
      //¹Ø±ÕµçÔ´
      WRC_PWR_OFF;
      delay_us(10);
      PWR_3V8_OFF;
      return WRC_OFF;
   }else if(wrc_ctrl_para_g.wrc_OFF_cnt == 8){
      //ÑÓ³ÙÍ˳öͨѶÁ÷³Ì£¬´ËʱµçÔ´ÒѾ­¹Ø±Õ£¬Ï൱ÓÚ¸øµçÈÝÒ»¶¨Ê±¼ä³äµç
      WRC_PWR_OFF;
      PWR_3V8_OFF;
      /*ÖØ±¨´¦Àí£¬¸ù¾ÝЭÒ鲻ͬ*/
      if(wrc_ctrl_para_g.wrc_result_flag == FAIL){
         if(wrc_ctrl_para_g.wrc_start_flag != WRC_MEANS_AGAIN){
            //Èç¹û·ÇÖØ±¨£¬ÔòÖØÖÃÖØ±¨¼ÆÊýÖµ
            wrc_ctrl_para_g.wrc_restart_num_cnt = wrc_para_sizhu_g.retransmission_num;
         }
      }else{
         //Éϱ¨³É¹¦²»ÐèÒªÖØ±¨
         wrc_ctrl_para_g.wrc_restart_num_cnt = 0;
      }
      return WRC_IDLE; //¹Ø»úÍê±Ï£¬·µ»ØWRC_IDLE½áÊø±¾´ÎͨѶÁ÷³Ì
   }
   return WRC_IDLE; //¹Ø»úÍê±Ï£¬·µ»ØWRC_IDLE½áÊø±¾´ÎͨѶÁ÷³Ì
   return WRC_CLOSE_PWR; //¹Ø»úÒªµÈ´ýµÄ»°Ôò¼ÌÐø·µ»ØWRC_CLOSE_PWR
   return WRC_IDLE;
}
//¶àÌìδÉϱ¨³É¹¦Åжϣ¬Åжϱê×¼¿ÉÒÔ±ÈͨѶÊÇ·ñ³É¹¦¿íËÉÒ»µã£¬Ö»ÒªÊý¾ÝÓÐÉϱ¨ÏìÓ¦¼´¿ÉÅжϳɹ¦£¬µ¥Ö¡Êý¾ÝÎÞÏìÓ¦µÄÓýáÊøÖ¡»òÕ߯äËûÖ¡´ú±í³É¹¦
void LongTimeReportFailed(BILLING_VALVE_CTRL_PATA_T   billing_valve_ctrl_para_in)
{
   static uint8_t report_failed_days_cnt = 0;
   //ÒòΪ´ó²¿·Ö±í0µãÖ®ºó»áÓÐÒ»´ÎͨѶ£¬ÄÇôÅжÏʱ¼äµã¿ÉÒÔÑÓºóµ½ÔçÉÏ6µã55ÅжÏ
   if((&sys_clockBCD_g)->hour == 6 && (&sys_clockBCD_g)->min == 55 && (&sys_clockBCD_g)->sec == 0 ){
      if(billing_valve_ctrl_para_in.no_wrc_days > 0){  //´óÓÚ0´ú±í¹¦ÄÜ¿ªÆô
         if(wrc_ctrl_para_g.report_result_flag == PASS){
            report_failed_days_cnt = 0;
            __SYS_STATUS_BYTES_STATUS(no_gprs_date_up_to, RESET, ALARM_ID_N_DAYS_NO_REPORT_ARRIVE);
         }else{
            if((report_failed_days_cnt++) >= billing_valve_ctrl_para_in.no_wrc_days){ //ºó++ÊÇÒòΪµÚÒ»´ÎÅжÏʱ²»Âú1Ìì
               __SYS_STATUS_ALARM_BYTES_SET(no_gprs_date_up_to,ALARM_ID_N_DAYS_NO_REPORT_ARRIVE);
            }
         }
      }
   }
}
void WirelessRemoteCommPro(FUN_START_CTRL_PARA_T * sys_fun_run_ctrl_p)
@@ -267,7 +361,7 @@
            case WRC_CREATE_LINK:      wrc_ctrl_para_g.wrc_state = WrcCreateLinkPro();break;
            case WRC_SEND_DATA:         wrc_ctrl_para_g.wrc_state = WrcSendDataPro();break;
        case WRC_WAIT_REC_DATA:   wrc_ctrl_para_g.wrc_state = WrcWaitRecDataPro();break;
        case WRC_CLOSE_PWR:         wrc_ctrl_para_g.wrc_state = WrcClosePwrPro();;break;
        case WRC_OFF:         wrc_ctrl_para_g.wrc_state = WrcClosePwrPro();;break;
        default:;
    }
@@ -278,5 +372,10 @@
   else
      sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag = SET;
   
   //¶àÌìδÉϱ¨³É¹¦Åжϣ¬²»Í¬Ð­ÒéÅжϵıê×¼²»Í¬
   LongTimeReportFailed(billing_valve_ctrl_para_g);
}