Bugfix/lighting output low high trim fade (#1268)
* Add low and high trim fade functionality to lighting command operations * Refactor lighting command override functions and fix operating and normalized range. * Add physical range clamping function and update related clamping logic
This commit is contained in:
@@ -402,6 +402,112 @@ static void testLightingOutput(void)
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, real_value), NULL);
|
||||
zassert_true(is_float_equal(Test_Tracking_Value, real_value), NULL);
|
||||
/* high-end-trim, low-end-trim, and trim-fade-time */
|
||||
Lighting_Output_Present_Value_Relinquish_All(instance);
|
||||
status = Lighting_Output_Transition_Set(
|
||||
instance, BACNET_LIGHTING_TRANSITION_NONE);
|
||||
zassert_true(status, NULL);
|
||||
status = Lighting_Output_Trim_Fade_Time_Set(instance, 0);
|
||||
zassert_true(status, NULL);
|
||||
status = Lighting_Output_High_End_Trim_Set(instance, 90.0f);
|
||||
zassert_true(status, NULL);
|
||||
test_real = Lighting_Output_High_End_Trim(instance);
|
||||
zassert_true(is_float_equal(test_real, 90.0f), NULL);
|
||||
status = Lighting_Output_Low_End_Trim_Set(instance, 10.0f);
|
||||
zassert_true(status, NULL);
|
||||
test_real = Lighting_Output_Low_End_Trim(instance);
|
||||
zassert_true(is_float_equal(test_real, 10.0f), NULL);
|
||||
priority = 8;
|
||||
status = Lighting_Output_Present_Value_Set(instance, 100.0f, priority);
|
||||
zassert_true(status, NULL);
|
||||
Lighting_Output_Timer(instance, 10);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_TRIM_ACTIVE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, 90.0f), NULL);
|
||||
Lighting_Output_Timer(instance, 10);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_IDLE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
status = Lighting_Output_Present_Value_Set(instance, 1.0f, priority);
|
||||
zassert_true(status, NULL);
|
||||
Lighting_Output_Timer(instance, 10);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_TRIM_ACTIVE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, 10.0f), "tracking=%f", test_real);
|
||||
Lighting_Output_Timer(instance, 10);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_IDLE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
Lighting_Output_Present_Value_Relinquish_All(instance);
|
||||
status = Lighting_Output_Present_Value_Set(instance, 100.0f, 1);
|
||||
zassert_true(status, NULL);
|
||||
Lighting_Output_Timer(instance, 10);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_IDLE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, 100.0f), "tracking=%f", test_real);
|
||||
Lighting_Output_Present_Value_Relinquish_All(instance);
|
||||
status = Lighting_Output_Present_Value_Set(instance, 80.0f, priority);
|
||||
zassert_true(status, NULL);
|
||||
Lighting_Output_Timer(instance, 10);
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, 80.0f), NULL);
|
||||
unsigned_value = 1000;
|
||||
status = Lighting_Output_Trim_Fade_Time_Set(instance, unsigned_value);
|
||||
zassert_true(status, NULL);
|
||||
test_unsigned = Lighting_Output_Trim_Fade_Time(instance);
|
||||
zassert_equal(test_unsigned, unsigned_value, NULL);
|
||||
status = Lighting_Output_Default_Fade_Time_Set(instance, 2000);
|
||||
zassert_true(status, NULL);
|
||||
status = Lighting_Output_Transition_Set(
|
||||
instance, BACNET_LIGHTING_TRANSITION_FADE);
|
||||
zassert_true(status, NULL);
|
||||
status = Lighting_Output_Present_Value_Set(instance, 100.0f, priority);
|
||||
zassert_true(status, NULL);
|
||||
milliseconds = 500;
|
||||
Lighting_Output_Timer(instance, milliseconds);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_FADE_ACTIVE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, 85.0f), NULL);
|
||||
Lighting_Output_Timer(instance, milliseconds);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_FADE_ACTIVE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, 90.0f), NULL);
|
||||
Lighting_Output_Timer(instance, milliseconds);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_TRIM_ACTIVE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, 92.5f), NULL);
|
||||
Lighting_Output_Timer(instance, milliseconds);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_TRIM_ACTIVE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
test_real = Lighting_Output_Tracking_Value(instance);
|
||||
zassert_true(is_float_equal(test_real, 90.0f), NULL);
|
||||
Lighting_Output_Timer(instance, milliseconds);
|
||||
in_progress = Lighting_Output_In_Progress(instance);
|
||||
zassert_equal(
|
||||
in_progress, BACNET_LIGHTING_IDLE, "in_progress=%s",
|
||||
bactext_lighting_in_progress(in_progress));
|
||||
/* feedback value */
|
||||
status = Lighting_Output_Feedback_Value_Set(instance, 55.5f);
|
||||
zassert_true(status, NULL);
|
||||
|
||||
@@ -267,7 +267,9 @@ static void test_lighting_command_unit(void)
|
||||
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);
|
||||
zassert_true(
|
||||
is_float_equal(Tracking_Value, data.Low_Trim_Value),
|
||||
"Tracking_Value=%f Low_Trim=%f", Tracking_Value, data.Low_Trim_Value);
|
||||
target_level = 0.0f;
|
||||
milliseconds = 10;
|
||||
lighting_command_fade_to(&data, target_level, 0);
|
||||
@@ -287,13 +289,60 @@ static void test_lighting_command_unit(void)
|
||||
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);
|
||||
/* trim fade time */
|
||||
target_level = 80.0f;
|
||||
milliseconds = 10;
|
||||
lighting_command_fade_to(&data, target_level, 0);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(is_float_equal(Tracking_Value, target_level), NULL);
|
||||
data.High_Trim_Value = 90.0f;
|
||||
data.Trim_Fade_Time = fade_time;
|
||||
lighting_command_fade_to(&data, 100.0f, fade_time * 2);
|
||||
milliseconds = fade_time / 4;
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_FADE_ACTIVE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, 82.5f), NULL);
|
||||
zassert_equal(data.Trim_Fade_Time, fade_time, NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_FADE_ACTIVE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, 85.0f), NULL);
|
||||
zassert_equal(data.Trim_Fade_Time, fade_time, NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_FADE_ACTIVE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, 87.5f), NULL);
|
||||
zassert_equal(data.Trim_Fade_Time, fade_time, NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_FADE_ACTIVE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, 90.0f), NULL);
|
||||
zassert_equal(data.Trim_Fade_Time, fade_time, NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_TRIM_ACTIVE, NULL);
|
||||
zassert_true(is_float_equal(Tracking_Value, 91.875f), NULL);
|
||||
zassert_equal(data.Trim_Fade_Time, 750, NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_TRIM_ACTIVE, NULL);
|
||||
zassert_true(
|
||||
is_float_equal(Tracking_Value, 93.056f), "Tracking_Value=%f",
|
||||
Tracking_Value);
|
||||
zassert_equal(data.Trim_Fade_Time, 500, NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_TRIM_ACTIVE, NULL);
|
||||
zassert_true(
|
||||
is_float_equal(Tracking_Value, 93.264f), "Tracking_Value=%f",
|
||||
Tracking_Value);
|
||||
zassert_equal(data.Trim_Fade_Time, 250, 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);
|
||||
zassert_equal(data.Trim_Fade_Time, 0, NULL);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
data.High_Trim_Value = data.Max_Actual_Value;
|
||||
/* override */
|
||||
override_level = 42.0f;
|
||||
target_level = 100.0f;
|
||||
milliseconds = 10;
|
||||
data.Overridden = true;
|
||||
data.Overridden_Momentary = false;
|
||||
lighting_command_override(&data, override_level);
|
||||
lighting_command_override_set(&data, override_level);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(is_float_equal(Tracking_Value, override_level), NULL);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
@@ -301,8 +350,7 @@ static void test_lighting_command_unit(void)
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(is_float_equal(Tracking_Value, override_level), NULL);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
data.Overridden = false;
|
||||
lighting_command_override(&data, target_level);
|
||||
lighting_command_override_clear(&data, target_level);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(is_float_equal(Tracking_Value, target_level), NULL);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
@@ -310,9 +358,7 @@ static void test_lighting_command_unit(void)
|
||||
override_level = 42.0f;
|
||||
target_level = 100.0f;
|
||||
milliseconds = 10;
|
||||
data.Overridden = true;
|
||||
data.Overridden_Momentary = true;
|
||||
lighting_command_override(&data, override_level);
|
||||
lighting_command_override_momentary(&data, override_level);
|
||||
lighting_command_timer(&data, milliseconds);
|
||||
zassert_true(is_float_equal(Tracking_Value, override_level), NULL);
|
||||
zassert_true(data.In_Progress == BACNET_LIGHTING_IDLE, NULL);
|
||||
@@ -331,6 +377,24 @@ static void test_lighting_command_unit(void)
|
||||
target_step = lighting_command_step_increment_clamp(100.1f);
|
||||
zassert_true(is_float_equal(target_step, 100.0f), NULL);
|
||||
|
||||
/* physical range clamping */
|
||||
target_level = lighting_command_physical_range_clamp(0.0f);
|
||||
zassert_true(is_float_equal(target_level, 0.0f), NULL);
|
||||
target_level = lighting_command_physical_range_clamp(0.5f);
|
||||
zassert_true(is_float_equal(target_level, 0.0f), NULL);
|
||||
target_level = lighting_command_physical_range_clamp(0.9f);
|
||||
zassert_true(is_float_equal(target_level, 0.0f), NULL);
|
||||
target_level = lighting_command_physical_range_clamp(1.0f);
|
||||
zassert_true(is_float_equal(target_level, 1.0f), NULL);
|
||||
target_level = lighting_command_physical_range_clamp(50.0f);
|
||||
zassert_true(is_float_equal(target_level, 50.0f), NULL);
|
||||
target_level = lighting_command_physical_range_clamp(100.0f);
|
||||
zassert_true(is_float_equal(target_level, 100.0f), NULL);
|
||||
target_level = lighting_command_physical_range_clamp(100.1f);
|
||||
zassert_true(is_float_equal(target_level, 100.0f), NULL);
|
||||
target_level = lighting_command_physical_range_clamp(150.0f);
|
||||
zassert_true(is_float_equal(target_level, 100.0f), NULL);
|
||||
|
||||
/* step UP - inhibit ON */
|
||||
target_step = 1.0f;
|
||||
target_level = 0.0f;
|
||||
@@ -602,7 +666,9 @@ static void test_lighting_command_unit(void)
|
||||
zassert_equal(data.Lighting_Operation, BACNET_LIGHTS_PROPRIETARY_MAX, NULL);
|
||||
|
||||
/* null check code coverage */
|
||||
lighting_command_override(NULL, override_level);
|
||||
lighting_command_override_set(NULL, override_level);
|
||||
lighting_command_override_clear(NULL, override_level);
|
||||
lighting_command_override_momentary(NULL, override_level);
|
||||
lighting_command_fade_to(NULL, 0.0f, 0);
|
||||
lighting_command_ramp_to(NULL, 0.0f, 0.0f);
|
||||
lighting_command_step(NULL, BACNET_LIGHTS_STEP_OFF, 0.0f);
|
||||
|
||||
Reference in New Issue
Block a user