Index: sources/view/VVitals.cpp =================================================================== diff -u -r666594860f4ea32da9a2bd362d40325b881b11f9 -r5384b4f5833568db90b988b11bbd502386d2f9b2 --- sources/view/VVitals.cpp (.../VVitals.cpp) (revision 666594860f4ea32da9a2bd362d40325b881b11f9) +++ sources/view/VVitals.cpp (.../VVitals.cpp) (revision 5384b4f5833568db90b988b11bbd502386d2f9b2) @@ -3,19 +3,65 @@ // Project #include "VVitals.h" +#include "Logger.h" +#include "MainTimer.h" - using namespace View; +using namespace Gui; VVitals::VVitals(QObject *parent) : QObject(parent) { // incoming connect(&_BLEScanner, SIGNAL(didReceiveBPMeasurement(BLEMeasurementData)), this, SLOT(onReceiveBPMeasurement(BLEMeasurementData))); + + connect(&_GuiController, SIGNAL(didActionReceive(HDOperationModeData)), + this, SLOT(onHDOperationModeUpdate(HDOperationModeData))); + + connect(&_MainTimer, SIGNAL(didTimeout()), + this, SLOT(onTimeout())); + + connect(&_GuiController, SIGNAL(didAlertResponse(GuiAlertResponseData)), + this, SLOT(onReceiveAlertResponse(GuiAlertResponseData))); + + connect(&_GuiController, SIGNAL(didActionReceive(TreatmentStartResponseData)), + this, SLOT(onActionReceive(TreatmentStartResponseData))); + // outgoing + connect(this, SIGNAL(didRequestShowAlert(GuiAlertRequestData)), + &_GuiController, SLOT(doAlertRequest(GuiAlertRequestData))); } /*! + * \brief VVitals::doUpdateBPMeasureInterval + * Updates the blood pressure and hr measurement interval during a treatment + * Called whenever a new treatment parameters request is issued + * \param msgID - (QVariantList) the treatment parameters request + * \param request - (QVariantList) the treatment parameters request + */ +void VVitals::doUpdateBPMeasureInterval(const quint32 &intervalMinutes) +{ + LOG_DEBUG(QString("Updated BP/HR measurement notify interval to %1 minutes").arg(intervalMinutes)); + bloodPressureMeasureIntervalMinutes(intervalMinutes); +} + +/*! + * \brief VVitals::doManualBPMeasureEntry + * Called when a user manually enters the bp measurement data + * \param systolic - systolic blood pressure value + * \param diastolic - diastolic blood pressure value + * \param pulse_rate - pulse rate in beats per minute + */ +void VVitals::doManualBPMeasureEntry(const quint32 &systolic, const quint32 &diastolic, const quint32 &pulse_rate) +{ + BLEMeasurementData measurement; + measurement.systolic = systolic; + measurement.diastolic = diastolic; + measurement.pulse_rate = pulse_rate; + onReceiveBPMeasurement(measurement); +} + +/*! * \brief VVitals::onReceiveBPMeasurement * Private slot that is called when we recieve a blood pressure measurement * \param measurement - (BLEScanner::bp_measurement) the blood pressure measurement @@ -26,3 +72,66 @@ bloodPressureSystolic (measurement.systolic); pulseBPM (measurement.pulse_rate); } + +/*! + * \brief VVitals::onHDOperationModeUpdate + * When we receive an HD operation mode update + * \param hdOpMode - the HD operation mode + */ +void VVitals::onHDOperationModeUpdate(HDOperationModeData hdOpMode) +{ + if (hdOpMode.mOpMode != GuiHDOpModes::MODE_TREA) + _inTreatmentMode = false; + else + _inTreatmentMode = true; +} + +/*! + * \brief VVitals::onTimeout + * Notifies the user to take a measurement + */ +void VVitals::onTimeout() +{ + if (_inTreatmentMode && + _lastNotification.secsTo(QDateTime::currentDateTime()) >= bloodPressureMeasureIntervalMinutes()*60) // PRS 94 + { + GuiAlertRequestData request; + LOG_DEBUG("Notify user to take a measurement"); + request.id = GuiAlertID::ID_Alert_BLE_Measurement_Timeout; + request.title = tr("Please take vitals"); + request.description = tr("Press 'Confirm' once you have finished measuring your blood pressure and heart rate."); + emit didRequestShowAlert(request); + _lastNotification = QDateTime::currentDateTime(); + + } else { + int secondsRemaining = bloodPressureMeasureIntervalMinutes()*60 - _lastNotification.secsTo(QDateTime::currentDateTime()); + LOG_DEBUG(QString("There are %1 seconds until next bp/hr measurement request notification").arg(secondsRemaining)); + } +} + +/*! + * \brief VVitals::onReceiveAlertResponse + * Called when we receive an alert response + * \param response - the alert response + */ +void VVitals::onReceiveAlertResponse(GuiAlertResponseData response) +{ + if (response.id != GuiAlertID::ID_Alert_BLE_Measurement_Timeout) + return; + + LOG_DEBUG(QString("User confirmed alert? %1").arg(response.confirmed)); +} + +/*! + * \brief VVitals::onActionReceive + * Called when a treatment start request response is received + * Sets the last take vitals notification time to the start of treatment + * \param response - (TreatmentStartResponseData) the response data + */ +void VVitals::onActionReceive(const TreatmentStartResponseData &response) +{ + if (response.startTreatmentResponse != 1) + return; + + _lastNotification = QDateTime::currentDateTime(); +}