Added Program object task state transitions from request and callbacks (#960)

This commit is contained in:
Steve Karg
2025-04-09 10:41:27 -05:00
committed by GitHub
parent c0c46ef235
commit d7c86af05a
4 changed files with 384 additions and 27 deletions
@@ -16,6 +16,91 @@
* @{
*/
static int Program_Load(void *context, const char *location)
{
/* Placeholder for load function */
(void)context;
(void)location;
return 0;
}
static int Program_Run(void *context)
{
/* Placeholder for run function */
(void)context;
return 0;
}
static int Program_Halt(void *context)
{
/* Placeholder for halt function */
(void)context;
return 0;
}
static int Program_Restart(void *context)
{
/* Placeholder for restart function */
(void)context;
return 0;
}
static void test_program_task(uint32_t object_instance)
{
int context = 0;
uint16_t milliseconds = 1000;
bool status = false;
BACNET_PROGRAM_REQUEST program_change = PROGRAM_REQUEST_READY;
Program_Context_Set(object_instance, &context);
Program_Load_Set(object_instance, Program_Load);
Program_Run_Set(object_instance, Program_Run);
Program_Halt_Set(object_instance, Program_Halt);
Program_Restart_Set(object_instance, Program_Restart);
Program_Unload_Set(object_instance, NULL);
status = Program_Change_Set(object_instance, program_change);
zassert_true(status, NULL);
Program_Timer(object_instance, milliseconds);
zassert_equal(Program_Change(object_instance), PROGRAM_REQUEST_READY, NULL);
zassert_equal(Program_State(object_instance), PROGRAM_STATE_IDLE, NULL);
status = Program_Change_Set(object_instance, PROGRAM_REQUEST_LOAD);
zassert_true(status, NULL);
zassert_equal(Program_Change(object_instance), PROGRAM_REQUEST_LOAD, NULL);
Program_Timer(object_instance, milliseconds);
zassert_equal(Program_Change(object_instance), PROGRAM_REQUEST_READY, NULL);
zassert_equal(Program_State(object_instance), PROGRAM_STATE_LOADING, NULL);
Program_Timer(object_instance, milliseconds);
zassert_equal(Program_State(object_instance), PROGRAM_STATE_HALTED, NULL);
status = Program_Change_Set(object_instance, PROGRAM_REQUEST_RUN);
zassert_true(status, NULL);
zassert_equal(Program_Change(object_instance), PROGRAM_REQUEST_RUN, NULL);
Program_Timer(object_instance, milliseconds);
zassert_equal(Program_State(object_instance), PROGRAM_STATE_RUNNING, NULL);
status = Program_Change_Set(object_instance, PROGRAM_REQUEST_HALT);
zassert_true(status, NULL);
zassert_equal(Program_Change(object_instance), PROGRAM_REQUEST_HALT, NULL);
Program_Timer(object_instance, milliseconds);
zassert_equal(Program_State(object_instance), PROGRAM_STATE_HALTED, NULL);
status = Program_Change_Set(object_instance, PROGRAM_REQUEST_RESTART);
zassert_true(status, NULL);
zassert_equal(
Program_Change(object_instance), PROGRAM_REQUEST_RESTART, NULL);
Program_Timer(object_instance, milliseconds);
zassert_equal(Program_State(object_instance), PROGRAM_STATE_RUNNING, NULL);
status = Program_Change_Set(object_instance, PROGRAM_REQUEST_UNLOAD);
zassert_true(status, NULL);
zassert_equal(
Program_Change(object_instance), PROGRAM_REQUEST_UNLOAD, NULL);
Program_Timer(object_instance, milliseconds);
zassert_equal(
Program_State(object_instance), PROGRAM_STATE_UNLOADING, NULL);
}
/**
* @brief Test
*/
@@ -41,6 +126,9 @@ static void testProgramObject(void)
Program_Read_Property, Program_Write_Property, skip_fail_property_list);
bacnet_object_name_ascii_test(
object_instance, Program_Name_Set, Program_Name_ASCII);
test_program_task(object_instance);
status = Program_Delete(object_instance);
zassert_true(status, NULL);
}