Commit 48f4d3ba authored by James Goppert's avatar James Goppert

Finished abstracting serial port.

parent d7e07781
......@@ -394,6 +394,7 @@ set(qgroundcontrolMocSrc
#src/comm/OpalLink.h
src/comm/MAVLinkProtocol.h
src/comm/SerialLinkInterface.h
src/comm/SerialInterface.h
src/comm/UDPLink.h
src/comm/LinkManager.h
src/comm/LinkInterface.h
......
......@@ -189,6 +189,7 @@ HEADERS += src/MG.h \
src/comm/LinkManager.h \
src/comm/LinkInterface.h \
src/comm/SerialLinkInterface.h \
src/comm/SerialInterface.h \
src/comm/SerialLink.h \
src/comm/SerialSimulationLink.h \
src/comm/ProtocolInterface.h \
......
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2011 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL 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 General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief Brief Description
*
* @author James Goppertr <james.goppert@gmail.edu>
*
*/
#ifndef SERIALINTERFACE_H
#define SERIALINTERFACE_H
#include <QIODevice>
#include "qextserialport.h"
/**
* @brief The SerialInterface abstracts low level serial calls
*/
class SerialInterface : public QObject {
Q_OBJECT
signals:
void aboutToClose();
public:
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
BAUD230400, // WINDOWS ONLY
BAUD256000, // WINDOWS ONLY
BAUD460800, // WINDOWS ONLY
BAUD921600 // 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;
long timeout_Millisec;
};
virtual bool isOpen() = 0;
virtual bool isWriteable() = 0;
virtual bool bytesAvailable() = 0;
virtual int write(const char * data, qint64 size) = 0;
virtual void read(char * data, qint64 numBytes) = 0;
virtual void flush() = 0;
virtual void close() = 0;
virtual void open(QIODevice::OpenModeFlag flag) = 0;
virtual void setBaudRate(baudRateType baudrate) = 0;
virtual void setParity(parityType parity) = 0;
virtual void setStopBits(stopBitsType stopBits) = 0;
virtual void setDataBits(dataBitsType dataBits) = 0;
virtual void setTimeout(qint64 timeout) = 0;
};
class SerialQextserial : public SerialInterface
{
Q_OBJECT
private:
QextSerialPort * _port;
signals:
void aboutToClose();
public:
SerialQextserial(QString porthandle, QextSerialPort::QueryMode mode) : _port(NULL)
{
_port = new QextSerialPort(porthandle, QextSerialPort::Polling);
//QObject::connect(_port,SIGNAL(aboutToClose()),this,SIGNAL(aboutToClose()));
}
virtual bool isOpen() { return _port->isOpen(); }
virtual bool isWriteable() { return _port->isWritable(); } // yess, that is mis-spelled, writable
virtual bool bytesAvailable() { return _port->bytesAvailable(); }
virtual int write(const char * data, qint64 size) { return _port->write(data,size); }
virtual void read(char * data, qint64 numBytes) { _port->read(data,numBytes); }
virtual void flush() { _port->flush(); }
virtual void close() { _port->close(); }
virtual void open(QIODevice::OpenModeFlag flag) { _port->open(flag); }
virtual void setBaudRate(SerialInterface::baudRateType baudrate) { _port->setBaudRate((BaudRateType)baudrate); }
virtual void setParity(SerialInterface::parityType parity) { _port->setParity((ParityType)parity); }
virtual void setStopBits(SerialInterface::stopBitsType stopBits) { _port->setStopBits((StopBitsType)stopBits); }
virtual void setDataBits(SerialInterface::dataBitsType dataBits) { _port->setDataBits((DataBitsType)dataBits); }
virtual void setTimeout(qint64 timeout) { _port->setTimeout(timeout); };
};
class SerialQserial
{
};
#endif // SERIALINTERFACE_H
This diff is collapsed.
......@@ -36,7 +36,7 @@ This file is part of the QGROUNDCONTROL project
#include <QThread>
#include <QMutex>
#include <QString>
#include <qextserialport.h>
#include "SerialInterface.h"
#include <configuration.h>
#include "SerialLinkInterface.h"
#ifdef _WIN32
......@@ -57,7 +57,12 @@ class SerialLink : public SerialLinkInterface {
//Q_INTERFACES(SerialLinkInterface:LinkInterface)
public:
SerialLink(QString portname = "", BaudRateType baudrate=BAUD57600, FlowType flow=FLOW_OFF, ParityType parity=PAR_NONE, DataBitsType dataBits=DATA_8, StopBitsType stopBits=STOP_1);
SerialLink(QString portname = "",
SerialInterface::baudRateType baudrate=SerialInterface::BAUD57600,
SerialInterface::flowType flow=SerialInterface::FLOW_OFF,
SerialInterface::parityType parity=SerialInterface::PAR_NONE,
SerialInterface::dataBitsType dataBits=SerialInterface::DATA_8,
SerialInterface::stopBitsType stopBits=SerialInterface::STOP_1);
~SerialLink();
static const int poll_interval = SERIAL_POLL_INTERVAL; ///< Polling interval, defined in configuration.h
......@@ -132,18 +137,18 @@ protected slots:
void checkForBytes();
protected:
QextSerialPort* port;
SerialInterface * port;
#ifdef _WIN32
HANDLE winPort;
DCB winPortSettings;
#endif
QString porthandle;
QString name;
BaudRateType baudrate;
FlowType flow;
ParityType parity;
DataBitsType dataBits;
StopBitsType stopBits;
SerialInterface::baudRateType baudrate;
SerialInterface::flowType flow;
SerialInterface::parityType parity;
SerialInterface::dataBitsType dataBits;
SerialInterface::stopBitsType stopBits;
int timeout;
int id;
......@@ -163,7 +168,7 @@ protected:
bool hardwareConnect();
signals:
// Signals are defined by LinkInterface
void aboutToCloseFlag();
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment