From b0a97c6f75b550018c11fedfb1e7e8174a18592f Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Tue, 17 Jun 2025 14:36:57 -0500 Subject: [PATCH] Bugfix/bactext enumeration updates 2024 (#1020) * Extended some BACnet enumerations from 135-2024 protocol-revision 25-30. * Changed usage of _FIRST and _LAST to _MIN and _MAX in some enumerations to be consistent. * Added object type and services supported BACnetBitString sizes for protocol revision 25-30 *Added new BACnetPropertyIdentifier, BACnetEngineeringUnits, BACnetEventState, BACnetRestartReason, BACnetLifeSafetyMode, BACnetLifeSafetyOperation, BACnetLifeSafetyState, BACnet_Services_Supported, BACnetLightingOperation, BACnetBinaryLightingPV, BACnetNetworkPortCommand, BACnetAuthenticationDecision, BACnetAuthorizationPosture, BACnetFaultType, BACnetPriorityFilter, BACnetResultFlags, and BACnetSuccessFilter enumerations. * Added BACnet text for BACnetLifeSafetyMode, BACnetLifeSafetyOperation, BACnetRestartReason, BACnetNetworkType, BACnetNetworkNumberQuality, BACnetNetworkPortCommand, BACnetAuthenticationDecision, BACnetAuthorizationPosture, BACnetFaultType, BACnetPriorityFilter, BACnetSuccessFilter, and BACnetResultFlags. --- CHANGELOG.md | 14 ++ apps/epics/main.c | 10 +- apps/server/main.c | 2 +- src/bacnet/bacapp.c | 4 +- src/bacnet/bacdef.h | 35 +++- src/bacnet/bacenum.h | 292 +++++++++++++++++++++++-------- src/bacnet/bactext.c | 318 +++++++++++++++++++++++++++++++++- src/bacnet/bactext.h | 27 +++ src/bacnet/basic/object/lo.c | 106 +++++++++++- src/bacnet/basic/object/lsp.c | 5 +- src/bacnet/basic/object/lsz.c | 5 +- src/bacnet/lighting.c | 2 +- src/bacnet/readrange.h | 7 - test/bacnet/abort/src/main.c | 2 +- 14 files changed, 720 insertions(+), 109 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56363ae6..590813c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -91,6 +91,20 @@ The git repositories are hosted at the following sites: ### Added +* Added object type and services supported BACnetBitString sizes for + protocol revision 25-30. (#1020) +* Added new BACnet text for BACnetLifeSafetyMode, BACnetLifeSafetyOperation, + BACnetRestartReason, BACnetNetworkType, BACnetNetworkNumberQuality, + BACnetNetworkPortCommand, BACnetAuthenticationDecision, + BACnetAuthorizationPosture, BACnetFaultType, BACnetPriorityFilter, + BACnetSuccessFilter, and BACnetResultFlags. (#1020) +* Added new BACnetPropertyIdentifier, BACnetEngineeringUnits, BACnetEventState, + BACnetRestartReason, BACnetLifeSafetyMode, BACnetLifeSafetyOperation, + BACnetLifeSafetyState, BACnet_Services_Supported, BACnetLightingOperation, + BACnetBinaryLightingPV, BACnetNetworkPortCommand, + BACnetAuthenticationDecision, BACnetAuthorizationPosture, BACnetFaultType, + BACnetPriorityFilter, BACnetResultFlags, and BACnetSuccessFilter + enumerations. (#1020) * Added the option to specify a target destination for apps/server-discover. (#958) * Added Program object task state transitions from request and callbacks. (#960) diff --git a/apps/epics/main.c b/apps/epics/main.c index 3deedf4a..c28fd00d 100644 --- a/apps/epics/main.c +++ b/apps/epics/main.c @@ -22,8 +22,8 @@ #include "bacnet/iam.h" #include "bacnet/arf.h" #include "bacnet/npdu.h" +#include "bacnet/abort.h" #include "bacnet/apdu.h" -#include "bacport.h" #include "bacnet/whois.h" #include "bacnet/rp.h" #include "bacnet/proplist.h" @@ -40,6 +40,7 @@ #include "bacnet/datalink/bip.h" #include "bacnet/basic/bbmd/h_bbmd.h" #include "bacnet/datalink/dlenv.h" +#include "bacport.h" #include "bacepics.h" /* (Doxygen note: The next two lines pull all the following Javadoc @@ -201,12 +202,7 @@ static void MyAbortHandler( #endif Error_Detected = true; Last_Error_Class = ERROR_CLASS_SERVICES; - if (abort_reason < MAX_BACNET_ABORT_REASON) { - Last_Error_Code = - (ERROR_CODE_ABORT_BUFFER_OVERFLOW - 1) + abort_reason; - } else { - Last_Error_Code = ERROR_CODE_ABORT_OTHER; - } + Last_Error_Code = abort_convert_to_error_code(abort_reason); } } diff --git a/apps/server/main.c b/apps/server/main.c index f677a7ef..485a6866 100644 --- a/apps/server/main.c +++ b/apps/server/main.c @@ -166,7 +166,7 @@ static void Init_Service_Handlers(void) Device_Init(NULL); /* create some dynamically created objects as examples */ object_data.object_instance = BACNET_MAX_INSTANCE; - for (i = 0; i <= BACNET_OBJECT_TYPE_LAST; i++) { + for (i = 0; i <= BACNET_OBJECT_TYPE_RESERVED_MIN; i++) { object_data.object_type = i; if (Device_Create_Object(&object_data)) { printf( diff --git a/src/bacnet/bacapp.c b/src/bacnet/bacapp.c index 72983116..e3ca8e10 100644 --- a/src/bacnet/bacapp.c +++ b/src/bacnet/bacapp.c @@ -2244,7 +2244,7 @@ static int bacapp_snprintf_enumerated( ret_val = bacapp_snprintf_property_identifier(str, str_len, value); break; case PROP_OBJECT_TYPE: - if (value <= BACNET_OBJECT_TYPE_LAST) { + if (value <= BACNET_OBJECT_TYPE_RESERVED_MIN) { ret_val = bacapp_snprintf( str, str_len, "%s", bactext_object_type_name(value)); } else if (value <= BACNET_OBJECT_TYPE_RESERVED_MAX) { @@ -2472,7 +2472,7 @@ static int bacapp_snprintf_object_id( slen = bacapp_snprintf(str, str_len, "("); ret_val += bacapp_snprintf_shift(slen, &str, &str_len); - if (object_id->type <= BACNET_OBJECT_TYPE_LAST) { + if (object_id->type <= BACNET_OBJECT_TYPE_RESERVED_MIN) { slen = bacapp_snprintf( str, str_len, "%s, ", bactext_object_type_name(object_id->type)); } else if (object_id->type < BACNET_OBJECT_TYPE_RESERVED_MAX) { diff --git a/src/bacnet/bacdef.h b/src/bacnet/bacdef.h index d6f2e299..de5c5471 100644 --- a/src/bacnet/bacdef.h +++ b/src/bacnet/bacdef.h @@ -24,8 +24,8 @@ /* This stack implements this version of BACnet */ #define BACNET_PROTOCOL_VERSION 1 -/* Although this stack can implement a later revision, - * sometimes another revision is desired */ +/* Although this stack can implement any revision, + * sometimes a specific revision is desired */ #ifndef BACNET_PROTOCOL_REVISION #define BACNET_PROTOCOL_REVISION 24 #endif @@ -91,7 +91,7 @@ #define MAX_ASHRAE_OBJECT_TYPE 57 #define MAX_BACNET_SERVICES_SUPPORTED 41 #elif (BACNET_PROTOCOL_REVISION == 18) || (BACNET_PROTOCOL_REVISION == 19) -/* from 135-2016 version of the BACnet Standard */ +/* ANSI/ASHRAE 135-2016 */ #define MAX_ASHRAE_OBJECT_TYPE 60 #define MAX_BACNET_SERVICES_SUPPORTED 44 #elif (BACNET_PROTOCOL_REVISION == 20) || (BACNET_PROTOCOL_REVISION == 21) @@ -99,6 +99,8 @@ #define MAX_ASHRAE_OBJECT_TYPE 63 #define MAX_BACNET_SERVICES_SUPPORTED 47 #elif (BACNET_PROTOCOL_REVISION == 22) +/* Addendum 135-2016bj, 135-2016by, 135-2016bz */ +/* ANSI/ASHRAE 135-2020 */ #define MAX_ASHRAE_OBJECT_TYPE 63 #define MAX_BACNET_SERVICES_SUPPORTED 47 #elif (BACNET_PROTOCOL_REVISION == 23) @@ -106,9 +108,34 @@ #define MAX_ASHRAE_OBJECT_TYPE 63 #define MAX_BACNET_SERVICES_SUPPORTED 47 #elif (BACNET_PROTOCOL_REVISION == 24) -/* Addendum 135-2020ca, 135-2020cc, 135-2020bv */ +/* Addendum 135-2020bv, 135-2020ca, 135-2020cc, 135-2020ce */ #define MAX_ASHRAE_OBJECT_TYPE 65 #define MAX_BACNET_SERVICES_SUPPORTED 49 +#elif (BACNET_PROTOCOL_REVISION == 25) +/* Addendum 135-2020cf */ +#define MAX_ASHRAE_OBJECT_TYPE 65 +#define MAX_BACNET_SERVICES_SUPPORTED 49 +#elif (BACNET_PROTOCOL_REVISION == 26) +/* Addendum 135-2020ch, 135-2020ck, 135-2020cn, 135-2020cq, 135-2020cs */ +#define MAX_ASHRAE_OBJECT_TYPE 65 +#define MAX_BACNET_SERVICES_SUPPORTED 49 +#elif (BACNET_PROTOCOL_REVISION == 27) +/* Addendum 135-2020bx, 135-2020ci */ +#define MAX_ASHRAE_OBJECT_TYPE 65 +#define MAX_BACNET_SERVICES_SUPPORTED 49 +#elif (BACNET_PROTOCOL_REVISION == 28) +/* Addendum 135-2020cj, 135-2020co */ +#define MAX_ASHRAE_OBJECT_TYPE 65 +#define MAX_BACNET_SERVICES_SUPPORTED 49 +#elif (BACNET_PROTOCOL_REVISION == 29) +/* Addendum 135-2020cp Addition of Authentication and Authorization */ +/* ANSI/ASHRAE 135-2024 */ +#define MAX_ASHRAE_OBJECT_TYPE 65 +#define MAX_BACNET_SERVICES_SUPPORTED 50 +#elif (BACNET_PROTOCOL_REVISION == 30) +/* Addendum 135-2020cm BACnet Energy Services Interface */ +#define MAX_ASHRAE_OBJECT_TYPE 65 +#define MAX_BACNET_SERVICES_SUPPORTED 50 #else #error MAX_ASHRAE_OBJECT_TYPE and MAX_BACNET_SERVICES_SUPPORTED not defined! #endif diff --git a/src/bacnet/bacenum.h b/src/bacnet/bacenum.h index 2b13f85b..97e96380 100644 --- a/src/bacnet/bacenum.h +++ b/src/bacnet/bacenum.h @@ -8,7 +8,7 @@ #ifndef BACNET_ENUMERATIONS_H #define BACNET_ENUMERATIONS_H -typedef enum { +typedef enum BACnetPropertyIdentifier { PROP_ACKED_TRANSITIONS = 0, PROP_ACK_REQUIRED = 1, PROP_ACTION = 2, @@ -568,8 +568,24 @@ typedef enum { PROP_HIGH_END_TRIM = 4194335, PROP_LOW_END_TRIM = 4194336, PROP_TRIM_FADE_TIME = 4194337, + /* Addendum 135-2020bx */ + /* enumerations 4194338-4194340 are defined in Addendum 2020bx */ + PROP_DEVICE_ADDRESS_PROXY_ENABLE = 4194338, + PROP_DEVICE_ADDRESS_PROXY_TABLE = 4194339, + PROP_DEVICE_ADDRESS_PROXY_TIMEOUT = 4194340, + /* enumerations 4194341-4194342 are defined in Addendum 2020cj */ + PROP_DEFAULT_ON_VALUE = 4194341, + PROP_LAST_ON_VALUE = 4194342, + /* enumerations 4194343-4194349 are defined in Addendum 2020cp */ + PROP_AUTHORIZATION_CACHE = 4194343, + PROP_AUTHORIZATION_GROUPS = 4194344, + PROP_AUTHORIZATION_POLICY = 4194345, + PROP_AUTHORIZATION_SCOPE = 4194346, + PROP_AUTHORIZATION_SERVER = 4194347, + PROP_AUTHORIZATION_STATUS = 4194348, + PROP_MAX_PROXIED_I_AMS_PER_SECOND = 4194349, /* update this value which is used in testing */ - PROP_RESERVED_RANGE_LAST = 4194337, + PROP_RESERVED_RANGE_LAST = 4194349, /* Enumerated values 4194303-16777215 are reserved for definition by ASHRAE. */ /* do the max range inside of enum so that @@ -583,9 +599,12 @@ typedef enum { EVENT_HIGH_LIMIT_ENABLE = 2 } BACNET_LIMIT_ENABLE; -typedef enum { ACTION_DIRECT = 0, ACTION_REVERSE = 1 } BACNET_ACTION; +typedef enum BACnetAction { + ACTION_DIRECT = 0, + ACTION_REVERSE = 1 +} BACNET_ACTION; -typedef enum { +typedef enum BACnetBinaryPV { MIN_BINARY_PV = 0, /* for validating incoming values */ BINARY_INACTIVE = 0, BINARY_ACTIVE = 1, @@ -599,13 +618,18 @@ typedef enum { ACTION_FLOAT } BACNET_ACTION_VALUE_TYPE; -typedef enum { +typedef enum BACnetEventState { EVENT_STATE_NORMAL = 0, EVENT_STATE_FAULT = 1, EVENT_STATE_OFFNORMAL = 2, EVENT_STATE_HIGH_LIMIT = 3, EVENT_STATE_LOW_LIMIT = 4, + EVENT_STATE_LIFE_SAFETY_ALARM = 5, EVENT_STATE_MAX = 5 + /* Enumerated values 0-63 are reserved for definition by ASHRAE. + Enumerated values 64-65535 may be used by others subject to + the procedures and constraints described in Clause 23. + The last enumeration used in this version is 5. */ } BACNET_EVENT_STATE; typedef enum { @@ -614,7 +638,7 @@ typedef enum { EVENT_ENABLE_TO_NORMAL = 4 } BACNET_EVENT_ENABLE; -typedef enum { +typedef enum BACnetDeviceStatus { STATUS_OPERATIONAL = 0, STATUS_OPERATIONAL_READ_ONLY = 1, STATUS_DOWNLOAD_REQUIRED = 2, @@ -622,9 +646,12 @@ typedef enum { STATUS_NON_OPERATIONAL = 4, STATUS_BACKUP_IN_PROGRESS = 5, MAX_DEVICE_STATUS = 6 + /* Enumerated values 0-63 are reserved for definition by ASHRAE. + Enumerated values 64-65535 may be used by others subject to + the procedures and constraints described in Clause 23. */ } BACNET_DEVICE_STATUS; -typedef enum { +typedef enum BACnetEngineeringUnits { /* Enumerated values 0-255 are reserved for definition by ASHRAE. */ /* Acceleration */ UNITS_METERS_PER_SECOND_PER_SECOND = 166, @@ -739,6 +766,7 @@ typedef enum { UNITS_PER_MILLISECOND = 47824, /* Humidity */ UNITS_GRAMS_OF_WATER_PER_KILOGRAM_DRY_AIR = 28, + UNITS_GRAINS_OF_WATER_PER_POUND_DRY_AIR = 47972, UNITS_PERCENT_RELATIVE_HUMIDITY = 29, /* Length */ UNITS_MICROMETERS = 194, @@ -865,6 +893,9 @@ typedef enum { UNITS_SECONDS = 73, UNITS_HUNDREDTHS_SECONDS = 158, UNITS_MILLISECONDS = 159, + UNITS_MICROSECONDS = 47979, + UNITS_NANOSECONDS = 47980, + UNITS_PICOSECONDS = 47981, /* Torque */ UNITS_NEWTON_METERS = 160, UNITS_POUND_FORCE_FEET = 47904, @@ -995,6 +1026,10 @@ typedef enum { UNITS_MILLIGRAMS_PER_CUBIC_CENTIMETER = 47895, UNITS_MICROGRAMS_PER_CUBIC_CENTIMETER = 47896, UNITS_NANOGRAMS_PER_CUBIC_CENTIMETER = 47897, + UNITS_PARTICLES_PER_CUBIC_FOOT = 47968, + UNITS_PARTICLES_PER_CUBIC_METER = 47969, + UNITS_PICOCURIES_PER_LITER = 47970, + UNITS_BECQUERELS_PER_CUBIC_METER = 47971, UNITS_BECQUERELS = 222, UNITS_KILOBECQUERELS = 223, UNITS_MEGABECQUERELS = 224, @@ -1038,7 +1073,12 @@ typedef enum { UNITS_SITE_UNIT8 = 47965, UNITS_SITE_UNIT9 = 47966, UNITS_SITE_UNIT10 = 47967, - + UNITS_DEGREE_HOURS_CELSIUS = 47973, + UNITS_DEGREE_HOURS_FAHRENHEIT = 47974, + UNITS_DEGREE_MINUTES_CELSIUS = 47975, + UNITS_DEGREE_MINUTES_FAHRENHEIT = 47976, + UNITS_DEGREE_SECONDS_CELSIUS = 47977, + UNITS_DEGREE_SECONDS_FAHRENHEIT = 47978, UNITS_OHM_METER_SQUARED_PER_METER = 237, UNITS_AMPERE_SECONDS = 238, UNITS_VOLT_AMPERE_HOURS = 239, @@ -1072,6 +1112,7 @@ typedef enum { /* 47813 - NOT USED */ UNITS_MILLIREMS = 47814, UNITS_MILLIREMS_PER_HOUR = 47815, + /* Enumerated values 47808-49999 are reserved for definition by ASHRAE. */ UNITS_RESERVED_RANGE_MAX2 = 49999, UNITS_PROPRIETARY_RANGE_MIN2 = 50000, /* Enumerated values 50000-65535 may be used by others @@ -1082,7 +1123,7 @@ typedef enum { UNITS_PROPRIETARY_RANGE_MAX2 = 65535 } BACNET_ENGINEERING_UNITS; -typedef enum { +typedef enum BACnetPolarity { POLARITY_NORMAL = 0, POLARITY_REVERSE = 1, MAX_POLARITY = 2 @@ -1123,7 +1164,7 @@ typedef enum BACnetProgramError { PROGRAM_ERROR_PROPRIETARY_MAX = 65535 } BACNET_PROGRAM_ERROR; -typedef enum { +typedef enum BACnetRestartReason { RESTART_REASON_UNKNOWN = 0, RESTART_REASON_COLDSTART = 1, RESTART_REASON_WARMSTART = 2, @@ -1132,6 +1173,9 @@ typedef enum { RESTART_REASON_HARDWARE_WATCHDOG = 5, RESTART_REASON_SOFTWARE_WATCHDOG = 6, RESTART_REASON_SUSPENDED = 7, + RESTART_REASON_ACTIVATE_CHANGES = 8, + RESTART_REASON_RESERVED_MIN = 9, + RESTART_REASON_RESERVED_MAX = 63, /* Enumerated values 0-63 are reserved for definition by ASHRAE. Enumerated values 64-255 may be used by others subject to the procedures and constraints described in Clause 23. */ @@ -1246,6 +1290,8 @@ typedef enum BACnetReliability { RELIABILITY_FAULTS_LISTED = 23, RELIABILITY_REFERENCED_OBJECT_FAULT = 24, RELIABILITY_MULTI_STATE_OUT_OF_RANGE = 25, + RELIABILITY_RESERVED_MIN = 26, + RELIABILITY_RESERVED_MAX = 63, /* Enumerated values 0-63 are reserved for definition by ASHRAE. */ /* Enumerated values 64-65535 may be used by others subject to */ /* the procedures and constraints described in Clause 23. */ @@ -1256,7 +1302,7 @@ typedef enum BACnetReliability { RELIABILITY_PROPRIETARY_MAX = 65535 } BACNET_RELIABILITY; -typedef enum { +typedef enum BACnetEventType { EVENT_CHANGE_OF_BITSTRING = 0, EVENT_CHANGE_OF_STATE = 1, EVENT_CHANGE_OF_VALUE = 2, @@ -1285,22 +1331,17 @@ typedef enum { /* It is expected that these enumerated values will correspond to */ /* the use of the complex-event-type CHOICE [6] of the */ /* BACnetNotificationParameters production. */ - /* The last enumeration used in this version is 22. */ - /* do the max range inside of enum so that - compilers will allocate adequate sized datatype for enum - which is used to store decoding */ EVENT_PROPRIETARY_MIN = 64, EVENT_PROPRIETARY_MAX = 65535 } BACNET_EVENT_TYPE; -typedef enum { +typedef enum BACnetFileAccessMethod { FILE_RECORD_ACCESS = 0, FILE_STREAM_ACCESS = 1, FILE_RECORD_AND_STREAM_ACCESS = 2 } BACNET_FILE_ACCESS_METHOD; -typedef enum { - MIN_LIFE_SAFETY_MODE = 0, +typedef enum BACnetLifeSafetyMode { LIFE_SAFETY_MODE_OFF = 0, LIFE_SAFETY_MODE_ON = 1, LIFE_SAFETY_MODE_TEST = 2, @@ -1316,7 +1357,13 @@ typedef enum { LIFE_SAFETY_MODE_DISABLED = 12, LIFE_SAFETY_MODE_AUTOMATIC_RELEASE_DISABLED = 13, LIFE_SAFETY_MODE_DEFAULT = 14, - MAX_LIFE_SAFETY_MODE = 15, + LIFE_SAFETY_MODE_ACTIVATED_OEO_ALARM = 15, + LIFE_SAFETY_MODE_ACTIVATED_OEO_EVACUATE = 16, + LIFE_SAFETY_MODE_ACTIVATED_OEO_PHASE1_RECALL = 17, + LIFE_SAFETY_MODE_ACTIVATED_OEO_UNAVAILABLE = 18, + LIFE_SAFETY_MODE_DEACTIVATED = 19, + LIFE_SAFETY_MODE_RESERVED_MIN = 20, + LIFE_SAFETY_MODE_RESERVED_MAX = 255, /* Enumerated values 0-255 are reserved for definition by ASHRAE. */ /* Enumerated values 256-65535 may be used by others subject to */ /* procedures and constraints described in Clause 23. */ @@ -1327,7 +1374,7 @@ typedef enum { LIFE_SAFETY_MODE_PROPRIETARY_MAX = 65535 } BACNET_LIFE_SAFETY_MODE; -typedef enum { +typedef enum BACnetLifeSafetyOperation { LIFE_SAFETY_OP_NONE = 0, LIFE_SAFETY_OP_SILENCE = 1, LIFE_SAFETY_OP_SILENCE_AUDIBLE = 2, @@ -1348,8 +1395,7 @@ typedef enum { LIFE_SAFETY_OP_PROPRIETARY_MAX = 65535 } BACNET_LIFE_SAFETY_OPERATION; -typedef enum { - MIN_LIFE_SAFETY_STATE = 0, +typedef enum BACnetLifeSafetyState { LIFE_SAFETY_STATE_QUIET = 0, LIFE_SAFETY_STATE_PRE_ALARM = 1, LIFE_SAFETY_STATE_ALARM = 2, @@ -1374,7 +1420,19 @@ typedef enum { LIFE_SAFETY_STATE_GENERAL_ALARM = 21, LIFE_SAFETY_STATE_SUPERVISORY = 22, LIFE_SAFETY_STATE_TEST_SUPERVISORY = 23, - MAX_LIFE_SAFETY_STATE = 24, + LIFE_SAFETY_STATE_NON_DEFAULT_MODE = 24, + LIFE_SAFETY_STATE_OEO_UNAVAILABLE = 25, + LIFE_SAFETY_STATE_OEO_ALARM = 26, + LIFE_SAFETY_STATE_OEO_PHASE1_RECALL = 27, + LIFE_SAFETY_STATE_OEO_EVACUATE = 28, + LIFE_SAFETY_STATE_OEO_UNAFFECTED = 29, + LIFE_SAFETY_STATE_TEST_OEO_UNAVAILABLE = 30, + LIFE_SAFETY_STATE_TEST_OEO_ALARM = 31, + LIFE_SAFETY_STATE_TEST_OEO_PHASE1_RECALL = 32, + LIFE_SAFETY_STATE_TEST_OEO_EVACUATE = 33, + LIFE_SAFETY_STATE_TEST_OEO_UNAFFECTED = 34, + LIFE_SAFETY_STATE_RESERVED_MIN = 35, + LIFE_SAFETY_STATE_RESERVED_MAX = 255, /* Enumerated values 0-255 are reserved for definition by ASHRAE. */ /* Enumerated values 256-65535 may be used by others subject to */ /* procedures and constraints described in Clause 23. */ @@ -1385,7 +1443,7 @@ typedef enum { LIFE_SAFETY_STATE_PROPRIETARY_MAX = 65535 } BACNET_LIFE_SAFETY_STATE; -typedef enum { +typedef enum BACnetSilencedState { SILENCED_STATE_UNSILENCED = 0, SILENCED_STATE_AUDIBLE_SILENCED = 1, SILENCED_STATE_VISIBLE_SILENCED = 2, @@ -1400,7 +1458,7 @@ typedef enum { SILENCED_STATE_PROPRIETARY_MAX = 65535 } BACNET_SILENCED_STATE; -typedef enum { +typedef enum BACnetMaintenance { MAINTENANCE_NONE = 0, MAINTENANCE_PERIODIC_TEST = 1, MAINTENANCE_NEED_SERVICE_OPERATIONAL = 2, @@ -1415,7 +1473,7 @@ typedef enum { MAINTENANCE_PROPRIETARY_MAX = 65535 } BACNET_MAINTENANCE; -typedef enum { +typedef enum BACnetNotifyType { NOTIFY_ALARM = 0, NOTIFY_EVENT = 1, NOTIFY_ACK_NOTIFICATION = 2, @@ -1489,7 +1547,7 @@ typedef enum BACnetObjectType { OBJECT_AUDIT_REPORTER = 62, /* Addendum 135-2016bi */ OBJECT_COLOR = 63, /* Addendum 135-2020ca */ OBJECT_COLOR_TEMPERATURE = 64, /* Addendum 135-2020ca */ - BACNET_OBJECT_TYPE_LAST = OBJECT_COLOR_TEMPERATURE, + BACNET_OBJECT_TYPE_RESERVED_MIN = 65, BACNET_OBJECT_TYPE_RESERVED_MAX = 127, /* Enumerated values 0-127 are reserved for definition by ASHRAE. */ /* Enumerated values 128-1023 may be used by others subject to */ @@ -1504,7 +1562,7 @@ typedef enum BACnetObjectType { OBJECT_NONE = 65535 } BACNET_OBJECT_TYPE; -typedef enum { +typedef enum BACnetSegmentation { SEGMENTATION_BOTH = 0, SEGMENTATION_TRANSMIT = 1, SEGMENTATION_RECEIVE = 2, @@ -1771,6 +1829,7 @@ typedef enum BACnet_Services_Supported { /* Security Services */ SERVICE_SUPPORTED_AUTHENTICATE = 24, SERVICE_SUPPORTED_REQUEST_KEY = 25, + SERVICE_SUPPORTED_AUTH_REQUEST = 49, /* Unconfirmed Services */ SERVICE_SUPPORTED_I_AM = 26, SERVICE_SUPPORTED_I_HAVE = 27, @@ -1787,23 +1846,25 @@ typedef enum BACnet_Services_Supported { /* Other services to be added as they are defined. */ /* All values in this production are reserved */ /* for definition by ASHRAE. */ + /* note: MAX_BACNET_SERVICES_SUPPORTED is defined in bacdef.h + based on protocol revision */ } BACNET_SERVICES_SUPPORTED; /* Bit String Enumerations */ -typedef enum { +typedef enum BACnetStatusFlags { STATUS_FLAG_IN_ALARM = 0, STATUS_FLAG_FAULT = 1, STATUS_FLAG_OVERRIDDEN = 2, STATUS_FLAG_OUT_OF_SERVICE = 3 } BACNET_STATUS_FLAGS; -typedef enum { +typedef enum BACnetLogStatus { LOG_STATUS_LOG_DISABLED = 0, LOG_STATUS_BUFFER_PURGED = 1, LOG_STATUS_LOG_INTERRUPTED = 2 } BACNET_LOG_STATUS; -typedef enum { +typedef enum BACnetLoggingType { LOGGING_TYPE_POLLED = 0, LOGGING_TYPE_COV = 1, LOGGING_TYPE_TRIGGERED = 2 @@ -1915,7 +1976,9 @@ typedef enum { /* Enumerated values 0-63 are reserved for definition by ASHRAE. */ /* Enumerated values 64-255 may be used by others subject to */ /* the procedures and constraints described in Clause 23. */ - MAX_BACNET_ABORT_REASON = 12, + ABORT_REASON_RESERVED_MIN = 12, + /* for legacy applications */ + MAX_BACNET_ABORT_REASON = ABORT_REASON_RESERVED_MIN, ABORT_REASON_PROPRIETARY_FIRST = 64, ABORT_REASON_PROPRIETARY_LAST = 255 } BACNET_ABORT_REASON; @@ -2276,6 +2339,7 @@ typedef enum BACnetRelationship { BACNET_RELATIONSHIP_RECEIVES_COOL_WATER = 27, BACNET_RELATIONSHIP_SUPPLIES_STEAM = 28, BACNET_RELATIONSHIP_RECEIVES_STEAM = 29, + BACNET_RELATIONSHIP_RESERVED_MIN = 30, BACNET_RELATIONSHIP_RESERVED_MAX = 1023, BACNET_RELATIONSHIP_PROPRIETARY_MIN = 1024, BACNET_RELATIONSHIP_PROPRIETARY_MAX = 65535 @@ -2309,12 +2373,22 @@ typedef enum BACnetLightingOperation { BACNET_LIGHTS_WARN_OFF = 8, BACNET_LIGHTS_WARN_RELINQUISH = 9, BACNET_LIGHTS_STOP = 10, - MAX_BACNET_LIGHTING_OPERATION = 11, +#if (BACNET_PROTOCOL_REVISION >= 28) + /* Addendum cj to ANSI/ASHRAE Standard 135-2020 */ + BACNET_LIGHTS_RESTORE_ON = 11, + BACNET_LIGHTS_DEFAULT_ON = 12, + BACNET_LIGHTS_TOGGLE_RESTORE = 13, + BACNET_LIGHTS_TOGGLE_DEFAULT = 14, + BACNET_LIGHTS_RESERVED_MIN = 15, +#else + BACNET_LIGHTS_RESERVED_MIN = 11, +#endif + BACNET_LIGHTS_RESERVED_MAX = 63, /* Enumerated values 0-255 are reserved for definition by ASHRAE. Enumerated values 256-65535 may be used by others subject to the procedures and constraints described in Clause 23 */ - BACNET_LIGHTS_PROPRIETARY_FIRST = 256, - BACNET_LIGHTS_PROPRIETARY_LAST = 65535 + BACNET_LIGHTS_PROPRIETARY_MIN = 256, + BACNET_LIGHTS_PROPRIETARY_MAX = 65535 } BACNET_LIGHTING_OPERATION; typedef enum BACnetLightingInProgress { @@ -2334,8 +2408,10 @@ typedef enum BACnetLightingTransition { /* Enumerated values 0-63 are reserved for definition by ASHRAE. Enumerated values 64-255 may be used by others subject to the procedures and constraints described in Clause 23. */ - BACNET_LIGHTING_TRANSITION_PROPRIETARY_FIRST = 64, - BACNET_LIGHTING_TRANSITION_PROPRIETARY_LAST = 255 + BACNET_LIGHTING_TRANSITION_RESERVED_MIN = 3, + BACNET_LIGHTING_TRANSITION_RESERVED_MAX = 63, + BACNET_LIGHTING_TRANSITION_PROPRIETARY_MIN = 64, + BACNET_LIGHTING_TRANSITION_PROPRIETARY_MAX = 255 } BACNET_LIGHTING_TRANSITION; typedef enum BACnetBinaryLightingPV { @@ -2345,7 +2421,8 @@ typedef enum BACnetBinaryLightingPV { BINARY_LIGHTING_PV_WARN_OFF = 3, BINARY_LIGHTING_PV_WARN_RELINQUISH = 4, BINARY_LIGHTING_PV_STOP = 5, - BINARY_LIGHTING_PV_MAX = 6, + BINARY_LIGHTING_PV_TOGGLE = 6, + BINARY_LIGHTING_PV_MAX = 7, /* -- Enumerated values 0-63 are reserved for definition by ASHRAE. -- Enumerated values 64-255 may be used by others -- subject to the procedures and constraints described in Clause 23. */ @@ -2409,7 +2486,7 @@ typedef enum BACnetEventTransitionMask { /* Access Enumerations */ /* Door Alarm State */ -typedef enum { +typedef enum BACnetDoorAlarmState { DOOR_ALARM_STATE_NORMAL = 0, DOOR_ALARM_STATE_ALARM = 1, DOOR_ALARM_STATE_DOOR_OPEN_TOO_LONG = 2, @@ -2419,17 +2496,20 @@ typedef enum { DOOR_ALARM_STATE_LOCK_DOWN = 6, DOOR_ALARM_STATE_FREE_ACCESS = 7, DOOR_ALARM_STATE_EGRESS_OPEN = 8 + /* Enumerated values 0-255 are reserved for definition by ASHRAE. + Enumerated values 256-65535 may be used by others subject to + the procedures and constraints described in Clause 23. */ } BACNET_DOOR_ALARM_STATE; /* Door Secured Status */ -typedef enum { +typedef enum BACnetDoorSecuredStatus { DOOR_SECURED_STATUS_SECURED = 0, DOOR_SECURED_STATUS_UNSECURED = 1, DOOR_SECURED_STATUS_UNKNOWN = 2 } BACNET_DOOR_SECURED_STATUS; /* Door Status */ -typedef enum { +typedef enum BACnetDoorStatus { DOOR_STATUS_CLOSED = 0, DOOR_STATUS_OPENED = 1, DOOR_STATUS_UNKNOWN = 2, @@ -2440,10 +2520,13 @@ typedef enum { DOOR_STATUS_OPENING = 7, DOOR_STATUS_SAFETY_LOCKED = 8, DOOR_STATUS_LIMITED_OPENED = 9 + /* Enumerated values 0-1023 are reserved for definition by ASHRAE. + Enumerated values 1024-65535 may be used by others subject to + the procedures and constraints described in Clause 23. */ } BACNET_DOOR_STATUS; /* Door Value */ -typedef enum { +typedef enum BACnetDoorValue { DOOR_VALUE_LOCK = 0, DOOR_VALUE_UNLOCK = 1, DOOR_VALUE_PULSE_UNLOCK = 2, @@ -2451,7 +2534,7 @@ typedef enum { } BACNET_DOOR_VALUE; /* Lock Status */ -typedef enum { +typedef enum BACnetLockStatus { LOCK_STATUS_LOCKED = 0, LOCK_STATUS_UNLOCKED = 1, LOCK_STATUS_LOCK_FAULT = 2, @@ -2460,7 +2543,7 @@ typedef enum { } BACNET_LOCK_STATUS; /* Access Event */ -typedef enum { +typedef enum BACnetAccessEvent { ACCESS_EVENT_NONE = 0, ACCESS_EVENT_GRANTED = 1, ACCESS_EVENT_MUSTER = 2, @@ -2515,10 +2598,13 @@ typedef enum { ACCESS_EVENT_DENIED_VERIFICATION_FAILED = 162, ACCESS_EVENT_DENIED_VERIFICATION_TIMEOUT = 163, ACCESS_EVENT_DENIED_OTHER = 164 + /* Enumerated values 0-511 are reserved for definition by ASHRAE. + Enumerated values 512-65535 may be used by others subject to + the procedures and constraints described in Clause 23. */ } BACNET_ACCESS_EVENT; /* Authentication Status */ -typedef enum { +typedef enum BACnetAuthenticationStatus { AUTHENTICATION_STATUS_NOT_READY = 0, AUTHENTICATION_STATUS_READY = 1, AUTHENTICATION_STATUS_DISABLED = 2, @@ -2529,17 +2615,20 @@ typedef enum { } BACNET_AUTHENTICATION_STATUS; /* Authorization Mode */ -typedef enum { +typedef enum BACnetAuthorizationMode { AUTHORIZATION_MODE_AUTHORIZE = 0, AUTHORIZATION_MODE_GRANT_ACTIVE = 1, AUTHORIZATION_MODE_DENY_ALL = 2, AUTHORIZATION_MODE_VERIFICATION_REQUIRED = 3, AUTHORIZATION_MODE_AUTHORIZATION_DELAYED = 4, AUTHORIZATION_MODE_NONE = 5 + /* Enumerated values 0-63 are reserved for definition by ASHRAE. + Enumerated values 64-65535 may be used by others subject to + the procedures and constraints described in Clause 23. */ } BACNET_AUTHORIZATION_MODE; /* Access Passback Mode */ -typedef enum { +typedef enum BACnetAccessPassbackMode { ACCESS_PASSBACK_MODE_PASSBACK_OFF = 0, ACCESS_PASSBACK_MODE_HARD_PASSBACK = 1, ACCESS_PASSBACK_MODE_SOFT_PASSBACK = 2 @@ -2562,14 +2651,18 @@ typedef enum BACnetAccessZoneOccupancyState { } BACNET_ACCESS_ZONE_OCCUPANCY_STATE; /* Access User Type */ -typedef enum { +typedef enum BACnetAccessUserType { ACCESS_USER_TYPE_ASSET = 0, ACCESS_USER_TYPE_GROUP = 1, ACCESS_USER_TYPE_PERSON = 2 + /* Enumerated values 0-63 are reserved for definition by ASHRAE. + Enumerated values 64-65535 may be used by others subject to + the procedures and constraints described +-- in Clause 23. */ } BACNET_ACCESS_USER_TYPE; /* Access Authentication Factor Disable */ -typedef enum { +typedef enum BACnetAccessAuthenticationFactorDisable { ACCESS_AUTHENTICATION_FACTOR_DISABLE_NONE = 0, ACCESS_AUTHENTICATION_FACTOR_DISABLE_DISABLED = 1, ACCESS_AUTHENTICATION_FACTOR_DISABLE_DISABLED_LOST = 2, @@ -2577,10 +2670,13 @@ typedef enum { ACCESS_AUTHENTICATION_FACTOR_DISABLE_DISABLED_DAMAGED = 4, ACCESS_AUTHENTICATION_FACTOR_DISABLE_DISABLED_DESTROYED = 5, ACCESS_AUTHENTICATION_FACTOR_DISABLE_MAX = 6 + /* Enumerated values 0-63 are reserved for definition by ASHRAE. + Enumerated values 64-65535 may be used by others subject to + the procedures and constraints described in Clause 23. */ } BACNET_ACCESS_AUTHENTICATION_FACTOR_DISABLE; /* Authorization Exemption */ -typedef enum { +typedef enum BACnetAuthorizationExemption { AUTHORIZATION_EXEMPTION_PASSBACK = 0, AUTHORIZATION_EXEMPTION_OCCUPANCY_CHECK = 1, AUTHORIZATION_EXEMPTION_ACCESS_RIGHTS = 2, @@ -2588,6 +2684,9 @@ typedef enum { AUTHORIZATION_EXEMPTION_DENY = 4, AUTHORIZATION_EXEMPTION_VERIFICATION = 5, AUTHORIZATION_EXEMPTION_AUTHORIZATION_DELAY = 6 + /* Enumerated values 0-63 are reserved for definition by ASHRAE. + Enumerated values 64-255 may be used by others subject to + the procedures and constraints described in Clause 23. */ } BACNET_AUTHORIZATION_EXEMPTION; /* The Network Reject Reasons for NETWORK_MESSAGE_REJECT_MESSAGE_TO_NETWORK */ @@ -2610,8 +2709,7 @@ typedef enum BACnetWriteStatus { BACNET_WRITE_STATUS_FAILED = 3 } BACNET_WRITE_STATUS; -/* BACnetNetworkType ::= ENUMERATED */ -typedef enum { +typedef enum BACnetNetworkType { PORT_TYPE_ETHERNET = 0, PORT_TYPE_ARCNET = 1, PORT_TYPE_MSTP = 2, @@ -2632,29 +2730,27 @@ typedef enum { /* Enumerated values 0-63 are reserved for definition by ASHRAE. Enumerated values 64-255 may be used by others subject to the procedures and constraints described in Clause 23. */ - PORT_TYPE_RESERVED_FIRST = 12, - PORT_TYPE_RESERVED_LAST = 63, - PORT_TYPE_PROPRIETARY_FIRST = 64, + PORT_TYPE_RESERVED_MIN = 12, + PORT_TYPE_RESERVED_MAX = 63, + PORT_TYPE_PROPRIETARY_MIN = 64, /* For BACnet/SC network port implementations with a protocol revision Protocol_Revision 17 and higher through 23, BACnet/SC network ports shall be represented by a Network Port object at the BACNET_APPLICATION protocol level with a proprietary network type value. */ PORT_TYPE_BSC_INTERIM = 64, - PORT_TYPE_PROPRIETARY_LAST = 255, + PORT_TYPE_PROPRIETARY_MAX = 255, PORT_TYPE_MAX = 255 } BACNET_PORT_TYPE; -/* BACnetNetworkNumberQuality ::= ENUMERATED */ -typedef enum { +typedef enum BACnetNetworkNumberQuality { PORT_QUALITY_UNKNOWN = 0, PORT_QUALITY_LEARNED = 1, PORT_QUALITY_LEARNED_CONFIGURED = 2, PORT_QUALITY_CONFIGURED = 3 } BACNET_PORT_QUALITY; -/* BACnetNetworkPortCommand :: = ENUMERATED */ -typedef enum { +typedef enum BACnetNetworkPortCommand { PORT_COMMAND_IDLE = 0, PORT_COMMAND_DISCARD_CHANGES = 1, PORT_COMMAND_RENEW_FD_REGISTRATION = 2, @@ -2663,15 +2759,16 @@ typedef enum { PORT_COMMAND_RESTART_AUTONEGOTIATION = 5, PORT_COMMAND_DISCONNECT = 6, PORT_COMMAND_RESTART_PORT = 7, - PORT_COMMAND_GENERATE_CSR_FILE = 8, - PORT_COMMAND_VALIDATE_CHANGES = 9, - PORT_COMMAND_RESERVED_FIRST = 10, - PORT_COMMAND_RESERVED_LAST = 127, + PORT_COMMAND_RESTART_DISCOVERY = 8, + PORT_COMMAND_GENERATE_CSR_FILE = 9, + PORT_COMMAND_VALIDATE_CHANGES = 10, + PORT_COMMAND_RESERVED_MIN = 11, + PORT_COMMAND_RESERVED_MAX = 127, /* Enumerated values 0-127 are reserved for definition by ASHRAE. Enumerated values 128-255 may be used by others subject to the procedures and constraints described in Clause 23. */ - PORT_COMMAND_PROPRIETARY_FIRST = 128, - PORT_COMMAND_PROPRIETARY_LAST = 255, + PORT_COMMAND_PROPRIETARY_MIN = 128, + PORT_COMMAND_PROPRIETARY_MAX = 255, PORT_COMMAND_MAX = 255 } BACNET_PORT_COMMAND; @@ -2740,7 +2837,7 @@ typedef enum { SEC_RESP_UNKNOWN_SOURCE_MESSAGE = 25 } BACNET_SECURITY_RESPONSE_CODE; -typedef enum { +typedef enum BACnetAccessCredentialDisable { ACCESS_CREDENTIAL_DISABLE_NONE = 0, ACCESS_CREDENTIAL_DISABLE = 1, ACCESS_CREDENTIAL_DISABLE_MANUAL = 2, @@ -2751,7 +2848,7 @@ typedef enum { the procedures and constraints described in Clause 23. */ } BACNET_ACCESS_CREDENTIAL_DISABLE; -typedef enum { +typedef enum BACnetAccessCredentialDisableReason { CREDENTIAL_DISABLED = 0, CREDENTIAL_DISABLED_NEEDS_PROVISIONING = 1, CREDENTIAL_DISABLED_UNASSIGNED = 2, @@ -2781,7 +2878,7 @@ typedef enum { the procedures and constraints described in Clause 23. */ } BACNET_AUTHENTICATION_DISABLE_REASON; -typedef enum { +typedef enum BACnetAuthenticationFactorType { AUTHENTICATION_FACTOR_UNDEFINED = 0, AUTHENTICATION_FACTOR_ERROR = 1, AUTHENTICATION_FACTOR_CUSTOM = 2, @@ -3045,4 +3142,61 @@ typedef enum BACnetSCConnectionState { BACNET_SC_CONNECTION_STATE_MAX = 4 } BACNET_SC_CONNECTION_STATE; +typedef enum BACnetAuthenticationDecision { + BACNET_AUTHENTICATION_DECISION_ALLOW_MATCH = 0, + BACNET_AUTHENTICATION_DECISION_DENY_MISMATCH = 1, + BACNET_AUTHENTICATION_DECISION_DENY_NON_RELAY = 2 +} BACNET_AUTHENTICATION_DECISION; + +typedef enum BACnetAuthorizationPosture { + BACNET_AUTHORIZATION_POSTURE_OPEN = 0, + BACNET_AUTHORIZATION_POSTURE_PROPRIETARY = 1, + BACNET_AUTHORIZATION_POSTURE_CONFIGURED = 2, + BACNET_AUTHORIZATION_POSTURE_MISCONFIGURED_PARTIAL = 3, + BACNET_AUTHORIZATION_POSTURE_MISCONFIGURED_TOTAL = 4 +} BACNET_AUTHORIZATION_POSTURE; + +typedef enum BACnetFaultType { + BACNET_FAULT_TYPE_NONE = 0, + BACNET_FAULT_TYPE_CHARACTERSTRING = 1, + BACNET_FAULT_TYPE_EXTENDED = 2, + BACNET_FAULT_TYPE_LIFE_SAFETY = 3, + BACNET_FAULT_TYPE_STATE = 4, + BACNET_FAULT_TYPE_STATUS_FLAGS = 5, + BACNET_FAULT_TYPE_OUT_OF_RANGE = 6, + BACNET_FAULT_TYPE_LISTED = 7 +} BACNET_FAULT_TYPE; + +typedef enum BACnetPriorityFilter { + BACNET_PRIORITY_FILTER_MANUAL_LIFE_SAFETY = 0, + BACNET_PRIORITY_FILTER_AUTOMATIC_LIFE_SAFETY = 1, + BACNET_PRIORITY_FILTER_PRIORITY_3 = 2, + BACNET_PRIORITY_FILTER_PRIORITY_4 = 3, + BACNET_PRIORITY_FILTER_CRITICAL_EQUIPMENT_CONTROLS = 4, + BACNET_PRIORITY_FILTER_MINIMUM_ON_OFF = 5, + BACNET_PRIORITY_FILTER_PRIORITY_7 = 6, + BACNET_PRIORITY_FILTER_MANUAL_OPERATOR = 7, + BACNET_PRIORITY_FILTER_PRIORITY_9 = 8, + BACNET_PRIORITY_FILTER_PRIORITY_10 = 9, + BACNET_PRIORITY_FILTER_PRIORITY_11 = 10, + BACNET_PRIORITY_FILTER_PRIORITY_12 = 11, + BACNET_PRIORITY_FILTER_PRIORITY_13 = 12, + BACNET_PRIORITY_FILTER_PRIORITY_14 = 13, + BACNET_PRIORITY_FILTER_PRIORITY_15 = 14, + BACNET_PRIORITY_FILTER_PRIORITY_16 = 15, + BACNET_PRIORITY_FILTER_PRIORITY_MAX = 16 +} BACNET_PRIORITY_FILTER; + +typedef enum BACnetResultFlags { + RESULT_FLAG_FIRST_ITEM = 0, + RESULT_FLAG_LAST_ITEM = 1, + RESULT_FLAG_MORE_ITEMS = 2 +} BACNET_RESULT_FLAGS; + +typedef enum BACnetSuccessFilter { + BACNET_SUCCESS_FILTER_ALL = 0, + BACNET_SUCCESS_FILTER_SUCCESS_ONLY = 1, + BACNET_SUCCESS_FILTER_FAILURES_ONLY = 2 +} BACNET_SUCCESS_FILTER; + #endif /* end of BACENUM_H */ diff --git a/src/bacnet/bactext.c b/src/bacnet/bactext.c index 5a450232..b382575f 100644 --- a/src/bacnet/bactext.c +++ b/src/bacnet/bactext.c @@ -147,6 +147,8 @@ INDTEXT_DATA bacnet_application_tag_names[] = { { BACNET_APPLICATION_TAG_ACTION_COMMAND, "BACnetActionCommand" }, { BACNET_APPLICATION_TAG_SCALE, "BACnetScale" }, { BACNET_APPLICATION_TAG_SHED_LEVEL, "BACnetShedLevel" }, + { BACNET_APPLICATION_TAG_ACCESS_RULE, "BACnetAccessRule" }, + { BACNET_APPLICATION_TAG_CHANNEL_VALUE, "BACnetChannelValue" }, { 0, NULL } }; @@ -789,6 +791,18 @@ INDTEXT_DATA bacnet_property_names[] = { { PROP_HIGH_END_TRIM, "high-end-trim" }, { PROP_LOW_END_TRIM, "low-end-trim" }, { PROP_TRIM_FADE_TIME, "trim-fade-time" }, + { PROP_DEVICE_ADDRESS_PROXY_ENABLE, "device-address-proxy-enable" }, + { PROP_DEVICE_ADDRESS_PROXY_TABLE, "device-address-proxy-table" }, + { PROP_DEVICE_ADDRESS_PROXY_TIMEOUT, "device-address-proxy-timeout" }, + { PROP_DEFAULT_ON_VALUE, "default-on-value" }, + { PROP_LAST_ON_VALUE, "last-on-value" }, + { PROP_AUTHORIZATION_CACHE, "authorization-cache" }, + { PROP_AUTHORIZATION_GROUPS, "authorization-groups" }, + { PROP_AUTHORIZATION_POLICY, "authorization-policy" }, + { PROP_AUTHORIZATION_SCOPE, "authorization-scope" }, + { PROP_AUTHORIZATION_SERVER, "authorization-server" }, + { PROP_AUTHORIZATION_STATUS, "authorization-status" }, + { PROP_MAX_PROXIED_I_AMS_PER_SECOND, "max-proxied-i-ams-per-second" }, { 0, NULL } }; @@ -1269,6 +1283,21 @@ INDTEXT_DATA bacnet_engineering_unit_names[] = { { UNITS_SITE_UNIT8, "site-unit8" }, { UNITS_SITE_UNIT9, "site-unit9" }, { UNITS_SITE_UNIT10, "site-unit10" }, + { UNITS_GRAINS_OF_WATER_PER_POUND_DRY_AIR, + "grains-of-water-per-pound-dry-air" }, + { UNITS_DEGREE_HOURS_CELSIUS, "degree-hours-celsius" }, + { UNITS_DEGREE_HOURS_FAHRENHEIT, "degree-hours-fahrenheit" }, + { UNITS_DEGREE_MINUTES_CELSIUS, "degree-minutes-celsius" }, + { UNITS_DEGREE_MINUTES_FAHRENHEIT, "degree-minutes-fahrenheit" }, + { UNITS_DEGREE_SECONDS_CELSIUS, "degree-seconds-celsius" }, + { UNITS_DEGREE_SECONDS_FAHRENHEIT, "degree-seconds-fahrenheit" }, + { UNITS_MICROSECONDS, "microseconds" }, + { UNITS_NANOSECONDS, "nanoseconds" }, + { UNITS_PICOSECONDS, "picoseconds" }, + { UNITS_PARTICLES_PER_CUBIC_FOOT, "particles-per-cubic-foot" }, + { UNITS_PARTICLES_PER_CUBIC_METER, "particles-per-cubic-meter" }, + { UNITS_PICOCURIES_PER_LITER, "picocuries-per-liter" }, + { UNITS_BECQUERELS_PER_CUBIC_METER, "becquerels-per-cubic-meter" }, { 0, NULL } /* Enumerated values 0-255 and 47808-49999 are reserved for definition by ASHRAE. Enumerated values 256-47807 and 50000-65535 may be used by others @@ -1741,8 +1770,9 @@ INDTEXT_DATA bacnet_event_state_names[] = { { EVENT_STATE_NORMAL, "normal" }, { EVENT_STATE_FAULT, "fault" }, { EVENT_STATE_OFFNORMAL, "offnormal" }, - { EVENT_STATE_HIGH_LIMIT, "high limit" }, - { EVENT_STATE_LOW_LIMIT, "low limit" }, + { EVENT_STATE_HIGH_LIMIT, "high-limit" }, + { EVENT_STATE_LOW_LIMIT, "low-limit" }, + { EVENT_STATE_LIFE_SAFETY_ALARM, "life-safety-alarm" }, { 0, NULL } }; @@ -1952,6 +1982,70 @@ const char *bactext_network_layer_msg_name(unsigned index) } } +INDTEXT_DATA bactext_life_safety_mode_names[] = { + { LIFE_SAFETY_MODE_OFF, "off" }, + { LIFE_SAFETY_MODE_ON, "on" }, + { LIFE_SAFETY_MODE_TEST, "test" }, + { LIFE_SAFETY_MODE_MANNED, "manned" }, + { LIFE_SAFETY_MODE_UNMANNED, "unmanned" }, + { LIFE_SAFETY_MODE_ARMED, "armed" }, + { LIFE_SAFETY_MODE_DISARMED, "disarmed" }, + { LIFE_SAFETY_MODE_PREARMED, "prearmed" }, + { LIFE_SAFETY_MODE_SLOW, "slow" }, + { LIFE_SAFETY_MODE_FAST, "fast" }, + { LIFE_SAFETY_MODE_DISCONNECTED, "disconnected" }, + { LIFE_SAFETY_MODE_ENABLED, "enabled" }, + { LIFE_SAFETY_MODE_DISABLED, "disabled" }, + { LIFE_SAFETY_MODE_AUTOMATIC_RELEASE_DISABLED, + "automatic-release-disabled" }, + { LIFE_SAFETY_MODE_DEFAULT, "default" }, + { LIFE_SAFETY_MODE_ACTIVATED_OEO_ALARM, "activated-oeo-alarm" }, + { LIFE_SAFETY_MODE_ACTIVATED_OEO_EVACUATE, "activated-oeo-evactuate" }, + { LIFE_SAFETY_MODE_ACTIVATED_OEO_PHASE1_RECALL, + "activated-oeo-phase1-recall" }, + { LIFE_SAFETY_MODE_ACTIVATED_OEO_UNAVAILABLE, "activated-oeo-unavailable" }, + { LIFE_SAFETY_MODE_DEACTIVATED, "deactivated" }, + { 0, NULL } +}; + +const char *bactext_life_safety_mode_name(unsigned index) +{ + if (index < LIFE_SAFETY_MODE_PROPRIETARY_MIN) { + return indtext_by_index_default( + bactext_life_safety_mode_names, index, ASHRAE_Reserved_String); + } else if (index <= LIFE_SAFETY_MODE_PROPRIETARY_MAX) { + return Vendor_Proprietary_String; + } else { + return "Invalid BACnetLifeSafetyMode"; + } +} + +INDTEXT_DATA bactext_life_safety_operation_names[] = { + { LIFE_SAFETY_OP_NONE, "none" }, + { LIFE_SAFETY_OP_SILENCE, "silence" }, + { LIFE_SAFETY_OP_SILENCE_AUDIBLE, "silence-audible" }, + { LIFE_SAFETY_OP_SILENCE_VISUAL, "silence-visual" }, + { LIFE_SAFETY_OP_RESET, "reset" }, + { LIFE_SAFETY_OP_RESET_ALARM, "reset-alarm" }, + { LIFE_SAFETY_OP_RESET_FAULT, "reset-fault" }, + { LIFE_SAFETY_OP_UNSILENCE, "unsilence" }, + { LIFE_SAFETY_OP_UNSILENCE_AUDIBLE, "unsilence-audible" }, + { LIFE_SAFETY_OP_UNSILENCE_VISUAL, "unsilence-visual" }, + { 0, NULL } +}; + +const char *bactext_life_safety_operation_name(unsigned index) +{ + if (index < LIFE_SAFETY_OP_PROPRIETARY_MIN) { + return indtext_by_index_default( + bactext_life_safety_operation_names, index, ASHRAE_Reserved_String); + } else if (index <= LIFE_SAFETY_OP_PROPRIETARY_MAX) { + return Vendor_Proprietary_String; + } else { + return "Invalid BACnetLifeSafetyOperation"; + } +} + INDTEXT_DATA life_safety_state_names[] = { { LIFE_SAFETY_STATE_QUIET, "quiet" }, { LIFE_SAFETY_STATE_PRE_ALARM, "pre-alarm" }, @@ -1977,14 +2071,27 @@ INDTEXT_DATA life_safety_state_names[] = { { LIFE_SAFETY_STATE_GENERAL_ALARM, "general-alarm" }, { LIFE_SAFETY_STATE_SUPERVISORY, "supervisory" }, { LIFE_SAFETY_STATE_TEST_SUPERVISORY, "test-supervisory" }, + { LIFE_SAFETY_STATE_NON_DEFAULT_MODE, "non-default-mode" }, + { LIFE_SAFETY_STATE_OEO_UNAVAILABLE, "oeo-unavailable" }, + { LIFE_SAFETY_STATE_OEO_ALARM, "oeo-alarm" }, + { LIFE_SAFETY_STATE_OEO_PHASE1_RECALL, "oeo-phase1-recall" }, + { LIFE_SAFETY_STATE_OEO_EVACUATE, "oeo-evacuate" }, + { LIFE_SAFETY_STATE_OEO_UNAFFECTED, "oeo-unaffected" }, + { LIFE_SAFETY_STATE_TEST_OEO_UNAVAILABLE, "test-oeo-unavailable" }, + { LIFE_SAFETY_STATE_TEST_OEO_ALARM, "test-oeo-alarm" }, + { LIFE_SAFETY_STATE_TEST_OEO_PHASE1_RECALL, "test-oeo-phase1-recall" }, + { LIFE_SAFETY_STATE_TEST_OEO_EVACUATE, "test-oeo-evacuate" }, + { LIFE_SAFETY_STATE_TEST_OEO_UNAFFECTED, "test-oeo-unaffected" }, { 0, NULL } }; const char *bactext_life_safety_state_name(unsigned index) { - if (index < MAX_LIFE_SAFETY_STATE) { + if (index < LIFE_SAFETY_STATE_PROPRIETARY_MIN) { return indtext_by_index_default( life_safety_state_names, index, ASHRAE_Reserved_String); + } else if (index <= LIFE_SAFETY_STATE_PROPRIETARY_MAX) { + return Vendor_Proprietary_String; } else { return "Invalid BACnetLifeSafetyState"; } @@ -2019,10 +2126,10 @@ INDTEXT_DATA lighting_transition[] = { const char *bactext_lighting_transition(unsigned index) { - if (index < BACNET_LIGHTING_TRANSITION_PROPRIETARY_FIRST) { + if (index < BACNET_LIGHTING_TRANSITION_PROPRIETARY_MIN) { return indtext_by_index_default( lighting_transition, index, ASHRAE_Reserved_String); - } else if (index <= BACNET_LIGHTING_TRANSITION_PROPRIETARY_LAST) { + } else if (index <= BACNET_LIGHTING_TRANSITION_PROPRIETARY_MAX) { return Vendor_Proprietary_String; } else { return "Invalid BACnetLightingTransition"; @@ -2046,10 +2153,10 @@ INDTEXT_DATA bacnet_lighting_operation_names[] = { const char *bactext_lighting_operation_name(unsigned index) { - if (index < BACNET_LIGHTS_PROPRIETARY_FIRST) { + if (index < BACNET_LIGHTS_PROPRIETARY_MIN) { return indtext_by_index_default( bacnet_lighting_operation_names, index, ASHRAE_Reserved_String); - } else if (index <= BACNET_LIGHTS_PROPRIETARY_LAST) { + } else if (index <= BACNET_LIGHTS_PROPRIETARY_MAX) { return Vendor_Proprietary_String; } else { return "Invalid BACnetLightingOperation"; @@ -2070,6 +2177,7 @@ INDTEXT_DATA bacnet_binary_lighting_pv_names[] = { { BINARY_LIGHTING_PV_WARN_OFF, "warn-off" }, { BINARY_LIGHTING_PV_WARN_RELINQUISH, "warn-relinquish" }, { BINARY_LIGHTING_PV_STOP, "stop" }, + { BINARY_LIGHTING_PV_TOGGLE, "toggle" }, { 0, NULL } }; @@ -2149,7 +2257,6 @@ const char *bactext_shed_level_type_name(unsigned index) bacnet_shed_level_type_names, index, ASHRAE_Reserved_String); } -/* note: different than DaysOfWeek bit string where 0=monday */ INDTEXT_DATA bacnet_log_datum_names[] = { { BACNET_LOG_DATUM_STATUS, "status" }, { BACNET_LOG_DATUM_BOOLEAN, "boolean" }, @@ -2170,3 +2277,198 @@ const char *bactext_log_datum_name(unsigned index) return indtext_by_index_default( bacnet_log_datum_names, index, ASHRAE_Reserved_String); } + +INDTEXT_DATA bactext_restart_reason_names[] = { + { RESTART_REASON_UNKNOWN, "unknown" }, + { RESTART_REASON_COLDSTART, "coldstart" }, + { RESTART_REASON_WARMSTART, "warmstart" }, + { RESTART_REASON_DETECTED_POWER_LOST, "detected-power-lost" }, + { RESTART_REASON_DETECTED_POWER_OFF, "detected-power-off" }, + { RESTART_REASON_HARDWARE_WATCHDOG, "hardware-watchdog" }, + { RESTART_REASON_SOFTWARE_WATCHDOG, "software-watchdog" }, + { RESTART_REASON_SUSPENDED, "suspended" }, + { RESTART_REASON_ACTIVATE_CHANGES, "activate-changes" }, + { 0, NULL } +}; + +const char *bactext_restart_reason_name(unsigned index) +{ + if (index < RESTART_REASON_PROPRIETARY_MIN) { + return indtext_by_index_default( + bactext_restart_reason_names, index, ASHRAE_Reserved_String); + } else if (index <= RESTART_REASON_PROPRIETARY_MAX) { + return Vendor_Proprietary_String; + } else { + return "Invalid BACnetRestartReason"; + } +} + +INDTEXT_DATA bactext_network_port_type_names[] = { + { PORT_TYPE_ETHERNET, "ethernet" }, + { PORT_TYPE_ARCNET, "arcnet" }, + { PORT_TYPE_MSTP, "mstp" }, + { PORT_TYPE_PTP, "ptp" }, + { PORT_TYPE_LONTALK, "lontalk" }, + { PORT_TYPE_BIP, "ipv4" }, + { PORT_TYPE_ZIGBEE, "zigbee" }, + { PORT_TYPE_VIRTUAL, "virtual" }, + { PORT_TYPE_NON_BACNET, "non-bacnet" }, + { PORT_TYPE_BIP6, "ipv6" }, + { PORT_TYPE_SERIAL, "serial" }, + { PORT_TYPE_BSC, "secure-connect" }, + { PORT_TYPE_BSC_INTERIM, "secure-connect-interim" }, + { 0, NULL } +}; + +const char *bactext_network_port_type_name(unsigned index) +{ + if (index <= PORT_TYPE_PROPRIETARY_MIN) { + return indtext_by_index_default( + bactext_network_port_type_names, index, ASHRAE_Reserved_String); + } else if (index <= PORT_TYPE_PROPRIETARY_MAX) { + return Vendor_Proprietary_String; + } else { + return "Invalid BACnetNetworkType"; + } +} + +INDTEXT_DATA bactext_network_number_quality_names[] = { + { PORT_QUALITY_UNKNOWN, "unknown" }, + { PORT_QUALITY_LEARNED, "learned" }, + { PORT_QUALITY_LEARNED_CONFIGURED, "learned-configured" }, + { PORT_QUALITY_CONFIGURED, "configured" }, + { 0, NULL } +}; + +const char *bactext_network_number_quality_name(unsigned index) +{ + return indtext_by_index_default( + bactext_network_number_quality_names, index, ASHRAE_Reserved_String); +} + +INDTEXT_DATA bactext_network_port_command_names[] = { + { PORT_COMMAND_IDLE, "idle" }, + { PORT_COMMAND_DISCARD_CHANGES, "discard-changes" }, + { PORT_COMMAND_RENEW_FD_REGISTRATION, "renew-fd-registration" }, + { PORT_COMMAND_RESTART_SLAVE_DISCOVERY, "restart-slave-discovery" }, + { PORT_COMMAND_RENEW_DHCP, "renew-dhcp" }, + { PORT_COMMAND_RESTART_AUTONEGOTIATION, "restart-autonegotiation" }, + { PORT_COMMAND_DISCONNECT, "disconnect" }, + { PORT_COMMAND_RESTART_PORT, "restart-port" }, + { PORT_COMMAND_RESTART_DISCOVERY, "restart-discovery" }, + { PORT_COMMAND_GENERATE_CSR_FILE, "generate-csr-file" }, + { PORT_COMMAND_VALIDATE_CHANGES, "validate-changes" }, + { 0, NULL } +}; + +const char *bactext_network_port_command_name(unsigned index) +{ + if (index < PORT_COMMAND_PROPRIETARY_MIN) { + return indtext_by_index_default( + bactext_network_port_command_names, index, ASHRAE_Reserved_String); + } else if (index <= PORT_COMMAND_PROPRIETARY_MAX) { + return Vendor_Proprietary_String; + } else { + return "Invalid BACnetNetworkPortCommand"; + } +} + +INDTEXT_DATA bactext_authentication_decision_names[] = { + { BACNET_AUTHENTICATION_DECISION_ALLOW_MATCH, "allow-match" }, + { BACNET_AUTHENTICATION_DECISION_DENY_MISMATCH, "deny-mismatch" }, + { BACNET_AUTHENTICATION_DECISION_DENY_NON_RELAY, "deny-non-relay" }, + { 0, NULL } +}; + +const char *bactext_authentication_decision_name(unsigned index) +{ + return indtext_by_index_default( + bactext_authentication_decision_names, index, ASHRAE_Reserved_String); +} + +INDTEXT_DATA bactext_authorization_posture_names[] = { + { BACNET_AUTHORIZATION_POSTURE_OPEN, "open" }, + { BACNET_AUTHORIZATION_POSTURE_PROPRIETARY, "proprietary" }, + { BACNET_AUTHORIZATION_POSTURE_CONFIGURED, "configured" }, + { BACNET_AUTHORIZATION_POSTURE_MISCONFIGURED_PARTIAL, + "misconfigured-partial" }, + { BACNET_AUTHORIZATION_POSTURE_MISCONFIGURED_TOTAL, "misconfigured-total" }, + { 0, NULL } +}; + +const char *bactext_authorization_posture_name(unsigned index) +{ + return indtext_by_index_default( + bactext_authorization_posture_names, index, ASHRAE_Reserved_String); +} + +INDTEXT_DATA bactext_fault_type_names[] = { + { BACNET_FAULT_TYPE_NONE, "none" }, + { BACNET_FAULT_TYPE_CHARACTERSTRING, "characterstring" }, + { BACNET_FAULT_TYPE_EXTENDED, "extended" }, + { BACNET_FAULT_TYPE_LIFE_SAFETY, "life-safety" }, + { BACNET_FAULT_TYPE_STATE, "state" }, + { BACNET_FAULT_TYPE_STATUS_FLAGS, "status-flags" }, + { BACNET_FAULT_TYPE_OUT_OF_RANGE, "out-of-range" }, + { BACNET_FAULT_TYPE_LISTED, "listed" }, + { 0, NULL } +}; + +const char *bactext_fault_type_name(unsigned index) +{ + return indtext_by_index_default( + bactext_fault_type_names, index, ASHRAE_Reserved_String); +} + +INDTEXT_DATA bacnet_priority_filter_names[] = { + { BACNET_PRIORITY_FILTER_MANUAL_LIFE_SAFETY, "manual-life-safety" }, + { BACNET_PRIORITY_FILTER_AUTOMATIC_LIFE_SAFETY, "automatic-life-safety" }, + { BACNET_PRIORITY_FILTER_PRIORITY_3, "priority-3" }, + { BACNET_PRIORITY_FILTER_PRIORITY_4, "priority-5" }, + { BACNET_PRIORITY_FILTER_CRITICAL_EQUIPMENT_CONTROLS, + "critical-equipment-controls" }, + { BACNET_PRIORITY_FILTER_MINIMUM_ON_OFF, "minimum-on-off" }, + { BACNET_PRIORITY_FILTER_PRIORITY_7, "priority-7" }, + { BACNET_PRIORITY_FILTER_MANUAL_OPERATOR, "manual-operator" }, + { BACNET_PRIORITY_FILTER_PRIORITY_9, "priority-9" }, + { BACNET_PRIORITY_FILTER_PRIORITY_10, "priority-10" }, + { BACNET_PRIORITY_FILTER_PRIORITY_11, "priority-11" }, + { BACNET_PRIORITY_FILTER_PRIORITY_12, "priority-12" }, + { BACNET_PRIORITY_FILTER_PRIORITY_13, "priority-13" }, + { BACNET_PRIORITY_FILTER_PRIORITY_14, "priority-14" }, + { BACNET_PRIORITY_FILTER_PRIORITY_15, "priority-15" }, + { BACNET_PRIORITY_FILTER_PRIORITY_16, "priority-16" }, + { 0, NULL } +}; + +const char *bacnet_priority_filter_name(unsigned index) +{ + return indtext_by_index_default( + bacnet_priority_filter_names, index, ASHRAE_Reserved_String); +} + +INDTEXT_DATA bactext_result_flags_names[] = { + { RESULT_FLAG_FIRST_ITEM, "first-item" }, + { RESULT_FLAG_LAST_ITEM, "last-item" }, + { RESULT_FLAG_MORE_ITEMS, "more-items" }, + { 0, NULL } +}; + +const char *bactext_result_flags_name(unsigned index) +{ + return indtext_by_index_default( + bactext_result_flags_names, index, ASHRAE_Reserved_String); +} + +INDTEXT_DATA bactext_success_filter_names[] = { + { BACNET_SUCCESS_FILTER_ALL, "all" }, + { BACNET_SUCCESS_FILTER_SUCCESS_ONLY, "success-only" }, + { BACNET_SUCCESS_FILTER_FAILURES_ONLY, "failures-only" }, + { 0, NULL } +}; + +const char *bactext_success_filter_name(unsigned index) +{ + return indtext_by_index_default( + bactext_success_filter_names, index, ASHRAE_Reserved_String); +} diff --git a/src/bacnet/bactext.h b/src/bacnet/bactext.h index f457ca01..7c2c4380 100644 --- a/src/bacnet/bactext.h +++ b/src/bacnet/bactext.h @@ -120,6 +120,10 @@ bool bactext_days_of_week_index(const char *search_name, unsigned *found_index); BACNET_STACK_EXPORT const char *bactext_network_layer_msg_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_life_safety_mode_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_life_safety_operation_name(unsigned index); BACNET_STACK_EXPORT const char *bactext_life_safety_state_name(unsigned index); @@ -158,6 +162,29 @@ const char *bactext_shed_level_type_name(unsigned index); BACNET_STACK_EXPORT const char *bactext_log_datum_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_restart_reason_name(unsigned index); + +BACNET_STACK_EXPORT +const char *bactext_network_port_type_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_network_number_quality_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_network_port_command_name(unsigned index); + +BACNET_STACK_EXPORT +const char *bactext_authentication_decision_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_authorization_posture_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_fault_type_name(unsigned index); +BACNET_STACK_EXPORT +const char *bacnet_priority_filter_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_success_filter_name(unsigned index); +BACNET_STACK_EXPORT +const char *bactext_result_flags_name(unsigned index); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/src/bacnet/basic/object/lo.c b/src/bacnet/basic/object/lo.c index 9477c4dc..886d5f3f 100644 --- a/src/bacnet/basic/object/lo.c +++ b/src/bacnet/basic/object/lo.c @@ -936,6 +936,88 @@ Lighting_Command_Stop(struct object_data *pObject, unsigned priority) } } +#if (BACNET_PROTOCOL_REVISION >= 28) +/** + * @brief Set the lighting command if the priority is active + * @param object [in] BACnet object instance + * @param priority [in] BACnet priority array value 1..16 + */ +static void +Lighting_Command_Restore_On(struct object_data *pObject, unsigned priority) +{ + unsigned current_priority; + + if (!pObject) { + return; + } + current_priority = Present_Value_Priority(pObject); + if (priority <= current_priority) { + /* we have priority - configure the Lighting Command */ + lighting_command_restore_on(&pObject->Lighting_Command); + } +} + +/** + * @brief Set the lighting command if the priority is active + * @param object [in] BACnet object instance + * @param priority [in] BACnet priority array value 1..16 + */ +static void +Lighting_Command_Restore_Off(struct object_data *pObject, unsigned priority) +{ + unsigned current_priority; + + if (!pObject) { + return; + } + current_priority = Present_Value_Priority(pObject); + if (priority <= current_priority) { + /* we have priority - configure the Lighting Command */ + lighting_command_restore_off(&pObject->Lighting_Command); + } +} + +/** + * @brief Set the lighting command if the priority is active + * @param object [in] BACnet object instance + * @param priority [in] BACnet priority array value 1..16 + */ +static void +Lighting_Command_Toggle_Restore(struct object_data *pObject, unsigned priority) +{ + unsigned current_priority; + + if (!pObject) { + return; + } + current_priority = Present_Value_Priority(pObject); + if (priority <= current_priority) { + /* we have priority - configure the Lighting Command */ + lighting_command_toggle_restore(&pObject->Lighting_Command); + } +} + +/** + * @brief Set the lighting command if the priority is active + * @param object [in] BACnet object instance + * @param priority [in] BACnet priority array value 1..16 + */ +static void +Lighting_Command_Toggle_Default(struct object_data *pObject, unsigned priority) +{ + unsigned current_priority; + + if (!pObject) { + return; + } + current_priority = Present_Value_Priority(pObject); + if (priority <= current_priority) { + /* we have priority - configure the Lighting Command */ + lighting_command_toggle_default(&pObject->Lighting_Command); + } +} +#endif + /** * For a given object instance-number, writes the present-value * @@ -975,7 +1057,7 @@ static bool Lighting_Output_Lighting_Command_Write( *error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return status; } - if (value->operation >= MAX_BACNET_LIGHTING_OPERATION) { + if (value->operation >= BACNET_LIGHTS_RESERVED_MIN) { *error_class = ERROR_CLASS_PROPERTY; *error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return status; @@ -1043,6 +1125,24 @@ static bool Lighting_Output_Lighting_Command_Write( Lighting_Command_Stop(pObject, priority); status = true; break; +#if (BACNET_PROTOCOL_REVISION >= 28) + case BACNET_LIGHTS_RESTORE_ON: + Lighting_Command_Restore_On(pObject, priority); + status = true; + break; + case BACNET_LIGHTS_RESTORE_OFF: + Lighting_Command_Restore_Off(pObject, priority); + status = true; + break; + case BACNET_LIGHTS_TOGGLE_RESTORE: + Lighting_Command_Toggle_Restore(pObject, priority); + status = true; + break; + case BACNET_LIGHTS_TOGGLE_DEFAULT: + Lighting_Command_Toggle_Default(pObject, priority); + status = true; + break; +#endif default: *error_class = ERROR_CLASS_PROPERTY; *error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; @@ -1908,7 +2008,7 @@ bool Lighting_Output_Transition_Set( pObject = Keylist_Data(Object_List, object_instance); if (pObject) { - if (value <= BACNET_LIGHTING_TRANSITION_PROPRIETARY_LAST) { + if (value <= BACNET_LIGHTING_TRANSITION_PROPRIETARY_MAX) { pObject->Transition = value; status = true; } @@ -1941,7 +2041,7 @@ static bool Lighting_Output_Transition_Write( pObject = Keylist_Data(Object_List, object_instance); if (pObject) { (void)priority; - if (value < BACNET_LIGHTING_TRANSITION_PROPRIETARY_LAST) { + if (value < BACNET_LIGHTING_TRANSITION_PROPRIETARY_MAX) { pObject->Transition = value; status = true; } else { diff --git a/src/bacnet/basic/object/lsp.c b/src/bacnet/basic/object/lsp.c index 4d71a140..19f669e2 100644 --- a/src/bacnet/basic/object/lsp.c +++ b/src/bacnet/basic/object/lsp.c @@ -535,8 +535,7 @@ int Life_Safety_Point_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = encode_application_enumerated(&apdu[0], mode); break; case PROP_ACCEPTED_MODES: - for (mode = MIN_LIFE_SAFETY_MODE; mode < MAX_LIFE_SAFETY_MODE; - mode++) { + for (mode = 0; mode <= LIFE_SAFETY_MODE_RESERVED_MIN; mode++) { len = encode_application_enumerated(&apdu[apdu_len], mode); apdu_len += len; } @@ -583,7 +582,7 @@ bool Life_Safety_Point_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) status = write_property_type_valid( wp_data, &value, BACNET_APPLICATION_TAG_ENUMERATED); if (status) { - if (value.type.Enumerated <= MAX_LIFE_SAFETY_MODE) { + if (value.type.Enumerated <= LIFE_SAFETY_MODE_PROPRIETARY_MAX) { Life_Safety_Point_Mode_Set( wp_data->object_instance, (BACNET_LIFE_SAFETY_MODE)value.type.Enumerated); diff --git a/src/bacnet/basic/object/lsz.c b/src/bacnet/basic/object/lsz.c index e0ca4eb5..7b092a05 100644 --- a/src/bacnet/basic/object/lsz.c +++ b/src/bacnet/basic/object/lsz.c @@ -705,8 +705,7 @@ int Life_Safety_Zone_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = encode_application_enumerated(&apdu[0], mode); break; case PROP_ACCEPTED_MODES: - for (mode = MIN_LIFE_SAFETY_MODE; mode < MAX_LIFE_SAFETY_MODE; - mode++) { + for (mode = 0; mode < LIFE_SAFETY_MODE_RESERVED_MIN; mode++) { len = encode_application_enumerated(&apdu[apdu_len], mode); apdu_len += len; } @@ -760,7 +759,7 @@ bool Life_Safety_Zone_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) status = write_property_type_valid( wp_data, &value, BACNET_APPLICATION_TAG_ENUMERATED); if (status) { - if (value.type.Enumerated <= MAX_LIFE_SAFETY_MODE) { + if (value.type.Enumerated <= LIFE_SAFETY_MODE_PROPRIETARY_MAX) { Life_Safety_Zone_Mode_Set( wp_data->object_instance, (BACNET_LIFE_SAFETY_MODE)value.type.Enumerated); diff --git a/src/bacnet/lighting.c b/src/bacnet/lighting.c index 1e195e30..9de1793b 100644 --- a/src/bacnet/lighting.c +++ b/src/bacnet/lighting.c @@ -171,7 +171,7 @@ int lighting_command_decode( &apdu[apdu_len], apdu_size - apdu_len, 0, &enum_value); if (len > 0) { apdu_len += len; - if (unsigned_value <= BACNET_LIGHTS_PROPRIETARY_LAST) { + if (unsigned_value <= BACNET_LIGHTS_PROPRIETARY_MAX) { operation = (BACNET_LIGHTING_OPERATION)enum_value; if (data) { data->operation = operation; diff --git a/src/bacnet/readrange.h b/src/bacnet/readrange.h index e7f163f6..eabd3700 100644 --- a/src/bacnet/readrange.h +++ b/src/bacnet/readrange.h @@ -52,13 +52,6 @@ typedef struct BACnet_Read_Range_Data { /**< For info functionality indicates array of lists if set */ #define RR_ARRAY_OF_LISTS 16 -/** Bit String Enumerations */ -typedef enum { - RESULT_FLAG_FIRST_ITEM = 0, - RESULT_FLAG_LAST_ITEM = 1, - RESULT_FLAG_MORE_ITEMS = 2 -} BACNET_RESULT_FLAGS; - /** Defines for ReadRange packet overheads to allow us to determine how * much space is left for actual payload: * diff --git a/test/bacnet/abort/src/main.c b/test/bacnet/abort/src/main.c index b4f29962..f0c3ff9a 100644 --- a/test/bacnet/abort/src/main.c +++ b/test/bacnet/abort/src/main.c @@ -143,7 +143,7 @@ static void testAbortError(void) BACNET_ABORT_REASON abort_code; BACNET_ABORT_REASON test_abort_code; - for (i = 0; i < MAX_BACNET_ABORT_REASON; i++) { + for (i = 0; i < ABORT_REASON_RESERVED_MIN; i++) { abort_code = (BACNET_ABORT_REASON)i; error_code = abort_convert_to_error_code(abort_code); test_abort_code = abort_convert_error_code(error_code);