From 06a39eb7dfa72d71daf1cd4ee867e3684f749334 Mon Sep 17 00:00:00 2001 From: Mark Watkins Date: Sat, 16 Apr 2016 02:11:45 +1000 Subject: [PATCH 1/2] Support for PRS1 960t Family 5.2 Event File --- .../SleepLib/loader_plugins/prs1_loader.cpp | 157 ++++++++++++------ 1 file changed, 105 insertions(+), 52 deletions(-) diff --git a/sleepyhead/SleepLib/loader_plugins/prs1_loader.cpp b/sleepyhead/SleepLib/loader_plugins/prs1_loader.cpp index 27d2d219..dec5a179 100644 --- a/sleepyhead/SleepLib/loader_plugins/prs1_loader.cpp +++ b/sleepyhead/SleepLib/loader_plugins/prs1_loader.cpp @@ -866,6 +866,16 @@ bool PRS1Import::ParseF5Events() // } // Code[2]->AddEvent(t,data0); break; + case 0x03: // BIPAP Pressure + qDebug() << "0x03 Observed in ASV data!!????"; + + data0 = buffer[pos++]; + data1 = buffer[pos++]; + // data0/=10.0; + // data1/=10.0; + // session->AddEvent(new Event(t,CPAP_EAP, 0, data, 1)); + // session->AddEvent(new Event(t,CPAP_IAP, 0, &data1, 1)); + break; case 0x04: // Timed Breath data0 = buffer[pos++]; @@ -898,16 +908,20 @@ bool PRS1Import::ParseF5Events() case 0x08: // ??? data0 = buffer[pos++]; tt -= qint64(data0) * 1000L; // Subtract Time Offset - qDebug() << "Code 8 found at " << hex << pos - 1 << " " << tt; + //qDebug() << "Code 8 found at " << hex << pos - 1 << " " << tt; - if (!Code[10]) { - if (!(Code[10] = session->AddEventList(cpapcode, EVL_Event))) { return false; } + if (event->familyVersion>=2) { + HY->AddEvent(tt, data0); + } else { + if (!Code[10]) { + if (!(Code[10] = session->AddEventList(cpapcode, EVL_Event))) { return false; } + } + + //???? + //data1=buffer[pos++]; // ??? + Code[10]->AddEvent(tt, data0); + //pos++; } - - //???? - //data1=buffer[pos++]; // ??? - Code[10]->AddEvent(tt, data0); - pos++; break; case 0x09: // ASV Codes @@ -922,12 +936,15 @@ bool PRS1Import::ParseF5Events() case 0x0a: data0 = buffer[pos++]; tt -= qint64(data0) * 1000L; // Subtract Time Offset + if (event->familyVersion>=2) { + FL->AddEvent(tt, data0); + } else { + if (!Code[7]) { + if (!(Code[7] = session->AddEventList(cpapcode, EVL_Event))) { return false; } + } - if (!Code[7]) { - if (!(Code[7] = session->AddEventList(cpapcode, EVL_Event))) { return false; } + Code[7]->AddEvent(tt, data0); } - - Code[7]->AddEvent(tt, data0); break; @@ -951,16 +968,36 @@ bool PRS1Import::ParseF5Events() break; case 0x0c: - data0 = buffer[pos++]; - tt -= qint64(data0) * 1000L; // Subtract Time Offset - qDebug() << "Code 12 found at " << hex << pos - 1 << " " << tt; - if (!Code[8]) { - if (!(Code[8] = session->AddEventList(cpapcode, EVL_Event))) { return false; } + if (event->familyVersion>=2) { + data0 = (buffer[pos + 1] << 8 | buffer[pos]); + data0 *= 2; + pos += 2; + data1 = buffer[pos++]; + tt = t - qint64(data1) * 1000L; + + if (!PB) { + if (!(PB = session->AddEventList(cpapcode, EVL_Event))) { + qDebug() << "!PB addeventlist exit"; + return false; + } + } + + PB->AddEvent(tt, data0); + + } else { + data0 = buffer[pos++]; + tt -= qint64(data0) * 1000L; // Subtract Time Offset + qDebug() << "Code 12 found at " << hex << pos - 1 << " " << tt; + + + if (!Code[8]) { + if (!(Code[8] = session->AddEventList(cpapcode, EVL_Event))) { return false; } + } + + Code[8]->AddEvent(tt, data0); + pos += 2; } - - Code[8]->AddEvent(tt, data0); - pos += 2; break; case 0x0d: // All the other ASV graph stuff. @@ -1002,34 +1039,53 @@ bool PRS1Import::ParseF5Events() PS->AddEvent(t, data2); // Pressure Support if (event->familyVersion >= 1) { data0 = buffer[pos++]; - } break; - case 0x03: // BIPAP Pressure - qDebug() << "0x03 Observed in ASV data!!????"; - - data0 = buffer[pos++]; - data1 = buffer[pos++]; - // data0/=10.0; - // data1/=10.0; - // session->AddEvent(new Event(t,CPAP_EAP, 0, data, 1)); - // session->AddEvent(new Event(t,CPAP_IAP, 0, &data1, 1)); - break; - - case 0x11: // Not Leak Rate - qDebug() << "0x11 Observed in ASV data!!????"; - //if (!Code[24]) { - // Code[24]=new EventList(cpapcode,EVL_Event); - //} - //Code[24]->AddEvent(t,buffer[pos++]); - break; - case 0x0e: // Unknown - qDebug() << "0x0E Observed in ASV data!!????"; - data0 = buffer[pos++]; // << 8) | buffer[pos]; + // Family 5.2 has this code + if (event->familyVersion>=2) { + EPAP->AddEvent(t, data0=buffer[pos+9]); // 9 + IPAP->AddEvent(t, data1=buffer[pos+0]); // 0 + IPAPLo->AddEvent(t, buffer[pos+1]); // 1 + IPAPHi->AddEvent(t, buffer[pos+2]); // 2 + LEAK->AddEvent(t, buffer[pos+3]); // 3 + TV->AddEvent(t, buffer[pos+7]); // 7 + RR->AddEvent(t, buffer[pos+4]); // 4 + PTB->AddEvent(t, buffer[pos+5]); // 5 + MV->AddEvent(t, buffer[pos+6]); //6 + SNORE->AddEvent(t, data2 = buffer[pos+8]); //?? + + 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 + } + data2 = data1 - data0; + PS->AddEvent(t, data2); // Pressure Support + pos+=11; + } else { + qDebug() << "0x0E Observed in ASV data!!????"; + data0 = buffer[pos++]; // << 8) | buffer[pos]; + + } //session->AddEvent(new Event(t,cpapcode, 0, data, 1)); break; + case 0x0f: + qDebug() << "0x0f Observed in ASV data!!????"; + + data0 = buffer[pos + 1] << 8 | buffer[pos]; + pos += 2; + data1 = buffer[pos]; //|buffer[pos+1] << 8 + pos += 1; + tt -= qint64(data1) * 1000L; + //session->AddEvent(new Event(tt,cpapcode, 0, data, 2)); + break; case 0x10: // Unknown data0 = buffer[pos + 1] << 8 | buffer[pos]; @@ -1045,18 +1101,15 @@ bool PRS1Import::ParseF5Events() // data2 = buffer[pos++]; //session->AddEvent(new Event(t,cpapcode, 0, data, 3)); break; - - case 0x0f: - qDebug() << "0x0f Observed in ASV data!!????"; - - data0 = buffer[pos + 1] << 8 | buffer[pos]; - pos += 2; - data1 = buffer[pos]; //|buffer[pos+1] << 8 - pos += 1; - tt -= qint64(data1) * 1000L; - //session->AddEvent(new Event(tt,cpapcode, 0, data, 2)); + case 0x11: // Not Leak Rate + qDebug() << "0x11 Observed in ASV data!!????"; + //if (!Code[24]) { + // Code[24]=new EventList(cpapcode,EVL_Event); + //} + //Code[24]->AddEvent(t,buffer[pos++]); break; + case 0x12: // Summary qDebug() << "0x12 Observed in ASV data!!????"; data0 = buffer[pos++]; From 0e9fd1a2f4b79b5b996a0b73989d2458f2221ef8 Mon Sep 17 00:00:00 2001 From: Mark Watkins Date: Sat, 16 Apr 2016 03:15:54 +1000 Subject: [PATCH 2/2] Version bump, clean up release notes, still more to do on windows --- sleepyhead/build_number.h | 2 +- sleepyhead/docs/release_notes.html | 17 +++++++++++++++++ sleepyhead/main.cpp | 24 +++++++++++++----------- sleepyhead/scripts/build_number | 2 +- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/sleepyhead/build_number.h b/sleepyhead/build_number.h index 4efaa269..6025edac 100644 --- a/sleepyhead/build_number.h +++ b/sleepyhead/build_number.h @@ -1 +1 @@ -const int build_number = 1; +const int build_number = 2; diff --git a/sleepyhead/docs/release_notes.html b/sleepyhead/docs/release_notes.html index d4da15d7..6d5f88b4 100644 --- a/sleepyhead/docs/release_notes.html +++ b/sleepyhead/docs/release_notes.html @@ -1,4 +1,20 @@ +Changes and fixes in v1.0.0-beta-2 + + +
  • [PR S1/Dreamstation Importer] Periodic Breathing/CSR was not Doubling on F0V4 560 machines
  • +
  • [Core Program] Fix program crash on changing language or profile
  • +
  • [PR S1/Dreamstation Importer] Added PRS1 BiPAP AutoSV 960T F5V2 support
  • +
  • [ResMed Importer] EPR erroneously shown as OFF instead of 3
  • +
  • Redesign autoupdater so it parses Qt Installer Frameworks XML structures
  • +
  • Reset Channel names on language change
  • +
  • Improve Tooltip timeouts in preferences
  • +
  • Fix some untranslateable strings and spelling mistakes
  • +
  • Fix a couple of minor Time at Pressure chart/tooltip glitches
  • +
    +
    +
    + Changes and fixes in v1.0.0-beta-1 @@ -7,6 +23,7 @@
  • Redid Unintentional Leaks calcluations using a simple Mask Profile in Preferences
  • Make Release Notes welcome message translate-able (should the changelog be too?)
  • +

    Changes and fixes in v1.0.0-beta-0 diff --git a/sleepyhead/main.cpp b/sleepyhead/main.cpp index cea8e041..86296938 100644 --- a/sleepyhead/main.cpp +++ b/sleepyhead/main.cpp @@ -85,25 +85,27 @@ void release_notes() QVBoxLayout * layout = new QVBoxLayout(&relnotes); QWebView * web = new QWebView(&relnotes); - QString welcomeMessage = "" - "

    "+QObject::tr("After four years in the making, this build brings SleepyHead into the final beta phase.")+"

    " - "

    "+QObject::tr("Things are not perfect yet, but the focus from now is putting on the finishing touches. ")+ - QObject::tr("This version brings support for the new Philips Respironics DreamStation, and older PRS1 1060P models.")+ - "

    "; - +// QString welcomeMessage = "" +// "

    "+QObject::tr("After four years in the making, this build brings SleepyHead into the final beta phase.")+"

    " +// "

    "+QObject::tr("Things are not perfect yet, but the focus from now is putting on the finishing touches. ")+ +// QObject::tr("This version brings support for the new Philips Respironics DreamStation, and older PRS1 1060P models.")+ +// "

    "; +; QFile clfile(":/docs/release_notes.html"); QString changeLog = QObject::tr("Sorry, could not locate changelog."); if (clfile.open(QIODevice::ReadOnly)) { QTextStream ts(&clfile); + //Todo, write XML parser and only show the latest.. changeLog = ts.readAll(); } + QString html = "" "" - "" - "

    "+QObject::tr("Greetings!")+"

    "; + ""; + //"

    "+QObject::tr("Greetings!")+"

    "; - html += welcomeMessage; +// html += welcomeMessage; if (ReleaseStatus != "r") { @@ -111,8 +113,8 @@ void release_notes() ""+QObject::tr("As this is a pre-release version, it is recommended that you back up your data folder manually before proceding, because attempting to roll back later may break things.")+"

    "; } - html += "

    "+QObject::tr("Sleep Well, and good luck!")+"

    " - "

    "+"JediMark"+"


    "+QObject::tr("Change log")+"


    "; +// html += "

    "+QObject::tr("Sleep Well, and good luck!")+"

    " +// "

    "+"JediMark"+"


    "+QObject::tr("Change log")+"


    "; html += changeLog; html += ""; diff --git a/sleepyhead/scripts/build_number b/sleepyhead/scripts/build_number index d00491fd..0cfbf088 100644 --- a/sleepyhead/scripts/build_number +++ b/sleepyhead/scripts/build_number @@ -1 +1 @@ -1 +2