From 0b25c5709d3fa916f8248d6a06339050a65711dc Mon Sep 17 00:00:00 2001 From: NeoTheFox Date: Sun, 8 Mar 2015 01:50:05 +0300 Subject: [PATCH] Fixed SD status reporting with new parser --- mainwindow.cpp | 14 ++++++++------ mainwindow.h | 2 +- parser.cpp | 25 +++++++++++++++++++++++-- parser.h | 2 +- repraptor.h | 5 +++++ 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 7514511..98d9eaa 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -71,6 +71,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, SIGNAL(eepromReady()), this, SLOT(openEEPROMeditor())); qRegisterMetaType("TemperatureReadings"); + qRegisterMetaType("SDProgress"); parser = new Parser(); parserThread = new QThread(); parser->moveToThread(parserThread); @@ -97,7 +98,7 @@ MainWindow::MainWindow(QWidget *parent) : else sendTimer.setInterval(5); sendTimer.start(); - progressSDTimer.setInterval(3000); + progressSDTimer.setInterval(2000); if(chekingSDStatus)progressSDTimer.start(); tempWarning.setInterval(10000); @@ -822,14 +823,15 @@ void MainWindow::selectSDfile(QString file) ui->fileBox->setDisabled(false); } -void MainWindow::updateSDStatus(double currentSDbytes) +void MainWindow::updateSDStatus(SDProgress p) { - ui->filelines->setText(QString::number(sdBytes) + ui->filelines->setText(QString::number(p.progress) + QString("/") - + QString::number(currentSDbytes) + + QString::number(p.total) + QString(" bytes")); - ui->progressBar->setValue(currentSDbytes/sdBytes * 100); - if(currentSDbytes == sdBytes) sdprinting = false; + if(p.progress != 0) ui->progressBar->setValue(((double)p.progress/p.total) * 100); + else ui->progressBar->setValue(0); + if(p.total == p.progress) sdprinting = false; } void MainWindow::checkSDStatus() diff --git a/mainwindow.h b/mainwindow.h index feb3a19..4507878 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -91,7 +91,7 @@ private slots: void initSDprinting(QStringList sdFiles); void selectSDfile(QString file); void checkSDStatus(); - void updateSDStatus(double currentSDbytes); + void updateSDStatus(SDProgress p); void requestEEPROMSettings(); void openEEPROMeditor(); void sendEEPROMsettings(QStringList changes); diff --git a/parser.cpp b/parser.cpp index 8166897..019caf1 100644 --- a/parser.cpp +++ b/parser.cpp @@ -57,7 +57,12 @@ void Parser::parse(QByteArray data) } if(data.startsWith("ok")) - emit recievedOkNum(data.split(' ').at(1).toInt()); + { + QStringList tmp = QString(data).split(' '); + if(tmp.size() > 1) + emit recievedOkNum(tmp.at(1).toInt()); + else emit recievedOkNum(0); + } else if(data.startsWith("T:")) { TemperatureReadings r; @@ -79,6 +84,7 @@ void Parser::parse(QByteArray data) 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) @@ -86,6 +92,22 @@ void Parser::parse(QByteArray data) tmp += fragment.at(i); } emit recievedSDUpdate(tmp.toDouble()); + */ + SDProgress p; + QRegExp rxp("\\d+/\\d+"); + QStringList tmp; + + if(rxp.indexIn(data) != -1) + { + tmp = rxp.cap(0).split('/'); + + p.progress = tmp.at(0).toLong(); + p.total = tmp.at(1).toLong(); + } + else return; + + emit recievedSDUpdate(p); + } else if(data.startsWith("Not SD ")); else if(data.contains("Begin file list")) @@ -95,7 +117,6 @@ void Parser::parse(QByteArray data) } else if(data.contains("REPETIER")) emit recievedFirmware(Repetier); else if(data.contains("MARLIN")) emit recievedFirmware(Marlin); - } } diff --git a/parser.h b/parser.h index 2cb5670..c930086 100644 --- a/parser.h +++ b/parser.h @@ -27,7 +27,7 @@ protected: signals: void recievedTemperature(TemperatureReadings); - void recievedSDUpdate(double); + void recievedSDUpdate(SDProgress); void recievedEEPROMLine(QString); void recievingEEPROMDone(); void recievedSDFilesList(QStringList); diff --git a/repraptor.h b/repraptor.h index f1a1cb6..cb917d9 100644 --- a/repraptor.h +++ b/repraptor.h @@ -22,6 +22,11 @@ namespace RepRaptor int T, P; QString S; } repetierEEPROMline; + + typedef struct + { + unsigned long int progress, total; + } SDProgress; } #endif // REPRAPTOR_H