Index: sources/drydemo/StateControllerStandby.cpp =================================================================== diff -u -r6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2 -r4624d7657d342248336c1ff16edfae614c335728 --- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2) +++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728) @@ -10,9 +10,14 @@ quint32 msgPayload = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, index); if (msgPayload != UI_MSG_BB_PAYLOAD_ID) { if (msgPayload < NUM_OF_GENERIC_CONFIRM_IDS) { - quint32 confirmStatus = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, UI_MSG_BB_STATUS_INDEX); - qint64 currentTimeMS = QDateTime::currentMSecsSinceEpoch(); - _uiConfirmMessages[static_cast(msgPayload)] = {currentTimeMS, static_cast(confirmStatus)}; + // This part is for the confirm messges and not the dry-demo + quint32 confirmStatus = extractU32DataFromReceivedMessage(ID_UI_CONFIRMATION_RESULT_RESP, UI_MSG_BB_STATUS_INDEX); + Generic_Confirm_Id id = static_cast(msgPayload); + Confirmation_Status status = static_cast(confirmStatus); + + // TODO why the reject is sent anways? + _uiConfirmMessages[id].confirmStatus = status; + qDebug() << "New Message Confirm" << id << status; _treatmentRcvdMessages[ID_UI_CONFIRMATION_RESULT_RESP].clear(); } return false; @@ -101,6 +106,9 @@ _treatmentStatus.triggerAlarmTimeoutCtr = 0; _treatmentStatus.isBloodPumpRunning = false; _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_NO_ALARM; + // Initialize alarm varibales to be alarm no alarm + _treatmentStatus.activeTopAlarm = ALARM_ID_NO_ALARM; + _treatmentStatus.activeAlarmProperty = _alarmTriggerSpecs[ALARM_ID_NO_ALARM][ALARM_TABLE_PROPERTIES_INDEX].toInt(); // Initialize pressure vars _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_OFF; _pressureVars.presStabilizeTimePeriod = USE_NORMAL_STABILIZATION_PERIOD; @@ -131,25 +139,38 @@ _treatmentStatus.bicartDepresInProgress = 0; _treatmentStatus.bicartProgress = 0; _treatmentStatus.bicartTotal = 100; + + // UI confirm + _uiConfirmMessages.clear(); } -void StateController::triggerAnAlarm(const Alarm_List alarmID) +void StateController::triggerAnAlarm(const Alarm_List alarmID, const qint16 alarmProperty) { if (!_alarmTriggerSpecs.contains(alarmID)) { return; } - quint32 state = _alarmTriggerSpecs[alarmID][ALARM_TABLE_PRIORITY_INDEX].toInt(); - quint16 properties = _alarmTriggerSpecs[alarmID][ALARM_TABLE_PROPERTIES_INDEX].toInt(); - quint32 alarmExpires = 0; + quint16 properties = _alarmTriggerSpecs[alarmID][ALARM_TABLE_PROPERTIES_INDEX].toInt(); - _treatmentStatus.activeTopAlarm = alarmID; + _treatmentStatus.activeTopAlarm = alarmID; + _treatmentStatus.activeAlarmProperty = (alarmProperty == ALARM_USE_DEFAULT_PROPERTIES ? properties : alarmProperty); +} +void StateController::handleAlarmStatusBroadcastData(const Broadcast_Type BCType) +{ + static quint32 broadcastCounter = 4; + if ((++broadcastCounter % NUN_OF_COUNTS_QUICK_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } + + if (!_alarmTriggerSpecs.contains(_treatmentStatus.activeTopAlarm)) { return; } + + quint32 state = _alarmTriggerSpecs[_treatmentStatus.activeTopAlarm][ALARM_TABLE_PRIORITY_INDEX].toInt(); + quint32 alarmExpires = 0; + QVariantList resp; resp.append(static_cast(ID_ALARM_STATUS_DATA)); resp.append(Can_Id::eChlid_TD_Alarm); resp.append(state); - resp.append(alarmID); + resp.append(_treatmentStatus.activeTopAlarm); resp.append(alarmExpires); - resp.append(properties); + resp.append(_treatmentStatus.activeAlarmProperty); _isSendListReady = false; _sendMessages.append(resp); _isSendListReady = true; @@ -171,37 +192,24 @@ // User action has been selected so do not stay in treatment pause status = STATE_ON_EXIT; } + triggerAnAlarm(ALARM_ID_NO_ALARM); break; case ALARM_USER_ACTION_RINSEBACK: case ALARM_USER_ACTION_TEMPOARY_BREAK: - _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; - // User action has been selected so do not stay in treatment pause - status = STATE_ON_EXIT; + handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_RINSEBACK, GENERIC_CONFIRM_CMD_REQUEST_OPEN); break; case ALARM_USER_ACTION_END_TREATMENT: + handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_TREATMENT_END, GENERIC_CONFIRM_CMD_REQUEST_OPEN); _treatmentStatus.stateTransitionEvent = "T_TP_2_TE"; - // User action has been selected so do not stay in treatment pause - status = STATE_ON_EXIT; break; default: // Do nothing break; } - triggerAnAlarm(ALARM_ID_NO_ALARM); - - QVariantList msg; - msg.append(static_cast(ID_ALARM_CLEARED)); - msg.append(Can_Id::eChlid_TD_Alarm); - msg.append(_treatmentStatus.activeTopAlarm); - _isBroadcastListReady = false; - _broadcastMessages.append(msg); - _isBroadcastListReady = true; - // Send the alarm clear command and then clear the variable - _treatmentStatus.activeTopAlarm = ALARM_ID_NO_ALARM; _treatmentRcvdMessages[ID_UI_ALARM_USER_ACTION_REQUEST].clear(); } @@ -316,22 +324,51 @@ { if (!_uiConfirmMessages.contains(confirmID)) { return; } - Generic_Confirm_Command cmd = (hasUIConfirmMessageTimedout(confirmID) ? GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE : GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + if (hasUIConfirmMessageTimedout(confirmID)) { + handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE); + qDebug() << "Message Timeout"; + return; + } + // TODO why the reject is sent anways? + //if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_REJECTED) { + // handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + // qDebug() << "Reject"; + // _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED; + // return; + //} + // TODO uncomment + switch (confirmID) { case GENERIC_CONFIRM_ID_TREATMENT_END: - if (_uiConfirmMessages[confirmID][UI_CONFIRM_MSG_STATUS_INDEX].toUInt() == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { + if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { QStringList activeStates = _dryDemo.activeStateNames(true); - QString activeState = activeStates[0]; - _treatmentStatus.stateTransitionEvent = (activeState == "Treatment_Recirculate" ? "T_RC_2_TE" : "T_RB_2_TE"); - status = STATE_ON_EXIT; - qDebug() << "Event" << _treatmentStatus.stateTransitionEvent << _dryDemo.activeStateNames(true); // TODO remove + // Check if there is at least one value in the string list to prevent segmentatoin fault + QString activeState = (activeStates.length() >= 1 ? activeStates[0] : ""); + if (activeState == "Treatment_Recirculate") { + _treatmentStatus.stateTransitionEvent = "T_RC_2_TE"; + } + else if (activeState == "Treatment_Rinseback") { + _treatmentStatus.stateTransitionEvent = "T_RB_2_TE"; + } + status = STATE_ON_EXIT; + _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED; + qDebug() << "Event" << activeState << _treatmentStatus.stateTransitionEvent << _dryDemo.activeStateNames(true); + handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + triggerAnAlarm(ALARM_ID_NO_ALARM); } - handleSendUIConfirmationMessage(confirmID, cmd); - _uiConfirmMessages.remove(confirmID); break; case GENERIC_CONFIRM_ID_RINSEBACK: + if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { + qDebug() << "Rinse back response" << confirmID << _uiConfirmMessages[confirmID].confirmStatus; + handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); + _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; + _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED; + // User action has been selected so do not stay in treatment pause + status = STATE_ON_EXIT; + triggerAnAlarm(ALARM_ID_NO_ALARM); + } break; case GENERIC_CONFIRM_ID_TEMPORARY_BREAK: @@ -347,15 +384,18 @@ bool StateController::hasUIConfirmMessageTimedout(const Generic_Confirm_Id confirmID) { - qint64 currentTimeMS = QDateTime::currentMSecsSinceEpoch(); - qint64 startTimeMS = _uiConfirmMessages[confirmID][UI_CONFIRM_MSG_TIMESTAMP_INDEX].toInt(); - bool status = (currentTimeMS - startTimeMS > UI_CONFIRM_RESP_TIMOUT_MS ? true : false); + qint64 currentTimeMS = QDateTime::currentMSecsSinceEpoch(); + qint64 startTimeMS = _uiConfirmMessages[confirmID].startTimeMS; + bool status = (currentTimeMS - startTimeMS > UI_CONFIRM_RESP_TIMOUT_MS ? true : false); return status; } void StateController::handleSendUIConfirmationMessage(const Generic_Confirm_Id confirmID, const Generic_Confirm_Command confirmCmd, const Reject_Reasons rejectReason) { + qDebug() << "Sneding" << confirmID; + _uiConfirmMessages[confirmID].startTimeMS = QDateTime::currentMSecsSinceEpoch(); + QVariantList resp; resp.append(static_cast(ID_TD_UI_GENERIC_CONFIRMATION_RQST)); resp.append(Can_Id::eChlid_TD_UI);