Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
158 KeyOz 1
 
2
#ifndef _QEXTSERIALBASE_H_
3
#define _QEXTSERIALBASE_H_
4
 
5
#include <QIODevice>
6
#include <QFile>
7
 
8
#ifdef QT_THREAD_SUPPORT
9
#include <QThread>
10
#include <QMutex>
11
#endif
12
 
13
/*if all warning messages are turned off, flag portability warnings to be turned off as well*/
14
#ifdef _TTY_NOWARN_
15
#define _TTY_NOWARN_PORT_
16
#endif
17
 
18
/*macros for thread support*/
19
#ifdef QT_THREAD_SUPPORT
20
#define LOCK_MUTEX() mutex->lock()
21
#define UNLOCK_MUTEX() mutex->unlock()
22
#else
23
#define LOCK_MUTEX()
24
#define UNLOCK_MUTEX()
25
#endif
26
 
27
/*macros for warning messages*/
28
#ifdef _TTY_NOWARN_PORT_
29
#define TTY_PORTABILITY_WARNING(s)
30
#else
31
#define TTY_PORTABILITY_WARNING(s) qWarning(s)
32
#endif
33
#ifdef _TTY_NOWARN_
34
#define TTY_WARNING(s)
35
#else
36
#define TTY_WARNING(s) qWarning(s)
37
#endif
38
 
39
 
40
/*line status constants*/
41
#define LS_CTS  0x01
42
#define LS_DSR  0x02
43
#define LS_DCD  0x04
44
#define LS_RI   0x08
45
#define LS_RTS  0x10
46
#define LS_DTR  0x20
47
#define LS_ST   0x40
48
#define LS_SR   0x80
49
 
50
/*error constants*/
51
#define E_NO_ERROR                   0
52
#define E_INVALID_FD                 1
53
#define E_NO_MEMORY                  2
54
#define E_CAUGHT_NON_BLOCKED_SIGNAL  3
55
#define E_PORT_TIMEOUT               4
56
#define E_INVALID_DEVICE             5
57
#define E_BREAK_CONDITION            6
58
#define E_FRAMING_ERROR              7
59
#define E_IO_ERROR                   8
60
#define E_BUFFER_OVERRUN             9
61
#define E_RECEIVE_OVERFLOW          10
62
#define E_RECEIVE_PARITY_ERROR      11
63
#define E_TRANSMIT_OVERFLOW         12
64
#define E_READ_FAILED               13
65
#define E_WRITE_FAILED              14
66
 
67
/*enums for port settings*/
68
enum NamingConvention {
69
    WIN_NAMES,
70
    IRIX_NAMES,
71
    HPUX_NAMES,
72
    SUN_NAMES,
73
    DIGITAL_NAMES,
74
    FREEBSD_NAMES,
75
    LINUX_NAMES
76
};
77
 
78
enum BaudRateType {
79
    BAUD50,                //POSIX ONLY
80
    BAUD75,                //POSIX ONLY
81
    BAUD110,
82
    BAUD134,               //POSIX ONLY
83
    BAUD150,               //POSIX ONLY
84
    BAUD200,               //POSIX ONLY
85
    BAUD300,
86
    BAUD600,
87
    BAUD1200,
88
    BAUD1800,              //POSIX ONLY
89
    BAUD2400,
90
    BAUD4800,
91
    BAUD9600,
92
    BAUD14400,             //WINDOWS ONLY
93
    BAUD19200,
94
    BAUD38400,
95
    BAUD56000,             //WINDOWS ONLY
96
    BAUD57600,
97
    BAUD76800,             //POSIX ONLY
98
    BAUD115200,
99
    BAUD128000,            //WINDOWS ONLY
100
    BAUD256000             //WINDOWS ONLY
101
};
102
 
103
enum DataBitsType {
104
    DATA_5,
105
    DATA_6,
106
    DATA_7,
107
    DATA_8
108
};
109
 
110
enum ParityType {
111
    PAR_NONE,
112
    PAR_ODD,
113
    PAR_EVEN,
114
    PAR_MARK,               //WINDOWS ONLY
115
    PAR_SPACE
116
};
117
 
118
enum StopBitsType {
119
    STOP_1,
120
    STOP_1_5,               //WINDOWS ONLY
121
    STOP_2
122
};
123
 
124
enum FlowType {
125
    FLOW_OFF,
126
    FLOW_HARDWARE,
127
    FLOW_XONXOFF
128
};
129
 
130
/*structure to contain port settings*/
131
struct PortSettings {
132
    BaudRateType BaudRate;
133
    DataBitsType DataBits;
134
    ParityType Parity;
135
    StopBitsType StopBits;
136
    FlowType FlowControl;
137
    ulong Timeout_Sec;
138
    ulong Timeout_Millisec;
139
};
140
 
141
class QextSerialBase : public QIODevice {
142
public:
143
    QextSerialBase();
144
    QextSerialBase(const QString & name);
145
    virtual ~QextSerialBase();
146
    virtual void construct();
147
    virtual void setPortName(const QString & name);
148
    virtual QString portName() const;
149
 
150
    virtual void setBaudRate(BaudRateType)=0;
151
    virtual BaudRateType baudRate() const;
152
    virtual void setDataBits(DataBitsType)=0;
153
    virtual DataBitsType dataBits() const;
154
    virtual void setParity(ParityType)=0;
155
    virtual ParityType parity() const;
156
    virtual void setStopBits(StopBitsType)=0;
157
    virtual StopBitsType stopBits() const;
158
    virtual void setFlowControl(FlowType)=0;
159
    virtual FlowType flowControl() const;
160
    virtual void setTimeout(ulong, ulong)=0;
161
 
162
    virtual bool open(OpenMode mode=0)=0;
163
    virtual bool isSequential() const;
164
    virtual void close()=0;
165
    virtual void flush()=0;
166
 
167
    virtual qint64 size() const=0;
168
    virtual qint64 bytesAvailable()=0;
169
    virtual bool atEnd() const;
170
 
171
    virtual void ungetChar(char c)=0;
172
    virtual qint64 readLine(char * data, qint64 maxSize);
173
 
174
    virtual ulong lastError() const;
175
    virtual void translateError(ulong error)=0;
176
 
177
    virtual void setDtr(bool set=true)=0;
178
    virtual void setRts(bool set=true)=0;
179
    virtual ulong lineStatus()=0;
180
 
181
protected:
182
    QString port;
183
    PortSettings Settings;
184
    ulong lastErr;
185
 
186
#ifdef QT_THREAD_SUPPORT
187
    static QMutex* mutex;
188
    static ulong refCount;
189
#endif
190
 
191
    virtual qint64 readData(char * data, qint64 maxSize)=0;
192
    virtual qint64 writeData(const char * data, qint64 maxSize)=0;
193
 
194
};
195
 
196
#endif