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..a7cc350 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,23 @@ 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()); + auto parentElementNumber = elementObject->get_element_number(); + if (has_element_number_for_ddi(ddi) && + get_element_number_for_ddi(ddi) == elementNumber && + parentElementNumber != elementNumber) + { + // Found a different parent element, recursively check if it or its parents are off + return is_element_or_parent_off(parentElementNumber); + } + } + } } } }