Commit Graph

220 Commits

Author SHA1 Message Date
sawinglogz
1d805fd9bc Fix warnings about unknown duration events for F0V23.
We should eventually import and graph these, even if we don't yet understand them.
2019-10-04 13:12:24 -04:00
sawinglogz
9f8f9224ab Add DreamStation BiPAP AVAPS 30 AE (1131X150) to the list of tested/recognized machines. 2019-10-04 12:20:18 -04:00
sawinglogz
a95429763d Update ParseEventsF0V23 for unknown event 0.
It also turns out that every sample machine that claims to be F0V3 in its
property file contains only F0V2 data, so there appears to be nothing
additional to test, but now there are more warnings in case we ever do
actually encounter F0V3 data.

Also warn if we ever encounter oximetry.
2019-10-04 12:08:16 -04:00
sawinglogz
460959dd78 Update ParseEventsF0V23 with event handlers from F0V6 after verifying them against sample F0V2 data.
The only difference so far is the lack of doubled duration for PB/LL, slightly rearranged
events 0-3, and the absence of events 0x14 and 0x15 in F0V2 (so far).

The only change in import functionality is that apneas/hypopneas now have a (correct)
duration of 0.

Next step is to test against more samples and particularly F0V3 samples.
2019-10-04 12:07:06 -04:00
sawinglogz
b2b62256d5 Migrate F0V23 event loop logic to match F0V6, still no change in functionality. 2019-10-03 19:42:28 -04:00
sawinglogz
2f46036a01 Remove F0V4 logic from F0V23 event parser and vice versa. No change in functionality. 2019-10-03 19:06:06 -04:00
sawinglogz
06098b9033 Split ParseEventsF0V234 into F0V23 and F0V4, no change in functionality. 2019-10-03 16:50:59 -04:00
sawinglogz
81a2945d0e Clean up F3V3 settings parsing. It turns out its humidifier settings are different from F0V4 and F5V012. 2019-10-03 12:33:28 -04:00
sawinglogz
445c74a70e First pass at F3V3 summary and settings parsing based on 3 sample sessions. 2019-10-02 20:21:43 -04:00
sawinglogz
d87dd6a0aa Fix ParseFlexSetting for F5V012 rise time.
ParseFlexSetting is largely untouched, but as a result also untested.
We should double-check it for all families and versions.
2019-10-02 19:14:24 -04:00
sawinglogz
6e5c751dd5 Finish cleaning up F5V012 settings from sample data. 2019-10-02 18:57:42 -04:00
sawinglogz
16caab4ce5 Add missing events to ParseSummaryF5V012, identify additional settings. 2019-10-02 11:55:44 -04:00
sawinglogz
fd7b5f8be0 Initial pass at ParseSummaryF5V012 based on F0V4.
It turns out each familyVersion has records of different sizes, including
the first one containing the settings. It may make more sense to split
summary and/or settings parsing into multiple familyVersion-specific functions.

Also it looks like the F0V4 humidifier settings are actually 60 Series
settings, and the "V2" settings are original System One settings, not
all fileVersion 2 machines.
2019-10-01 18:30:32 -04:00
sawinglogz
fe6c1ec2fa Split settings from summary parsing for F5V012 and F3V3. 2019-10-01 11:38:16 -04:00
sawinglogz
346d0a8e60 Identify common F0V4 summary statistics. 2019-10-01 11:29:31 -04:00
sawinglogz
166ada843b Add "support" for clock adjustment event ParseSummaryF0V4 and cleared event in ParseSummaryF0V23.
"Support" in this instance means that it will quietly ignore the events, since there's really
nothing to import. But this means that parsing will correctly continue past the events, even
though so far they're the only events in a session. There are diagnostics to log if that
assumption turns out not to be correct.
2019-09-30 15:46:26 -04:00
sawinglogz
4b5cdb8192 Add support for new Time Elapsed event in ParseSummaryF0V4.
Still trying to figure out timestamp event.

