centos下串口自發自收c++代碼實現

#include <iostream>

#include <string.h>

#include <stdio.h>

#include <unistd.h>

#include <fcntl.h>

#include <termios.h>

#include <errno.h>

using namespace std;

int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)

{

    struct termios newtio,oldtio;

    if ( tcgetattr( fd,&oldtio) != 0) {

        perror("SetupSerial 1");

        return -1;

    }

    bzero( &newtio, sizeof( newtio ) );

    newtio.c_cflag |= CLOCAL | CREAD;

    newtio.c_cflag &= ~CSIZE;

    switch( nBits )

    {

    case 7:

        newtio.c_cflag |= CS7;

        break;

    case 8:

        newtio.c_cflag |= CS8;

        break;

    }

    switch( nEvent )

    {

    case 'O':

        newtio.c_cflag |= PARENB;

        newtio.c_cflag |= PARODD;

        newtio.c_iflag |= (INPCK | ISTRIP);

        break;

    case 'E':

        newtio.c_iflag |= (INPCK | ISTRIP);

        newtio.c_cflag |= PARENB;

        newtio.c_cflag &= ~PARODD;

        break;

    case 'N':

        newtio.c_cflag &= ~PARENB;

        break;

    }

    switch( nSpeed )

    {

    case 2400:

        cfsetispeed(&newtio, B2400);

        cfsetospeed(&newtio, B2400);

        break;

    case 4800:

        cfsetispeed(&newtio, B4800);

        cfsetospeed(&newtio, B4800);

        break;

    case 9600:

        cfsetispeed(&newtio, B9600);

        cfsetospeed(&newtio, B9600);

        break;

    case 115200:

        cfsetispeed(&newtio, B115200);

        cfsetospeed(&newtio, B115200);

        break;

    default:

        cfsetispeed(&newtio, B9600);

        cfsetospeed(&newtio, B9600);

        break;

    }

    if( nStop == 1 )

        newtio.c_cflag &= ~CSTOPB;

    else if ( nStop == 2 )

    newtio.c_cflag |= CSTOPB;

    newtio.c_cc[VTIME] = 0;

    newtio.c_cc[VMIN] = 0;

    tcflush(fd,TCIFLUSH);

    if((tcsetattr(fd,TCSANOW,&newtio))!=0)

    {

        perror("com set error");

        return -1;

    }

    printf("set done!\n");

    return 0;

}

int open_port(int fd,int comport)

{

    char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"};

    long vdisable;

    if (comport==1)

    { fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);

        if (-1 == fd)

        {

            perror("Can't Open Serial Port");

            return(-1);

        }

        else

        {

            printf("open ttyS0 .....\n");

        }

    }

    else if(comport==2)

    {

        fd = open( "/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDELAY);

        if (-1 == fd)

        {

            perror("Can't Open Serial Port");

            return(-1);

        }

        else

        {

            printf("open ttyS1 .....\n");

        }

    }

    else if (comport==3)

    {

        fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDELAY);

        if (-1 == fd)

        {

            perror("Can't Open Serial Port");

            return(-1);

        }

        else

        {

            printf("open ttyS2 .....\n");

        }

    }

    if(fcntl(fd, F_SETFL, 0)<0)

    {

        printf("fcntl failed!\n");

    }

    else

    {

        printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));

    }

    if(isatty(STDIN_FILENO)==0)

    {

        printf("standard input is not a terminal device\n");

    }

    else

    {

        printf("isatty success!\n");

    }

    printf("fd-open=%d\n",fd);

    return fd;

}

int main(int argc, char *argv[])

{

    int fd;

    int nread,nwrite;

    char buff[512];

    char *dev = "/dev/ttyS0";

    fd = open_port(fd,1);

    if(fd<0)

    {

        perror("open_port error");

        return -1;

    }

    if((set_opt(fd,115200,8,'N',1))<0)

    {

        perror("set_opt error");

        return -1;

    }

    printf("fd=%d\n",fd);

    while(1)

    {

        nwrite=write(fd,"hello",5);

        printf("nwrite=%d,%s\n",nwrite,"hello");

        nread=read(fd,buff,512);

        printf("nread=%d,%s\n",nread,buff);

        sleep(1);

    }

    close(fd);

    return 0;

}

主站蜘蛛池模板: 国产精品成人99一区无码| 极品人妻少妇一区二区三区| 日韩免费视频一区二区| 精品黑人一区二区三区| 中文字幕无码一区二区免费| 日本精品一区二区三区在线视频一 | 日本一区二区在线播放| 久夜色精品国产一区二区三区| 国产精品av一区二区三区不卡蜜| 熟女精品视频一区二区三区| 国产精品99无码一区二区| 日本v片免费一区二区三区 | 色妞AV永久一区二区国产AV| 免费萌白酱国产一区二区| 精品国产亚洲一区二区三区在线观看| 国产精品香蕉在线一区| 无码人妻一区二区三区免费n鬼沢| 国产一区二区三区在线影院| 精品亚洲一区二区三区在线播放| 福利一区二区三区视频午夜观看| 精品日韩一区二区| 国模极品一区二区三区| 成人精品视频一区二区| 国产激情一区二区三区在线观看 | 香蕉久久一区二区不卡无毒影院 | 日本免费一区二区三区最新vr| 国产精品第一区揄拍| 亚洲日韩AV无码一区二区三区人| 亚洲日韩AV无码一区二区三区人 | 久久精品国产一区二区三区不卡 | 午夜一区二区在线观看| 濑亚美莉在线视频一区| 日本一区午夜爱爱| 亚洲综合av永久无码精品一区二区| 伦理一区二区三区| 亚洲国产精品一区二区久久| 日韩一区二区三区四区不卡| 国模吧一区二区三区精品视频| 国产在线一区视频| 91麻豆精品国产自产在线观看一区| 一夲道无码人妻精品一区二区|