centos下串口自發(fā)自收c++代碼實(shí)現(xiàn)

#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永久无码精品一区二区国产| 狠狠综合久久av一区二区| 一区二区国产在线观看| 亚洲AV无码一区二区乱子仑| 久久se精品一区二区国产| 国产精品小黄鸭一区二区三区 | 亚洲国模精品一区| 国产精品无码一区二区在线观 | 一区二区三区在线观看视频| 2020天堂中文字幕一区在线观 | 无码av人妻一区二区三区四区| 最美女人体内射精一区二区| 一区二区三区在线|日本| 日本精品3d动漫一区二区| 99精品国产高清一区二区麻豆| 人妻体内射精一区二区三四| 久久精品国产亚洲一区二区| 一区二区三区无码视频免费福利| 中文字幕不卡一区| 无人码一区二区三区视频| 精品久久久久中文字幕一区| 视频一区精品自拍| 国产自产V一区二区三区C| 果冻传媒董小宛一区二区| 亚洲日韩精品一区二区三区无码| 伊人久久大香线蕉av一区| 亚洲AV无码一区二区二三区软件| 久久久91精品国产一区二区三区| 夜夜添无码一区二区三区| 一区二区三区在线|欧| 亚欧在线精品免费观看一区| 午夜影院一区二区| 国产Av一区二区精品久久| 精品久久久久久中文字幕一区| 波多野结衣中文字幕一区二区三区| 日本一区二区在线免费观看| 中文字幕一区二区三区免费视频| 国产午夜福利精品一区二区三区| 91精品一区二区| 在线一区二区观看|