Remove tabs in Viatom loader and normalize whitespace to OSCAR convensions.

Also change from using sprintf/QDateTime::fromString to using Qt native objects.
No change in output.
This commit is contained in:
sawinglogz 2020-01-23 19:25:06 -05:00
parent 9cb7de950b
commit ae8ce0e9d6
2 changed files with 90 additions and 92 deletions

View File

@ -1,6 +1,7 @@
/* SleepLib Viatom Loader Implementation /* SleepLib Viatom Loader Implementation
* *
* Copyright (c) 2019 The OSCAR Team (written by dave madden <dhm@mersenne.com>) * Copyright (c) 2019-2020 The OSCAR Team
* (Initial importer written by dave madden <dhm@mersenne.com>)
* *
* This file is subject to the terms and conditions of the GNU General Public * This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of the source code * License. See the file COPYING in the main directory of the source code
@ -21,23 +22,23 @@
bool bool
ViatomLoader::Detect(const QString & path) ViatomLoader::Detect(const QString & path)
{ {
// I don't know under what circumstances this is called... // I don't know under what circumstances this is called...
qDebug() << "ViatomLoader::Detect(" << path << ")"; qDebug() << "ViatomLoader::Detect(" << path << ")";
return true; return true;
} }
int int
ViatomLoader::Open( const QString & dirpath ) ViatomLoader::Open(const QString & dirpath)
{ {
// I don't know under what circumstances this is called... // I don't know under what circumstances this is called...
qDebug() << "ViatomLoader::Open(" << dirpath << ")"; qDebug() << "ViatomLoader::Open(" << dirpath << ")";
return 0; return 0;
} }
int int
ViatomLoader::OpenFile( const QString & filename ) ViatomLoader::OpenFile(const QString & filename)
{ {
qDebug() << "ViatomLoader::OpenFile(" << filename << ")"; qDebug() << "ViatomLoader::OpenFile(" << filename << ")";
Session* sess = ParseFile(filename); Session* sess = ParseFile(filename);
if (sess != nullptr) { if (sess != nullptr) {
@ -49,104 +50,101 @@ ViatomLoader::OpenFile( const QString & filename )
Session* ViatomLoader::ParseFile(const QString & filename) Session* ViatomLoader::ParseFile(const QString & filename)
{ {
QFile file(filename); QFile file(filename);
if (!file.open( QFile::ReadOnly )) { if (!file.open(QFile::ReadOnly)) {
qDebug() << "Couldn't open Viatom data file" << filename; qDebug() << "Couldn't open Viatom data file" << filename;
return nullptr; return nullptr;
} }
QByteArray data; QByteArray data;
qint64 filesize = file.size(); qint64 filesize = file.size();
data = file.readAll(); data = file.readAll();
QDataStream in(data); QDataStream in(data);
in.setByteOrder(QDataStream::LittleEndian); in.setByteOrder(QDataStream::LittleEndian);
quint16 sig; quint16 sig;
quint16 Y; quint16 Y;
quint8 m,d,H,M,S; quint8 m,d,H,M,S;
in >> sig >> Y >> m >> d >> H >> M >> S; in >> sig >> Y >> m >> d >> H >> M >> S;
if (sig != 0x0003 || if (sig != 0x0003 ||
(Y < 2015 || Y > 2040) || (Y < 2015 || Y > 2040) ||
(m < 1 || m > 12) || (m < 1 || m > 12) ||
(d < 1 || d > 31) || (d < 1 || d > 31) ||
( H > 23) || ( H > 23) ||
( M > 60) || ( M > 60) ||
( S > 61)) { ( S > 61)) {
qDebug( ) << filename << "does not appear to be a Viatom data file"; qDebug() << filename << "does not appear to be a Viatom data file";
return nullptr; return nullptr;
} }
char dchr[32]; QDateTime data_timestamp = QDateTime(QDate(Y, m, d), QTime(H, M, S));
sprintf( dchr, "%02u/%02u/%04u %02u:%02u:%02u", m, d, Y, H, M, S ); quint64 time_s = data_timestamp.toTime_t();
quint64 time_ms = time_s * 1000L;
SessionID sid = time_s;
QDateTime data_timestamp = QDateTime::fromString( QString( dchr ), "MM/dd/yyyy HH:mm:ss" ); qDebug() << filename << "looks like a Viatom file, size" << filesize << "bytes signature" << sig
quint64 time_s = data_timestamp.toTime_t( ); << "start date/time" << data_timestamp << "(" << time_ms << ")";
quint64 time_ms = time_s * 1000L;
SessionID sid = time_s;
qDebug( ) << filename << "looks like a Viatom file, size" << filesize << "bytes signature" << sig in.skipRawData(41); // total 50 byte header, not sure what the rest is.
<< "start date/time" << data_timestamp << "(" << time_ms << ")";
in.skipRawData( 41 ); // total 50 byte header, not sure what the rest is. MachineInfo info = newInfo();
Machine *mach = p_profile->CreateMachine(info);
Session *sess = mach->SessionExists(sid);
MachineInfo info = newInfo( ); if (!sess) {
Machine *mach = p_profile->CreateMachine( info ); qDebug() << "Session at" << data_timestamp << "not found...create new session" << sid;
Session *sess = mach->SessionExists( sid ); sess = new Session(mach, sid);
sess->really_set_first(time_ms);
} else {
qDebug() << "Session" << sid << "found...add data to it";
}
if (!sess) { EventList *ev_hr = sess->AddEventList(OXI_Pulse, EVL_Waveform, 1.0, 0.0, 0.0, 0.0, 2000.0);
qDebug( ) << "Session at" << data_timestamp << "not found...create new session" << sid; EventList *ev_o2 = sess->AddEventList(OXI_SPO2, EVL_Waveform, 1.0, 0.0, 0.0, 0.0, 2000.0);
sess = new Session( mach, sid ); EventList *ev_mv = sess->AddEventList(POS_Motion, EVL_Waveform, 1.0, 0.0, 0.0, 0.0, 2000.0);
sess->really_set_first( time_ms );
} else {
qDebug( ) << "Session" << sid << "found...add data to it";
}
EventList *ev_hr = sess->AddEventList( OXI_Pulse, EVL_Waveform, 1.0, 0.0, 0.0, 0.0, 2000.0 );
EventList *ev_o2 = sess->AddEventList( OXI_SPO2, EVL_Waveform, 1.0, 0.0, 0.0, 0.0, 2000.0 );
EventList *ev_mv = sess->AddEventList( POS_Motion, EVL_Waveform, 1.0, 0.0, 0.0, 0.0, 2000.0 );
unsigned char o2, hr, x, motion; unsigned char o2, hr, x, motion;
unsigned char o2_ = 99, hr_ = 60, motion_ = 0; unsigned char o2_ = 99, hr_ = 60, motion_ = 0;
unsigned n_rec = 0; unsigned n_rec = 0;
quint64 step = 2000; // records @ 2000ms (2 sec) quint64 step = 2000; // records @ 2000ms (2 sec)
// Read all Pulse, SPO2 and Motion data // Read all Pulse, SPO2 and Motion data
do { do {
in >> o2 >> hr >> x >> motion >> x; in >> o2 >> hr >> x >> motion >> x;
if (o2 < 50 || o2 > 100) o2 = o2_; if (o2 < 50 || o2 > 100) o2 = o2_;
if (hr < 20 || hr > 200) hr = hr_; if (hr < 20 || hr > 200) hr = hr_;
if (motion > 200) motion = motion_; if (motion > 200) motion = motion_;
sess->set_last( time_ms ); sess->set_last(time_ms);
ev_hr->AddEvent( time_ms, hr ); ev_hr->AddEvent(time_ms, hr);
ev_o2->AddEvent( time_ms, o2 ); ev_o2->AddEvent(time_ms, o2);
ev_mv->AddEvent( time_ms, motion ); ev_mv->AddEvent(time_ms, motion);
o2_ = o2; o2_ = o2;
hr_ = hr; hr_ = hr;
motion_ = motion; motion_ = motion;
time_ms += step; time_ms += step;
n_rec += 1; n_rec += 1;
} while (!in.atEnd()); } while (!in.atEnd());
qDebug( ) << "Read Viatom data from" << data_timestamp << "to" << (QDateTime::fromSecsSinceEpoch( time_ms / 1000L )) qDebug() << "Read Viatom data from" << data_timestamp << "to" << (QDateTime::fromSecsSinceEpoch( time_ms / 1000L))
<< n_rec << "records" << n_rec << "records"
<< ev_mv->Min( ) << "<=Motion<=" << ev_mv->Max( ); << ev_mv->Min() << "<=Motion<=" << ev_mv->Max();
sess->setMin( OXI_Pulse, ev_hr->Min( ) ); sess->setMin(OXI_Pulse, ev_hr->Min());
sess->setMax( OXI_Pulse, ev_hr->Max( ) ); sess->setMax(OXI_Pulse, ev_hr->Max());
sess->setMin( OXI_SPO2, ev_o2->Min( ) ); sess->setMin(OXI_SPO2, ev_o2->Min());
sess->setMax( OXI_SPO2, ev_o2->Max( ) ); sess->setMax(OXI_SPO2, ev_o2->Max());
sess->setMin( POS_Motion, ev_mv->Min( ) ); sess->setMin(POS_Motion, ev_mv->Min());
sess->setMax( POS_Motion, ev_mv->Max( ) ); sess->setMax(POS_Motion, ev_mv->Max());
sess->really_set_last( time_ms ); sess->really_set_last(time_ms);
return sess; return sess;
} }
@ -155,21 +153,21 @@ void ViatomLoader::SaveSessionToDatabase(Session* sess)
{ {
Machine* mach = sess->machine(); Machine* mach = sess->machine();
sess->SetChanged( true ); sess->SetChanged(true);
mach->AddSession( sess ); mach->AddSession(sess);
mach->Save( ); mach->Save();
} }
static bool viatom_initialized = false; static bool viatom_initialized = false;
void void
ViatomLoader::Register( ) ViatomLoader::Register()
{ {
if (!viatom_initialized) { if (!viatom_initialized) {
qDebug( "Registering ViatomLoader" ); qDebug("Registering ViatomLoader");
RegisterLoader( new ViatomLoader( ) ); RegisterLoader(new ViatomLoader());
//InitModelMap(); //InitModelMap();
viatom_initialized = true; viatom_initialized = true;
} }
} }

View File

@ -31,7 +31,7 @@ class ViatomLoader : public MachineLoader
Session* ParseFile(const QString & filename); Session* ParseFile(const QString & filename);
void SaveSessionToDatabase(Session* session); void SaveSessionToDatabase(Session* session);
static void Register(); static void Register();
virtual int Version() { return viatom_data_version; } virtual int Version() { return viatom_data_version; }
virtual const QString &loaderName() { return viatom_class_name; } virtual const QString &loaderName() { return viatom_class_name; }