From b90b14e5f68c50e934f7b0d1c175d5a1d43d3068 Mon Sep 17 00:00:00 2001 From: Tomasz Kazimierz Motyl Date: Tue, 30 Apr 2024 19:35:31 +0100 Subject: [PATCH] Merge pull request #39 from se-apc/devel/getters_and_setters_to_support_relative_permanence (#629) Get/Set functions to support properties relative permanence requirement --- src/bacnet/basic/object/nc.c | 83 +++++++++++++++++++++++++++++++++++- src/bacnet/basic/object/nc.h | 20 +++++++++ 2 files changed, 101 insertions(+), 2 deletions(-) diff --git a/src/bacnet/basic/object/nc.c b/src/bacnet/basic/object/nc.c index 5847cc29..7e11c132 100644 --- a/src/bacnet/basic/object/nc.c +++ b/src/bacnet/basic/object/nc.c @@ -486,6 +486,83 @@ void Notification_Class_Get_Priorities( pPriorityArray[i] = CurrentNotify->Priority[i]; } +bool Notification_Class_Get_Recipient_List( + uint32_t Object_Instance, BACNET_DESTINATION *pRecipientList) +{ + uint32_t object_index = Notification_Class_Instance_To_Index(Object_Instance); + + if (object_index < MAX_NOTIFICATION_CLASSES) { + NOTIFICATION_CLASS_INFO *CurrentNotify = &NC_Info[object_index]; + int i; + + for (i = 0; i < NC_MAX_RECIPIENTS; i++) + pRecipientList[i] = CurrentNotify->Recipient_List[i]; + } else { + return false; /* unknown object */ + } + + return true; +} + +bool Notification_Class_Set_Recipient_List( + uint32_t Object_Instance, BACNET_DESTINATION *pRecipientList) +{ + uint32_t object_index = Notification_Class_Instance_To_Index(Object_Instance); + + if (object_index < MAX_NOTIFICATION_CLASSES) { + NOTIFICATION_CLASS_INFO *CurrentNotify = &NC_Info[object_index]; + int i; + + for (i = 0; i < NC_MAX_RECIPIENTS; i++) + CurrentNotify->Recipient_List[i] = pRecipientList[i]; + } else { + return false; /* unknown object */ + } + + return true; +} + +void Notification_Class_Set_Priorities( + uint32_t Object_Instance, uint32_t *pPriorityArray) +{ + uint32_t object_index = Notification_Class_Instance_To_Index(Object_Instance); + + if (object_index < MAX_NOTIFICATION_CLASSES) { + NOTIFICATION_CLASS_INFO *CurrentNotify = &NC_Info[object_index]; + int i; + + for (i = 0; i < 3; i++) + if (pPriorityArray[i] <= 255) + CurrentNotify->Priority[i] = pPriorityArray[i]; + } +} + +void Notification_Class_Get_Ack_Required( + uint32_t Object_Instance, uint8_t *pAckRequired) +{ + uint32_t object_index = Notification_Class_Instance_To_Index(Object_Instance); + + if (object_index < MAX_NOTIFICATION_CLASSES) { + NOTIFICATION_CLASS_INFO *CurrentNotify = &NC_Info[object_index]; + *pAckRequired = CurrentNotify->Ack_Required; + } else { + *pAckRequired = 0; + return; /* unknown object */ + } +} + +void Notification_Class_Set_Ack_Required( + uint32_t Object_Instance, uint8_t Ack_Required) +{ + uint32_t object_index = Notification_Class_Instance_To_Index(Object_Instance); + + if (object_index < MAX_NOTIFICATION_CLASSES) { + NOTIFICATION_CLASS_INFO *CurrentNotify = &NC_Info[object_index]; + CurrentNotify->Ack_Required = Ack_Required; + } +} + + static bool IsRecipientActive( BACNET_DESTINATION *pBacDest, uint8_t EventToState) { @@ -526,12 +603,14 @@ static bool IsRecipientActive( return false; } /* valid FromTime */ - if (datetime_compare_time(&DateTime.time, &pBacDest->FromTime) < 0) + if (datetime_compare_time(&DateTime.time, &pBacDest->FromTime) < 0) { return false; + } /* valid ToTime */ - if (datetime_compare_time(&pBacDest->ToTime, &DateTime.time) < 0) + if (datetime_compare_time(&pBacDest->ToTime, &DateTime.time) < 0) { return false; + } return true; } diff --git a/src/bacnet/basic/object/nc.h b/src/bacnet/basic/object/nc.h index f5cea4d8..7b321d42 100644 --- a/src/bacnet/basic/object/nc.h +++ b/src/bacnet/basic/object/nc.h @@ -100,6 +100,26 @@ BACNET_STACK_EXPORT void Notification_Class_Get_Priorities( uint32_t Object_Instance, uint32_t *pPriorityArray); +BACNET_STACK_EXPORT +void Notification_Class_Set_Priorities( + uint32_t Object_Instance, uint32_t *pPriorityArray); + +BACNET_STACK_EXPORT +void Notification_Class_Get_Ack_Required( + uint32_t Object_Instance, uint8_t *pAckRequired); + +BACNET_STACK_EXPORT +void Notification_Class_Set_Ack_Required( + uint32_t Object_Instance, uint8_t Ack_Required); + +BACNET_STACK_EXPORT +bool Notification_Class_Get_Recipient_List( + uint32_t Object_Instance, BACNET_DESTINATION *pRecipientList); + +BACNET_STACK_EXPORT +bool Notification_Class_Set_Recipient_List( + uint32_t Object_Instance, BACNET_DESTINATION *pRecipientList); + BACNET_STACK_EXPORT void Notification_Class_common_reporting_function( BACNET_EVENT_NOTIFICATION_DATA *event_data);