// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "ControlFunctions.hpp" #include /// Screen light control algorithm. Automatic/Manual mode of operation. /// Processing of ambient light sensor input to screen brightness output. namespace sevm::screen_light_control { /// Set of actions to control the screen light enum class Action { turnOff, ///< Turn off screen frontlight turnOn, ///< Turn on screen frontlight enableAutomaticMode, ///< Enable automatic mode of screen frontlight disableAutomaticMode, ///< Disable automatic mode of screen frontlight setManualModeBrightness, ///< Set screen brightness in manual mode control setGammaCorrectionFactor, ///< Set gamma factor for screen frontlight correction setAutomaticModeParameters, ///< Set parameters for automatic mode of screen frontlight }; struct Parameters { /// Screen brightness 0-100% in manual mode bsp::eink_frontlight::BrightnessPercentage manualModeBrightness = 50.0f; /// Vector of points for screen brightness [%] in relation to ambient light [Lux] function. Points have to be in /// ascending order of ambient light values. functions::BrightnessFunction functionPoints = functions::BrightnessFunction({{0.0f, 50.0f}}); /// Ramp time of screen brightness in miliseconds per 0-100% change unsigned int rampTimeMS = 1500; /// Hysteresis value of screen brightness control float brightnessHysteresis = 10.0f; /// Gamma factor for screen brightness correction float gammaFactor = 2.5f; }; /// Initialization of screen light control /// @param 'parent' - pointer to parent sys::Service class void init(sys::Service *parent); void deinit(); void processRequest(Action action, const Parameters ¶ms); void controlTimerCallback(); void readoutTimerCallback(); } // namespace sevm::screen_light_control