bool Device_Object_List_Identifier( unsigned array_index, int *object_type, uint32_t * instance) { bool status = false; unsigned object_index = 0; unsigned object_count = 0; /* device object */ if (array_index == 1) { *object_type = OBJECT_DEVICE; *instance = Object_Instance_Number; status = true; } /* normalize the index since we know it is not the previous objects */ /* array index starts at 1 */ object_index = array_index - 1; /* 1 for the device object */ object_count = 1; /* FIXME: add objects as needed */ #if MAX_ANALOG_VALUES /* analog value objects */ if (!status) { /* array index starts at 1, and 1 for the device object */ object_index -= object_count; object_count = Analog_Value_Count(); if (object_index < object_count) { *object_type = OBJECT_ANALOG_VALUE; *instance = Analog_Value_Index_To_Instance(object_index); status = true; } } #endif #if MAX_BINARY_VALUES /* binary value objects */ if (!status) { object_index -= object_count; object_count = Binary_Value_Count(); /* is it a valid index for this object? */ if (object_index < object_count) { *object_type = OBJECT_BINARY_VALUE; *instance = Binary_Value_Index_To_Instance(object_index); status = true; } } #endif return status; }
int Analog_Value_Alarm_Summary( unsigned index, BACNET_GET_ALARM_SUMMARY_DATA * getalarm_data) { /* check index */ if (index < MAX_ANALOG_VALUES) { /* Event_State is not equal to NORMAL and Notify_Type property value is ALARM */ if ((AV_Descr[index].Event_State != EVENT_STATE_NORMAL) && (AV_Descr[index].Notify_Type == NOTIFY_ALARM)) { /* Object Identifier */ getalarm_data->objectIdentifier.type = OBJECT_ANALOG_VALUE; getalarm_data->objectIdentifier.instance = Analog_Value_Index_To_Instance(index); /* Alarm State */ getalarm_data->alarmState = AV_Descr[index].Event_State; /* Acknowledged Transitions */ bitstring_init(&getalarm_data->acknowledgedTransitions); bitstring_set_bit(&getalarm_data->acknowledgedTransitions, TRANSITION_TO_OFFNORMAL, AV_Descr[index].Acked_Transitions[TRANSITION_TO_OFFNORMAL]. bIsAcked); bitstring_set_bit(&getalarm_data->acknowledgedTransitions, TRANSITION_TO_FAULT, AV_Descr[index]. Acked_Transitions[TRANSITION_TO_FAULT].bIsAcked); bitstring_set_bit(&getalarm_data->acknowledgedTransitions, TRANSITION_TO_NORMAL, AV_Descr[index]. Acked_Transitions[TRANSITION_TO_NORMAL].bIsAcked); return 1; /* active alarm */ } else return 0; /* no active alarm at this index */ } else return -1; /* end of list */ }
int Analog_Value_Event_Information( unsigned index, BACNET_GET_EVENT_INFORMATION_DATA * getevent_data) { bool IsNotAckedTransitions; bool IsActiveEvent; int i; /* check index */ if (index < MAX_ANALOG_VALUES) { /* Event_State not equal to NORMAL */ IsActiveEvent = (AV_Descr[index].Event_State != EVENT_STATE_NORMAL); /* Acked_Transitions property, which has at least one of the bits (TO-OFFNORMAL, TO-FAULT, TONORMAL) set to FALSE. */ IsNotAckedTransitions = (AV_Descr[index].Acked_Transitions[TRANSITION_TO_OFFNORMAL]. bIsAcked == false) | (AV_Descr[index].Acked_Transitions[TRANSITION_TO_FAULT]. bIsAcked == false) | (AV_Descr[index].Acked_Transitions[TRANSITION_TO_NORMAL]. bIsAcked == false); } else return -1; /* end of list */ if ((IsActiveEvent) || (IsNotAckedTransitions)) { /* Object Identifier */ getevent_data->objectIdentifier.type = OBJECT_ANALOG_VALUE; getevent_data->objectIdentifier.instance = Analog_Value_Index_To_Instance(index); /* Event State */ getevent_data->eventState = AV_Descr[index].Event_State; /* Acknowledged Transitions */ bitstring_init(&getevent_data->acknowledgedTransitions); bitstring_set_bit(&getevent_data->acknowledgedTransitions, TRANSITION_TO_OFFNORMAL, AV_Descr[index].Acked_Transitions[TRANSITION_TO_OFFNORMAL]. bIsAcked); bitstring_set_bit(&getevent_data->acknowledgedTransitions, TRANSITION_TO_FAULT, AV_Descr[index].Acked_Transitions[TRANSITION_TO_FAULT].bIsAcked); bitstring_set_bit(&getevent_data->acknowledgedTransitions, TRANSITION_TO_NORMAL, AV_Descr[index].Acked_Transitions[TRANSITION_TO_NORMAL].bIsAcked); /* Event Time Stamps */ for (i = 0; i < 3; i++) { getevent_data->eventTimeStamps[i].tag = TIME_STAMP_DATETIME; getevent_data->eventTimeStamps[i].value.dateTime = AV_Descr[index].Event_Time_Stamps[i]; } /* Notify Type */ getevent_data->notifyType = AV_Descr[index].Notify_Type; /* Event Enable */ bitstring_init(&getevent_data->eventEnable); bitstring_set_bit(&getevent_data->eventEnable, TRANSITION_TO_OFFNORMAL, (AV_Descr[index]. Event_Enable & EVENT_ENABLE_TO_OFFNORMAL) ? true : false); bitstring_set_bit(&getevent_data->eventEnable, TRANSITION_TO_FAULT, (AV_Descr[index]. Event_Enable & EVENT_ENABLE_TO_FAULT) ? true : false); bitstring_set_bit(&getevent_data->eventEnable, TRANSITION_TO_NORMAL, (AV_Descr[index]. Event_Enable & EVENT_ENABLE_TO_NORMAL) ? true : false); /* Event Priorities */ Notification_Class_Get_Priorities(AV_Descr[index].Notification_Class, getevent_data->eventPriorities); return 1; /* active event */ } else return 0; /* no active event at this index */ }