From 4567aed6d1033c34ea6c9906b9268d8e9ac32cd6 Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Mon, 12 May 2025 13:26:48 +0200 Subject: [PATCH] Introduce DCMachineEvent ... ... this is an DC-Plugin internal data-structure which can be transformed to an ATBMachineEvent and sent to ISMAS. DCMachineEvent is in fact a couple ot DeviceController::State and a QString eventID. Thi eventID is necessary to send a state-reset to ISMAS. ISMAS needs same enventID for set- and reset Events. --- src/ATBAPP/DeviceControllerDiag.cpp | 41 ++++++++++++++++------------- src/ATBAPP/DeviceControllerDiag.h | 32 +++++++++++++++++++--- 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/src/ATBAPP/DeviceControllerDiag.cpp b/src/ATBAPP/DeviceControllerDiag.cpp index a326fb0..7778813 100644 --- a/src/ATBAPP/DeviceControllerDiag.cpp +++ b/src/ATBAPP/DeviceControllerDiag.cpp @@ -95,7 +95,7 @@ bool DeviceControllerDiag::isOperatingState() return !this->_isErrorState; } -QSet DeviceControllerDiag::getCurrentMachineState() +QSet DeviceControllerDiag::getCurrentMachineState() { return this->machineEventSet; } @@ -421,33 +421,30 @@ void DeviceControllerDiag::sub_componentAssessment() // compare machineEventSets // New events: present in current but not previous - QSet newEvents = this->machineEventSet - this->previousMachineEventSet; + QSet newEvents = this->machineEventSet - this->previousMachineEventSet; // Reset events: present in previous but not current - QSet resetEvents = this->previousMachineEventSet - this->machineEventSet; + QSet resetEvents = this->previousMachineEventSet - this->machineEventSet; // Triggering Actions // Iterate through the results - for (const DeviceController::State& event : newEvents) { + for (const DCMachineEvent& event : newEvents) { private_sendDiagEvent(event, DeviceController::Action::SET); // New event detected } - // Proposal: send reset - /* - for (const DeviceController::State& event : resetEvents) { + // send reset + for (const DCMachineEvent& event : resetEvents) { private_sendDiagEvent(event, DeviceController::Action::RESET); // Event no longer present } - */ // DEBUG // print all current states QStringList DeviceControllerStateStringList; - for (const DeviceController::State& event : this->machineEventSet) { - DeviceControllerStateStringList.append(QMetaEnum::fromType().valueToKey(event)); + for (const DCMachineEvent& event : this->machineEventSet) { + DeviceControllerStateStringList.append(QMetaEnum::fromType().valueToKey(event.state)); } qCritical() << "diagReq result: " << DeviceControllerStateStringList; - // finish diag this->diagRequestTimeoutTimer->stop(); @@ -482,18 +479,26 @@ void DeviceControllerDiag::private_setDiagEvent(DeviceController::State result) return; } - machineEventSet.insert(result); + DCMachineEvent newState = DCMachineEvent(result, QUuid::createUuid().toString(QUuid::WithoutBraces).mid(0, 8)); + + machineEventSet.insert(newState); } -void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result, DeviceController::Action action) -{ - QString eventId = QUuid::createUuid().toString(QUuid::WithoutBraces).mid(0, 8); - QString eventName = QMetaEnum::fromType().valueToKey(result);; +/** + * @brief DeviceControllerDiag::private_sendDiagEvent + * @param result WXXX | EXXX | O000 + * @param action SET|RESET + */ +void DeviceControllerDiag::private_sendDiagEvent(DCMachineEvent result, DeviceController::Action action) +{ + QString eventId = result.eventId; + + QString eventName = QMetaEnum::fromType().valueToKey(result.state); EVENT_CLASS eventClass = EVENT_CLASS::STATE; QString parameter; - switch (result) { + switch (result.state) { case DeviceController::State::INITIAL_STATE: break; @@ -637,7 +642,7 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result, break; } - this->lastState = result; + this->lastState = result.state; /** * Variant: send 'parameter' as JSON: diff --git a/src/ATBAPP/DeviceControllerDiag.h b/src/ATBAPP/DeviceControllerDiag.h index 7341e4a..327cf68 100644 --- a/src/ATBAPP/DeviceControllerDiag.h +++ b/src/ATBAPP/DeviceControllerDiag.h @@ -73,6 +73,30 @@ namespace DeviceController { } +// ----------------------------- DCMachineEvent ----------------------------------------- + +class DCMachineEvent { +public: + DCMachineEvent() = default; + DCMachineEvent(DeviceController::State state, const QString& id) : state(state), eventId(id) {} + + DeviceController::State state; + QString eventId; + + // Equality operator (required for QSet) + bool operator==(const DCMachineEvent& other) const { + return (state == other.state); + } +}; + +// Hash function (required for QSet) +inline uint qHash(const DCMachineEvent& key, uint seed = 0) { + return qHash(static_cast(key.state), seed); +} + + +// ------------------------ DeviceControllerDiag -------------------------------------- + class DeviceControllerDiag : public QObject { Q_OBJECT @@ -90,7 +114,7 @@ public: */ bool isErrorState(); bool isOperatingState(); - QSet getCurrentMachineState(); + QSet getCurrentMachineState(); void setTimeout(int timeout); @@ -132,8 +156,8 @@ private: int lastVoltage; DeviceController::State lastState; - QSet machineEventSet; - QSet previousMachineEventSet; + QSet machineEventSet; + QSet previousMachineEventSet; bool _isErrorState; PersistentData* pData; @@ -145,7 +169,7 @@ private slots: void private_startDiag(); // diag entry method void private_setDiagEvent(DeviceController::State result); - void private_sendDiagEvent(DeviceController::State result, DeviceController::Action action); + void private_sendDiagEvent(DCMachineEvent result, DeviceController::Action action); void sys_superviseSystem();