From 52294d1dcef5a6228114b8931c31e29b52d5c034 Mon Sep 17 00:00:00 2001 From: skarg Date: Sun, 29 Nov 2009 18:47:05 +0000 Subject: [PATCH] Added fixes for Alarms and Events. Thank you Sebastien! --- bacnet-stack/include/alarm_ack.h | 2 +- bacnet-stack/include/bacenum.h | 3 ++- bacnet-stack/src/alarm_ack.c | 8 ++++---- bacnet-stack/src/bactext.c | 2 ++ bacnet-stack/src/event.c | 16 ++++++++++------ bacnet-stack/src/getevent.c | 7 +++++-- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/bacnet-stack/include/alarm_ack.h b/bacnet-stack/include/alarm_ack.h index 9fc13c2e..17181391 100644 --- a/bacnet-stack/include/alarm_ack.h +++ b/bacnet-stack/include/alarm_ack.h @@ -44,7 +44,7 @@ typedef struct { uint32_t ackProcessIdentifier; BACNET_OBJECT_ID eventObjectIdentifier; - BACNET_EVENT_TYPE eventTypeAcked; + BACNET_EVENT_STATE eventStateAcked; BACNET_TIMESTAMP eventTimeStamp; BACNET_CHARACTER_STRING ackSource; BACNET_TIMESTAMP ackTimeStamp; diff --git a/bacnet-stack/include/bacenum.h b/bacnet-stack/include/bacenum.h index 8c20161c..85101037 100644 --- a/bacnet-stack/include/bacenum.h +++ b/bacnet-stack/include/bacenum.h @@ -418,7 +418,8 @@ typedef enum { STATUS_DOWNLOAD_REQUIRED = 2, STATUS_DOWNLOAD_IN_PROGRESS = 3, STATUS_NON_OPERATIONAL = 4, - MAX_DEVICE_STATUS = 5 + STATUS_BACKUP_IN_PROGRESS = 5, + MAX_DEVICE_STATUS = 6 } BACNET_DEVICE_STATUS; typedef enum { diff --git a/bacnet-stack/src/alarm_ack.c b/bacnet-stack/src/alarm_ack.c index 8619b611..ae5fda89 100644 --- a/bacnet-stack/src/alarm_ack.c +++ b/bacnet-stack/src/alarm_ack.c @@ -88,7 +88,7 @@ int alarm_ack_encode_service_request( len = encode_context_enumerated(&apdu[apdu_len], 2, - data->eventTypeAcked); + data->eventStateAcked); apdu_len += len; len = @@ -144,7 +144,7 @@ int alarm_ack_decode_service_request( decode_context_enumerated(&apdu[len], 2, &enumValue))) { return -1; } - data->eventTypeAcked = (BACNET_EVENT_TYPE) enumValue; + data->eventStateAcked = (BACNET_EVENT_STATE)enumValue; len += section_len; if (-1 == (section_len = @@ -199,7 +199,7 @@ void testAlarmAck( testAlarmAckIn.eventTimeStamp.value.time.min = 11; testAlarmAckIn.eventTimeStamp.value.time.sec = 12; testAlarmAckIn.eventTimeStamp.value.time.hundredths = 14; - testAlarmAckIn.eventTypeAcked = EVENT_CHANGE_OF_LIFE_SAFETY; + testAlarmAckIn.eventStateAcked = EVENT_STATE_OFFNORMAL; memset(&testAlarmAckOut, 0, sizeof(testAlarmAckOut)); @@ -247,7 +247,7 @@ void testAlarmAck( testAlarmAckOut.eventTimeStamp.value.time.hundredths); ct_test(pTest, - testAlarmAckIn.eventTypeAcked == testAlarmAckOut.eventTypeAcked); + testAlarmAckIn.eventStateAcked == testAlarmAckOut.eventStateAcked); } diff --git a/bacnet-stack/src/bactext.c b/bacnet-stack/src/bactext.c index daad4305..3802742c 100644 --- a/bacnet-stack/src/bactext.c +++ b/bacnet-stack/src/bactext.c @@ -1867,6 +1867,8 @@ INDTEXT_DATA bacnet_device_status_names[] = { , {STATUS_NON_OPERATIONAL, "non-operational"} , + {STATUS_BACKUP_IN_PROGRESS, "backup-in-progress"} + , {0, NULL} }; diff --git a/bacnet-stack/src/event.c b/bacnet-stack/src/event.c index d7214a31..6830d973 100644 --- a/bacnet-stack/src/event.c +++ b/bacnet-stack/src/event.c @@ -557,10 +557,12 @@ int event_notify_decode_service_request( len += section_length; } break; - case NOTIFY_ACK_NOTIFICATION: - /* FIXME: handle this case */ + /* In cases other than alarm and event + there's no data, so do not return an error + but continue normally */ + case NOTIFY_ACK_NOTIFICATION: default: - return -1; + break; } /* tag 11 - toState */ @@ -854,10 +856,12 @@ int event_notify_decode_service_request( return -1; } break; - case NOTIFY_ACK_NOTIFICATION: - /* FIXME: handle this case */ + /* In cases other than alarm and event + there's no data, so do not return an error + but continue normally */ + case NOTIFY_ACK_NOTIFICATION: default: - return -1; + break; } } diff --git a/bacnet-stack/src/getevent.c b/bacnet-stack/src/getevent.c index 101394d4..08fa47f5 100644 --- a/bacnet-stack/src/getevent.c +++ b/bacnet-stack/src/getevent.c @@ -257,7 +257,7 @@ int getevent_ack_decode_service_request( decode_tag_number_and_value(&apdu[len], &tag_number, &len_value); len += - decode_enumerated(&apdu[apdu_len], len_value, &enum_value); + decode_enumerated(&apdu[len], len_value, &enum_value); event_data->notifyType = enum_value; } else { return -1; @@ -308,7 +308,10 @@ int getevent_ack_decode_service_request( len += decode_tag_number_and_value(&apdu[len], &tag_number, &len_value); - *moreEvents = decode_boolean(len_value); + if (len_value == 1) + *moreEvents = decode_context_boolean(&apdu[len++]); + else + *moreEvents = false; } else { return -1; }