Added basic timer object, internal state machine, and unit tests (#1123)
* Added basic timer object, internal state machine, and unit tests * Added BACnetTimerStateChangeValue encode, decode, parse, print, and diff with unit tests * Changed handler of add/remove list element to check if the property is a BACnetLIST * Added BACnetLIST utility for handling WriteProperty to a list. * Fixed outlier ReadProperty object handlers to return zero when the RP parameter is NULL.
This commit is contained in:
+48
-2
@@ -177,6 +177,9 @@ INDTEXT_DATA bacnet_application_tag_names[] = {
|
||||
{ BACNET_APPLICATION_TAG_SHED_LEVEL, "BACnetShedLevel" },
|
||||
{ BACNET_APPLICATION_TAG_ACCESS_RULE, "BACnetAccessRule" },
|
||||
{ BACNET_APPLICATION_TAG_CHANNEL_VALUE, "BACnetChannelValue" },
|
||||
{ BACNET_APPLICATION_TAG_LOG_RECORD, "BACnetLogRecord" },
|
||||
{ BACNET_APPLICATION_TAG_NO_VALUE, "BACnetNoValue" },
|
||||
{ BACNET_APPLICATION_TAG_ABSTRACT_SYNTAX, "ABSTRACT-SYNTAX" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
@@ -225,7 +228,7 @@ INDTEXT_DATA bacnet_object_type_names[] = {
|
||||
{ OBJECT_LOAD_CONTROL, "load-control" },
|
||||
{ OBJECT_STRUCTURED_VIEW, "structured-view" },
|
||||
{ OBJECT_ACCESS_DOOR, "access-door" },
|
||||
{ OBJECT_LIGHTING_OUTPUT, "lighting-output" },
|
||||
{ OBJECT_TIMER, "timer" },
|
||||
{ OBJECT_ACCESS_CREDENTIAL, "access-credential" },
|
||||
{ OBJECT_ACCESS_POINT, "access-point" },
|
||||
{ OBJECT_ACCESS_RIGHTS, "access-rights" },
|
||||
@@ -297,7 +300,7 @@ INDTEXT_DATA bacnet_object_type_names_capitalized[] = {
|
||||
{ OBJECT_LOAD_CONTROL, "Load Control" },
|
||||
{ OBJECT_STRUCTURED_VIEW, "Structured View" },
|
||||
{ OBJECT_ACCESS_DOOR, "Access Door" },
|
||||
{ OBJECT_LIGHTING_OUTPUT, "Lighting Output" },
|
||||
{ OBJECT_TIMER, "Timer" },
|
||||
{ OBJECT_ACCESS_CREDENTIAL, "Access Credential" },
|
||||
{ OBJECT_ACCESS_POINT, "Access Point" },
|
||||
{ OBJECT_ACCESS_RIGHTS, "Access Rights" },
|
||||
@@ -2686,6 +2689,7 @@ const char *bactext_program_request_name(unsigned index)
|
||||
}
|
||||
|
||||
INDTEXT_DATA bactext_program_state_names[] = {
|
||||
/* BACnetProgramState enumerations */
|
||||
{ PROGRAM_STATE_IDLE, "idle" },
|
||||
{ PROGRAM_STATE_LOADING, "loading" },
|
||||
{ PROGRAM_STATE_RUNNING, "running" },
|
||||
@@ -2702,6 +2706,7 @@ const char *bactext_program_state_name(unsigned index)
|
||||
}
|
||||
|
||||
INDTEXT_DATA bactext_program_error_names[] = {
|
||||
/* BACnetProgramError enumerations */
|
||||
{ PROGRAM_ERROR_NORMAL, "normal" },
|
||||
{ PROGRAM_ERROR_LOAD_FAILED, "load-failed" },
|
||||
{ PROGRAM_ERROR_INTERNAL, "internal" },
|
||||
@@ -2722,6 +2727,39 @@ const char *bactext_program_error_name(unsigned index)
|
||||
}
|
||||
}
|
||||
|
||||
INDTEXT_DATA bactext_timer_state_names[] = {
|
||||
/* BACnetTimerState enumerations */
|
||||
{ TIMER_STATE_IDLE, "idle" },
|
||||
{ TIMER_STATE_RUNNING, "running" },
|
||||
{ TIMER_STATE_EXPIRED, "expired" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
const char *bactext_timer_state_name(unsigned index)
|
||||
{
|
||||
return indtext_by_index_default(
|
||||
bactext_timer_state_names, index, ASHRAE_Reserved_String);
|
||||
}
|
||||
|
||||
INDTEXT_DATA bactext_timer_transition_names[] = {
|
||||
/* BACnetTimerTransition enumerations */
|
||||
{ TIMER_TRANSITION_NONE, "none" },
|
||||
{ TIMER_TRANSITION_IDLE_TO_RUNNING, "idle-to-running" },
|
||||
{ TIMER_TRANSITION_RUNNING_TO_IDLE, "running-to-idle" },
|
||||
{ TIMER_TRANSITION_RUNNING_TO_RUNNING, "running-to-running" },
|
||||
{ TIMER_TRANSITION_RUNNING_TO_EXPIRED, "running-to-expired" },
|
||||
{ TIMER_TRANSITION_FORCED_TO_EXPIRED, "forced-to-expired" },
|
||||
{ TIMER_TRANSITION_EXPIRED_TO_IDLE, "expired-to-idle" },
|
||||
{ TIMER_TRANSITION_EXPIRED_TO_RUNNING, "expired-to-running" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
const char *bactext_timer_transition_name(unsigned index)
|
||||
{
|
||||
return indtext_by_index_default(
|
||||
bactext_timer_transition_names, index, ASHRAE_Reserved_String);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief For a given enumerated object property string,
|
||||
* find the enumeration value
|
||||
@@ -2861,6 +2899,14 @@ bool bactext_object_property_strtoul(
|
||||
status = bactext_strtoul_index(
|
||||
bacnet_notify_type_names, search_name, found_index);
|
||||
break;
|
||||
case PROP_TIMER_STATE:
|
||||
status = bactext_strtoul_index(
|
||||
bactext_timer_state_names, search_name, found_index);
|
||||
break;
|
||||
case PROP_LAST_STATE_CHANGE:
|
||||
status = bactext_strtoul_index(
|
||||
bactext_timer_transition_names, search_name, found_index);
|
||||
break;
|
||||
default:
|
||||
status = bactext_strtoul(search_name, found_index);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user