mirror of
https://gitlab.com/pholy/OSCAR-code.git
synced 2025-04-18 19:50:46 +00:00
Reconcile differences in PRS1 compliance vs. summary for F0V23 and F0V6.
Propagated a bug-fix in some variations that avoiding crashing on zero-length data.
This commit is contained in:
parent
93a056b252
commit
cfca48e505
@ -4394,7 +4394,7 @@ bool PRS1DataChunk::ParseComplianceF0V23(void)
|
|||||||
int pos = 0;
|
int pos = 0;
|
||||||
int code, size, delta;
|
int code, size, delta;
|
||||||
int tt = 0;
|
int tt = 0;
|
||||||
do {
|
while (ok && pos < chunk_size) {
|
||||||
code = data[pos++];
|
code = data[pos++];
|
||||||
// There is no hblock prior to F0V6.
|
// There is no hblock prior to F0V6.
|
||||||
size = 0;
|
size = 0;
|
||||||
@ -4423,7 +4423,7 @@ bool PRS1DataChunk::ParseComplianceF0V23(void)
|
|||||||
} else {
|
} else {
|
||||||
if (delta % 60) UNEXPECTED_VALUE(delta, "even minutes"); // mask-off events seem to be whole minutes?
|
if (delta % 60) UNEXPECTED_VALUE(delta, "even minutes"); // mask-off events seem to be whole minutes?
|
||||||
}
|
}
|
||||||
tt += data[pos] | (data[pos+1] << 8);
|
tt += delta;
|
||||||
this->AddEvent(new PRS1ParsedSliceEvent(tt, MaskOn));
|
this->AddEvent(new PRS1ParsedSliceEvent(tt, MaskOn));
|
||||||
// no per-slice humidifer settings as in F0V6
|
// no per-slice humidifer settings as in F0V6
|
||||||
break;
|
break;
|
||||||
@ -4438,11 +4438,8 @@ bool PRS1DataChunk::ParseComplianceF0V23(void)
|
|||||||
|
|
||||||
// also seems to be a trailing 01 00 81 after the slices?
|
// also seems to be a trailing 01 00 81 after the slices?
|
||||||
CHECK_VALUES(data[pos+2], 1, 0); // usually 1, occasionally 0, no visible difference in report
|
CHECK_VALUES(data[pos+2], 1, 0); // usually 1, occasionally 0, no visible difference in report
|
||||||
//CHECK_VALUE(data[pos+3], 0); // sometimes 1, 2, or 5, no visible difference in report
|
//CHECK_VALUE(data[pos+3], 0); // sometimes 1, 2, or 5, no visible difference in report, maybe ramp?
|
||||||
//CHECK_VALUES(data[pos+4], 0x81, 0x80); // seems to be humidifier setting at end of session
|
ParseHumidifierSetting50Series(data[pos+4]);
|
||||||
if (data[pos+4] && (((data[pos+4] & 0x80) == 0) || (data[pos+4] & 0x07) > 5)) {
|
|
||||||
UNEXPECTED_VALUE(data[pos+4], "valid humidifier setting");
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
UNEXPECTED_VALUE(code, "known slice code");
|
UNEXPECTED_VALUE(code, "known slice code");
|
||||||
@ -4450,7 +4447,7 @@ bool PRS1DataChunk::ParseComplianceF0V23(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pos += size;
|
pos += size;
|
||||||
} while (ok && pos < chunk_size);
|
}
|
||||||
|
|
||||||
if (ok && pos != chunk_size) {
|
if (ok && pos != chunk_size) {
|
||||||
qWarning() << this->sessionid << (this->size() - pos) << "trailing bytes";
|
qWarning() << this->sessionid << (this->size() - pos) << "trailing bytes";
|
||||||
@ -4480,7 +4477,7 @@ bool PRS1DataChunk::ParseSummaryF0V23()
|
|||||||
|
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
int code, size;
|
int code, size, delta;
|
||||||
int tt = 0;
|
int tt = 0;
|
||||||
while (ok && pos < chunk_size) {
|
while (ok && pos < chunk_size) {
|
||||||
code = data[pos++];
|
code = data[pos++];
|
||||||
@ -4520,7 +4517,15 @@ bool PRS1DataChunk::ParseSummaryF0V23()
|
|||||||
//}
|
//}
|
||||||
break;
|
break;
|
||||||
case 2: // Mask On
|
case 2: // Mask On
|
||||||
tt += data[pos] | (data[pos+1] << 8);
|
delta = data[pos] | (data[pos+1] << 8);
|
||||||
|
if (tt == 0) {
|
||||||
|
if (delta) {
|
||||||
|
CHECK_VALUES(delta, 1, 59); // we've seen the 550P start its first mask-on at these time deltas
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (delta % 60) UNEXPECTED_VALUE(delta, "even minutes"); // mask-off events seem to be whole minutes?
|
||||||
|
}
|
||||||
|
tt += delta;
|
||||||
this->AddEvent(new PRS1ParsedSliceEvent(tt, MaskOn));
|
this->AddEvent(new PRS1ParsedSliceEvent(tt, MaskOn));
|
||||||
// no per-slice humidifer settings as in F0V6
|
// no per-slice humidifer settings as in F0V6
|
||||||
break;
|
break;
|
||||||
@ -6531,7 +6536,7 @@ bool PRS1DataChunk::ParseComplianceF0V6(void)
|
|||||||
int pos = 0;
|
int pos = 0;
|
||||||
int code, size;
|
int code, size;
|
||||||
int tt = 0;
|
int tt = 0;
|
||||||
do {
|
while (ok && pos < chunk_size) {
|
||||||
code = data[pos++];
|
code = data[pos++];
|
||||||
if (!this->hblock.contains(code)) {
|
if (!this->hblock.contains(code)) {
|
||||||
qWarning() << this->sessionid << "missing hblock entry for" << code;
|
qWarning() << this->sessionid << "missing hblock entry for" << code;
|
||||||
@ -6605,7 +6610,7 @@ bool PRS1DataChunk::ParseComplianceF0V6(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pos += size;
|
pos += size;
|
||||||
} while (ok && pos < chunk_size);
|
}
|
||||||
|
|
||||||
this->duration = tt;
|
this->duration = tt;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user