Commit Graph

85 Commits

Author SHA1 Message Date
sawinglogz
2a326c816f Move PRS1 F0V6 parsing into separate parser file.
No change in functionality.

Use git blame dd9a087 to follow the history before this refactoring.
2021-05-31 20:24:09 -04:00
sawinglogz
daaed2de79 Move PRS1DataChunk into parser header and clean up dependencies.
Also move some previously static functions into their associated classes,
which lets us remove a few unnecessary wrapper functions used for testing.

No change in functionality.

Use git blame dd9a087 to follow the history before this refactoring.
2021-05-31 14:53:23 -04:00
sawinglogz
c64376033d Fix boundary condition bugs in RawDataDevice.
bytesAvailable gets automatically calculated by QIODevice, so it doesn't
need to be reimplemented.

QIODevice doesn't necessarily buffer after a seek, and the underlying
device is unaware of peek/ungetChar, so canReadLine needs to check both
QIODevice and the device.
2021-05-24 19:59:58 -04:00
sawinglogz
0737ad9b10 Performance improvements for PRS1 regression tests.
Most of the gains were from replacing endl with '\n', which avoids
unnecessary flushing. But there were a few hot functions whose
inefficiency ended up having a significan impact.
2021-05-23 21:26:17 -04:00
sawinglogz
7a852953be Move raw data signal tests into a separate class.
Otherwise QTest treats the signal handlers as separate tests.
2021-05-23 15:48:20 -04:00
sawinglogz
818eafcc7c Add RawDataDevice wrapper around QIODevice to allow for filtering of incoming data before loading.
Eventually this will also provide endian-aware integer reading functions,
so that individual loaders don't have to reinvent the wheel as often.
2021-05-23 12:25:35 -04:00
sawinglogz
9cbd0d7b24 Fix multiple regressions that broke compilation with clang.
e633a82: overloaded virtual method errors
0022510: inconsistent missing override error
e358d31: unused private fields
3591f11: unused private fields
2021-04-26 20:10:37 -04:00
sawinglogz
09ba58669a Add support for Target Time humidifier setting on DreamStation Go. 2020-12-29 20:23:37 -05:00
sawinglogz
d88084a342 Disable oximeter download tests by default for now.
They're not yet stable enough to be enabled as regression tests in master.
2020-07-10 14:55:25 -04:00
sawinglogz
09a96b893e Split connection XML recording/replay into separate files.
This is significant now because it will allow accurate recording of
multiple simultaneous connections.

This is important for the future because it establishes the
necessary infrastructure for recording downloaded sessions into their
own files so that they can be saved as backups.
2020-07-10 11:51:53 -04:00
sawinglogz
a651e1405d Add record/replay test of downloading all sessions from oximeter.
Also fix a crash when the recording is truncated.
2020-07-10 11:51:53 -04:00
sawinglogz
918f4af2c1 Add support for signals and serial port reading to XML replay.
Replay now passes its initial regression test when the oximeter is unplugged.
2020-07-10 11:51:52 -04:00
sawinglogz
5947751291 Add playback of most serial port operations.
read() isn't yet tested because it requires the readyRead signal.
2020-07-10 11:51:52 -04:00
sawinglogz
553cf59a95 Move connection creation to DeviceConnectionManager.
Calling openConnection will return an open connection or nullptr.
Deleting the connection will close it.

SerialPort now uses this under the hood, while still presenting
the QSerialPort-compatible interface.
2020-07-10 11:51:52 -04:00
sawinglogz
ac1281c1d9 Add playback of serial port scan, along with supporting infrastructure. 2020-07-10 11:51:51 -04:00
sawinglogz
efbb967b5c Add DeviceConnectionManager class to record serial port scan. 2020-07-10 11:51:51 -04:00
sawinglogz
cd29593280 Add XML serialization/deserialization to SerialPortInfo. 2020-07-10 11:51:51 -04:00
sawinglogz
40553fcf5e Add PRS1-specific "peak flow" channel used by pre-DreamStation ventilators. 2020-04-22 17:14:59 -04:00
sawinglogz
141988b6bf Add support for PRS1 F3V0.
Parsing is complete, import still needs review.

The only other functional change is parsing the Bi-Flex lock
setting that also applies F3V3.
2020-04-22 17:14:58 -04:00
sawinglogz
191e0f89a8 Update Resmed regression tests to follow symlinks. 2020-04-19 14:25:32 -04:00
sawinglogz
1e82500685 Minor update to PRS1 regression tests so that they can follow symlinks.
Also added comment about 900X clamping mask pressure at 15.875 cmH2O.
No functional changes.
2020-03-27 12:33:23 -04:00
sawinglogz
a96a665987 Rename PRS1_0E mystery channel to Variable Breathing based on forum discussion, disable it by default.
Also make TB an on-demand channel.
2020-03-26 09:01:28 -04:00
sawinglogz
6a3c8c1a26 Add PRS1-specific mode channel, allowing correct display of S, S/T, and PC modes.
Also fix pressure settings for F3V3, and display of rise time and backup breath settings.
2020-03-24 17:15:29 -04:00
sawinglogz
d77ee5025a Comment out BrokenSummary and BrokenWaveform channels, as they are no longer used.
No functional change.
2020-03-24 13:50:30 -04:00
sawinglogz
389ddd1631 Import remaining parsed PRS1 settings: backup breath settings, tidal volume, rise time, EZ-Start, and Auto-Trial.
DreamStation ramp time and mask resistance "off" settings are now also imported.

