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

📄 qextserialbase.h

📁 linux qt环境下的串口多线程功能的实现
💻 H
字号:
#ifndef _QEXTSERIALBASE_H_#define _QEXTSERIALBASE_H_#include <qobject.h>#include <qiodevice.h>#include <qfile.h>#ifdef QT_THREAD_SUPPORT#include <qthread.h>#endif/*if all warning messages are turned off, flag portability warnings to be turned off as well*/#ifdef _TTY_NOWARN_#define _TTY_NOWARN_PORT_#endif/*QT3 changed some return types in QIODevice - these typedefs will retain compatibility with   earlier versions*/#ifdef QTVER_PRE_30typedef uint Offset;typedef int Q_LONG;#else/*Some compilers (VC++) don't inherit this typedef from QIODevice.h - copied here*/#ifdef _MSC_VER#ifdef QT_LARGE_FILE_SUPPORT    typedef off_t Offset;#else    typedef Q_ULONG Offset;#endif //_MSC_VER#endif //QT_LARGE_FILE_SUPPORT#endif //QTVER_PRE_30/*macros for thread support*/#ifdef QT_THREAD_SUPPORT#define LOCK_MUTEX() mutex->lock()#define UNLOCK_MUTEX() mutex->unlock()#else#define LOCK_MUTEX() #define UNLOCK_MUTEX() #endif/*macros for warning messages*/#ifdef _TTY_NOWARN_PORT_#define TTY_PORTABILITY_WARNING(s) #else#define TTY_PORTABILITY_WARNING(s) qWarning(s)#endif#ifdef _TTY_NOWARN_#define TTY_WARNING(s)#else#define TTY_WARNING(s) qWarning(s)#endif/*simple MIN macro - evaluates to the smaller of the 2 members*/#define MIN(a,b) (((a)<(b))?(a):(b))/*limit of length of port name, not including NULL terminator*/#define PORT_NAME_SIZE_LIMIT 80/*line status constants*/#define LS_CTS  0x01#define LS_DSR  0x02#define LS_DCD  0x04#define LS_RI   0x08#define LS_RTS  0x10#define LS_DTR  0x20#define LS_ST   0x40#define LS_SR   0x80/*error constants*/#define E_NO_ERROR                   0#define E_INVALID_FD                 1#define E_NO_MEMORY                  2#define E_CAUGHT_NON_BLOCKED_SIGNAL  3#define E_PORT_TIMEOUT               4#define E_INVALID_DEVICE             5#define E_BREAK_CONDITION            6#define E_FRAMING_ERROR              7#define E_IO_ERROR                   8#define E_BUFFER_OVERRUN             9#define E_RECEIVE_OVERFLOW          10#define E_RECEIVE_PARITY_ERROR      11#define E_TRANSMIT_OVERFLOW         12#define E_READ_FAILED               13#define E_WRITE_FAILED              14/*enums for port settings*/typedef enum _NamingConvention {    WIN_NAMES,    IRIX_NAMES,    HPUX_NAMES,    SUN_NAMES,    LINUX_NAMES,    DIGITAL_NAMES} NamingConvention;typedef enum _FlowType {    FLOW_OFF,     FLOW_HARDWARE,     FLOW_XONXOFF} FlowType;typedef enum _ParityType {    PAR_NONE,     PAR_ODD,    PAR_EVEN,     PAR_MARK,               //WINDOWS ONLY    PAR_SPACE} ParityType;typedef enum _DataBitsType {    DATA_5,    DATA_6,    DATA_7,    DATA_8} DataBitsType;typedef enum _StopBitsType {    STOP_1,     STOP_1_5,               //WINDOWS ONLY    STOP_2} StopBitsType;typedef enum _BaudRateType {    BAUD50,                //POSIX ONLY    BAUD75,                //POSIX ONLY    BAUD110,    BAUD134,               //POSIX ONLY    BAUD150,               //POSIX ONLY    BAUD200,               //POSIX ONLY    BAUD300,    BAUD600,    BAUD1200,    BAUD1800,              //POSIX ONLY    BAUD2400,    BAUD4800,    BAUD9600,    BAUD14400,             //WINDOWS ONLY    BAUD19200,    BAUD38400,    BAUD56000,             //WINDOWS ONLY    BAUD57600,    BAUD76800,             //POSIX ONLY    BAUD115200,     BAUD128000,            //WINDOWS ONLY    BAUD256000             //WINDOWS ONLY} BaudRateType; /*structure to contain port settings*/typedef struct _PortSettings {    FlowType FlowControl;    ParityType Parity;    DataBitsType DataBits;    StopBitsType StopBits;    BaudRateType BaudRate;    unsigned long Timeout_Sec;    unsigned long Timeout_Millisec;} PortSettings;class QextSerialBase:public QIODevice {public:    QextSerialBase();    QextSerialBase(const char* name);    virtual ~QextSerialBase();    virtual void construct(void);    virtual const char* name() const;    virtual void setName(const char* name);    virtual bool open(int mode=0)=0;    virtual bool open(const char* name);    virtual void close()=0;    virtual void flush()=0;    virtual Offset size() const=0;    virtual int readLine(char *data, uint maxlen);    virtual int getch()=0;    virtual int putch(int)=0;    virtual int ungetch(int);    virtual bool atEnd() const;    virtual void setFlowControl(FlowType)=0;    virtual FlowType flowControl() const;    virtual void setParity(ParityType)=0;    virtual ParityType parity() const;    virtual void setDataBits(DataBitsType)=0;    virtual DataBitsType dataBits() const;    virtual void setStopBits(StopBitsType)=0;    virtual StopBitsType stopBits() const;    virtual void setBaudRate(BaudRateType)=0;    virtual BaudRateType baudRate() const;    virtual bool isOpen() const;    virtual unsigned long lastError() const;    virtual void setDtr(bool set=true)=0;    virtual void setRts(bool set=true)=0;    virtual unsigned long lineStatus(void)=0;    virtual int bytesWaiting()=0;    virtual void translateError(unsigned long)=0;    virtual void setTimeout(unsigned long, unsigned long)=0;    virtual bool isOpen(void);#ifdef QTVER_PRE_30    virtual Q_LONG readBlock(char *data, uint maxlen)=0;    virtual Q_LONG writeBlock(const char *data, uint len)=0;#else    virtual Q_LONG readBlock(char *data, unsigned long maxlen)=0;    virtual Q_LONG writeBlock(const char *data, unsigned long len)=0;#endifprotected:    bool portOpen;    unsigned long lastErr;    char portName[PORT_NAME_SIZE_LIMIT+1];    PortSettings Settings;#ifdef QT_THREAD_SUPPORT    static unsigned long refCount;    static QMutex* mutex;#endif};#endif

⌨️ 快捷键说明

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