Other summary parsers will need review, since there was an initial
filter that was dropping sessions that began with event 5 or 6,
now commented out.
2019-09-30 10:23:28 -04:00
sawinglogz
e264a86164 First pass at ParseSummaryF0V4, needs testing.
Based on the F0V23 loop and F0V6 switch statement, along with manual review of
several sample files to determine record length.

Split ParseHumidifierSettingF0V4 out from ParseSettingsF0V4.
2019-09-28 20:47:24 -04:00
sawinglogz
13395d9c35 Finish cleaning up ParseSettingsF0V4. 2019-09-28 19:31:37 -04:00
sawinglogz
8f49633131 Improve F0V4 settings support, especially humidification. 2019-09-28 18:23:18 -04:00
sawinglogz
c24b29c80a Partially parse F0V4 humidification settings, need to review more samples to complete. 2019-09-26 12:37:01 -04:00
sawinglogz
e973109ccc First pass at adding missing settings to F0V4, lots still to find. 2019-09-25 11:17:16 -04:00
sawinglogz
fd23108c3d Refactor ParseSummaryF0V23 to match loop structure of F0V6. No change to imported data. 2019-09-24 21:07:10 -04:00
sawinglogz
55525cdc01 Update ParseComplianceF0V23 to use new ParseSettingsF0V23, since the data format is the same.
This also pushes something that seemed to be settings back into ParseSummaryV023.
2019-09-24 17:00:49 -04:00
sawinglogz
5d40051d70 Split settings parsing out of F0V23 and F0V4 summary parsers. 2019-09-24 16:27:27 -04:00
sawinglogz
9f330b2ec4 Add length checking to PRS1 F0V6 settings. 2019-09-23 14:26:38 -04:00
sawinglogz
bb9cce787c Parse backup breathing settings for DreamStation 900X machines.
No change to imported data.
2019-09-23 14:10:23 -04:00
sawinglogz
2e04755b53 Parse backup breathing settings for DreamStation 1030X-1130X machines.
No change to imported data.
2019-09-23 14:04:22 -04:00
sawinglogz
50d60385bd Add Flex mode setting for DreamStation 900X machines. 2019-09-23 12:56:06 -04:00
sawinglogz
9f28dae627 Add Flex mode setting for DreamStation 1030X-1130X machines. 2019-09-23 12:39:20 -04:00
sawinglogz
21f61d7527 Add Flex mode setting for DreamStation 200X-700X machines. 2019-09-20 15:38:14 -04:00
sawinglogz
3c1a7adaa3 Add support for many DreamStation settings, changes to flex mode require rebuilding all PRS1 databases. 2019-09-20 12:59:14 -04:00
sawinglogz
76a71802ab Rename some internal PRS1 parsing enums to match report terminology.
This affects parser YAML output, but has no effect on imported data.
2019-09-20 00:15:40 -04:00
sawinglogz
adc887c5f8 Import additional DreamStation settings:
- hose diameter
- auto on
- auto off
- mask resist lock (parsed only)
- show optional screens (parsed only)
2019-09-19 21:29:33 -04:00
sawinglogz
ccfce7fd2e Add internal parsing (and YAML output) for known DreamStation events that won't get imported.
These are events that are in the PRS1 files but which OSCAR doesn't know how to present:

- An F0V6 event with duration that looks like PB or LL but doesn't appear on any official reports
- The Auto-CPAP pressure to use at the beginning of a session
- A report of the snores detected at each pressure/EPAP/IPAP
- Apnea alarms on F3V6

Rather than bury the understanding in commented-out sections of the parser, these events
will now be parsed and added to the internal event stream, which allows them to be dumped
to YAML. Whenever OSCAR eventually supports these data, the importer will have ready
access to them.

Again, no change to external behavior.
2019-09-19 16:43:24 -04:00
sawinglogz
95e2baad26 Distinguish between pressure adjustment events and average pressure stats on PRS1.
This only affects the parser at this point, and the importer has been updated so that
there is no externally visible change to the imported data.

