recv_uart.c

来自「linux多串口应用实例,linux下测试已经通过!」· C语言 代码 · 共 56 行

C
56
字号
#define  DLE       '\xAA'         /* data line escape */
#define  STX       '\xBB'         /* start of text */
#define  ETX       '\xCC'         /* end of text */
#define  ACK       '\xDD'         /* positive acknowledge  */
#define  NAK       '\xEE'         /* negative acknowledge */
#define  XON       '\xC3'         /* transmission ON   */
#define  XOFF      '\xC1'         /* transmission OFF  */
#define  XOK       '\xC2'         /* answer for XON   */

  if(uart_packet_end != 1){     /*未收到完整包*/
     
      while(uart_recv_in_ptr != uart_recv_out_ptr){
         *data_ptr = *uart_recv_out_ptr;
         rec_cks ^= *uart_recv_out_ptr;
         data_len ++;
         if(++uart_recv_out_ptr >= &uart_recv_buff[XMIT_BUFF_SIZE])
		uart_recv_out_ptr = &uart_recv_buff[0];
	 if(++data_ptr >= &data_buff[XMIT_BUFF_SIZE])
	 	data_ptr = &data_buff[0];
         if(endflag == 1){
            endflag = 0;
            data_ptr = &data_buff[0];
            if(rec_cks == 0)
            	send_ack();
            	uart_packet_end = 1;
            else
            	send_nak();
	    rec_cks = 0;	                  
            break;
         }
         
         switch ( *(data_ptr -1)) {
            case (unsigned char)DLE :       /* AA AA means char AA*/
               if(data_ptr != &data_buff[1] && *(data_ptr-2) == (unsigned char)DLE)
                  data_ptr--;
               break;
            case (unsigned char)STX :
               break;
            case (unsigned char)ETX :       /* end of frame received*/
               if(*(data_ptr-2) == (unsigned char)DLE)
                  endflag = 1;
               break;
            default:
               if(data_ptr == &data_buff[1]) {
                  data_ptr == &data_buff[0];
                  rec_cks = 0;
               }
               break;
         }
      }  /* end of while*/
   }
   else (uart_packet_end == 1 )
   {        /*收到一个完整包,处理包*/
      
      uart_packet_end = 0;
   }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?