/*
* 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
*/
#include
#include
#include
#include
#include
#include
#include "host.h"
Host::Host(TNX::QSerialPort &serPort, QObject *parent)
: QObject(parent), serialPort_(serPort), timerId_(0), byteCounter_(0)
{
using TNX::QSerialPort;
timerId_ = startTimer(5000);
connect(&serialPort_, SIGNAL(readyRead()), SLOT(onDataReceived()));
if ( !serialPort_.setCommTimeouts(QSerialPort::CtScheme_NonBlockingRead) )
qWarning("Cannot set communications timeout values at port %s.", qPrintable(serialPort_.portName()));
}
Host::~Host()
{
}
void Host::onDataReceived()
{
if ( timerId_ )
killTimer(timerId_);
QByteArray data = serialPort_.read(512);
byteCounter_ += data.size();
std::cout << "Thread id: " << QThread::currentThreadId() << " Received data @ " <<
qPrintable(QDateTime::currentDateTime().toString("hh:mm:ss.zzz")) << ". Echo back." << std::endl;
serialPort_.write(data);
if ( byteCounter_ >= 4096 ) {
std::cout << "Event-Driven example is terminated successfully." << std::endl;
qApp->exit(0);
}
// create a wait timer for the next packet
timerId_ = startTimer(5000); // 5sec
}
void Host::timerEvent(QTimerEvent *event)
{
Q_ASSERT(timerId_ == event->timerId());
killTimer(event->timerId());
timerId_ = 0;
std::cout << "Timeout occurred." << std::endl;
}