Skip to content

Commit

Permalink
more reformatting
Browse files Browse the repository at this point in the history
  • Loading branch information
martukas committed Jul 6, 2022
1 parent d70d29c commit 5d64ee8
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 91 deletions.
56 changes: 28 additions & 28 deletions software/controller/lib/core/controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,26 +69,26 @@ class Controller {
// TODO: These params need to be tuned.

PID air_volume_pid_{"air_volume_",
" for AIR outer loop volume PID",
/*initial_kp=*/0.75f,
" for AIR outer loop volume PID",
/*initial_kp=*/0.75f,
/*initial_ki=*/20.0f,
/*initial_kd=*/0.075f,
/*p_term=*/PID::TermApplication::OnError,
/*d_term=*/PID::TermApplication::OnMeasurement,
/*output_min=*/0.f,
/*output_max=*/1.0f};

// Ziegler-Nichols Outer Loop Pressure values: ku = 0.9, Tu = 0.04
PID air_pressure_pid_{"air_pressure_",
" for AIR outer loop pressure PID",
/*initial_kp=*/0.4f,
/*initial_ki=*/20.0f,
/*initial_kd=*/0.075f,
/*initial_kd=*/0.0f,
/*p_term=*/PID::TermApplication::OnError,
/*d_term=*/PID::TermApplication::OnMeasurement,
/*output_min=*/0.f,
/*output_max=*/1.0f};

// Ziegler-Nichols Outer Loop Pressure values: ku = 0.9, Tu = 0.04
PID air_pressure_pid_{"air_pressure_",
" for AIR outer loop pressure PID",
/*initial_kp=*/0.4f,
/*initial_ki=*/20.0f,
/*initial_kd=*/0.0f,
/*p_term=*/PID::TermApplication::OnError,
/*d_term=*/PID::TermApplication::OnMeasurement,
/*output_min=*/0.f,
/*output_max=*/1.0f};

PID psol_pid_{"psol",
" for O2 psol PID",
/*initial_kp=*/0.04f,
Expand All @@ -101,23 +101,23 @@ class Controller {

PID fio2_pid_{"fio2_",
" for FIO2 PID",
/*kp=*/0.001f,
/*ki=*/0.1f,
/*kd=*/0.0f,
/*p_term=*/PID::TermApplication::OnError,
/*d_term=*/PID::TermApplication::OnMeasurement,
/*output_min=*/-1.0f,
/*output_max=*/1.0f};
/*kp=*/0.001f,
/*ki=*/0.1f,
/*kd=*/0.0f,
/*p_term=*/PID::TermApplication::OnError,
/*d_term=*/PID::TermApplication::OnMeasurement,
/*output_min=*/-1.0f,
/*output_max=*/1.0f};

PID air_flow_pid_{"air_flow_",
" for air flow PID",
/*kp=*/0.1f,
/*ki=*/20.0f,
/*kd=*/0.0f,
/*p_term=*/PID::TermApplication::OnError,
/*d_term=*/PID::TermApplication::OnMeasurement,
/*output_min=*/0.f,
/*output_max=*/1.0f};
/*kp=*/0.1f,
/*ki=*/20.0f,
/*kd=*/0.0f,
/*p_term=*/PID::TermApplication::OnError,
/*d_term=*/PID::TermApplication::OnMeasurement,
/*output_min=*/0.f,
/*output_max=*/1.0f};

// These objects accumulate flow to calculate volume.
//
Expand Down
61 changes: 27 additions & 34 deletions software/gui/app/main.cpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,10 @@
#include "chrono.h"
#include "connected_device.h"
#include "controller_history.h"
#include "gui_state_container.h"
#include "latching_alarm.h"
#include "periodic_closure.h"
#include "respira_connected_device.h"
#include "logger.h"
#include <QStandardPaths>
#include "time_series_graph.h"
#include <QCommandLineParser>
#include <QDebug>
#include <QFontDatabase>
#include <QFontInfo>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QStandardPaths>
#include <QtCore/QDir>
#include <QtQml/QQmlContext>
#include <QtQml/QQmlEngine>
Expand All @@ -22,6 +13,16 @@
#include <iostream>
#include <memory>

#include "chrono.h"
#include "connected_device.h"
#include "controller_history.h"
#include "gui_state_container.h"
#include "latching_alarm.h"
#include "logger.h"
#include "periodic_closure.h"
#include "respira_connected_device.h"
#include "time_series_graph.h"

QObject *gui_state_instance(QQmlEngine *engine, QJSEngine *scriptEngine) {
static GuiStateContainer state_container(
/*history_window=*/DurationMs(30000),
Expand All @@ -48,17 +49,14 @@ void install_fonts() {
}

void init_logger(bool debug_mode) {
auto log_path =
QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
auto log_path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
QDir().mkpath(log_path);
auto log_file = log_path + "/gui.log";
printf("Saving logs in %s\n", log_file.toLatin1().data());
if (debug_mode) {
CustomLogger::initLogger(spdlog::level::trace, true,
log_file.toStdString());
CustomLogger::initLogger(spdlog::level::trace, true, log_file.toStdString());
} else {
CustomLogger::initLogger(spdlog::level::info, false,
log_file.toStdString());
CustomLogger::initLogger(spdlog::level::info, false, log_file.toStdString());
}
}

Expand Down Expand Up @@ -88,10 +86,10 @@ int main(int argc, char *argv[]) {
QStringList() << "startup-only",
QObject::tr("main", "Start up and exit successfully (for testing)"));

QCommandLineOption serialPortOption(
QStringList() << "serial-port",
QObject::tr("main", "Serial port filename. "
"Uses pre-recorded test data if not set."));
QCommandLineOption serialPortOption(QStringList() << "serial-port",
QObject::tr("main",
"Serial port filename. "
"Uses pre-recorded test data if not set."));
serialPortOption.setValueName("port");

parser.addOption(startupOnlyOption);
Expand All @@ -107,8 +105,7 @@ int main(int argc, char *argv[]) {
std::unique_ptr<ConnectedDevice> device;
if (parser.isSet(serialPortOption)) {
state_container->set_is_using_fake_data(false);
device = std::make_unique<RespiraConnectedDevice>(
parser.value(serialPortOption));
device = std::make_unique<RespiraConnectedDevice>(parser.value(serialPortOption));
} else {
state_container->set_is_using_fake_data(true);
// NOTE: The code below is specialized to this particular file.
Expand All @@ -121,8 +118,7 @@ int main(int argc, char *argv[]) {
while (!file.atEnd()) {
QString line{file.readLine()};
line = line.trimmed();
if (line.isEmpty() || line.startsWith("#") || line.startsWith("time"))
continue;
if (line.isEmpty() || line.startsWith("#") || line.startsWith("time")) continue;
auto tokens = line.split(" ").toVector();

ControllerStatus status = ControllerStatus_init_zero;
Expand Down Expand Up @@ -173,16 +169,13 @@ int main(int argc, char *argv[]) {
communicate.Start();

qmlRegisterType<TimeSeriesGraph>("Respira", 1, 0, "TimeSeriesGraph");
qmlRegisterUncreatableType<AlarmPriority>("Respira", 1, 0, "AlarmPriority",
"is an enum");
qmlRegisterUncreatableType<AlarmManager>(
"Respira", 1, 0, "AlarmManager",
"AlarmManager cannot be instantiated from QML");
qmlRegisterUncreatableType<LatchingAlarm>(
"Respira", 1, 0, "LatchingAlarm",
"LatchingAlarm cannot be instantiated from QML");
qmlRegisterSingletonType<GuiStateContainer>(
"Respira", 1, 0, "GuiStateContainer", &gui_state_instance);
qmlRegisterUncreatableType<AlarmPriority>("Respira", 1, 0, "AlarmPriority", "is an enum");
qmlRegisterUncreatableType<AlarmManager>("Respira", 1, 0, "AlarmManager",
"AlarmManager cannot be instantiated from QML");
qmlRegisterUncreatableType<LatchingAlarm>("Respira", 1, 0, "LatchingAlarm",
"LatchingAlarm cannot be instantiated from QML");
qmlRegisterSingletonType<GuiStateContainer>("Respira", 1, 0, "GuiStateContainer",
&gui_state_instance);

install_fonts();

Expand Down
4 changes: 2 additions & 2 deletions software/gui/src/breath_signals.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ void BreathSignals::Update(SteadyInstant now, const ControllerStatus &status) {

current_pip_ = std::max(current_pip_.value_or(std::numeric_limits<float>::min()), pressure);
current_peep_ = std::min(current_peep_.value_or(std::numeric_limits<float>::max()), pressure);
current_viv_ = std::max(current_viv_.value_or(std::numeric_limits<float>::min()),volumeml);
current_viv_ = std::max(current_viv_.value_or(std::numeric_limits<float>::min()), volumeml);
}

uint32_t BreathSignals::num_breaths() const { return num_breaths_; }
Expand All @@ -54,7 +54,7 @@ std::optional<float> BreathSignals::peep() const { return latest_peep_; }

std::optional<float> BreathSignals::viv() const { return latest_viv_; }

uint32_t BreathSignals::currentmode() const { return currentmode_;}
uint32_t BreathSignals::currentmode() const { return currentmode_; }

std::optional<float> BreathSignals::rr() const {
if (recent_breath_starts_.size() < MinRecentBreathStarts) {
Expand Down
9 changes: 4 additions & 5 deletions software/gui/src/gui_state_container.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ GuiStatus GuiStateContainer::GetGuiStatus() {
case VentilationMode::SIMVVC:
return VentMode::VentMode_VC_SIMV;
case VentilationMode::BIPAP:
return VentMode:: VentMode_BIPAP;
return VentMode::VentMode_BIPAP;
case VentilationMode::PRVC:
return VentMode::VentMode_PRESSURE_REG_VC;
case VentilationMode::SPV:
Expand Down Expand Up @@ -177,17 +177,16 @@ qreal GuiStateContainer::get_measured_tv() const {
}

qreal GuiStateContainer::get_measured_rr() const {
return (commanded_mode_ == VentilationMode::VC)
? commanded_rr_
: breath_signals_.rr().value_or(commanded_rr_);
return (commanded_mode_ == VentilationMode::VC) ? commanded_rr_
: breath_signals_.rr().value_or(commanded_rr_);
}

qreal GuiStateContainer::get_measured_peep() const {
return breath_signals_.peep().value_or(commanded_peep_);
}

qreal GuiStateContainer::get_measured_psupp() const {
return 0;//breath_signals_.peep().value_or(commanded_psupp_);
return 0; // breath_signals_.peep().value_or(commanded_psupp_);
}

qreal GuiStateContainer::get_measured_viv() const {
Expand Down
37 changes: 15 additions & 22 deletions software/gui/src/viv_exceeded_alarm.h
Original file line number Diff line number Diff line change
@@ -1,55 +1,48 @@
#ifndef VIV_EXCEEDED_ALARM_H_
#define VIV_EXCEEDED_ALARM_H_

#include <QObject>
#include <QString>
#include <cmath>

#include "breath_signals.h"
#include "chrono.h"
#include "latching_alarm.h"
#include "network_protocol.pb.h"

#include <cmath>

#include <QObject>
#include <QString>

// An alarm for the condition "VIV > threshold".
class VivExceededAlarm : public LatchingAlarm {
Q_OBJECT

public:
public:
VivExceededAlarm() : LatchingAlarm(AlarmPriority::HIGH) {}

private:
std::optional<QString>
IsActive(SteadyInstant now, const ControllerStatus &status,
const BreathSignals &breath_signals) override {


private:
std::optional<QString> IsActive(SteadyInstant now, const ControllerStatus &status,
const BreathSignals &breath_signals) override {
(void)now;
(void)status;
if (breath_signals.num_breaths() < 4)
return std::nullopt;
;
if( breath_signals.currentmode() != 4 || breath_signals.currentmode() != 6 )
return std::nullopt;
if (breath_signals.num_breaths() < 4) return std::nullopt;
;
if (breath_signals.currentmode() != 4 || breath_signals.currentmode() != 6) return std::nullopt;

float viv = breath_signals.viv().value_or(0);
if (std::floor(viv) > threshold_ml_) {
return {QString("VIV exceeded (%1 > %2)")
.arg(QString::number(viv, 'f', 0),
QString::number(threshold_ml_, 'f', 0))};
.arg(QString::number(viv, 'f', 0), QString::number(threshold_ml_, 'f', 0))};
}
return std::nullopt;
}

public:
public:
float GetThresholdml() const { return threshold_ml_; }
void SetThresholdml(float threshold_ml) {
threshold_ml_ = threshold_ml;
updated();
}

private:
private:
float threshold_ml_ = 50;
};

#endif // VIV_EXCEEDED_ALARM_H_
#endif // VIV_EXCEEDED_ALARM_H_

0 comments on commit 5d64ee8

Please sign in to comment.