// Qt // 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 vIntervalMinutes (quint32) - the BP measure interval in minutes */ void VVitals::doUpdateBPMeasureInterval(const quint32 &vIntervalMinutes) { LOG_DEBUG(QString("Updated BP/HR measurement notify interval to %1 minutes").arg(vIntervalMinutes)); bloodPressureMeasureIntervalMinutes(vIntervalMinutes); } /*! * \brief VVitals::doManualBPMeasureEntry * Called when a user manually enters the bp measurement data * \param vSystolic - systolic blood pressure value * \param vDiastolic - diastolic blood pressure value * \param vPulseRate - pulse rate in beats per minute */ void VVitals::doManualBPMeasureEntry(const quint32 &vSystolic, const quint32 &vDiastolic, const quint32 &vPulseRate) { // coco begin validated: Has been validated manually BLEMeasurementData measurement; measurement.systolic = vSystolic; measurement.diastolic = vDiastolic; measurement.pulse_rate = vPulseRate; onReceiveBPMeasurement(measurement); } // coco end /*! * \brief VVitals::onReceiveBPMeasurement * Private slot that is called when we recieve a blood pressure measurement * \param vMeasurement - (BLEScanner::bp_measurement) the blood pressure measurement */ void VVitals::onReceiveBPMeasurement(const BLEMeasurementData &vMeasurement) { // coco begin validated: Has been validated manually bloodPressureDiastolic (vMeasurement.diastolic); bloodPressureSystolic (vMeasurement.systolic); pulseBPM (vMeasurement.pulse_rate); } // coco end /*! * \brief VVitals::onHDOperationModeUpdate * When we receive an HD operation mode update * \param hdOpMode - the HD operation mode */ void VVitals::onHDOperationModeUpdate(const HDOperationModeData &vHDOpMode) { if (vHDOpMode.mOpMode != GuiHDOpModes::MODE_TREA) _inTreatmentMode = false; else _inTreatmentMode = true; } /*! * \brief VVitals::onTimeout * Notifies the user to take a measurement */ void VVitals::onTimeout() { // coco begin validated: Has been validated manually if (bloodPressureMeasureIntervalMinutes() == 0) return; 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.\n" "Press 'Cancel' for manual entry."); 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)); }*/ } // coco end /*! * \brief VVitals::onReceiveAlertResponse * Called when we receive an alert response * \param vResponse - the alert response */ void VVitals::onReceiveAlertResponse(const GuiAlertResponseData &vResponse) { // coco begin validated: Has been validated manually if (vResponse.id != GuiAlertID::ID_Alert_BLE_Measurement_Timeout) return; LOG_DEBUG(QString("User confirmed alert? %1").arg(vResponse.confirmed)); if (!vResponse.confirmed) { emit didManualEntryRequest(); } } // coco end /*! * \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 vResponse - (TreatmentStartResponseData) the response data */ void VVitals::onActionReceive(const TreatmentStartResponseData &vResponse) { // coco begin validated: Has been validated manually if (vResponse.startTreatmentResponse != 1) return; // coco end _lastNotification = QDateTime::currentDateTime(); }