Eventually we'll need to figure out how to display the two differing kinds of
pressures, at which point we'll need to fix the importer to use the right channels,
instead of the inconsistent treatment now.
2019-09-19 14:21:12 -04:00
sawinglogz
5e4a24b237 Add support for F3V6 sessions without ramp, with apnea alarm. 2019-09-19 10:33:23 -04:00
sawinglogz
45018f4903 Update PRS1 loader from 500G110 test data. 2019-09-07 15:02:16 -04:00
sawinglogz
6b86eb1b11 Fix minor regression for PRS1 F3V6 mode import. 2019-08-28 21:53:50 -04:00
sawinglogz
febf3d2f5b Split PRS1 device mode parsing from imported modes.
This allows the parsing to accurately represent the data, even for modes that
OSCAR doesn't yet support.
2019-08-28 21:30:25 -04:00
sawinglogz
42f0745666 Improve settings interpretation for F3V6, though still not exactly right.
The next step will be to split parsing from mode interpretation, so that
we can at least accurately identify all of PRS1's modes. Then we can
work on mapping that to OSCAR's notion of modes, which probably then needs
to be augmented.
2019-08-20 12:48:15 -04:00
sawinglogz
ecb71e5706 Calculate PRS1 F3V6 pressure support settings, since we currently display them. 2019-08-20 12:08:24 -04:00
sawinglogz
0c816c7d4c Avoid pos++ in PRS1 DreamStation parsers to that events can be issued independently of parsing order. 2019-08-20 11:38:55 -04:00
sawinglogz
6c85195b39 Remove unused variable that clang missed. 2019-08-19 12:23:45 -04:00
sawinglogz
928e50fcc1 Use actual product names for PRS1 instead of mangled approximations. 2019-08-18 17:03:52 -04:00
sawinglogz
0b8f89036a Merge branch 'master' into prs1-f0v6 2019-08-14 09:15:39 -04:00
sawinglogz
675f6d4361 Resolve remaining F0V6 event 3 debug messages in sample data. 2019-08-13 23:03:20 -04:00
sawinglogz
cc80a3ef09 Remove F0V6 logic from PRS1DataChunk::ParseEventsF0V234, no functional change. 2019-08-13 21:09:55 -04:00
sawinglogz
3eee72390e Clean up PRS1DataChunk::ParseEventsF0V6, no change in functionality. 2019-08-13 17:29:05 -04:00
sawinglogz
73dfdac81b Add debug logging for PRS1 F0V6 event 3. 2019-08-12 21:51:37 -04:00
sawinglogz
3de32dd21b Fix F0V6 PB starting time, and probably LL and PS as well. 2019-08-12 17:20:25 -04:00
sawinglogz
946293b67d Split PRS1Import::ParseF0Events into ParseEventsF0V6, no changes yet. 2019-08-12 16:58:27 -04:00
sawinglogz
d99e397cb3 Update PRS1 parser for 500X, 600X, and 700X events. 2019-08-06 15:47:36 -05:00
Seeker4
5cf6e14816 Fix problems resulting in compiler warning messages 2019-08-06 12:33:48 -07:00
sawinglogz
7dd891df31 Add more F0V6 events based on remaining 400X sample data. 2019-08-05 21:37:19 -05:00
sawinglogz
64309f366a Add PRS1 model 562P to list of tested machines. 2019-08-05 20:46:05 -05:00
sawinglogz
84f1389d51 Support more F0V6 events based on all sessions from a single 400X machine. 2019-08-05 15:22:22 -05:00
sawinglogz
4e863ba484 Add first confirmed F0V6 events from sample data. 2019-08-04 21:09:42 -05:00
sawinglogz
e0d4872f6b Create placeholder event parser for PRS1 F0V6, separate from other F0 machines. 2019-08-04 19:36:40 -05:00
sawinglogz
8ef4766efd Fix F3V6 imported channels to match reports. 2019-07-27 15:04:20 -04:00
sawinglogz
46a077cb43 Clean up remaining F3V6 import messages. 2019-07-26 22:53:15 -04:00
sawinglogz
5835e6de9c Remove commented-out F3V6 event code. 2019-07-26 22:29:23 -04:00
sawinglogz
56684de3bc Add support for more F3V6 events based on more sample sessions. 2019-07-26 22:13:26 -04:00
sawinglogz
eedd41efdf First pass at parsing F3V6 events, largely based on F5V3 and revised based on a sample session. 2019-07-25 21:44:36 -04:00
sawinglogz
a2bcbf1b00 Fix pressure gain for F3V6 events and waveforms.
Also change fileVersion == 3 tests to appropriate familyVersion for ASV and ventilators, respectively.
2019-07-24 22:42:00 -04:00
sawinglogz
d33e7585bf Remove broken original F3V6 summary parser. 2019-07-24 16:51:50 -04:00
sawinglogz
9e54b98cf6 First pass at actual F3V6 (1030X, 1130X) summary and settings support based on sample data. Events are still broken. 2019-07-24 16:50:51 -04:00
sawinglogz
872fe74008 Add stub F3V3 summary parser so that events and waveforms will still get loaded. 2019-07-23 20:54:39 -04:00
sawinglogz
83b80cb252 Restrict the current PRS1 F3 summary parser to F3V6, which is all it could (badly) handle anyway. 2019-07-23 20:54:25 -04:00
sawinglogz
1f56927695 Recognize additional PRS1 900X settings. 2019-07-23 12:52:41 -04:00
sawinglogz
43ec3ab4af Fix a few PRS1 unused variable warnings that only gcc catches. 2019-06-21 21:04:16 -04:00
sawinglogz
ea638cdbbb Update PRS1 series detection to use model name.
Also fix an issue with initializing the model names, since QObject::tr
won't work at global initialization time. And series detection needs
the untranslated names anyway.
2019-06-20 00:09:28 -04:00
sawinglogz
5a71e96ed6 Remove unused PRS1 code, add series to model names where missing. 2019-06-19 23:23:15 -04:00
sawinglogz
628ddda472 Fill out remaining PRS1 names as shown on official reports.
Also clean up brick detection.

