From e8b07b4eac163b8d414db83b53890e5f19934688 Mon Sep 17 00:00:00 2001 From: Mark Watkins Date: Mon, 5 May 2014 16:14:29 +1000 Subject: [PATCH] More Resmed import cleanups, and fixes glitch with empty sessions --- .../SleepLib/loader_plugins/resmed_loader.cpp | 85 +++++++++++++------ sleepyhead/mainwindow.cpp | 2 + 2 files changed, 61 insertions(+), 26 deletions(-) diff --git a/sleepyhead/SleepLib/loader_plugins/resmed_loader.cpp b/sleepyhead/SleepLib/loader_plugins/resmed_loader.cpp index 7373c879..6eb7441a 100644 --- a/sleepyhead/SleepLib/loader_plugins/resmed_loader.cpp +++ b/sleepyhead/SleepLib/loader_plugins/resmed_loader.cpp @@ -121,24 +121,32 @@ EDFParser::EDFParser(QString name) } EDFParser::~EDFParser() { - QVector::iterator s; - - for (s = edfsignals.begin(); s != edfsignals.end(); s++) { + for (auto s = edfsignals.begin(); s != edfsignals.end(); s++) { if ((*s).data) { delete [](*s).data; } } if (buffer) { delete [] buffer; } } + +// Read a 16 bits integer qint16 EDFParser::Read16() { - if ((pos + long(sizeof(qint16))) > filesize) { + if ((pos + 2) > filesize) { return 0; } +#ifdef LITTLE_ENDIAN + // Intel, etc... qint16 res = *(qint16 *)&buffer[pos]; - pos += sizeof(qint16); +#else + // ARM, PPC, etc.. + qint16 res = buffer[pos] | (buffer[pos+1] << 8); +#endif + + pos += 2; return res; } + QString EDFParser::Read(unsigned n) { if ((pos + n) > filesize) { @@ -287,14 +295,18 @@ bool EDFParser::Parse() for (int x = 0; x < num_data_records; x++) { for (int i = 0; i < num_signals; i++) { EDFSignal &sig = edfsignals[i]; +#if LITTLE_ENDIAN + // Intel x86, etc.. memcpy((char *)&sig.data[sig.pos], (char *)&buffer[pos], sig.nr * 2); sig.pos += sig.nr; pos += sig.nr * 2; - // big endian will probably screw up without this.. - /*for (int j=0;jAddSession(sess, profile); + + if (sess->length() > 0) { + m->AddSession(sess, profile); + } else { + // Hmm.. this means a ton of these could slow down import. + // I could instead set these to disabled by default, or implement a dodgy session marker + delete sess; + } } } diff --git a/sleepyhead/mainwindow.cpp b/sleepyhead/mainwindow.cpp index f6af9cd0..c1ab8798 100644 --- a/sleepyhead/mainwindow.cpp +++ b/sleepyhead/mainwindow.cpp @@ -103,6 +103,8 @@ MainWindow::MainWindow(QWidget *parent) : #ifdef TEST_BUILD version += QString(STR_TestBuild); +#else + ui->warningLabel->hide(); #endif this->setWindowTitle(STR_TR_SleepyHead + QString(" v%1 (" + tr("Profile") + ": %2)").arg(version).arg(PREF[STR_GEN_Profile].toString()));