// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include #include TEST_CASE("ScreenLightControlFunctions") { using namespace screen_light_control::functions; constexpr auto controlTimerMS = 25; SECTION("Ramp an hysteresis test") { INFO("Setup"); const unsigned int testRampTime = 500; const bsp::eink_frontlight::BrightnessPercentage testVal = 100.0f; screen_light_control::functions::BrightnessFunction functionPoints = BrightnessFunction({{0.0f, testVal}, {100.0f, 0.0f}}); const float hysteresis = 10.0f; setRampStep(100.0f * (static_cast(controlTimerMS) / static_cast(testRampTime))); setHysteresis(hysteresis); setFunctionFromPoints(functionPoints); INFO("Simple ramp test"); // Timer callback cycles int cyclesPerRamp = testRampTime / controlTimerMS; // Mock the measurement calculateBrightness(0.0f); auto rampOut = 0.0f; for (int i = 0; i < cyclesPerRamp; ++i) { rampOut = brightnessRampOut(); } CHECK(rampOut == testVal); INFO("Hysteresis preventing the change"); calculateBrightness(9.5f); for (int i = 0; i < cyclesPerRamp; ++i) { rampOut = brightnessRampOut(); } CHECK(rampOut == testVal); INFO("Out of hysteresis"); calculateBrightness(110.0f); for (int i = 0; i < cyclesPerRamp; ++i) { rampOut = brightnessRampOut(); } CHECK(rampOut == 0.0f); } SECTION("Brightness function check") { INFO("Setup and iterate through points"); const unsigned int testRampTime = 100; BrightnessFunction functionPoints = BrightnessFunction({{50.0f, 50.0f}, {100.0f, 100.0f}, {150.0f, 100.0f}, {200.0f, 0.0f}, {250.0f, 0.0f}, {300.0f, 100.0f}, {350.0f, 50.0f}}); const float hysteresis = 10.0f; setRampStep(100.0f * (static_cast(controlTimerMS) / static_cast(testRampTime))); setHysteresis(hysteresis); setFunctionFromPoints(functionPoints); int cyclesPerRamp = testRampTime / controlTimerMS; // Checking values between the points BrightnessFunction testPoints = BrightnessFunction({{0.0f, 50.0f}, {75.0f, 75.0f}, {125.0f, 100.0f}, {175.0f, 50.0f}, {225.0f, 0.0f}, {275.0f, 50.0f}, {325.0f, 75.0f}, {400.0f, 50.0f}}); for (const auto &point : testPoints) { calculateBrightness(point.first); auto rampOut = 0.0f; for (int i = 0; i < cyclesPerRamp; ++i) { rampOut = brightnessRampOut(); } INFO("Measurement:" << point.first << " Expected:" << point.second << " Actual:" << rampOut); CHECK(rampOut == point.second); } } }