| | |
| | | #include "wireless_remote_comm.h" |
| | | #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; |
| | | |
| | | |
| | | 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] = 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); |
| | | arrayA_2_arrayB((uint8_t*)&wrc_para_sizhu_g.ip_port1, &buffer[7], 2, LITTLE_ENDIAN); |
| | | |
| | | WRC_SEND_NORMAL(buffer,205); |
| | | 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_UART_SEND(buffer,205); |
| | | } |
| | | |
| | | 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]==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; |
| | | } |
| | | } |
| | | |
| | | 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){ |
| | | 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; |
| | | |
| | | } |
| | | |
| | | |
| | | WRC_STATUS WrcOpenPwrPro(void) |
| | | { |
| | | |
| | | WRC_PWR_GPIO_Init(); |
| | | PWR_3V8_ON; |
| | | 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; |
| | | } |
| | |
| | | WRC_STATUS WrcCreateLinkPro(void) |
| | | { |
| | | |
| | | //?·¢ËÍÃüÁîʹģ¿éÓë·þÎñÆ÷½¨Á¢Á´½Ó |
| | | //´®¿ÚÅäÖÃ |
| | | WRC_uart_Init(115200,NONE,OneBit); |
| | | |
| | | |
| | | //?·¢ËÍÃüÁîʹģ¿éÓë·þÎñÆ÷½¨Á¢Á´½Ó |
| | | 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; |
| | | } |
| | |
| | | |
| | | 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); |
| | | |
| | | |
| | | //½ÓÊÕÊý¾ÝÅÐ¶Ï |
| | | 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_IDLE; |
| | | } |
| | | |
| | | |
| | | void LongTimeReportFailed(BILLING_VALVE_CTRL_PATA_T billing_valve_ctrl_para_in) |
| | | { |
| | | |
| | | return WRC_CLOSE_PWR; //¹Ø»úÒªµÈ´ýµÄ»°Ôò¼ÌÐø·µ»ØWRC_CLOSE_PWR |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | 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){ |
| | |
| | | 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:; |
| | | } |
| | | |
| | | |
| | | 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; |
| | | |
| | | |
| | | //¶àÌìδÉϱ¨³É¹¦Åжϣ¬²»Í¬ÐÒéÅжϵıê×¼²»Í¬ |
| | | |
| | | |
| | | |
| | | } |
| | | |