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

📄 posix_qextserialport.cpp

📁 关于Qt的第三方串口类serialclass封装
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*!\fn int Posix_QextSerialPort::ungetch(int)This function is included to implement the full QIODevice interface, and currently has no purpose within this class.  This function is meaningless on an unbuffered device and currentlyonly prints a warning message to that effect.*/int Posix_QextSerialPort::ungetch(int) {        /*meaningless on unbuffered sequential device - return error and print a warning*/    TTY_WARNING("Posix_QextSerialPort: ungetch() called on an unbuffered sequential device - operation is meaningless");    return -1;}/*!\fn void Posix_QextSerialPort::setFlowControl(FlowType flow, bool force=false)Sets the flow control used by the port.  Possible values of flow are:\verbatim    FLOW_OFF            No flow control    FLOW_HARDWARE       Hardware (RTS/CTS) flow control    FLOW_XONXOFF        Software (XON/XOFF) flow control\endverbatim\noteFLOW_HARDWARE may not be supported on all versions of UNIX.  In cases where it is unsupported, FLOW_HARDWARE is the same as FLOW_OFF.*/void Posix_QextSerialPort::setFlowControl(FlowType flow) {    LOCK_MUTEX();    if (Settings.FlowControl!=flow) {        Settings.FlowControl=flow;    }    if (portOpen) {        switch(flow) {            /*no flow control*/            case FLOW_OFF:                Posix_CommConfig.c_cflag&=(~CRTSCTS);                Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY));                tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                break;            /*software (XON/XOFF) flow control*/            case FLOW_XONXOFF:                Posix_CommConfig.c_cflag&=(~CRTSCTS);                Posix_CommConfig.c_iflag|=(IXON|IXOFF|IXANY);                tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                break;            case FLOW_HARDWARE:                Posix_CommConfig.c_cflag|=CRTSCTS;                Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY));                tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                break;        }    }    UNLOCK_MUTEX();}/*!\fn void Posix_QextSerialPort::setParity(ParityType parity)Sets the parity associated with the serial port.  The possible values of parity are:\verbatim    PAR_SPACE       Space Parity    PAR_MARK        Mark Parity    PAR_NONE        No Parity    PAR_EVEN        Even Parity    PAR_ODD         Odd Parity\endverbatim\noteThis function is subject to the following limitations:\parPOSIX systems do not support mark parity.\parPOSIX systems support space parity only if tricked into doing so, and only with    fewer than 8 data bits.  Use space parity very carefully with POSIX systems.*/void Posix_QextSerialPort::setParity(ParityType parity) {    LOCK_MUTEX();    if (Settings.Parity!=parity) {        if (parity==PAR_MARK || (parity==PAR_SPACE && Settings.DataBits==DATA_8)) {        }        else {            Settings.Parity=parity;        }    }    if (portOpen) {        switch (parity) {            /*space parity*/            case PAR_SPACE:                if (Settings.DataBits==DATA_8) {                    TTY_PORTABILITY_WARNING("Posix_QextSerialPort:  Space parity is only supported in POSIX with 7 or fewer data bits");                }                else {                    /*space parity not directly supported - add an extra data bit to simulate it*/                    Posix_CommConfig.c_cflag&=~(PARENB|CSIZE);                    switch(Settings.DataBits) {                        case DATA_5:                            Settings.DataBits=DATA_6;                            Posix_CommConfig.c_cflag|=CS6;                            break;                        case DATA_6:                            Settings.DataBits=DATA_7;                            Posix_CommConfig.c_cflag|=CS7;                            break;                        case DATA_7:                            Settings.DataBits=DATA_8;                            Posix_CommConfig.c_cflag|=CS8;                            break;                        case DATA_8:                            break;                    }                    tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                }                break;            /*mark parity - WINDOWS ONLY*/            case PAR_MARK:                TTY_WARNING("Posix_QextSerialPort: Mark parity is not supported by POSIX.");                break;                    /*no parity*/            case PAR_NONE:                Posix_CommConfig.c_cflag&=(~PARENB);                tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                break;            /*even parity*/            case PAR_EVEN:                Posix_CommConfig.c_cflag&=(~PARODD);                Posix_CommConfig.c_cflag|=PARENB;                tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                break;            /*odd parity*/            case PAR_ODD:                Posix_CommConfig.c_cflag|=(PARENB|PARODD);                tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                break;        }    }    UNLOCK_MUTEX();}        /*!\fn void Posix_QextSerialPort::setDataBits(DataBitsType dataBits)Sets the number of data bits used by the serial port.  Possible values of dataBits are:\verbatim    DATA_5      5 data bits    DATA_6      6 data bits    DATA_7      7 data bits    DATA_8      8 data bits\endverbatim\note This function is subject to the following restrictions:\par    5 data bits cannot be used with 2 stop bits.\par    8 data bits cannot be used with space parity on POSIX systems.*/void Posix_QextSerialPort::setDataBits(DataBitsType dataBits) {    LOCK_MUTEX();    if (Settings.DataBits!=dataBits) {        if ((Settings.StopBits==STOP_2 && dataBits==DATA_5) ||             (Settings.StopBits==STOP_1_5 && dataBits!=DATA_5) ||            (Settings.Parity==PAR_SPACE && dataBits==DATA_8)) {        }        else {            Settings.DataBits=dataBits;        }    }    if (portOpen) {        switch(dataBits) {            /*5 data bits*/            case DATA_5:                if (Settings.StopBits==STOP_2) {                    TTY_WARNING("Posix_QextSerialPort: 5 Data bits cannot be used with 2 stop bits.");                }                else {                    Settings.DataBits=dataBits;                    Posix_CommConfig.c_cflag&=(~CSIZE);                    Posix_CommConfig.c_cflag|=CS5;                    tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                }                break;            /*6 data bits*/            case DATA_6:                if (Settings.StopBits==STOP_1_5) {                    TTY_WARNING("Posix_QextSerialPort: 6 Data bits cannot be used with 1.5 stop bits.");                }                else {                    Settings.DataBits=dataBits;                    Posix_CommConfig.c_cflag&=(~CSIZE);                    Posix_CommConfig.c_cflag|=CS6;                    tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                }                break;            /*7 data bits*/            case DATA_7:                if (Settings.StopBits==STOP_1_5) {                    TTY_WARNING("Posix_QextSerialPort: 7 Data bits cannot be used with 1.5 stop bits.");                }                else {                    Settings.DataBits=dataBits;                    Posix_CommConfig.c_cflag&=(~CSIZE);                    Posix_CommConfig.c_cflag|=CS7;                    tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                }                break;            /*8 data bits*/            case DATA_8:                if (Settings.StopBits==STOP_1_5) {                    TTY_WARNING("Posix_QextSerialPort: 8 Data bits cannot be used with 1.5 stop bits.");                }                else {                    Settings.DataBits=dataBits;                    Posix_CommConfig.c_cflag&=(~CSIZE);                    Posix_CommConfig.c_cflag|=CS8;                    tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                }                break;        }    }    UNLOCK_MUTEX();}/*!\fn void Posix_QextSerialPort::setStopBits(StopBitsType stopBits)Sets the number of stop bits used by the serial port.  Possible values of stopBits are:\verbatim    STOP_1      1 stop bit    STOP_1_5    1.5 stop bits    STOP_2      2 stop bits\endverbatim\note This function is subject to the following restrictions:\par    2 stop bits cannot be used with 5 data bits.\par    POSIX does not support 1.5 stop bits.*/void Posix_QextSerialPort::setStopBits(StopBitsType stopBits) {    LOCK_MUTEX();    if (Settings.StopBits!=stopBits) {        if ((Settings.DataBits==DATA_5 && stopBits==STOP_2) || stopBits==STOP_1_5) {}        else {            Settings.StopBits=stopBits;        }    }    if (portOpen) {        switch (stopBits) {            /*one stop bit*/            case STOP_1:                Settings.StopBits=stopBits;                Posix_CommConfig.c_cflag&=(~CSTOPB);                tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                break;            /*1.5 stop bits*/            case STOP_1_5:                TTY_WARNING("Posix_QextSerialPort: 1.5 stop bit operation is not supported by POSIX.");                break;            /*two stop bits*/            case STOP_2:                if (Settings.DataBits==DATA_5) {                    TTY_WARNING("Posix_QextSerialPort: 2 stop bits cannot be used with 5 data bits");                }                else {                    Settings.StopBits=stopBits;                    Posix_CommConfig.c_cflag|=CSTOPB;                    tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig);                }                break;        }    }    UNLOCK_MUTEX();}/*!\fn void Posix_QextSerialPort::setBaudRate(BaudRateType baudRate)Sets the baud rate of the serial port.  Note that not all rates are applicable on all platforms.  The following table shows translations of the various baud rate constants on Windows(including NT/2000) and POSIX platforms.  Speeds marked with an *are speeds that are usable on both Windows and POSIX.  \noteBAUD76800 may not be supported on all POSIX systems.  SGI/IRIX systems do not support BAUD1800.\verbatim  RATE          Windows Speed   POSIX Speed  -----------   -------------   -----------   BAUD50                 110          50   BAUD75                 110          75  *BAUD110                110         110   BAUD134                110         134.5   BAUD150                110         150   BAUD200                110         200  *BAUD300                300         300  *BAUD600                600         600  *BAUD1200              1200        1200   BAUD1800              1200        1800  *BAUD2400              2400        2400  *BAUD4800              4800        4800  *BAUD9600              9600        9600   BAUD14400            14400        9600  *BAUD19200            19200       19200  *BAUD38400            38400       38400   BAUD56000            56000       38400  *BAUD57600            57600       57600   BAUD76800            57600       76800  *BAUD115200          115200      115200   BAUD128000          128000      115200   BAUD256000          256000      115200\endverbatim*/void Posix_QextSerialPort::setBaudRate(BaudRateType baudRate) {    LOCK_MUTEX();    if (Settings.BaudRate!=baudRate) {        switch (baudRate) {            case BAUD14400:                Settings.BaudRate=BAUD9600;                break;            case BAUD56000:                Settings.BaudRate=BAUD38400;                break;            case BAUD76800:#ifndef B76800                Settings.BaudRate=BAUD57600;#else                Settings.BaudRate=baudRate;#endif                break;            case BAUD128000:            case BAUD256000:                Settings.BaudRate=BAUD115200;                break;            default:                Settings.BaudRate=baudRate;                break;        }    }    if (portOpen) {        switch (baudRate) {                        /*50 baud*/            case BAUD50:                TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 50 baud operation.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);                Posix_CommConfig.c_cflag|=B50;#else                cfsetispeed(&Posix_CommConfig, B50);                cfsetospeed(&Posix_CommConfig, B50);#endif                break;            /*75 baud*/            case BAUD75:                TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 75 baud operation.");#ifdef CBAUD                 Posix_CommConfig.c_cflag&=(~CBAUD);

⌨️ 快捷键说明

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