#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; } WRC_STATUS WrcCreateLinkPro(void) { //´®¿ÚÅäÖà WRC_uart_Init(115200,NONE,OneBit); //?·¢ËÍÃüÁîʹģ¿éÓë·þÎñÆ÷½¨Á¢Á´½Ó WrcSendCreateLinkCmd(); wrc_ctrl_para_g.link_status = LINK_NONE; return WRC_WAIT_REC_DATA; } WRC_STATUS WrcSendDataPro(void) { //?·¢ËÍÊý¾Ý´¦Àí return WRC_WAIT_REC_DATA; } 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; return WRC_CLOSE_PWR; } WRC_STATUS WrcClosePwrPro(void) { return WRC_IDLE; //¹Ø»úÍê±Ï£¬·µ»ØWRC_IDLE½áÊø±¾´ÎͨѶÁ÷³Ì return WRC_CLOSE_PWR; //¹Ø»úÒªµÈ´ýµÄ»°Ôò¼ÌÐø·µ»ØWRC_CLOSE_PWR } void WirelessRemoteCommPro(FUN_START_CTRL_PARA_T * sys_fun_run_ctrl_p) { //?·Ç485²É¼¯¡¢·§¿ØÆÚ¼ä²ÅÄܽøÈëͨѶÁ÷³Ì 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){ case WRC_IDLE: break; case WRC_OPEN_PWR: wrc_ctrl_para_g.wrc_state = WrcOpenPwrPro() ;break; 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; 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; }