feat(sacn): Override-Zweig in der Licht-Engine
This commit is contained in:
@@ -183,6 +183,86 @@ static void test_blink_max_clamped(void)
|
||||
TEST_ASSERT_TRUE(nl_engine_idle());
|
||||
}
|
||||
|
||||
static void test_override_takes_over_output(void)
|
||||
{
|
||||
nl_light_state_t on = st(true, 100, NL_MODE_WHITE, 0, 0, 0, 3000);
|
||||
uint8_t ov[NL_CH_COUNT] = { 10, 20, 30, 40, 50 };
|
||||
|
||||
nl_engine_set(&on, 0);
|
||||
nl_engine_tick(10);
|
||||
TEST_ASSERT_FALSE(nl_engine_override_active());
|
||||
|
||||
nl_engine_override(ov);
|
||||
nl_engine_tick(10);
|
||||
TEST_ASSERT_TRUE(nl_engine_override_active());
|
||||
TEST_ASSERT_EQUAL_UINT8(10, last[NL_CH_R]);
|
||||
TEST_ASSERT_EQUAL_UINT8(50, last[NL_CH_WW]);
|
||||
}
|
||||
|
||||
static void test_override_clear_without_fade_is_immediate(void)
|
||||
{
|
||||
nl_light_state_t off = st(false, 100, NL_MODE_WHITE, 0, 0, 0, 3000);
|
||||
uint8_t ov[NL_CH_COUNT] = { 255, 255, 255, 255, 255 };
|
||||
|
||||
nl_engine_set(&off, 0);
|
||||
nl_engine_tick(10);
|
||||
nl_engine_override(ov);
|
||||
nl_engine_tick(10);
|
||||
TEST_ASSERT_EQUAL_UINT8(255, last[NL_CH_WW]);
|
||||
|
||||
nl_engine_override_clear(0);
|
||||
nl_engine_tick(10);
|
||||
TEST_ASSERT_FALSE(nl_engine_override_active());
|
||||
TEST_ASSERT_EQUAL_UINT8(0, last[NL_CH_WW]); /* die Lampe war aus, also sofort dunkel */
|
||||
}
|
||||
|
||||
static void test_override_clear_fades_back(void)
|
||||
{
|
||||
nl_light_state_t off = st(false, 100, NL_MODE_WHITE, 0, 0, 0, 3000);
|
||||
uint8_t ov[NL_CH_COUNT] = { 0, 0, 0, 0, 200 };
|
||||
|
||||
nl_engine_set(&off, 0);
|
||||
nl_engine_tick(10);
|
||||
nl_engine_override(ov);
|
||||
nl_engine_tick(10);
|
||||
|
||||
nl_engine_override_clear(1000);
|
||||
nl_engine_tick(500);
|
||||
/* auf halber Strecke zwischen 200 und 0, mit Spielraum fuer die Rundung */
|
||||
TEST_ASSERT_UINT8_WITHIN(12, 100, last[NL_CH_WW]);
|
||||
nl_engine_tick(500);
|
||||
TEST_ASSERT_EQUAL_UINT8(0, last[NL_CH_WW]);
|
||||
TEST_ASSERT_FALSE(nl_engine_override_active());
|
||||
}
|
||||
|
||||
static void test_blink_wins_over_override(void)
|
||||
{
|
||||
uint8_t ov[NL_CH_COUNT] = { 0, 0, 0, 0, 0 };
|
||||
|
||||
nl_engine_override(ov);
|
||||
nl_engine_blink(3);
|
||||
nl_engine_tick(10);
|
||||
/* Blink leuchtet hell weiss, obwohl der Override alles auf 0 haelt */
|
||||
TEST_ASSERT_NOT_EQUAL_UINT8(0, last[NL_CH_WW]);
|
||||
}
|
||||
|
||||
static void test_underlying_state_survives_the_override(void)
|
||||
{
|
||||
nl_light_state_t on = st(true, 100, NL_MODE_WHITE, 0, 0, 0, 3000);
|
||||
uint8_t ov[NL_CH_COUNT] = { 0, 0, 0, 0, 0 };
|
||||
uint8_t before;
|
||||
|
||||
nl_engine_set(&on, 0);
|
||||
nl_engine_tick(10);
|
||||
before = last[NL_CH_WW];
|
||||
|
||||
nl_engine_override(ov);
|
||||
nl_engine_tick(2000);
|
||||
nl_engine_override_clear(0);
|
||||
nl_engine_tick(10);
|
||||
TEST_ASSERT_EQUAL_UINT8(before, last[NL_CH_WW]);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
UNITY_BEGIN();
|
||||
@@ -197,5 +277,10 @@ int main(void)
|
||||
RUN_TEST(test_blink_overrides_and_restores);
|
||||
RUN_TEST(test_pulse);
|
||||
RUN_TEST(test_blink_max_clamped);
|
||||
RUN_TEST(test_override_takes_over_output);
|
||||
RUN_TEST(test_override_clear_without_fade_is_immediate);
|
||||
RUN_TEST(test_override_clear_fades_back);
|
||||
RUN_TEST(test_blink_wins_over_override);
|
||||
RUN_TEST(test_underlying_state_survives_the_override);
|
||||
return UNITY_END();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user