From a7956e6082360c4f739b6a0a5a55060fd709204d Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Thu, 18 Sep 2025 10:57:03 -0500 Subject: [PATCH] Fixed the lighting output objects current priority comparison during lighting commands by using priority 17 (relinquish default) instead of 0. (#1097) --- src/bacnet/basic/object/blo.c | 9 ++++++--- src/bacnet/basic/object/lo.c | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/bacnet/basic/object/blo.c b/src/bacnet/basic/object/blo.c index ffc8d93a..26e7543e 100644 --- a/src/bacnet/basic/object/blo.c +++ b/src/bacnet/basic/object/blo.c @@ -296,12 +296,12 @@ static int Binary_Lighting_Output_Priority_Array_Encode( * * @param object_instance - object-instance number of the object * - * @return active priority 1..16, or 0 if no priority is active + * @return active priority 1..16, or 17 if no priority is active */ static unsigned Present_Value_Priority(const struct object_data *pObject) { - unsigned p = 0; /* loop counter */ - unsigned priority = 0; /* return value */ + unsigned p; /* loop counter */ + unsigned priority = BACNET_MAX_PRIORITY + 1; /* return value */ for (p = 0; p < BACNET_MAX_PRIORITY; p++) { if (BIT_CHECK(pObject->Priority_Active_Bits, p)) { @@ -385,6 +385,9 @@ unsigned Binary_Lighting_Output_Present_Value_Priority(uint32_t object_instance) pObject = Keylist_Data(Object_List, object_instance); if (pObject) { priority = Present_Value_Priority(pObject); + if (priority > BACNET_MAX_PRIORITY) { + priority = 0; + } } return priority; diff --git a/src/bacnet/basic/object/lo.c b/src/bacnet/basic/object/lo.c index e6d4b625..da19f5dd 100644 --- a/src/bacnet/basic/object/lo.c +++ b/src/bacnet/basic/object/lo.c @@ -351,12 +351,12 @@ static int Lighting_Output_Priority_Array_Encode( * * @param object_instance - object-instance number of the object * - * @return active priority 1..16, or 0 if no priority is active + * @return active priority 1..16, or 17 if no priority is active */ static unsigned Present_Value_Priority(const struct object_data *pObject) { - unsigned p = 0; /* loop counter */ - unsigned priority = 0; /* return value */ + unsigned p; /* loop counter */ + unsigned priority = BACNET_MAX_PRIORITY + 1; /* return value */ for (p = 0; p < BACNET_MAX_PRIORITY; p++) { if (BIT_CHECK(pObject->Priority_Active_Bits, p)) { @@ -448,6 +448,9 @@ unsigned Lighting_Output_Present_Value_Priority(uint32_t object_instance) pObject = Keylist_Data(Object_List, object_instance); if (pObject) { priority = Present_Value_Priority(pObject); + if (priority > BACNET_MAX_PRIORITY) { + priority = 0; + } } return priority;