Files
        @ ecd02467c397
    
        
              Branch filter: 
        
    Location: tempo-plotter/src/asciireader.cpp
        
            
            ecd02467c397
            2.9 KiB
            text/x-c++hdr
        
        
    
    preliminary implementation of new reader based design
binary stream and ascii readers added
sps isn't working, demo mode needs some work, code cleanup continues
    binary stream and ascii readers added
sps isn't working, demo mode needs some work, code cleanup continues
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110  | /*
  Copyright © 2016 Hasan Yavuz Özderya
  This file is part of serialplot.
  serialplot 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.
  serialplot 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 serialplot.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <QtDebug>
#include "asciireader.h"
AsciiReader::AsciiReader(QIODevice* device, ChannelManager* channelMan, QObject *parent) :
    AbstractReader(device, channelMan, parent)
{
    paused = false;
    sampleCount = 0;
    // TODO: sps counter
    _numOfChannels = _settingsWidget.numOfChannels();
    connect(&_settingsWidget, &AsciiReaderSettings::numOfChannelsChanged,
            this, &AsciiReader::numOfChannelsChanged);
    connect(&_settingsWidget, &AsciiReaderSettings::numOfChannelsChanged,
            [this](unsigned value){_numOfChannels = value;});
}
QWidget* AsciiReader::settingsWidget()
{
    return &_settingsWidget;
}
unsigned AsciiReader::numOfChannels()
{
    return _numOfChannels;
}
// TODO: this could be a part of AbstractReader
void AsciiReader::enable(bool enabled)
{
    if (enabled)
    {
        QObject::connect(_device, &QIODevice::readyRead,
                         this, &AsciiReader::onDataReady);
    }
    else
    {
        QObject::disconnect(_device, 0, this, 0);
    }
}
void AsciiReader::pause(bool enabled)
{
    paused = enabled;
}
void AsciiReader::onDataReady()
{
    while(_device->canReadLine())
    {
        QByteArray line = _device->readLine();
        // discard data if paused
        if (paused)
        {
            return;
        }
        line = line.trimmed();
        auto separatedValues = line.split(',');
        int numReadChannels; // effective number of channels to read
        if (separatedValues.length() >= int(_numOfChannels))
        {
            numReadChannels = _numOfChannels;
        }
        else // there is missing channel data
        {
            numReadChannels = separatedValues.length();
            qWarning() << "Incoming data is missing data for some channels!";
        }
        // parse read line
        for (int ci = 0; ci < numReadChannels; ci++)
        {
            bool ok;
            double channelSample = separatedValues[ci].toDouble(&ok);
            if (ok)
            {
                _channelMan->addChannelData(ci, &channelSample, 1);
                sampleCount++;
            }
            else
            {
                qWarning() << "Data parsing error for channel: " << ci;
            }
        }
        emit dataAdded();
    }
}
 |