/*
* 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
*
* author labs@inbiza.com
*/
#ifndef TNX_COMMDCBHELPER_H__
#define TNX_COMMDCBHELPER_H__
#include
#include
#include
#include "qportsettings.h"
#include "qserialport.h"
#include
namespace TNX {
/*!
Wrapper class for DCB structure on Windows systems.
*/
class CommDCBHelper
{
enum { kDefaultReadTimeout = 0, kDefaultNumOfBytes = 1 };
enum ControlSignals {
CSIGNAL_DSR,
CSIGNAL_DTR,
CSIGNAL_RTS,
CSIGNAL_CTS,
CSIGNAL_DCD,
CSIGNAL_RNG
};
public:
explicit CommDCBHelper(HANDLE fileDescriptor);
~CommDCBHelper();
bool applyChanges(ChangeApplyTypes apptype = AllAppTy);
QPortSettings::BaudRate baudRate() const;
void setBaudRate(QPortSettings::BaudRate baudRate);
QPortSettings::DataBits dataBits() const;
void setDataBits(QPortSettings::DataBits dataBits);
QPortSettings::Parity parity() const;
void setParity(QPortSettings::Parity parity);
QPortSettings::StopBits stopBits() const;
void setStopBits(QPortSettings::StopBits stopBits);
QPortSettings::FlowControl flowControl() const;
void setFlowControl(QPortSettings::FlowControl flow);
bool commTimeouts(CommTimeouts &timeouts);
void setCommTimeouts(const CommTimeouts commtimeouts);
inline bool setRts(bool value = true) {
return setCtrSignal(CSIGNAL_RTS, value);
}
inline bool setDtr(bool value = true) {
return setCtrSignal(CSIGNAL_DTR, value);
}
inline QSerialPort::CommSignalValues cts() const {
return ctrSignal(CSIGNAL_CTS);
}
inline QSerialPort::CommSignalValues dsr() const {
return ctrSignal(CSIGNAL_DSR);
}
inline QSerialPort::CommSignalValues dcd() const {
return ctrSignal(CSIGNAL_DCD);
}
inline QSerialPort::CommSignalValues ri() const {
return ctrSignal(CSIGNAL_RNG);
}
static QString errorText(DWORD err);
// helper methods to manage port attributes in 'termios' data structure
private:
void saveDCB();
bool getCommTimeouts();
void restoreDCB();
void initDCB();
bool setCtrSignal(ControlSignals csig, bool value = true);
QSerialPort::CommSignalValues ctrSignal(ControlSignals csig) const;
private:
HANDLE fileHandle_;
DCB *originalAttrs_;
DCB *currentAttrs_;
COMMTIMEOUTS commTimeouts_;
private:
CommDCBHelper();
Q_DISABLE_COPY(CommDCBHelper);
};
}
#endif // TNX_COMMDCBHELPER_H__