diff --git a/sleepyhead/SleepLib/loader_plugins/prs1_loader.cpp b/sleepyhead/SleepLib/loader_plugins/prs1_loader.cpp index e99d3987..0c1baec1 100644 --- a/sleepyhead/SleepLib/loader_plugins/prs1_loader.cpp +++ b/sleepyhead/SleepLib/loader_plugins/prs1_loader.cpp @@ -811,7 +811,7 @@ bool PRS1Import::ParseF5Events() code = buffer[pos++]; if (code >= ncodes) { - qDebug() << "Illegal PRS1 code " << hex << int(code) << " appeared at " << hex << startpos; + qDebug() << "Illegal PRS1 code " << hex << int(code) << " appeared at " << hex << startpos << "in" << event->sessionid;; qDebug() << "1: (" << int(lastcode) << hex << lastpos << ")"; qDebug() << "2: (" << int(lastcode2) << hex << lastpos2 << ")"; qDebug() << "3: (" << int(lastcode3) << hex << lastpos3 << ")"; @@ -925,11 +925,16 @@ bool PRS1Import::ParseF5Events() break; case 0x09: // ASV Codes - //code=CPAP_FlowLimit; - data0 = buffer[pos++]; - tt -= qint64(data0) * 1000L; // Subtract Time Offset + if (event->familyVersion<2) { + //code=CPAP_FlowLimit; + data0 = buffer[pos++]; + tt -= qint64(data0) * 1000L; // Subtract Time Offset - FL->AddEvent(tt, data0); + FL->AddEvent(tt, data0); + } else { + data0 = buffer[pos++]; + data1 = buffer[pos++]; + } break; @@ -1001,44 +1006,53 @@ bool PRS1Import::ParseF5Events() break; case 0x0d: // All the other ASV graph stuff. - IPAP->AddEvent(t, currentPressure = data0 = buffer[pos++]); // 00=IAP - data4 = buffer[pos++]; - IPAPLo->AddEvent(t, data4); // 01=IAP Low - data5 = buffer[pos++]; - IPAPHi->AddEvent(t, data5); // 02=IAP High - TOTLEAK->AddEvent(t, leak=buffer[pos++]); // 03=LEAK - if (calcLeaks) { // Much Quicker doing this here than the recalc method. - leak -= (((currentPressure/10.0f) - 4.0) * ppm + lpm4); - if (leak < 0) leak = 0; + if (event->familyVersion>=2) { + data0 = (buffer[pos + 1] << 8 | buffer[pos]); + data0 *= 2; + pos += 2; + data1 = buffer[pos++]; + tt = t - qint64(data1) * 1000L; + } else { + IPAP->AddEvent(t, currentPressure = data0 = buffer[pos++]); // 00=IAP + data4 = buffer[pos++]; + IPAPLo->AddEvent(t, data4); // 01=IAP Low + data5 = buffer[pos++]; + IPAPHi->AddEvent(t, data5); // 02=IAP High - LEAK->AddEvent(t, leak); - } + TOTLEAK->AddEvent(t, leak=buffer[pos++]); // 03=LEAK + if (calcLeaks) { // Much Quicker doing this here than the recalc method. + leak -= (((currentPressure/10.0f) - 4.0) * ppm + lpm4); + if (leak < 0) leak = 0; - - RR->AddEvent(t, buffer[pos++]); // 04=Breaths Per Minute - PTB->AddEvent(t, buffer[pos++]); // 05=Patient Triggered Breaths - MV->AddEvent(t, buffer[pos++]); // 06=Minute Ventilation - //tmp=buffer[pos++] * 10.0; - TV->AddEvent(t, buffer[pos++]); // 07=Tidal Volume - SNORE->AddEvent(t, data2 = buffer[pos++]); // 08=Snore - - if (data2 > 0) { - if (!VS) { - if (!(VS = session->AddEventList(CPAP_VSnore, EVL_Event))) { - qDebug() << "!VS eventlist exit"; - return false; - } + LEAK->AddEvent(t, leak); } - VS->AddEvent(t, 0); //data2); // VSnore - } - EPAP->AddEvent(t, data1 = buffer[pos++]); // 09=EPAP - data2 = data0 - data1; - PS->AddEvent(t, data2); // Pressure Support - if (event->familyVersion >= 1) { - data0 = buffer[pos++]; + RR->AddEvent(t, buffer[pos++]); // 04=Breaths Per Minute + PTB->AddEvent(t, buffer[pos++]); // 05=Patient Triggered Breaths + MV->AddEvent(t, buffer[pos++]); // 06=Minute Ventilation + //tmp=buffer[pos++] * 10.0; + TV->AddEvent(t, buffer[pos++]); // 07=Tidal Volume + SNORE->AddEvent(t, data2 = buffer[pos++]); // 08=Snore + + if (data2 > 0) { + if (!VS) { + if (!(VS = session->AddEventList(CPAP_VSnore, EVL_Event))) { + qDebug() << "!VS eventlist exit"; + return false; + } + } + + VS->AddEvent(t, 0); //data2); // VSnore + } + + EPAP->AddEvent(t, data1 = buffer[pos++]); // 09=EPAP + data2 = data0 - data1; + PS->AddEvent(t, data2); // Pressure Support + if (event->familyVersion >= 1) { + data0 = buffer[pos++]; + } } break; @@ -1361,7 +1375,7 @@ bool PRS1Import::ParseF0Events() code = buffer[pos++]; if (code > 0x15) { - qDebug() << "Illegal PRS1 code " << hex << int(code) << " appeared at " << hex << startpos; + qDebug() << "Illegal PRS1 code " << hex << int(code) << " appeared at " << hex << startpos << "in" << event->sessionid; qDebug() << "1: (" << hex << int(lastcode) << hex << lastpos << ")"; qDebug() << "2: (" << hex << int(lastcode2) << hex << lastpos2 << ")"; qDebug() << "3: (" << hex << int(lastcode3) << hex << lastpos3 << ")"; diff --git a/sleepyhead/UpdaterWindow.cpp b/sleepyhead/UpdaterWindow.cpp index e5f37297..90217bc7 100644 --- a/sleepyhead/UpdaterWindow.cpp +++ b/sleepyhead/UpdaterWindow.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -71,21 +72,46 @@ UpdaterWindow::~UpdaterWindow() delete ui; } +QString platformStr() +{ + static QString platform; + +#if defined(Q_OS_WIN) + platform="win32"; +#elif defined(Q_OS_MAC) + platform="mac"; +#elif defined(Q_OS_LINUX) + platform="ubuntu"; +#else + platform="unknown"; +#endif + + return platform; +} void UpdaterWindow::checkForUpdates() { - QString filename = QApplication::applicationDirPath() + "/Updates.xml"; + QString platform=platformStr(); +#ifdef Q_OS_WINDOWS + QString filename = QApplication::applicationDirPath() + "/Updates.xml"; +#else + QString filename = QApplication::applicationDirPath() + QString("/LatestVersion-%1").arg(platform); +#endif // Check updates.xml file if it's still recent.. if (QFile::exists(filename)) { QFileInfo fi(filename); QDateTime created = fi.created(); int age = created.secsTo(QDateTime::currentDateTime()); - if (age < 0) { // 7200) { + if (age < 900) { QFile file(filename); file.open(QFile::ReadOnly); - ParseUpdateXML(&file); +#ifdef Q_OS_WINDOWS + ParseUpdatesXML(&file); +#else + ParseLatestVersion(&file); +#endif file.close(); return; } @@ -93,8 +119,11 @@ void UpdaterWindow::checkForUpdates() mainwin->Notify(tr("Checking for SleepyHead Updates")); - // language code? - update_url = QUrl(QString("http://sourceforge.net/projects/sleepyhead/files/AutoUpdate/%1/Updates.xml/download").arg(PlatformString)); +#ifdef Q_OS_WINDOWS + update_url = QUrl(QString("http://sleepyhead.jedimark.net/packages/%1/Updates.xml").arg(platform)); +#else + update_url = QUrl(QString("http://sleepyhead.jedimark.net/releases/LatestVersion-%1").arg(platform)); +#endif downloadUpdateXML(); } @@ -138,15 +167,27 @@ void UpdaterWindow::updateFinished(QNetworkReply *reply) ui->plainTextEdit->appendPlainText(tr("%1 bytes received").arg(reply->size())); + +#ifdef Q_OS_WINDOWS QString filename = QApplication::applicationDirPath() + "/Updates.xml"; +#else + QString filename = QApplication::applicationDirPath() + QString("/LatestVersion-%1").arg(platformStr()); +#endif + qDebug() << filename; QFile file(filename); file.open(QFile::WriteOnly); file.write(reply->readAll()); file.close(); file.open(QFile::ReadOnly); - //QTextStream ts(&file); + +#ifdef Q_OS_WINDOWS ParseUpdatesXML(&file); +#else + ParseLatestVersion(&file); +#endif + PREF[STR_GEN_UpdatesLastChecked] = QDateTime::currentDateTime(); + file.close(); reply->deleteLater(); } @@ -398,6 +439,23 @@ void StartMaintenanceTool() #endif } +void UpdaterWindow::ParseLatestVersion(QIODevice *file) +{ + // Temporary Cheat.. for linux & mac, just check the latest version number + QTextStream text(file); + + QString version=text.readAll().trimmed(); + qDebug() << "Latest version is" << version; + int i=compareVersion(version); + + if (i>0) { + mainwin->Notify(tr("Version %1 of SleepyHead is available, opening link to download site.").arg(version), STR_TR_SleepyHead); + QDesktopServices::openUrl(QUrl(QString("http://sleepyhead.jedimark.net"))); + } else { + mainwin->Notify(tr("You are already running the latest version."), STR_TR_SleepyHead); + } +} + //New, Qt Installer framework version void UpdaterWindow::ParseUpdatesXML(QIODevice *dev) { diff --git a/sleepyhead/UpdaterWindow.h b/sleepyhead/UpdaterWindow.h index fd104264..c57601a9 100644 --- a/sleepyhead/UpdaterWindow.h +++ b/sleepyhead/UpdaterWindow.h @@ -52,6 +52,7 @@ class UpdaterWindow : public QMainWindow */ void ParseUpdateXML(QIODevice *dev); void ParseUpdatesXML(QIODevice *dev); + void ParseLatestVersion(QIODevice *dev); protected slots: void updateFinished(QNetworkReply *reply); diff --git a/sleepyhead/main.cpp b/sleepyhead/main.cpp index 86296938..348f8d96 100644 --- a/sleepyhead/main.cpp +++ b/sleepyhead/main.cpp @@ -506,7 +506,7 @@ retry_directory: loadChannels(changing_language); - // if (check_updates) { mainwin->CheckForUpdates(); } + if (check_updates) { mainwin->CheckForUpdates(); } w.show(); diff --git a/sleepyhead/updateparser.h b/sleepyhead/updateparser.h index e1a3062c..07664dcd 100644 --- a/sleepyhead/updateparser.h +++ b/sleepyhead/updateparser.h @@ -154,5 +154,4 @@ class UpdatesParser QString currentTag; }; - #endif // UPDATEPARSER_H