The official names don't yet appear anywhere, since there's a question
of how to juggle manufacturer, series, and model name in the various
places they're (inconsistently) displayed.

Series is also used to pick the machine icon.
2019-06-19 22:19:16 -04:00
sawinglogz
423bfccc5a Add a few comments for future 900X improvements. 2019-06-19 17:50:41 -04:00
sawinglogz
ec73958b4a Add leak to 900X, clean up summary stats and old implementation. 2019-06-19 17:28:42 -04:00
sawinglogz
d9152436de Add missing 900X events based on sample data.
They're not all fully understood, such as a pressure adjustment
variant and  several different hypopnea variants, one of which
has an extra data field.
2019-06-19 16:23:28 -04:00
sawinglogz
264ff2f2fa Add comments to 900X parsing based on sample review and discussions. 2019-06-17 17:33:39 -04:00
sawinglogz
a7f249218f Fix start time for 900X TB, PB, and LL.
It turns out OSCAR silently treats span events' timestamps as
and end time when drawing.
2019-06-15 21:45:58 -04:00
sawinglogz
4e5174343e First pass at 900X event parsing and clean up F5V3 pressure gain throughout.
This fixes the mask pressure graph as well as many of the events.
There are still some issues with presentation: some of the events are
being drawn at the wrong time, and certain events and statistics
don't really behave the way they're displayed.

Also several events have yet to be encountered in sample data.
2019-06-15 21:04:09 -04:00
sawinglogz
fcd7f8d463 Finish cleaning up 900X summary parsing.
There are still unknown values, but they'll need to be tracked down
after events are cleaned up. They no longer emit warnings.
2019-06-13 22:20:34 -04:00
sawinglogz
b1d76becab Fill in some 900X summary statistics values. 2019-06-13 21:29:43 -04:00
sawinglogz
2634aa0d16 Initial support for 900X summary.
Pressure settings are now properly being found and decoded, but there are lots
of unknown fields to figure out.