Ventilator alarms are not yet parsed reliably enough to import at this time.
2020-03-23 21:09:55 -04:00
sawinglogz
77a34518bc Rename PRS1 mask resistance lock and setting channels for clarity. 2020-03-23 13:07:08 -04:00
sawinglogz
3eb2ad4a7b Import all remaining parsed PRS1 settings seen on bricks: flex lock, tubing type lock, mask resist lock, show AHI, and ramp type.
Also remove superfluous mask resist status.
2020-03-23 12:59:06 -04:00
sawinglogz
c8520c8449 Move PRS1 test card scanning into PRS1Loader.
Also reverse the chronological order of tests to provide the most complete output.

The loader itself doesn't yet use the new machine scanner.
2020-03-09 10:28:34 -04:00
sawinglogz
53525a7949 Refactor PRS1 test card scanning in preparation for unifying with loader.
This splits out scanning the directories from processing them, which
also allows for sorting.
2020-03-08 20:58:36 -04:00
sawinglogz
0ee827b294 Add Resmed-specific settings channels to YAML. 2020-02-10 23:48:23 -05:00
sawinglogz
bd68525246 Turn off backups in Resmed regression tests. 2020-02-10 20:58:49 -05:00
sawinglogz
7701694b14 Add support for YAML output by Resmed loader for regression testing. 2020-02-10 16:04:03 -05:00
sawinglogz
cdeba58c5d Fix minor cleanup bugs in the Resmed regression tests that were causing crashes. 2020-02-03 11:43:13 -05:00
sawinglogz
32ffcc4f94 First pass at Dreem CSV loader.
Something's not quite right about the hypnogram timestamps, since
there are more than would fit within the start/stop times.
2020-01-29 20:00:33 -05:00
sawinglogz
f33dd654f8 Add generic CSV reader class and switch ZEO loader to it.
No change in functionality for ZEO files.

Resolves crashing (assertion failure) on non-ZEO CSV files.
2020-01-29 17:05:03 -05:00
sawinglogz
8ef068af7e Fix ZEO loader to handle MyZeo 0.3.1 date formatting.
Also make the UI more informative and fix up the regression test output.
2020-01-29 16:21:42 -05:00
sawinglogz
448bfa048c Refactor ZEO loader to allow for testing, add regression tests. 2020-01-29 15:47:11 -05:00
sawinglogz
cb576437ab Clean up noise and memory leaks in unit tests. 2020-01-29 09:10:29 -05:00
sawinglogz
e11bdf2633 Update Viatom tests to process folders of test data. 2020-01-26 20:05:14 -05:00
sawinglogz
4ebc7d3681 Rename POS_Motion channel to POS_Movement to match Viatom report terminology.
Also move database updates to Open() rather than at each file imported.
2020-01-26 19:50:18 -05:00
sawinglogz
b6f7ebac6f Move Viatom filename pattern matching into loader. 2020-01-26 17:51:56 -05:00
sawinglogz
9cb7de950b Add regression tests for Viatom loader.
Also enable the native file dialog box for importing Viatom files.
2020-01-23 19:11:05 -05:00
sawinglogz
d7fade5f4c Add Version class for Semantic Versioning 2.0.0 parsing and comparison.
Also add unit tests for the new class.
2020-01-15 17:00:21 -05:00
sawinglogz
d898581ca4 Remove version.h dependency from appsettings.h to reduce unnecessary recompiling. 2020-01-15 16:34:28 -05:00
sawinglogz
9edfd59476 Fix PRS1 humidity import.
Previously it was reporting spurious information when the humidifier was
disconnected.  Now it only reports settings details when the humidifier is
connected (the only time they're valid.)

It also now reports the humidification mode (fixed, adaptive, or heated
tube), and the heated tube temperature when appropriate.
2020-01-11 19:14:01 -05:00
sawinglogz
50b47a9bff Fix the tail ends of statistic channels on PRS1.
The last statistics events in each slice are now correctly imported.

Previously, in the surprising edge case where two statistic periods are
reported with the same end-of-slice timestamp, they were both being duplicated
when marking the end of the slice.

Also, there were scattered instances where the final statistics in a slice
weren't being imported at all or were being imported incorrectly. These are
now fixed as well.
2020-01-06 21:45:52 -05:00
sawinglogz
97c7a4f557 Update PRS1 test YAML to emit first and last N/2 samples instead of first N, allowing for regression testing of end-of-session edge cases. 2020-01-05 16:02:04 -05:00
sawinglogz
26a844c720 Add infrastructure to allow PRS1 loader to alert the user when it encounters unexpected data.
Only the tests currently react to this information.
2020-01-04 20:47:28 -05:00
sawinglogz
e380b408fd Remove warnings about PRS1 oximetry being untested.
Also fine-tune various warnings for weird data, such as truncated
chunks and multiple sessions in a waveform file.
2019-12-02 17:30:28 -05:00
sawinglogz
06adbc1e72 Mark any PRS1 sessions with empty slices as summary and skip event or waveform data.
If there are no mask-on slices of nonzero duration, then there's not any
meaningful event or waveform data for the session. There is occasionally some
fragmentary data, but it's always less than 1 second.

When such fragmentary waveform data is present, it only contains 1-3 nonzero
samples, corresponding to 0.2s - 0.6s of data, which suggests that the
mask-on slice was really that long rather than precisely 0.  As a result,
it appears that the timestamps of the mask-on/mask-off slices are just the
current value of the machine's internal clock, which only has 1-second
resolution.

But rather than embark on herculean efforts to derive a sub-second slice
duration from (only occasionally present) event or waveform data, we just
treat the session as having no detailed data.
2019-11-13 20:44:35 -05:00