From 612a932b9fe7d1786965ca9e7caf88e4cc2cfabd 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 | 37 ++++++++++++++++------------- src/ATBAPP/DeviceControllerDiag.h | 32 +++++++++++++++++++++---- 2 files changed, 49 insertions(+), 20 deletions(-) diff --git a/src/ATBAPP/DeviceControllerDiag.cpp b/src/ATBAPP/DeviceControllerDiag.cpp index b2ee32a..dc367d7 100644 --- a/src/ATBAPP/DeviceControllerDiag.cpp +++ b/src/ATBAPP/DeviceControllerDiag.cpp @@ -92,7 +92,7 @@ bool DeviceControllerDiag::isOperatingState() return !this->_isErrorState; } -QSet DeviceControllerDiag::getCurrentMachineState() +QSet DeviceControllerDiag::getCurrentMachineState() { return this->machineEventSet; } @@ -408,24 +408,21 @@ 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 } - */ - // finish diag @@ -457,18 +454,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; @@ -612,7 +617,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 a9e47a6..ff1b46f 100644 --- a/src/ATBAPP/DeviceControllerDiag.h +++ b/src/ATBAPP/DeviceControllerDiag.h @@ -72,6 +72,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 @@ -89,7 +113,7 @@ public: */ bool isErrorState(); bool isOperatingState(); - QSet getCurrentMachineState(); + QSet getCurrentMachineState(); void setTimeout(int timeout); @@ -129,8 +153,8 @@ private: int lastVoltage; DeviceController::State lastState; - QSet machineEventSet; - QSet previousMachineEventSet; + QSet machineEventSet; + QSet previousMachineEventSet; bool _isErrorState; PersistentData* pData; @@ -142,7 +166,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();