www.pudn.com > myQTserial.rar > qextserialbase.h


 
#ifndef _QEXTSERIALBASE_H_ 
#define _QEXTSERIALBASE_H_ 
 
#include  
#include  
 
#ifdef QT_THREAD_SUPPORT 
#include  
#include  
#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 
 
/*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 
 
 
/*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, 
    DIGITAL_NAMES, 
    FREEBSD_NAMES, 
    LINUX_NAMES 
} NamingConvention; 
 
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; 
 
typedef enum _DataBitsType { 
    DATA_5, 
    DATA_6, 
    DATA_7, 
    DATA_8 
} DataBitsType; 
 
typedef enum _ParityType { 
    PAR_NONE, 
    PAR_ODD, 
    PAR_EVEN, 
    PAR_MARK,               //WINDOWS ONLY 
    PAR_SPACE 
} ParityType; 
 
typedef enum _StopBitsType { 
    STOP_1, 
    STOP_1_5,               //WINDOWS ONLY 
    STOP_2 
} StopBitsType; 
 
typedef enum _FlowType { 
    FLOW_OFF, 
    FLOW_HARDWARE, 
    FLOW_XONXOFF 
} FlowType; 
 
/*structure to contain port settings*/ 
typedef struct _PortSettings { 
    BaudRateType BaudRate; 
    DataBitsType DataBits; 
    ParityType Parity; 
    StopBitsType StopBits; 
    FlowType FlowControl; 
    ulong Timeout_Sec; 
    ulong Timeout_Millisec; 
} PortSettings; 
 
class QextSerialBase:public QIODevice { 
public: 
    QextSerialBase(); 
    QextSerialBase(const QString & name); 
    virtual ~QextSerialBase(); 
    virtual void construct(); 
    virtual void setPortName(const QString & name); 
    virtual QString portName() const; 
 
    virtual void setBaudRate(BaudRateType)=0; 
    virtual BaudRateType baudRate() const; 
    virtual void setDataBits(DataBitsType)=0; 
    virtual DataBitsType dataBits() const; 
    virtual void setParity(ParityType)=0; 
    virtual ParityType parity() const; 
    virtual void setStopBits(StopBitsType)=0; 
    virtual StopBitsType stopBits() const; 
    virtual void setFlowControl(FlowType)=0; 
    virtual FlowType flowControl() const; 
    virtual void setTimeout(ulong, ulong)=0; 
 
    virtual bool open(OpenMode mode=0)=0; 
    virtual bool isOpen() const; 
    virtual void close()=0; 
    virtual void flush()=0; 
 
    virtual qint64 size() const=0; 
    virtual qint64 bytesAvailable()=0; 
    virtual bool atEnd() const; 
 
    virtual bool getChar(char * c)=0; 
    virtual bool putChar(char c)=0; 
    virtual void ungetChar(char c)=0; 
    virtual qint64 readLine(char * data, qint64 maxSize); 
 
    virtual ulong lastError() const; 
    virtual void translateError(ulong error)=0; 
 
    virtual void setDtr(bool set=true)=0; 
    virtual void setRts(bool set=true)=0; 
    virtual ulong lineStatus()=0; 
 
    virtual qint64 readData(char * data, qint64 maxSize)=0; 
    virtual qint64 writeData(const char * data, qint64 maxSize)=0; 
 
protected: 
    QString port; 
    bool portOpen; 
    PortSettings Settings; 
    ulong lastErr; 
 
#ifdef QT_THREAD_SUPPORT 
    static QMutex* mutex; 
    static ulong refCount; 
#endif 
}; 
 
#endif