// 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 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) { // coco begin validated: Has been validated manually BLEMeasurementData measurement; measurement.systolic = systolic; measurement.diastolic = diastolic; measurement.pulse_rate = pulse_rate; onReceiveBPMeasurement(measurement); } // coco end /*! * \brief VVitals::onReceiveBPMeasurement * Private slot that is called when we recieve a blood pressure measurement * \param measurement - (BLEScanner::bp_measurement) the blood pressure measurement */ void VVitals::onReceiveBPMeasurement(BLEMeasurementData measurement) { // coco begin validated: Has been validated manually bloodPressureDiastolic (measurement.diastolic); bloodPressureSystolic (measurement.systolic); pulseBPM (measurement.pulse_rate); } // coco end /*! * \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() { // coco begin validated: Has been validated manually 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)); }*/ } // coco end /*! * \brief VVitals::onReceiveAlertResponse * Called when we receive an alert response * \param response - the alert response */ void VVitals::onReceiveAlertResponse(GuiAlertResponseData response) { // coco begin validated: Has been validated manually if (response.id != GuiAlertID::ID_Alert_BLE_Measurement_Timeout) return; LOG_DEBUG(QString("User confirmed alert? %1").arg(response.confirmed)); } // 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 response - (TreatmentStartResponseData) the response data */ void VVitals::onActionReceive(const TreatmentStartResponseData &response) { // coco begin validated: Has been validated manually if (response.startTreatmentResponse != 1) return; // coco end _lastNotification = QDateTime::currentDateTime(); }