forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-20 e61d1595ebb1fa76b499cddec2df4bd66ec92b97
Function/WirelessRemoteComm/wireless_remote_comm.c
@@ -1,42 +1,145 @@
#include "wireless_remote_comm.h"
#include "uart.h"
#include "gpio.h"
#include "system_mem_para.h"
WRC_CTRL_PARA_T wrc_ctrl_para_g={.wrc_state=WRC_IDLE};
WRC_UART_PARA_T   wrc_uart_para_g = {.recv_flag = RESET};
LINK_INFO_T   link_info_g;
void WRC_PWR_GPIO_Init(void)
{
   OutputIO(WRC_PWR_PORT,WRC_PWR_PIN,OUT_PUSHPULL);
   OutputIO(PWR_3V8_O_PORT,PWR_3V8_O_PIN,OUT_PUSHPULL);
}
void WRC_RX_DMA_check(WRC_UART_PARA_T * wrc_ctrl_para_p)
{
   uint16_t timeout_cnt = 0,dma_recv_cnt;
   uint32_t dma_mar_reg_read = DMA_CHxMAR_Read(WRC_DMA_CHX);
   if(dma_mar_reg_read != (uint32)WRC_recv_buff){
      delay_ms(2);
      while(dma_mar_reg_read != DMA_CHxMAR_Read(WRC_DMA_CHX)){
         dma_mar_reg_read = DMA_CHxMAR_Read(WRC_DMA_CHX);
         delay_ms(2);
         if(timeout_cnt++ > 100)
            break;
      }
   }
   else
      return ;
   dma_recv_cnt = dma_mar_reg_read - (uint32)WRC_recv_buff;
   if(dma_recv_cnt)
   {
      wrc_ctrl_para_p->recv_length = dma_recv_cnt;
      arrayA_2_arrayB(WRC_recv_buff , wrc_ctrl_para_p->recv_buf, dma_recv_cnt, LITTLE_ENDIAN) ;
      wrc_ctrl_para_p->recv_flag = SET;//½ÓÊÕÍê³É
   }
}
void WrcSendCreateLinkCmd(void)
{
   uint8_t buffer[255];
   uint8_t   i_index;
   
   //?·¢ËÍÄÚÈÝ´¦Àí
   buffer[0] = 0x1b;
   buffer[1] = 0x1b;
   buffer[2] = 0x00;
   
   arrayA_2_arrayB((uint8_t*)wrc_para_sizhu_g.ip1, &buffer[3], 4, LITTLE_ENDIAN);
   arrayA_2_arrayB((uint8_t*)&wrc_para_sizhu_g.ip_port1, &buffer[7], 2, LITTLE_ENDIAN);
   for(i_index = 0; i_index < 64; i_index ++){
      buffer[9+i_index] = 0;
   }
   arrayA_2_arrayB((uint8_t*)&wrc_para_sizhu_g.comm_timeout_time, &buffer[74], 2, LITTLE_ENDIAN);
   buffer[76]   =  0x02;// imeiºÍiccid¶¼ÐèÒª
   buffer[77]   =  0x01; //ÐÅÏ¢°ü1
   buffer[78]   =  wrc_para_sizhu_g.ip1_connect_type;
   buffer[79]   =  0;//²»ÐèÒªAPN
   for(i_index = 0; i_index < 64; i_index ++){
      buffer[80+i_index] = 0;
   }
   for(i_index = 0; i_index < 32; i_index ++){
      buffer[144+i_index] = 0;
   }
   for(i_index = 0; i_index < 20; i_index ++){
      buffer[176+i_index] = 0;
   }
   for(i_index = 0; i_index < 7; i_index ++){
      buffer[196+i_index] = 0x00;
   }
   buffer[203] = 0;
   for(i_index = 0; i_index < 203; i_index ++)
   {
      buffer[203] += buffer[i_index];
   }
   buffer[204] = 0x16;
   
   WRC_SEND_NORMAL(buffer,205);
}
LINK_STATUS   link_data_analysis(uint8_t *receive_buf)
{
   char *buf_p = NULL;
   uint8_t check_sum = 0;
   uint16_t count_i = 0;
   for(count_i = 0;count_i< 100;count_i++){
      if((receive_buf[count_i]==0x41)&&(receive_buf[count_i+1]==0x41))
      {
         buf_p = (char *)(&(receive_buf[count_i]));
         break;
      }
   }
   if(buf_p !=NULL){
      check_sum = 0;
      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 + 2) == 1){
         }else{
         }
      }
   }
}
WRC_STATUS   WrcOpenPwrPro(void)
{
   
   WRC_PWR_GPIO_Init();
   PWR_3V8_ON;
   delay_us(10);
   WRC_PWR_ON;
   
   //?´®¿Ú³õʼ»¯
   //?±ØÒªµÄͨѶ²ÎÊý³õʼ»¯¿ÉÒÔ·ÅÔÚÕâÀï
   
   return WRC_SEND_DATA;
}
@@ -44,7 +147,13 @@
WRC_STATUS   WrcCreateLinkPro(void)
{
   
   //´®¿ÚÅäÖÃ
   WRC_uart_Init(115200,NONE,OneBit);
   //?·¢ËÍÃüÁîʹģ¿éÓë·þÎñÆ÷½¨Á¢Á´½Ó
   WrcSendCreateLinkCmd();
   wrc_ctrl_para_g.link_status = LINK_NONE;
   
   
   return WRC_WAIT_REC_DATA;
@@ -64,9 +173,18 @@
WRC_STATUS   WrcWaitRecDataPro(void)
{
   
   //?·¢ËÍÊý¾Ý´¦Àí
   //½ÓÊÕbuf´¦Àí
   WRC_RX_DMA_check(&wrc_uart_para_g);
   
   //½ÓÊÕÊý¾ÝÅжÏ
   if(wrc_uart_para_g.recv_flag == SET){
      wrc_uart_para_g.recv_flag = RESET;
      if(wrc_ctrl_para_g.link_status ==LINK_NONE){
      }else if(wrc_ctrl_para_g.link_status ==LINK_OK){
      }
   }
   return WRC_SEND_DATA;
   
@@ -78,7 +196,7 @@
WRC_STATUS   WrcClosePwrPro(void)
{
   
   //?·¢ËÍÊý¾Ý´¦Àí
   
   
@@ -90,11 +208,16 @@
void WirelessRemoteCommPro(void)
void WirelessRemoteCommPro(FUN_START_CTRL_PARA_T * sys_fun_run_ctrl_p)
{
   
   //?·Ç485²É¼¯¡¢·§¿ØÆÚ¼ä²ÅÄܽøÈëͨѶÁ÷³Ì
   //wrc_ctrl_para_g.wrc_state = WRC_OPEN_PWR;
   if((sys_fun_run_ctrl_p->wrc_ctrl_flag.start_flag ==SET)&&(sys_fun_run_ctrl_p->valve_ctrl_flag.running_flag == RESET)&&(sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag == RESET))//?ÅжÏ485²É¼¯±êʶ
   {
      sys_fun_run_ctrl_p->wrc_ctrl_flag.start_flag =RESET;
      if(wrc_ctrl_para_g.wrc_state == WRC_IDLE)
         wrc_ctrl_para_g.wrc_state = WRC_OPEN_PWR;
   }
   
   
   switch (wrc_ctrl_para_g.wrc_state){
@@ -108,5 +231,11 @@
        default:;
    }
   
   if(wrc_ctrl_para_g.wrc_state==WRC_IDLE)
      sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag = RESET;
   else
      sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag = SET;
}