Compare commits

...

6 Commits
2.2.4 ... 2.2.8

Author SHA1 Message Date
6c2717c56b Diag: check doors in sub_componentAssessment ...
... this prevents sending Operate "O000" in case of an opend door and
enables sending Operate "O000" after closing all doors because
'lastResult' has not changed.
2024-06-11 09:27:07 +02:00
816182c87b Diag: restart on E255 2024-06-03 12:49:33 +02:00
492d3a107a Diag: set timeout for diagRequest from config ...
Option: "ATBDeviceControllerPlugin/diagTimeout"
 Description: Timeout for diagRequest in seconds.
 Default value: 45s
2024-06-03 12:09:34 +02:00
962cd01eac Re-enable sending DC-State after closing doors 2024-06-03 11:53:58 +02:00
d66363da46 Diag: Temperatur warning: E004 (Error) -> W004 (Warning) 2024-05-27 13:16:28 +02:00
7b25f86d6b CoinEscrow error is considered a warning (W010) 2024-05-17 14:08:07 +02:00
3 changed files with 60 additions and 16 deletions

View File

@@ -82,6 +82,8 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con
this->diag = new DeviceControllerDiag(this->persistentData, this);
connect(this->diag, &DeviceControllerDiag::newVoltage, this, &ATBDeviceControllerPlugin::onNewVoltage);
int diagTimeout = settings.value("ATBDeviceControllerPlugin/diagTimeout", "45").toInt();
this->diag->setTimeout(diagTimeout);
// currentSelectedTicketType - number of used "Kombiticket" (deprecated) use TICKET_VARIANT in future
this->currentSelectedTicketType = 0;
@@ -540,6 +542,8 @@ void ATBDeviceControllerPlugin::onCBinAndAllDoorsClosed()
{
qCritical() << "ATBDeviceControllerPlugin::onCBinAndAllDoorsClosed()";
this->diag->diagReInit();
QTimer::singleShot(2000, this, SIGNAL(requestModeIDLE()));
this->dbus->finishedBackgroundTask("DOOR_OPEN");

View File

@@ -20,7 +20,7 @@ DeviceControllerDiag::DeviceControllerDiag(PersistentData *pData, QObject *paren
, pData(pData)
{
diagRequestTimeoutTimer = new QTimer(this);
diagRequestTimeoutTimer->setInterval(1000*20); // 20s
diagRequestTimeoutTimer->setInterval(1000*45);
diagRequestTimeoutTimer->setSingleShot(true);
connect(diagRequestTimeoutTimer, &QTimer::timeout, this, &DeviceControllerDiag::onDiagRequestTimeoutTimerTimeout);
}
@@ -36,6 +36,17 @@ void DeviceControllerDiag::init(hwinf *hw, QObject* eventReceiver)
}
void DeviceControllerDiag::diagReInit()
{
this->machineEventSet.clear();
this->_isErrorState = false;
}
void DeviceControllerDiag::setTimeout(int timeout)
{
this->diagRequestTimeoutTimer->setInterval(1000 * timeout);
}
void DeviceControllerDiag::diagRequest()
{
qCritical() << "DeviceControllerDiag::diagRequest()";
@@ -93,6 +104,14 @@ void DeviceControllerDiag::private_startDiag()
this->private_sendDiagEvent(DeviceController::State::E255);
this->isRequestRunning = false;
this->flagInterruptDiag = false;
// try it again, until success:
QTimer::singleShot(400, this, &DeviceControllerDiag::diagRequest);
/**
* But please note:
* - diag does currently not stop suspend (start a background task)
* - diag is called again in ModeOOO wokeup()
*/
return;
}
@@ -159,18 +178,6 @@ void DeviceControllerDiag::sys_superviseSystem()
return;
}
// all doors: 99: undefined 0:closed 1:open
if (dynMaCond.lowerDoor || dynMaCond.upperDoor) {
// Service or battery door is open, goto INTRUSION MODE
qCritical() << "DeviceControllerDiag::sys_superviseSystem() Service or battery door is open, goto INTRUSION MODE";
this->private_sendDiagEvent(DeviceController::State::E253);
}
if (dynMaCond.middleDoor) {
// vault door is open, goto INTRUSION MODE
qCritical() << "DeviceControllerDiag::sys_superviseSystem() vault door is open, goto INTRUSION MODE";
this->private_sendDiagEvent(DeviceController::State::E252);
}
qCritical() << " --> call sub_componentAssessment()";
sub_componentAssessment();
@@ -204,6 +211,21 @@ void DeviceControllerDiag::sub_componentAssessment()
this->private_sendDiagEvent(DeviceController::State::A000);
}
// check for open doors
// all doors: 99: undefined 0:closed 1:open
if (dynMaCond.lowerDoor || dynMaCond.upperDoor) {
// Service or battery door is open
flag_sendOperate = false;
qCritical() << "DeviceControllerDiag::sys_superviseSystem() Service or battery door is open, goto INTRUSION MODE";
this->private_sendDiagEvent(DeviceController::State::E253);
}
if (dynMaCond.middleDoor) {
// vault door is open
flag_sendOperate = false;
qCritical() << "DeviceControllerDiag::sys_superviseSystem() vault door is open, goto INTRUSION MODE";
this->private_sendDiagEvent(DeviceController::State::E252);
}
// check for invalid states:
if (modCond.rtc>=200) {
@@ -247,7 +269,8 @@ void DeviceControllerDiag::sub_componentAssessment()
}
if (modCond.coinEscrow>=200) {
flag_sendOperate = false;
this->private_sendDiagEvent(DeviceController::State::E010);
// coinEscrow>200 is considered a warning:
this->private_sendDiagEvent(DeviceController::State::W010);
}
}
// -----------------------------------------------------------------------------------------------
@@ -269,7 +292,8 @@ void DeviceControllerDiag::sub_componentAssessment()
{
if (modCond.coinEscrow>=200) {
flag_sendOperate = false;
this->private_sendDiagEvent(DeviceController::State::E010);
// coinEscrow>200 is considered a warning:
this->private_sendDiagEvent(DeviceController::State::W010);
}
if (modCond.coinSafe==201) { // full
flag_sendOperate = false;
@@ -341,7 +365,7 @@ void DeviceControllerDiag::sub_componentAssessment()
}
if (modCond.temper>=200) {
flag_sendOperate = false;
this->private_sendDiagEvent(DeviceController::State::E004);
this->private_sendDiagEvent(DeviceController::State::W004);
}
// check for warnings
@@ -452,6 +476,10 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result)
parameter = "coin escrow";
this->_isErrorState = true;
break;
case DeviceController::State::W010: // coin escrow
eventClass = EVENT_CLASS::WARNING;
parameter = "coin escrow";
break;
case DeviceController::State::E011: // mem error int.ee.
eventClass = EVENT_CLASS::ERROR;
parameter = "mem error int.ee.";

View File

@@ -29,6 +29,7 @@ namespace DeviceController {
E008,
E009,
E010,
W010, // Coin Escrow
E011,
E018,
@@ -79,9 +80,20 @@ public:
bool isOperatingState();
QSet<DeviceController::State> getCurrentMachineState();
void setTimeout(int timeout);
public slots:
/**
* start diag request
*/
void diagRequest();
/**
* reset / re-init diag request.
* Called e.g. when doors are closed.
*/
void diagReInit();
signals:
void diagResponse(ATBMachineEvent* machineEvent);