Update FV023 and F5V0 summary parsers to parse the humidification at equipment-off.

Accordingly update ParseHumidifierSetting50Series to add a parameter
controlling whether parsed settings should be imported or not,
consistent with all other PRS1 humidifier parsers.
This commit is contained in:
sawinglogz 2020-01-10 12:57:18 -05:00
parent 7028f20aaf
commit 05779eac4f
2 changed files with 16 additions and 12 deletions

View File

@ -4405,9 +4405,7 @@ bool PRS1DataChunk::ParseSummaryF0V23()
} }
//CHECK_VALUES(data[pos+3], 0, 1); // TODO: may be related to ramp? 1-5 seems to have a ramp start or two //CHECK_VALUES(data[pos+3], 0, 1); // TODO: may be related to ramp? 1-5 seems to have a ramp start or two
//CHECK_VALUES(data[pos+4], 0x81, 0x80); // seems to be humidifier setting at end of session //CHECK_VALUES(data[pos+4], 0x81, 0x80); // seems to be humidifier setting at end of session
if (data[pos+4] && (((data[pos+4] & 0x80) == 0) || (data[pos+4] & 0x07) > 5)) { ParseHumidifierSetting50Series(data[pos+4]);
UNEXPECTED_VALUE(data[pos+4], "valid humidifier setting");
}
break; break;
/* /*
case 5: // Unknown, but occasionally encountered case 5: // Unknown, but occasionally encountered
@ -4503,7 +4501,7 @@ bool PRS1DataChunk::ParseSettingsF0V23(const unsigned char* data, int /*size*/)
this->ParseFlexSetting(flex, cpapmode); this->ParseFlexSetting(flex, cpapmode);
int humid = data[0x09]; int humid = data[0x09];
this->ParseHumidifierSetting50Series(humid); this->ParseHumidifierSetting50Series(humid, true);
// Tubing lock has no setting byte // Tubing lock has no setting byte
@ -5675,7 +5673,7 @@ bool PRS1DataChunk::ParseSettingsF5V012(const unsigned char* data, int /*size*/)
int pos; int pos;
if (this->familyVersion == 0) { // TODO: either split this into two functions or use size to differentiate like FV3 parsers do if (this->familyVersion == 0) { // TODO: either split this into two functions or use size to differentiate like FV3 parsers do
// TODO: Is there another flag for F5V0? Reports say "Bypass System One Humidification" as an option? // TODO: Is there another flag for F5V0? Reports say "Bypass System One Humidification" as an option?
this->ParseHumidifierSetting50Series(data[0x0d]); this->ParseHumidifierSetting50Series(data[0x0d], true);
pos = 0xe; pos = 0xe;
} else { } else {
this->ParseHumidifierSettingF0V4(data[0x0d], data[0x0e], true); // 94 05, A0 4A F5V1; 93 09 F5V2 this->ParseHumidifierSettingF0V4(data[0x0d], data[0x0e], true); // 94 05, A0 4A F5V1; 93 09 F5V2
@ -5825,7 +5823,11 @@ bool PRS1DataChunk::ParseSummaryF5V012(void)
case 1: // Equipment Off case 1: // Equipment Off
tt += data[pos] | (data[pos+1] << 8); tt += data[pos] | (data[pos+1] << 8);
this->AddEvent(new PRS1ParsedSliceEvent(tt, EquipmentOff)); this->AddEvent(new PRS1ParsedSliceEvent(tt, EquipmentOff));
/* if (this->familyVersion == 0) {
CHECK_VALUE(data[pos+2], 1);
ParseHumidifierSetting50Series(data[pos+3]);
}
/* Possibly F5V12?
CHECK_VALUE(data[pos+2] & ~(0x40|8|4|2|1), 0); // ???, seen various bit combinations CHECK_VALUE(data[pos+2] & ~(0x40|8|4|2|1), 0); // ???, seen various bit combinations
//CHECK_VALUE(data[pos+3], 0x19); // 0x17, 0x16 //CHECK_VALUE(data[pos+3], 0x19); // 0x17, 0x16
//CHECK_VALUES(data[pos+4], 0, 1); // or 2 //CHECK_VALUES(data[pos+4], 0, 1); // or 2
@ -5983,15 +5985,17 @@ void PRS1DataChunk::ParseFlexSetting(quint8 flex, int cpapmode)
// 0x82 = 2, bypass = no // 0x82 = 2, bypass = no
// TODO: PRS1_SETTING_HUMID_STATUS is ambiguous: we probably want connected vs. not, which should be distinct from system one vs. classic, etc. // TODO: PRS1_SETTING_HUMID_STATUS is ambiguous: we probably want connected vs. not, which should be distinct from system one vs. classic, etc.
void PRS1DataChunk::ParseHumidifierSetting50Series(int humid) void PRS1DataChunk::ParseHumidifierSetting50Series(int humid, bool add_setting)
{ {
if (humid & (0x40 | 0x20 | 0x10 | 0x08)) UNEXPECTED_VALUE(humid, "known bits"); if (humid & (0x40 | 0x20 | 0x10 | 0x08)) UNEXPECTED_VALUE(humid, "known bits");
bool humidifier_present = ((humid & 0x80) != 0); bool humidifier_present = ((humid & 0x80) != 0); // humidifier connected
int humidlevel = humid & 7; int humidlevel = humid & 7; // humidification level
this->AddEvent(new PRS1ParsedSettingEvent(PRS1_SETTING_HUMID_STATUS, humidifier_present)); // Humidifier Connected if (add_setting) {
this->AddEvent(new PRS1ParsedSettingEvent(PRS1_SETTING_HUMID_LEVEL, humidlevel)); // Humidifier Value this->AddEvent(new PRS1ParsedSettingEvent(PRS1_SETTING_HUMID_STATUS, humidifier_present));
this->AddEvent(new PRS1ParsedSettingEvent(PRS1_SETTING_HUMID_LEVEL, humidlevel));
}
// Check for truly unexpected values: // Check for truly unexpected values:
if (humidlevel > 5) UNEXPECTED_VALUE(humidlevel, "<= 5"); if (humidlevel > 5) UNEXPECTED_VALUE(humidlevel, "<= 5");

View File

@ -169,7 +169,7 @@ public:
void ParseFlexSetting(quint8 flex, int prs1mode); void ParseFlexSetting(quint8 flex, int prs1mode);
//! \brief Parse an humidifier setting byte from a .000 or .001 containing compliance/summary data for original System One (50-Series) machines: F0V23 and F5V0 //! \brief Parse an humidifier setting byte from a .000 or .001 containing compliance/summary data for original System One (50-Series) machines: F0V23 and F5V0
void ParseHumidifierSetting50Series(int humid); void ParseHumidifierSetting50Series(int humid, bool add_setting=false);
//! \brief Parse an humidifier setting byte from a .000 or .001 containing compliance/summary data for F0V4 and F5V012 machines and maybe others //! \brief Parse an humidifier setting byte from a .000 or .001 containing compliance/summary data for F0V4 and F5V012 machines and maybe others
void ParseHumidifierSettingF0V4(unsigned char humid1, unsigned char humid2, bool add_setting=false); void ParseHumidifierSettingF0V4(unsigned char humid1, unsigned char humid2, bool add_setting=false);