📄 boostuart.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 + -