forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-22 66ea95dcb8fd91d29465c2f11ced4dd6153a2504
Function/WirelessRemoteComm/wireless_remote_comm.c
@@ -2,8 +2,10 @@
#include "uart.h"
#include "gpio.h"
#include "system_mem_para.h"
#include "wrc_sizhu_v4.h"
#include "system_general_para.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};
WRC_UART_PARA_T   wrc_uart_para_g = {.recv_flag = RESET};
LINK_INFO_T   link_info_g;
@@ -50,8 +52,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);
@@ -93,17 +95,18 @@
   }
   buffer[204] = 0x16;
   
   WRC_SEND_NORMAL(buffer,205);
   WRC_UART_SEND(buffer,205);
}
LINK_STATUS   link_data_analysis(uint8_t *receive_buf)
LINK_STATUS      LinkDataAnalysis(uint8_t *receive_buf)
{
   char *buf_p = NULL;
   uint8_t check_sum = 0;
   uint16_t count_i = 0;
   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;
@@ -115,18 +118,51 @@
      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)){
               link_info_g.net_signal_intensity = *(buf_p+3);
            }
            else{
               link_info_g.net_signal_intensity = 0;
            }
            arrayA_2_arrayB((uint8_t *)(buf_p+4), (uint8_t *)link_info_g.ICCID, 20, LITTLE_ENDIAN);
            link_info_g.SIM_Type = *(buf_p + 24);
            arrayA_2_arrayB((uint8_t *)(buf_p+27), (uint8_t *)link_info_g.IMEI, 15, LITTLE_ENDIAN);
            arrayA_2_arrayB((uint8_t *)(buf_p+44), (uint8_t *)link_info_g.SNR, 2, LITTLE_ENDIAN);
            
         }else{
            return_flag = LINK_NONE;
         }
      }
   }
   
   return   return_flag;
}
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 , WRC_MODULE_CMD_DATA_RECV);
   if(buf_p != NULL){
      buf_next_p = strstr(buf_p , ",");
      if(buf_next_p != NULL){
         __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);
      }
   }
   return   WRC_WAIT_REC_DATA;
   
}
@@ -139,7 +175,10 @@
   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;
}
@@ -155,6 +194,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;
}
@@ -162,16 +202,34 @@
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;
   
   //½ÓÊÕbuf´¦Àí
   WRC_RX_DMA_check(&wrc_uart_para_g);
@@ -180,30 +238,83 @@
   if(wrc_uart_para_g.recv_flag == SET){
      wrc_uart_para_g.recv_flag = RESET;
      if(wrc_ctrl_para_g.link_status ==LINK_NONE){
         wrc_ctrl_para_g.link_status = LinkDataAnalysis(wrc_uart_para_g.recv_buf);
         if(wrc_ctrl_para_g.link_status ==LINK_OK){
            memset(wrc_uart_para_g.recv_buf,0,sizeof(wrc_uart_para_g.recv_buf));
            return WRC_SEND_DATA;
         }
      }else if(wrc_ctrl_para_g.link_status ==LINK_OK){
         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;
      }
   }
   return WRC_SEND_DATA;
   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.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;
}
@@ -226,7 +337,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:;
    }