diff --git a/CHANGELOG.md b/CHANGELOG.md index fa8e80f7..8a8915ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ The git repositories are hosted at the following sites: ### Added +* Added text and parser for BACnet ReinitializeDevice service states. (#1228) * Added Device Management-Backup and Restore-B to example object/device.c and basic/server/bacnet-device.c so that when ReinitializeDevice STARTBACKUP is requested a backup file is stored in CreateObject format for all the diff --git a/src/bacnet/bactext.c b/src/bacnet/bactext.c index 0986a016..6918abde 100644 --- a/src/bacnet/bactext.c +++ b/src/bacnet/bactext.c @@ -214,6 +214,33 @@ bool bactext_application_tag_index( bacnet_application_tag_names, search_name, found_index); } +INDTEXT_DATA bacnet_reinitialized_state_names[] = { + { BACNET_REINIT_COLDSTART, "coldstart" }, + { BACNET_REINIT_WARMSTART, "warmstart" }, + { BACNET_REINIT_STARTBACKUP, "startbackup" }, + { BACNET_REINIT_ENDBACKUP, "endbackup" }, + { BACNET_REINIT_STARTRESTORE, "startrestore" }, + { BACNET_REINIT_ENDRESTORE, "endrestore" }, + { BACNET_REINIT_ABORTRESTORE, "abortrestore" }, + { BACNET_REINIT_ACTIVATE_CHANGES, "activate-changes" }, + { BACNET_REINIT_IDLE, "idle" }, + { 0, NULL } +}; + +const char *bactext_reinitialized_state_name_default( + uint32_t index, const char *default_string) +{ + return indtext_by_index_default( + bacnet_reinitialized_state_names, index, default_string); +} + +bool bactext_reinitialized_state_strtol( + const char *search_name, uint32_t *found_index) +{ + return bactext_string_to_uint32_index( + bacnet_reinitialized_state_names, search_name, found_index); +} + INDTEXT_DATA bacnet_character_string_encoding_names[] = { { CHARACTER_ANSI_X34, "ANSI X3.4" }, { CHARACTER_MS_DBCS, "IBM/Microsoft DBCS" }, diff --git a/src/bacnet/bactext.h b/src/bacnet/bactext.h index 81de0408..db042f8e 100644 --- a/src/bacnet/bactext.h +++ b/src/bacnet/bactext.h @@ -51,6 +51,13 @@ BACNET_STACK_EXPORT bool bactext_application_tag_index( const char *search_name, uint32_t *found_index); +BACNET_STACK_EXPORT +const char *bactext_reinitialized_state_name_default( + uint32_t index, const char *default_string); +BACNET_STACK_EXPORT +bool bactext_reinitialized_state_strtol( + const char *search_name, uint32_t *found_index); + BACNET_STACK_EXPORT const char *bactext_object_type_name(uint32_t index); BACNET_STACK_EXPORT diff --git a/test/bacnet/bactext/src/main.c b/test/bacnet/bactext/src/main.c index 9f3f5d34..5ebade18 100644 --- a/test/bacnet/bactext/src/main.c +++ b/test/bacnet/bactext/src/main.c @@ -50,7 +50,15 @@ static void testBacText(void) zassert_equal(index, i, "index=%u i=%u", index, i); } } - + /* BACNET_REINITIALIZED_STATE */ + for (i = 0; i < BACNET_REINIT_MAX; i++) { + pString = bactext_reinitialized_state_name_default(i, NULL); + if (pString) { + status = bactext_reinitialized_state_strtol(pString, &index); + zassert_true(status, "i=%u", i); + zassert_equal(index, i, "index=%u i=%u", index, i); + } + } /* BACNET_APPLICATION_TAG */ for (i = 0; i < BACNET_APPLICATION_TAG_EXTENDED_MAX; i++) { pString = bactext_application_tag_name(i);