From 96f3b6c65830eb9bf5341bac3c3670c735e1512e Mon Sep 17 00:00:00 2001 From: Phil Olynyk Date: Wed, 22 Sep 2021 13:52:02 -0400 Subject: [PATCH] Clean up AVAPS pressure settings --- oscar/SleepLib/day.cpp | 36 +++++++++++++++--- .../SleepLib/loader_plugins/resmed_loader.cpp | 37 +++++++++++-------- 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/oscar/SleepLib/day.cpp b/oscar/SleepLib/day.cpp index 740f7899..ab26cd48 100644 --- a/oscar/SleepLib/day.cpp +++ b/oscar/SleepLib/day.cpp @@ -848,11 +848,13 @@ ChannelID Day::getPressureChannelID() { for (auto & preferredID : preferredIDs) { // If preferred channel has data, return it if (channelHasData(preferredID)) { - //qDebug() << QString("Found pressure channel 0x%1").arg(preferredID, 4, 16, QChar('0')); +// if ( cpapmode == MODE_AVAPS ) +// qDebug() << QString("Found pressure channel 0x%1").arg(preferredID, 4, 16, QChar('0')); return preferredID; } } + qDebug() << "No pressure channel for " << getCPAPModeStr(); return NoChannel; } @@ -1582,13 +1584,21 @@ QString Day::getPressureSettings() QString units = schema::channel[CPAP_Pressure].units(); if (mode == MODE_CPAP) { - return QObject::tr("Fixed %1 (%2)").arg(validPressure(settings_min(CPAP_Pressure))).arg(units); + return QObject::tr("Fixed %1 (%2)").arg(validPressure(settings_min(CPAP_Pressure))). + arg(units); } else if (mode == MODE_APAP) { - return QObject::tr("Min %1 Max %2 (%3)").arg(validPressure(settings_min(CPAP_PressureMin))).arg(validPressure(settings_max(CPAP_PressureMax))).arg(units); + return QObject::tr("Min %1 Max %2 (%3)").arg(validPressure(settings_min(CPAP_PressureMin))). + arg(validPressure(settings_max(CPAP_PressureMax))). + arg(units); } else if (mode == MODE_BILEVEL_FIXED ) { - return QObject::tr("EPAP %1 IPAP %2 (%3)").arg(validPressure(settings_min(CPAP_EPAP))).arg(validPressure(settings_max(CPAP_IPAP))).arg(units); + return QObject::tr("EPAP %1 IPAP %2 (%3)").arg(validPressure(settings_min(CPAP_EPAP))). + arg(validPressure(settings_max(CPAP_IPAP))). + arg(units); } else if (mode == MODE_BILEVEL_AUTO_FIXED_PS) { - return QObject::tr("PS %1 over %2-%3 (%4)").arg(validPressure(settings_max(CPAP_PS))).arg(validPressure(settings_min(CPAP_EPAPLo))).arg(validPressure(settings_max(CPAP_IPAPHi))).arg(units); + return QObject::tr("PS %1 over %2-%3 (%4)").arg(validPressure(settings_max(CPAP_PS))). + arg(validPressure(settings_min(CPAP_EPAPLo))). + arg(validPressure(settings_max(CPAP_IPAPHi))). + arg(units); } else if (mode == MODE_BILEVEL_AUTO_VARIABLE_PS) { return QObject::tr("Min EPAP %1 Max IPAP %2 PS %3-%4 (%5)").arg(validPressure(settings_min(CPAP_EPAPLo))). arg(validPressure(settings_max(CPAP_IPAPHi))). @@ -1606,11 +1616,25 @@ QString Day::getPressureSettings() arg(validPressure(settings_min(CPAP_PSMax))). arg(units); } else if (mode == MODE_AVAPS) { - return QObject::tr("EPAP %1 IPAP %2-%3 (%4)"). +// qDebug() << "AVAPS: EPAP" << settings_min(CPAP_EPAP) << "IPAP min" << settings_max(CPAP_IPAPLo) << +// "IPAP max" << settings_max(CPAP_IPAPHi); + QString retStr; + if (settings_min(CPAP_EPAPLo) == settings_max(CPAP_EPAPHi)) + retStr = QObject::tr("EPAP %1 IPAP %2-%3 (%4)"). arg(validPressure(settings_min(CPAP_EPAP))). arg(validPressure(settings_max(CPAP_IPAPLo))). arg(validPressure(settings_max(CPAP_IPAPHi))). arg(units); + else + retStr = QObject::tr("EPAP %1-%2 IPAP %3-%4 (%5)"). + arg(validPressure(settings_min(CPAP_EPAPLo))). + arg(validPressure(settings_min(CPAP_EPAPHi))). + arg(validPressure(settings_max(CPAP_IPAPLo))). + arg(validPressure(settings_max(CPAP_IPAPHi))). + arg(units); + +// qDebug() << "AVAPS mode:" << retStr; + return retStr; } return STR_TR_Unknown; diff --git a/oscar/SleepLib/loader_plugins/resmed_loader.cpp b/oscar/SleepLib/loader_plugins/resmed_loader.cpp index a34e2a66..34c81e47 100644 --- a/oscar/SleepLib/loader_plugins/resmed_loader.cpp +++ b/oscar/SleepLib/loader_plugins/resmed_loader.cpp @@ -1527,13 +1527,16 @@ bool ResmedLoader::ProcessSTRfiles(Machine *mach, QMap & STRmap, if ((sig = str.lookupLabel("S.i.MaxPS"))) { R.max_ps = EventDataType(sig->dataArray[rec]) * sig->gain + sig->offset; } - if ( R.epap >= 0 ) { + if ( (R.epap >= 0) && (R.max_epap == R.epap) ) { R.max_ipap = R.epap + R.max_ps; R.min_ipap = R.epap + R.min_ps; } else { R.max_ipap = R.max_epap + R.max_ps; R.min_ipap = R.min_epap + R.min_ps; } +// qDebug() << "AVAPS mode; Ramp" << R.ramp_pressure << "Min EPAP" << R.min_epap << +// "Max EPAP" << R.max_epap << "Min PS" << R.min_ps << "Max PS" << R.max_ps << +// "Min IPAP" << R.min_ipap << "Max_IPAP" << R.max_ipap; } if (R.mode == MODE_ASV) { if ((sig = str.lookupLabel("S.AV.StartPress"))) { @@ -2280,20 +2283,21 @@ void StoreSettings(Session * sess, STRRecord & R) if (R.min_ipap >= 0) sess->settings[CPAP_IPAPLo] = R.min_ipap; if (R.min_ps >= 0) sess->settings[CPAP_PSMin] = R.min_ps; if (R.max_ps >= 0) sess->settings[CPAP_PSMax] = R.max_ps; + } else { +// qDebug() << "Setting session pressures for random mode"; + if (R.set_pressure >= 0) sess->settings[CPAP_Pressure] = R.set_pressure; + if (R.min_pressure >= 0) sess->settings[CPAP_PressureMin] = R.min_pressure; + if (R.max_pressure >= 0) sess->settings[CPAP_PressureMax] = R.max_pressure; + if (R.max_epap >= 0) sess->settings[CPAP_EPAPHi] = R.max_epap; + if (R.min_epap >= 0) sess->settings[CPAP_EPAPLo] = R.min_epap; + if (R.max_ipap >= 0) sess->settings[CPAP_IPAPHi] = R.max_ipap; + if (R.min_ipap >= 0) sess->settings[CPAP_IPAPLo] = R.min_ipap; + if (R.min_ps >= 0) sess->settings[CPAP_PSMin] = R.min_ps; + if (R.max_ps >= 0) sess->settings[CPAP_PSMax] = R.max_ps; + if (R.ps >= 0) sess->settings[CPAP_PS] = R.ps; + if (R.epap >= 0) sess->settings[CPAP_EPAP] = R.epap; + if (R.ipap >= 0) sess->settings[CPAP_IPAP] = R.ipap; } - } else { - if (R.set_pressure >= 0) sess->settings[CPAP_Pressure] = R.set_pressure; - if (R.min_pressure >= 0) sess->settings[CPAP_PressureMin] = R.min_pressure; - if (R.max_pressure >= 0) sess->settings[CPAP_PressureMax] = R.max_pressure; - if (R.max_epap >= 0) sess->settings[CPAP_EPAPHi] = R.max_epap; - if (R.min_epap >= 0) sess->settings[CPAP_EPAPLo] = R.min_epap; - if (R.max_ipap >= 0) sess->settings[CPAP_IPAPHi] = R.max_ipap; - if (R.min_ipap >= 0) sess->settings[CPAP_IPAPLo] = R.min_ipap; - if (R.min_ps >= 0) sess->settings[CPAP_PSMin] = R.min_ps; - if (R.max_ps >= 0) sess->settings[CPAP_PSMax] = R.max_ps; - if (R.ps >= 0) sess->settings[CPAP_PS] = R.ps; - if (R.epap >= 0) sess->settings[CPAP_EPAP] = R.epap; - if (R.ipap >= 0) sess->settings[CPAP_IPAP] = R.ipap; } if (R.epr >= 0) { @@ -3095,7 +3099,7 @@ bool ResmedLoader::LoadPLD(Session *sess, const QString & path) time.start(); #endif QString filename = path.section(-2, -1); - qDebug() << "LoadPLD opening" << filename.section("/", -2, -1); +// qDebug() << "LoadPLD opening" << filename.section("/", -2, -1); ResMedEDFInfo edf; if ( ! edf.Open(path) ) { qDebug() << "LoadPLD failed to open" << filename.section("/", -2, -1); @@ -3461,7 +3465,8 @@ EventList * buildEventList( EventStoreType est, EventDataType t_min, EventDataTy el->AddEvent(tt, est); } else { - qDebug() << "Value:" << tmp << "Out of range: t_min:" << t_min << "t_max:" << t_max << "EL count:" << el->count(); + if ( tmp > 0 ) + qDebug() << "Value:" << tmp << "Out of range: t_min:" << t_min << "t_max:" << t_max << "EL count:" << el->count(); // Out of bounds value, start a new eventlist // But first drop a closing value that repeats the last one el->AddEvent(tt, el->raw(el->count() - 1));