It turns out it uses the same humidifier setting encoding as F0V6, and the first
several slices seem to be the same. But pressure encodings are different, with
a gain of 0.125 instead of 0.1, presumably to allow for a maximum pressure of
30 cmH2O.
2019-06-13 20:31:21 -04:00
sawinglogz
4527a7091d Clean up remaining DreamStation parsing warnings. 2019-06-12 20:37:04 -04:00
sawinglogz
d0903ce3bd Add initial support for DreamStation Auto-Trial and CPAP-Check modes.
This resolves many of the unexpected value warnings in the sample
data, but there are still a bunch to tackle.
2019-06-11 21:26:40 -04:00
sawinglogz
2383c11be2 Minor clean up of F0V6 summary parsing, fix GUI build bug. 2019-06-10 20:57:05 -04:00
sawinglogz
96815cb068 Add support for 700X summary data. 2019-06-10 20:30:05 -04:00
sawinglogz
4e8a6514ef Add support for 600X summary data. 2019-06-10 15:30:22 -04:00
sawinglogz
92f029a5f4 Add support for 502G summary data.
Not many changes, just some new unknown settings, and warning
when there's a 0-length slice.
2019-06-10 15:07:20 -04:00
sawinglogz
a66dd145b8 Add support for 500X summary data.
This one's slice 8 is shorter than anything else we've seen before!

Also add support for a new slice type and noted possible values
for other data, including a possible lead on the CPAP mode.
2019-06-10 14:30:50 -04:00
sawinglogz
2120289792 Add support for 400G summary data.
Interestingly, it looks like settings and other slices can be of
varying length, even on the same machine. Stranger still, sometimes
the list of possible slices can change on the same machine.
2019-06-08 21:36:51 -04:00
sawinglogz
08ad973a6a Wrap up of 400X summary for now.
Mostly this is commenting out warnings about values that are different
for every session. They can be sorted out later.

Humidifier status and tube temperature are cleaned up as well.
2019-06-08 14:45:57 -04:00
sawinglogz
2a82ee09d6 Refinement of 400X summary data.
Fixed a bug in the ramp pressure setting, identified the mask resistance
setting, and found the summary equivalent of the humidifier setting change
slice.
2019-06-08 14:21:54 -04:00
sawinglogz
e41515891b First pass at fixing 400X summary data.
This is mostly a cut-and-paste of the ParseComplianceF0V6,
but the some of the slice codes and sizes are different.

Also start adding machine names for tested models.
2019-06-07 22:05:52 -04:00
sawinglogz
2ace7d3a6d First pass at PRS1 200X humidifier settings.
Some of the values still aren't known, and OSCAR doesn't yet define
a channel for heated tube temperature.
2019-06-07 16:40:26 -04:00
sawinglogz
250566f3f2 Refinement of 200X compliance data.
The new slice type appears when humidifier settings have changed during
the session, and includes a timestamp. The session time now matches
reports.

Otherwise just comments to indicate other values seen in the sample data,
including a lead on humidifier encoding.
2019-06-07 16:03:20 -04:00
sawinglogz
ff4ec4fdab Create slices for 200X compliance data, along with first confirmed settings.
There's a new slice type to be examined and additional settings remain
that vary within the sample data.
2019-06-07 14:32:53 -04:00
sawinglogz
ca23791414 First pass at 200X compliance data.
Lots of debug messages and unknown values, but the structure seems right.

This is largely based on a combination of the mainblock parsing for fileVersion 3
as found in ParseSummary() and the switch statements of ParseSummaryF0V6,
based on our understanding of slices from F0V23. The slice types here
come from sample 200X files.
2019-06-07 14:32:00 -04:00
sawinglogz
330bdb6fb3 Split ParseCompliance into F0V23 and F0V6.
Also add some debug messages to FV3 parsing. It's clear the current
approach is wrong. This looks a lot like the slices seen earlier,
since hbdata values appear more than once in a given file.

Also turn off summary YAML since the next bit of work will focus on
parsing.
2019-06-06 16:08:40 -04:00
sawinglogz
ce38fbcdde Restore session end time to previous behavior, with better logging and documentation.
It turns out the session end time was intentionally not being set in ParseSummary,
probably due to its unreliability. This may be revisited once things are more
stable, but for now the old behavior is retained.
2019-06-05 17:08:45 -04:00