diff --git a/src/ATBAPP/DeviceControllerDiag.cpp b/src/ATBAPP/DeviceControllerDiag.cpp index 70658fb..e90e434 100644 --- a/src/ATBAPP/DeviceControllerDiag.cpp +++ b/src/ATBAPP/DeviceControllerDiag.cpp @@ -113,8 +113,8 @@ void DeviceControllerDiag::private_startDiag() qCritical() << "DeviceControllerDiag::private_startDiag() interrupted!"; DCMachineEvent E255Event = DCMachineEvent(DeviceController::State::E255); if (!this->previousMachineEventSet.contains(E255Event)) { - machineEventSet.insert(E255Event); - private_sendDiagEvent(E255Event, DeviceController::Action::SET); + this->private_setDiagEvent(DeviceController::State::E255); + this->private_sendDiagEvent(E255Event, DeviceController::Action::SET); } if (this->E255counter > 5) { this->restartCArun(); @@ -132,9 +132,9 @@ void DeviceControllerDiag::private_startDiag() * - diag is called again in ModeOOO wokeup() */ } - this->diagRequestTimeoutTimer->stop(); - this->isRequestRunning = false; - this->flagInterruptDiag = false; + + this->private_finishDiag(false); + return; } @@ -178,15 +178,16 @@ void DeviceControllerDiag::sys_superviseSystem() // send DCMachineEvent E255Event = DCMachineEvent(DeviceController::State::E255); if (!this->previousMachineEventSet.contains(E255Event)) { - machineEventSet.insert(E255Event); - private_sendDiagEvent(E255Event, DeviceController::Action::SET); + this->private_setDiagEvent(DeviceController::State::E255); + this->private_sendDiagEvent(E255Event, DeviceController::Action::SET); } if (this->E255counter > 5) { this->restartCArun(); } else { this->E255counter++; } + QTimer::singleShot(400, this, &DeviceControllerDiag::diagRequest); - this->diagRequestTimeoutTimer->stop(); - this->isRequestRunning = false; - this->flagInterruptDiag = false; + + this->private_finishDiag(false); + return; } @@ -196,16 +197,14 @@ void DeviceControllerDiag::sys_superviseSystem() qCritical() << "DeviceControllerDiag::sys_superviseSystem() no valid data!"; hw->dc_autoRequest(true); - DCMachineEvent E255Event = DCMachineEvent(DeviceController::State::M0254); - previousMachineEventSet.insert(E255Event); - private_sendDiagEvent(E255Event, DeviceController::Action::SET); + DCMachineEvent M0254Event = DCMachineEvent(DeviceController::State::M0254); + this->private_setDiagEvent(DeviceController::State::M0254); + this->private_sendDiagEvent(M0254Event, DeviceController::Action::SET); if (this->E255counter > 5) { this->restartCArun(); } else { this->E255counter++; } QTimer::singleShot(400, this, &DeviceControllerDiag::diagRequest); - this->diagRequestTimeoutTimer->stop(); - this->isRequestRunning = false; - this->flagInterruptDiag = false; + this->private_finishDiag(false); return; } @@ -477,7 +476,7 @@ void DeviceControllerDiag::sub_componentAssessment() // finish diag - this->private_finishDiag(); + this->private_finishDiag(true); } /** @@ -486,14 +485,20 @@ void DeviceControllerDiag::sub_componentAssessment() * Single point to finish a diag process: * - */ -void DeviceControllerDiag::private_finishDiag() +void DeviceControllerDiag::private_finishDiag(bool dataValid) { this->diagRequestTimeoutTimer->stop(); this->isRequestRunning = false; this->flagInterruptDiag = false; - this->previousMachineEventSet.unite(machineEventSet); // add new elements from machineEventSet - this->previousMachineEventSet.intersect(machineEventSet); // remove elements not in machineEventSet + // add new elements from machineEventSet + this->previousMachineEventSet.unite(machineEventSet); + + if (dataValid) { + // remove elements not in machineEventSet + // ... only if data is valid + this->previousMachineEventSet.intersect(machineEventSet); + } if (this->isDiagBackgroundTask) { this->isDiagBackgroundTask = false; diff --git a/src/ATBAPP/DeviceControllerDiag.h b/src/ATBAPP/DeviceControllerDiag.h index a228960..a46224d 100644 --- a/src/ATBAPP/DeviceControllerDiag.h +++ b/src/ATBAPP/DeviceControllerDiag.h @@ -170,7 +170,7 @@ private slots: void private_setDiagEvent(DeviceController::State result); void private_sendDiagEvent(DCMachineEvent result, DeviceController::Action action); - void private_finishDiag(); + void private_finishDiag(bool dataValid = false); void sys_superviseSystem();