struct termios new_cfg,old_cfg; int speed;
memset(&new_cfg,0,sizeof(new_cfg)); if(tcgetattr(fd,&old_cfg)!=0) {
perror(\"tcgetattr\"); return -1; }
new_cfg=old_cfg;
cfmakeraw(&new_cfg); new_cfg.c_cflag &=~CSIZE; switch(baud_rate) {
case 2400:
{
speed=B2400; } break; case 4800:
{
speed=B4800; }
break; case 9600: {
speed=B9600; }
break; case 19200: {
speed=B19200; } break; case 38400: {
speed=B38400; } break; defult:
case 115200: {
speed=B115200;
}
break; }
cfsetispeed(&new_cfg,speed); cfsetospeed(&new_cfg,speed); switch(data_bits) {
case 7: {
new_cfg.c_cflag |=CS7; }
break; default: case 8:
{
new_cfg.c_cflag |=CS8; }
break; }
switch(parity) {
default: case 'n': case 'N': {
new_cfg.c_cflag &=~PARENB; new_cfg.c_iflag &=~INPCK; }
break; case 'o': case 'O': {
new_cfg.c_cflag |=(PARODD|PARENB); new_cfg.c_iflag |=INPCK; }
break; case 'e': case 'E': {
new_cfg.c_cflag |=PARENB; new_cfg.c_cflag &=~PARODD; new_cfg.c_iflag |=INPCK; }
break;
case 's':
case 'S': {
new_cfg.c_cflag &=~PARENB; new_cfg.c_cflag &=~CSTOPB; } break; }
switch(stop_bits) {
default: case 1:
{
new_cfg.c_cflag &=~CSTOPB; }
break;
case 2: {
new_cfg.c_cflag |=CSTOPB; } break;
}
new_cfg.c_lflag &=~(ECHO | ECHONL | ICANON | ISIG | IEXTEN | NOFLSH); new_cfg.c_oflag &=~OPOST; new_cfg.c_iflag |=BRKINT; new_cfg.c_cc[VTIME]=0; new_cfg.c_cc[VMIN]=1;
tcflush(fd,TCIFLUSH);
if(tcsetattr(fd,TCSANOW,&new_cfg)!=0) {
perror(\"tcsetattr\"); return -1; }
return 0; }
因篇幅问题不能全部显示,请点此查看更多更全内容