⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boostuart.cpp

📁 把C语言的thread和socket封装了一层.希望能给初学者带来帮助.
💻 CPP
字号:
#include "BoostUart.h"
int speed_arr[] = { B38400, B115200,B19200, B9600, B4800, B2400, B1200, B300,
	    B38400, B115200,B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 115200, 19200,  9600,  4800,  2400,  1200,  300,
	    38400, 115200, 19200,  9600, 4800, 2400, 1200,  300, };
char *s1="/dev/ttyS0";
char *s2="/dev/ttyS1";
char *s3="/dev/ttyS2";
char *s4="/dev/ttyS3";
int BoostUart::openDev(char *Dev)
{
    int	fd = open( Dev, O_RDWR| O_NOCTTY| O_NDELAY  );         //
	if (-1 == fd)
		{ /*设置数据位数*/
			perror("Can't Open Serial Port");
			return -1;
		}
	return fd;
}
int BoostUart::setParity(int fileDescriptor,int databits,int stopbits,int parity)
{
	struct termios options;
 	if( tcgetattr( fileDescriptor,&options)  !=  0)
  	{
  		perror("SetupSerial 1");
  		return -1;
  	}
  	options.c_cflag &= ~CSIZE;
  	switch (databits) 
  	{	
  		case 7:
  			options.c_cflag |= CS7;
  			break;
  		case 8:
			options.c_cflag |= CS8;
			break;
		default:
			fprintf(stderr,"Unsupported data size\n");
		return -1;
	}
  	switch (parity)
  	{
  		case 'n':
		case 'N':
			options.c_cflag &= ~PARENB;   /* Clear parity enable */
			options.c_iflag &= ~INPCK;     /* Enable parity checking */
			break;
		case 'o':
		case 'O':
			options.c_cflag |= (PARODD | PARENB);  /* 设置为奇效验*/ 
			options.c_iflag |= INPCK;             /* Disnable parity checking */
			break;
		case 'e':
		case 'E':
			options.c_cflag |= PARENB;     /* Enable parity */
			options.c_cflag &= ~PARODD;   /* 转换为偶效验*/  
			options.c_iflag |= INPCK;       /* Disnable parity checking */
			break;
		case 'S':
		case 's':  /*as no parity*/
			options.c_cflag &= ~PARENB;
			options.c_cflag &= ~CSTOPB;
			break;
		default:
			fprintf(stderr,"Unsupported parity\n");
		return -1;
		}
  /* 设置停止位*/   
  	switch (stopbits)
  	{
  		case 1:
  			options.c_cflag &= ~CSTOPB;
			break;
		case 2:
			options.c_cflag |= CSTOPB;
			break;
		default:
			fprintf(stderr,"Unsupported stop bits\n");
			return -1;
     }
	
            options.c_iflag &= ~(IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK|ISTRIP|INLCR|IGNCR|ICRNL|IUCLC|IXON|IXOFF|IXANY); //  
            options.c_oflag &= ~OPOST;												  //
            options.c_lflag &= ~(ECHO|ECHONL|ISIG|IEXTEN|ICANON);					  // 
//            options.c_cflag &= ~(CSIZE|PARENB);									      //

    if(parity != 'n')
  		options.c_iflag |= INPCK;
		options.c_cc[VTIME] = 150; 
        options.c_cc[VMIN] = 0;   
     	tcflush(fileDescriptor,TCIFLUSH); /* Update the options and do it NOW */
  	if (tcsetattr(fileDescriptor,TCSANOW,&options) != 0)
  	{
  		perror("SetupSerial 3");
		return -1;
	}
  	return 1;

}
void BoostUart::setSpeed(int fileDescriptor, int speed)
{
	int   i;
    int   status;
    struct termios   Opt;
    tcgetattr(fileDescriptor, &Opt);
    for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++)
    {
  	  if  (speed == name_arr[i])
     	{
   	      tcflush(fileDescriptor, TCIOFLUSH);
      	  cfsetispeed(&Opt, speed_arr[i]);
    	  cfsetospeed(&Opt, speed_arr[i]);
    	  status = tcsetattr(fileDescriptor, TCSANOW, &Opt);
    	  if  (status != 0)
            perror("tcsetattr fd1");
     	  return;
     	}
     	tcflush(fileDescriptor,TCIOFLUSH);
    }

}

char * BoostUart::getUartName(int num)
{   if(num==1)
	   return s1;
    if(num==2)
  	   return s2;
    if(num==3)
	   return s3;
    if(num==4)
	   return s4;
}


int BoostUart::boostUartWrite(int fileDescriptor,char *sendBuff,unsigned int sendDataLength)
{
	return write(fileDescriptor,(const void *)sendBuff,sendDataLength);
}
int BoostUart::boostUartRead(int fileDescriptor,char *recvBuff,unsigned int sizeBuff)
{
	return read(fileDescriptor,recvBuff,sizeBuff);
}

⌨️ 快捷键说明

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