From 4170d5651a99a501056cc37cbecc1753cc694eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Gunics?= Date: Fri, 3 Apr 2026 15:12:26 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Attempt=20to=20fix=20the=20master=20switch?= =?UTF-8?q?=20of=20M=C3=BCller=20not=20turning=20off=20the=20painting..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 +- src/task_controller.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bffc7a3..bc796a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16) project("AOG-TaskController") set(PROJECT_VERSION_MAJOR 1) set(PROJECT_VERSION_MINOR 3) -set(PROJECT_VERSION_PATCH 1) +set(PROJECT_VERSION_PATCH 2) set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" ) diff --git a/src/task_controller.cpp b/src/task_controller.cpp index 8b260bc..a454cf6 100644 --- a/src/task_controller.cpp +++ b/src/task_controller.cpp @@ -191,6 +191,7 @@ bool ClientState::is_element_or_parent_off(std::uint16_t elementNumber) const auto childObject = nonConstPool.get_object_by_index(j); if (childObject && childObject->get_object_id() == childId) { + // Check if child is a DeviceElement with matching element number if (childObject->get_object_type() == isobus::task_controller_object::ObjectTypes::DeviceElement) { auto childElementObject = std::dynamic_pointer_cast(childObject); @@ -200,6 +201,20 @@ bool ClientState::is_element_or_parent_off(std::uint16_t elementNumber) const return is_element_or_parent_off(elementObject->get_element_number()); } } + // Check if child is a DeviceProcessData whose DDI is mapped to the target element number + else if (childObject->get_object_type() == isobus::task_controller_object::ObjectTypes::DeviceProcessData) + { + auto processDataObject = std::dynamic_pointer_cast(childObject); + if (processDataObject) + { + auto ddi = static_cast(processDataObject->get_ddi()); + if (has_element_number_for_ddi(ddi) && get_element_number_for_ddi(ddi) == elementNumber) + { + // Found the parent, recursively check if parent or its parents are off + return is_element_or_parent_off(elementObject->get_element_number()); + } + } + } } } } From 8ede154e551a39f9b05d23009863234d7be3e3b5 Mon Sep 17 00:00:00 2001 From: gunicsba Date: Fri, 3 Apr 2026 19:35:52 +0200 Subject: [PATCH 2/2] Update src/task_controller.cpp Strengthen logic Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/task_controller.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/task_controller.cpp b/src/task_controller.cpp index a454cf6..a7cc350 100644 --- a/src/task_controller.cpp +++ b/src/task_controller.cpp @@ -208,10 +208,13 @@ bool ClientState::is_element_or_parent_off(std::uint16_t elementNumber) const if (processDataObject) { auto ddi = static_cast(processDataObject->get_ddi()); - if (has_element_number_for_ddi(ddi) && get_element_number_for_ddi(ddi) == elementNumber) + auto parentElementNumber = elementObject->get_element_number(); + if (has_element_number_for_ddi(ddi) && + get_element_number_for_ddi(ddi) == elementNumber && + parentElementNumber != elementNumber) { - // Found the parent, recursively check if parent or its parents are off - return is_element_or_parent_off(elementObject->get_element_number()); + // Found a different parent element, recursively check if it or its parents are off + return is_element_or_parent_off(parentElementNumber); } } }