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

📄 posix_qextserialport.cpp

📁 关于Qt的第三方串口类serialclass封装
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                Posix_CommConfig.c_cflag|=B75;#else                cfsetispeed(&Posix_CommConfig, B75);                cfsetospeed(&Posix_CommConfig, B75);#endif                break;            /*110 baud*/            case BAUD110:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B110;#else                cfsetispeed(&Posix_CommConfig, B110);                cfsetospeed(&Posix_CommConfig, B110);#endif                break;            /*134.5 baud*/            case BAUD134:                TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 134.5 baud operation.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B134;#else                cfsetispeed(&Posix_CommConfig, B134);                cfsetospeed(&Posix_CommConfig, B134);#endif                break;            /*150 baud*/            case BAUD150:                TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 150 baud operation.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B150;#else                cfsetispeed(&Posix_CommConfig, B150);                cfsetospeed(&Posix_CommConfig, B150);#endif                break;            /*200 baud*/            case BAUD200:                TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 200 baud operation.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B200;#else                cfsetispeed(&Posix_CommConfig, B200);                cfsetospeed(&Posix_CommConfig, B200);#endif                break;            /*300 baud*/            case BAUD300:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B300;#else                cfsetispeed(&Posix_CommConfig, B300);                cfsetospeed(&Posix_CommConfig, B300);#endif                break;            /*600 baud*/            case BAUD600:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B600;#else                cfsetispeed(&Posix_CommConfig, B600);                cfsetospeed(&Posix_CommConfig, B600);#endif                break;            /*1200 baud*/            case BAUD1200:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B1200;#else                cfsetispeed(&Posix_CommConfig, B1200);                cfsetospeed(&Posix_CommConfig, B1200);#endif                break;            /*1800 baud*/            case BAUD1800:                TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows and IRIX do not support 1800 baud operation.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B1800;#else                cfsetispeed(&Posix_CommConfig, B1800);                cfsetospeed(&Posix_CommConfig, B1800);#endif                break;            /*2400 baud*/            case BAUD2400:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B2400;#else                cfsetispeed(&Posix_CommConfig, B2400);                cfsetospeed(&Posix_CommConfig, B2400);#endif                break;            /*4800 baud*/            case BAUD4800:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B4800;#else                cfsetispeed(&Posix_CommConfig, B4800);                cfsetospeed(&Posix_CommConfig, B4800);#endif                break;            /*9600 baud*/            case BAUD9600:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B9600;#else                cfsetispeed(&Posix_CommConfig, B9600);                cfsetospeed(&Posix_CommConfig, B9600);#endif                break;            /*14400 baud*/            case BAUD14400:                TTY_WARNING("Posix_QextSerialPort: POSIX does not support 14400 baud operation.  Switching to 9600 baud.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B9600;#else                cfsetispeed(&Posix_CommConfig, B9600);                cfsetospeed(&Posix_CommConfig, B9600);#endif                break;            /*19200 baud*/            case BAUD19200:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B19200;#else                cfsetispeed(&Posix_CommConfig, B19200);                cfsetospeed(&Posix_CommConfig, B19200);#endif                break;            /*38400 baud*/            case BAUD38400:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B38400;#else                cfsetispeed(&Posix_CommConfig, B38400);                cfsetospeed(&Posix_CommConfig, B38400);#endif                break;            /*56000 baud*/            case BAUD56000:                TTY_WARNING("Posix_QextSerialPort: POSIX does not support 56000 baud operation.  Switching to 38400 baud.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B38400;#else                cfsetispeed(&Posix_CommConfig, B38400);                cfsetospeed(&Posix_CommConfig, B38400);#endif                break;            /*57600 baud*/            case BAUD57600:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B57600;#else                cfsetispeed(&Posix_CommConfig, B57600);                cfsetospeed(&Posix_CommConfig, B57600);#endif                break;            /*76800 baud*/            case BAUD76800:                TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows and some POSIX systems do not support 76800 baud operation.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);#ifdef B76800                                Posix_CommConfig.c_cflag|=B76800;#else                TTY_WARNING("Posix_QextSerialPort: Posix_QextSerialPort was compiled without 76800 baud support.  Switching to 57600 baud.");                Posix_CommConfig.c_cflag|=B57600;#endif //B76800#else  //CBAUD#ifdef B76800                cfsetispeed(&Posix_CommConfig, B76800);                cfsetospeed(&Posix_CommConfig, B76800);#else                  TTY_WARNING("Posix_QextSerialPort: Posix_QextSerialPort was compiled without 76800 baud support.  Switching to 57600 baud.");                cfsetispeed(&Posix_CommConfig, B57600);                cfsetospeed(&Posix_CommConfig, B57600);#endif //B76800#endif //CBAUD                break;            /*115200 baud*/            case BAUD115200:#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B115200;#else                cfsetispeed(&Posix_CommConfig, B115200);                cfsetospeed(&Posix_CommConfig, B115200);#endif                break;            /*128000 baud*/            case BAUD128000:                TTY_WARNING("Posix_QextSerialPort: POSIX does not support 128000 baud operation.  Switching to 115200 baud.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B115200;#else                cfsetispeed(&Posix_CommConfig, B115200);                cfsetospeed(&Posix_CommConfig, B115200);#endif                break;                    /*256000 baud*/            case BAUD256000:                TTY_WARNING("Posix_QextSerialPort: POSIX does not support 256000 baud operation.  Switching to 115200 baud.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B115200;#else                cfsetispeed(&Posix_CommConfig, B115200);                cfsetospeed(&Posix_CommConfig, B115200);#endif                break;        }        tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);    }    UNLOCK_MUTEX();}/*!\fn void Posix_QextSerialPort::setDtr(bool set=true) Sets DTR line to the requested state (high by default).  This function will have no effect if the port associated with the class is not currently open.*/void Posix_QextSerialPort::setDtr(bool set) {    LOCK_MUTEX();    if (portOpen) {        int status;        ioctl(Posix_File->handle(), TIOCMGET, &status);        if (set) {            status|=TIOCM_DTR;        }        else {            status&=~TIOCM_DTR;        }        ioctl(Posix_File->handle(), TIOCMSET, &status);    }    UNLOCK_MUTEX();}/*!\fn void Posix_QextSerialPort::setRts(bool set=true) Sets RTS line to the requested state (high by default).  This function will have no effect if the port associated with the class is not currently open.*/void Posix_QextSerialPort::setRts(bool set) {    LOCK_MUTEX();    if (portOpen) {        int status;        ioctl(Posix_File->handle(), TIOCMGET, &status);        if (set) {            status|=TIOCM_RTS;        }        else {            status&=~TIOCM_RTS;        }        ioctl(Posix_File->handle(), TIOCMSET, &status);    }    UNLOCK_MUTEX();}/*!\fn unsigned long Posix_QextSerialPort::lineStatus(void)returns the line status as stored by the port function.  This function will retrieve the statesof the following lines: DCD, CTS, DSR, and RI.  On POSIX systems, the following additional linescan be monitored: DTR, RTS, Secondary TXD, and Secondary RXD.  The value returned is an unsigned long with specific bits indicating which lines are high.  The following constants should be used to examine the states of individual lines:\verbatimMask        Line               ------      ----               LS_CTS      CTSLS_DSR      DSRLS_DCD      DCDLS_RI       RILS_RTS      RTS (POSIX only)   LS_DTR      DTR (POSIX only)LS_ST       Secondary TXD (POSIX only)LS_SR       Secondary RXD (POSIX only)\endverbatimThis function will return 0 if the port associated with the class is not currently open.*/unsigned long Posix_QextSerialPort::lineStatus(void) {    unsigned long Status=0, Temp;    LOCK_MUTEX();    if (portOpen) {        ioctl(Posix_File->handle(), TIOCMGET, &Temp);        if (Temp&TIOCM_CTS) {            Status|=LS_CTS;        }        if (Temp&TIOCM_DSR) {            Status|=LS_DSR;        }        if (Temp&TIOCM_RI) {            Status|=LS_RI;        }        if (Temp&TIOCM_CD) {            Status|=LS_DCD;        }        if (Temp&TIOCM_DTR) {            Status|=LS_DTR;        }        if (Temp&TIOCM_RTS) {            Status|=LS_RTS;        }        if (Temp&TIOCM_ST) {            Status|=LS_ST;        }        if (Temp&TIOCM_SR) {            Status|=LS_SR;        }    }    UNLOCK_MUTEX();    return Status;}/*!\fn void Posix_QextSerialPort::setTimeout(unsigned long sec=0, unsigned long millisec=0);Sets the read and write timeouts for the port to sec seconds and millisec milliseconds.Note that this is a per-character timeout, i.e. the port will wait this long for each individual character, not for the whole read operation.  This timeout also applies to thebytesWaiting() function.\notePOSIX does not support millisecond-level control for I/O timeout values.  Anytimeout set using this function will be set to the next lowest tenth of a second for the purposes of detecting read or write timeouts.  For example a timeout of 550 milliseconds will be seen by the class as a timeout of 500 milliseconds for the purposes of reading and writing the port.  However millisecond-level control is allowed by the select() system call, so for example a 550-millisecond timeout will be seen as 550 milliseconds on POSIX systems for the purpose of detecting available bytes in the read buffer.*/void Posix_QextSerialPort::setTimeout(unsigned long sec, unsigned long millisec) {    Settings.Timeout_Sec=sec;    Settings.Timeout_Millisec=millisec;    Posix_Copy_Timeout.tv_sec=sec;    Posix_Copy_Timeout.tv_usec=millisec;    tcgetattr(Posix_File->handle(), &Posix_CommConfig);    Posix_CommConfig.c_cc[VTIME]=sec*10+millisec/100;    if (portOpen) {        tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);    }}

⌨️ 快捷键说明

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