RepRaptor/parser.cpp

107 lines
3.0 KiB
C++

#include "parser.h"
Parser::Parser(QObject *parent):
QObject(parent)
{
this->setParent(parent);
temperatureRegxp.setCaseSensitivity(Qt::CaseInsensitive);
temperatureRegxp.setPatternSyntax(QRegExp::RegExp);
temperatureRegxp.setPattern("\\d+\\.\\d+"); // Find float in string
readingFiles = false;
readingEEPROM = false;
EEPROMReadingStarted = false;
QSettings settings;
firmware = settings.value("printer/firmware").toInt();
}
Parser::~Parser()
{
}
void Parser::parse(QByteArray data)
{
if(!data.isEmpty())
{
if(readingFiles)
{
if(!data.contains("End file list")) SDFilesList.append(data);
else
{
readingFiles = false;
emit recievedSDFilesList(SDFilesList);
}
return;
}
if(readingEEPROM)
{
if(firmware == Repetier)
{
if(data.startsWith("EPR"))
{
emit recievedEEPROMLine(QString(data));
EEPROMReadingStarted = true;
}
else if(EEPROMReadingStarted)
{
readingEEPROM = false;
EEPROMReadingStarted = false;
emit recievingEEPROMDone();
}
return;
}
}
if(data.startsWith("ok"))
emit recievedOkNum(data.split(' ').at(1).toInt());
else if(data.startsWith("T:"))
{
TemperatureReadings r;
if(temperatureRegxp.indexIn(QString(data)) != -1)
r.e = temperatureRegxp.cap(0).toDouble();
else return;
if(temperatureRegxp.indexIn(QString(data), temperatureRegxp.matchedLength()) != -1)
r.b = temperatureRegxp.cap(0).toDouble();
else return;
emit recievedTemperature(r);
}
else if(data.startsWith("wait")) emit recievedOkWait();
else if(data.startsWith("rs") || data.startsWith("Resend"))
emit recievedResend(data.split(' ').at(0).toInt());
else if(data.startsWith("!!")) emit recievedError();
else if(data.startsWith("Done")) emit recievedSDDone();
else if(data.startsWith("start")) emit recievedStart();
else if(data.startsWith("SD pr"))
{
QString tmp;
QString fragment = data.split(' ').at(3);
for(int i = 0; fragment.at(i) != '/'; ++i)
{
tmp += fragment.at(i);
}
emit recievedSDUpdate(tmp.toDouble());
}
else if(data.startsWith("Not SD "));
else if(data.contains("Begin file list"))
{
SDFilesList.clear();
readingFiles = true; //start reading files from SD
}
else if(data.contains("REPETIER")) emit recievedFirmware(Repetier);
else if(data.contains("MARLIN")) emit recievedFirmware(Marlin);
}
}
void Parser::setEEPROMReadingMode()
{
readingEEPROM = true;
}