0,0 → 1,196 |
|
#ifndef _QEXTSERIALBASE_H_ |
#define _QEXTSERIALBASE_H_ |
|
#include <QIODevice> |
#include <QFile> |
|
#ifdef QT_THREAD_SUPPORT |
#include <QThread> |
#include <QMutex> |
#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*/ |
enum NamingConvention { |
WIN_NAMES, |
IRIX_NAMES, |
HPUX_NAMES, |
SUN_NAMES, |
DIGITAL_NAMES, |
FREEBSD_NAMES, |
LINUX_NAMES |
}; |
|
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 |
}; |
|
enum DataBitsType { |
DATA_5, |
DATA_6, |
DATA_7, |
DATA_8 |
}; |
|
enum ParityType { |
PAR_NONE, |
PAR_ODD, |
PAR_EVEN, |
PAR_MARK, //WINDOWS ONLY |
PAR_SPACE |
}; |
|
enum StopBitsType { |
STOP_1, |
STOP_1_5, //WINDOWS ONLY |
STOP_2 |
}; |
|
enum FlowType { |
FLOW_OFF, |
FLOW_HARDWARE, |
FLOW_XONXOFF |
}; |
|
/*structure to contain port settings*/ |
struct PortSettings { |
BaudRateType BaudRate; |
DataBitsType DataBits; |
ParityType Parity; |
StopBitsType StopBits; |
FlowType FlowControl; |
ulong Timeout_Sec; |
ulong Timeout_Millisec; |
}; |
|
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 isSequential() const; |
virtual void close()=0; |
virtual void flush()=0; |
|
virtual qint64 size() const=0; |
virtual qint64 bytesAvailable()=0; |
virtual bool atEnd() const; |
|
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; |
|
protected: |
QString port; |
PortSettings Settings; |
ulong lastErr; |
|
#ifdef QT_THREAD_SUPPORT |
static QMutex* mutex; |
static ulong refCount; |
#endif |
|
virtual qint64 readData(char * data, qint64 maxSize)=0; |
virtual qint64 writeData(const char * data, qint64 maxSize)=0; |
|
}; |
|
#endif |