Update Last_On_Value logic for Present_Value property (#1205)
* Fixed lighting output object lighting-command last-on-value to only be updated with the last value of the Present_Value property that was greater than or equal to 1.0%, keeping in mind that the Present_Value shall indicate the target level of the operation and not the current value.
This commit is contained in:
@@ -137,9 +137,9 @@ static void test_lighting_command_blink_unit(BACNET_LIGHTING_COMMAND_DATA *data)
|
||||
* Tests for Dimmer Command
|
||||
*/
|
||||
#if defined(CONFIG_ZTEST_NEW_API)
|
||||
ZTEST(lighting_command_tests, test_lighting_command_command_unit)
|
||||
ZTEST(lighting_command_tests, test_lighting_command_unit)
|
||||
#else
|
||||
static void test_lighting_command_command_unit(void)
|
||||
static void test_lighting_command_unit(void)
|
||||
#endif
|
||||
{
|
||||
BACNET_LIGHTING_COMMAND_DATA data = { 0 };
|
||||
@@ -194,6 +194,7 @@ static void test_lighting_command_command_unit(void)
|
||||
/* fade up */
|
||||
target_level = 100.0f;
|
||||
lighting_command_fade_to(&data, 100.0f, fade_time);
|
||||
zassert_true(is_float_equal(data.Last_On_Value, 100.0f), NULL);
|
||||
milliseconds = fade_time / 2;
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_FADE_ACTIVE, NULL);
|
||||
@@ -203,10 +204,12 @@ static void test_lighting_command_command_unit(void)
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, target_level), NULL);
|
||||
zassert_true(is_float_equal(data.Last_On_Value, 100.0f), NULL);
|
||||
/* fade down */
|
||||
target_level = 0.0f;
|
||||
lighting_command_fade_to(&data, target_level, fade_time);
|
||||
milliseconds = fade_time / 2;
|
||||
zassert_true(is_float_equal(data.Last_On_Value, 100.0f), NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_FADE_ACTIVE, NULL);
|
||||
zassert_true(
|
||||
@@ -215,11 +218,15 @@ static void test_lighting_command_command_unit(void)
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, 0.0f), NULL);
|
||||
zassert_true(
|
||||
is_float_equal(data.Last_On_Value, 100.0f), "last-on-value=%f",
|
||||
data.Last_On_Value);
|
||||
/* low trim */
|
||||
data.Low_Trim_Value = 10.0f;
|
||||
target_level = 1.0f;
|
||||
milliseconds = 10;
|
||||
lighting_command_fade_to(&data, target_level, 0);
|
||||
zassert_true(is_float_equal(data.Last_On_Value, 1.0f), NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_TRIM_ACTIVE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, data.Low_Trim_Value), NULL);
|
||||
@@ -230,15 +237,18 @@ static void test_lighting_command_command_unit(void)
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, target_level), NULL);
|
||||
data.Low_Trim_Value = data.Min_Actual_Value;
|
||||
zassert_true(is_float_equal(data.Last_On_Value, 1.0f), NULL);
|
||||
/* high trim */
|
||||
data.High_Trim_Value = 90.0f;
|
||||
target_level = 100.0f;
|
||||
milliseconds = 10;
|
||||
lighting_command_fade_to(&data, target_level, 0);
|
||||
zassert_true(is_float_equal(data.Last_On_Value, target_level), NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_TRIM_ACTIVE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, data.High_Trim_Value), NULL);
|
||||
data.High_Trim_Value = data.Max_Actual_Value;
|
||||
zassert_true(is_float_equal(data.Last_On_Value, target_level), NULL);
|
||||
/* override */
|
||||
override_level = 42.0f;
|
||||
target_level = 100.0f;
|
||||
@@ -308,12 +318,16 @@ static void test_lighting_command_command_unit(void)
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(
|
||||
is_float_equal(Tracking_Value, target_step + target_level), NULL);
|
||||
zassert_true(
|
||||
is_float_equal(data.Last_On_Value, target_step + target_level), NULL);
|
||||
/* clamp to max */
|
||||
target_step = 100.0f;
|
||||
lighting_command_step(&data, BACNET_LIGHTS_STEP_UP, target_step);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, data.Max_Actual_Value), NULL);
|
||||
zassert_true(
|
||||
is_float_equal(data.Last_On_Value, data.Max_Actual_Value), NULL);
|
||||
/* turn ON, then step UP */
|
||||
target_step = 1.0f;
|
||||
target_level = 0.0f;
|
||||
@@ -326,12 +340,15 @@ static void test_lighting_command_command_unit(void)
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, 1.0f), NULL);
|
||||
zassert_true(is_float_equal(data.Last_On_Value, 1.0f), NULL);
|
||||
/* clamp to max */
|
||||
target_step = 100.0f;
|
||||
lighting_command_step(&data, BACNET_LIGHTS_STEP_ON, target_step);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, data.Max_Actual_Value), NULL);
|
||||
zassert_true(
|
||||
is_float_equal(data.Last_On_Value, data.Max_Actual_Value), NULL);
|
||||
/* step DOWN, not off */
|
||||
target_step = 1.0f;
|
||||
target_level = data.Min_Actual_Value + target_step;
|
||||
@@ -344,6 +361,8 @@ static void test_lighting_command_command_unit(void)
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, data.Min_Actual_Value), NULL);
|
||||
zassert_true(
|
||||
is_float_equal(data.Last_On_Value, data.Min_Actual_Value), NULL);
|
||||
/* clamp to min */
|
||||
target_step = 100.0f;
|
||||
lighting_command_step(&data, BACNET_LIGHTS_STEP_DOWN, target_step);
|
||||
@@ -362,6 +381,8 @@ static void test_lighting_command_command_unit(void)
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, 0.0f), NULL);
|
||||
zassert_true(
|
||||
is_float_equal(data.Last_On_Value, data.Min_Actual_Value), NULL);
|
||||
/* blink warn - immediate off */
|
||||
data.Blink.Interval = 0;
|
||||
data.Blink.Duration = 0;
|
||||
@@ -448,6 +469,8 @@ static void test_lighting_command_command_unit(void)
|
||||
"Tracking_Value=%f", Tracking_Value);
|
||||
}
|
||||
} while (data.Lighting_Operation != BACNET_LIGHTS_STOP);
|
||||
zassert_true(
|
||||
is_float_equal(data.Last_On_Value, data.Min_Actual_Value), NULL);
|
||||
/* large elapsed timer - ramp up */
|
||||
target_level = data.Max_Actual_Value;
|
||||
milliseconds = 2000;
|
||||
@@ -467,6 +490,8 @@ static void test_lighting_command_command_unit(void)
|
||||
"Tracking_Value=%f", Tracking_Value);
|
||||
}
|
||||
} while (data.Lighting_Operation != BACNET_LIGHTS_STOP);
|
||||
zassert_true(
|
||||
is_float_equal(data.Last_On_Value, data.Max_Actual_Value), NULL);
|
||||
|
||||
/* out-of-service */
|
||||
target_level = 100.0f;
|
||||
@@ -564,8 +589,7 @@ ZTEST_SUITE(lighting_command_tests, NULL, NULL, NULL, NULL, NULL);
|
||||
void test_main(void)
|
||||
{
|
||||
ztest_test_suite(
|
||||
lighting_command_tests,
|
||||
ztest_unit_test(test_lighting_command_command_unit));
|
||||
lighting_command_tests, ztest_unit_test(test_lighting_command_unit));
|
||||
|
||||
ztest_run_test_suite(lighting_command_tests);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user