You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
6.7 KiB
229 lines
6.7 KiB
14 years ago
|
/*
|
||
|
* Unofficial Qt Serial Port Library
|
||
|
*
|
||
|
* Copyright (c) 2010 Inbiza Systems Inc. All rights reserved.
|
||
|
*
|
||
|
* This program is free software: you can redistribute it and/or modify it
|
||
|
* under the terms of the GNU Lesser General Public License as published by the
|
||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||
|
* option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||
|
* more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Lesser General Public License
|
||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||
|
*
|
||
|
* author labs@inbiza.com
|
||
|
* @brief Declares generic qserialport methods and attributes.
|
||
|
*/
|
||
|
|
||
|
#ifndef TNX_QSERIALPORT_H__
|
||
|
#define TNX_QSERIALPORT_H__
|
||
|
|
||
|
#include "qserialportnative.h"
|
||
|
#include "qserialport_export.h"
|
||
|
|
||
|
namespace TNX {
|
||
|
|
||
|
/**
|
||
|
* Represents a serial port resource.
|
||
|
*/
|
||
|
class TONIX_EXPORT QSerialPort : public QSerialPortNative
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
private:
|
||
|
enum {
|
||
|
kReadNotifyThresholdLimit = 1024,
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
/**
|
||
|
Line signal values.
|
||
|
*/
|
||
|
enum CommSignalValues {
|
||
|
Signal_Unknown, ///< Cannot determine whether the signal is on or off. Either the port is close or error occurred while querying the signal.
|
||
|
Signal_On, ///< Line signal ON.
|
||
|
Signal_Off ///< Line signal OFF.
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
Predefined timeout schemes for serial port reading.
|
||
|
*/
|
||
|
enum CommTimeoutSchemes {
|
||
|
CtScheme_NonBlockingRead, ///< Read operation returns immediately. Good when polling.
|
||
|
CtScheme_TimedRead ///< Read operation continues until timeout occurs.
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
/** Initializes a new instance of the SerialPort class using the specified port name. */
|
||
|
QSerialPort(const QString &portName, QObject *parent = 0);
|
||
|
|
||
|
/** Initializes a new instance of the SerialPort class using the specified port name and settings. */
|
||
|
QSerialPort(const QString &portName, const QPortSettings &settings, QObject *parent = 0);
|
||
|
|
||
|
/** Initializes a new instance of the SerialPort class using the specified port name and settings. */
|
||
|
QSerialPort(const QString &portName, const QString &settings, QObject *parent = 0);
|
||
|
|
||
|
virtual ~QSerialPort();
|
||
|
|
||
|
// from QIODevice
|
||
|
|
||
|
/** @reimp */
|
||
|
bool isSequential() const;
|
||
|
|
||
|
/** @reimp */
|
||
|
bool open(OpenMode mode = ReadWrite);
|
||
|
|
||
|
/** @reimp */
|
||
|
void close();
|
||
|
|
||
|
/** @reimp */
|
||
|
qint64 pos() const;
|
||
|
|
||
|
/** @reimp */
|
||
|
qint64 size() const;
|
||
|
|
||
|
/** @reimp */
|
||
|
bool seek(qint64 pos);
|
||
|
|
||
|
/** @reimp */
|
||
|
bool atEnd() const;
|
||
|
|
||
|
/** @reimp */
|
||
|
qint64 bytesAvailable() const;
|
||
|
|
||
|
/** @reimp */
|
||
|
qint64 bytesToWrite() const;
|
||
|
|
||
|
/** @reimp */
|
||
|
bool canReadLine() const;
|
||
|
|
||
|
/** @reimp */
|
||
|
bool waitForReadyRead(int timeout);
|
||
|
|
||
|
/** @reimp */
|
||
|
bool waitForBytesWritten(int timeout);
|
||
|
|
||
|
// serial port methods
|
||
|
|
||
|
/** Gets the serial device name. */
|
||
|
inline const QString& portName() const {
|
||
|
return portName_;
|
||
|
}
|
||
|
|
||
|
/** Sets the serial device name. */
|
||
|
inline void setPortName(const QString &portName) {
|
||
|
Q_ASSERT(!isOpen());
|
||
|
portName_ = portName;
|
||
|
}
|
||
|
|
||
|
/** Gets the serial device port settings. */
|
||
|
inline const QPortSettings portSettings() const {
|
||
|
return portSettings_;
|
||
|
}
|
||
|
/** Sets the serial device port settings. If the device is not open yet, caches these values until it is open.*/
|
||
|
bool setPortSettings(const QPortSettings &portSettings);
|
||
|
|
||
|
// communication timing configuration methods
|
||
|
|
||
|
/** Gets the communications timeout values. */
|
||
|
CommTimeouts commTimeouts();
|
||
|
/** Sets the communications timeout values. */
|
||
|
bool setCommTimeouts(const CommTimeouts commtimeouts);
|
||
|
/** Sets one of the predefined communications timeout scheme. */
|
||
|
bool setCommTimeouts(CommTimeoutSchemes scheme, int timeout = 0);
|
||
|
|
||
|
/** Gets the amount of pending bytes to trigger readyRead() event. */
|
||
|
inline int readNotifyThreshold() const {
|
||
|
return readNotifyThreshold_;
|
||
|
}
|
||
|
/** Sets the amount of pending bytes to trigger readyRead() event. */
|
||
|
inline void setReadNotifyThreshold(int numOfBytes) {
|
||
|
// normalize the given value
|
||
|
if ( numOfBytes <= 0 )
|
||
|
numOfBytes = 1;
|
||
|
else if ( numOfBytes > kReadNotifyThresholdLimit )
|
||
|
numOfBytes = kReadNotifyThresholdLimit;
|
||
|
readNotifyThreshold_ = numOfBytes;
|
||
|
}
|
||
|
|
||
|
// port configuration methods
|
||
|
|
||
|
/** Gets serial baud rate. */
|
||
|
QPortSettings::BaudRate baudRate() const;
|
||
|
/** Sets serial baud rate. */
|
||
|
bool setBaudRate(QPortSettings::BaudRate baudRate);
|
||
|
|
||
|
/** Gets parity-checking style. */
|
||
|
QPortSettings::Parity parity() const;
|
||
|
/** Sets parity-checking style. */
|
||
|
bool setParity(QPortSettings::Parity parity);
|
||
|
|
||
|
/** Gets the standard number of stopbits per byte. */
|
||
|
QPortSettings::StopBits stopBits() const;
|
||
|
/** Sets the standard number of stopbits per byte. */
|
||
|
bool setStopBits(QPortSettings::StopBits stopBits);
|
||
|
|
||
|
/** Gets the length of data bits per byte. */
|
||
|
QPortSettings::DataBits dataBits() const;
|
||
|
/** Sets the length of data bits per byte. */
|
||
|
bool setDataBits(QPortSettings::DataBits dataBits);
|
||
|
|
||
|
/** Gets flow control protocol. */
|
||
|
QPortSettings::FlowControl flowControl() const;
|
||
|
/** Sets flow control protocol. */
|
||
|
bool setFlowControl(QPortSettings::FlowControl flowControl);
|
||
|
|
||
|
// line control methods
|
||
|
|
||
|
/** Flushes input buffer. */
|
||
|
bool flushInBuffer();
|
||
|
/** Flushes output buffer. */
|
||
|
bool flushOutBuffer();
|
||
|
/** Sends a break for the duration of the given timeout. */
|
||
|
bool sendBreak(int timeout);
|
||
|
|
||
|
// signal control methods
|
||
|
|
||
|
/** Sets a value indicating whether the Request to Send (RTS) signal is enabled during serial communication. */
|
||
|
bool setRts(bool on = true);
|
||
|
/** Sets a value that enables the Data Terminal Ready (DTR) signal during serial communication. */
|
||
|
bool setDtr(bool on = true);
|
||
|
|
||
|
/** Gets the state of the Clear-to-Send line for the port. */
|
||
|
CommSignalValues cts();
|
||
|
/** Gets the state of the Data Set Ready signal. */
|
||
|
CommSignalValues dsr();
|
||
|
/** Gets the state of the Carrier Detect line for the port. */
|
||
|
CommSignalValues dcd();
|
||
|
/** Gets the state of the Ring signal. */
|
||
|
CommSignalValues ri();
|
||
|
|
||
|
protected:
|
||
|
// from QIODevice
|
||
|
|
||
|
/** @reimp */
|
||
|
qint64 readData(char *data, qint64 maxlen);
|
||
|
/** @reimp */
|
||
|
qint64 writeData(const char *data, qint64 len);
|
||
|
|
||
|
private slots:
|
||
|
void onDataReceived();
|
||
|
|
||
|
// properties
|
||
|
protected:
|
||
|
volatile qint64 pendingByteCount_; // internal counter for pending bytes in the driver character buffer.
|
||
|
volatile bool doNotify_; // internal state flag to control when to notify the user about incoming data.
|
||
|
volatile int readNotifyThreshold_; // minimum number of pending bytes required to emit readyRead() signal.
|
||
|
|
||
|
Q_DISABLE_COPY(QSerialPort)
|
||
|
};
|
||
|
|
||
|
} // namespace
|
||
|
|
||
|
#endif // TNX_QSERIALPORT_H__
|