1 /*
2  * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef BRIGHTNESS_CALCULATION_MANAGER_H
17 #define BRIGHTNESS_CALCULATION_MANAGER_H
18 
19 #include <memory>
20 #include <mutex>
21 #include <vector>
22 
23 #include "calculation_curve.h"
24 
25 namespace OHOS {
26 namespace DisplayPowerMgr {
27 
28 class BrightnessCalculationManager {
29 public:
30     BrightnessCalculationManager() = default;
31     virtual ~BrightnessCalculationManager() = default;;
32     BrightnessCalculationManager(const BrightnessCalculationManager&) = delete;
33     BrightnessCalculationManager& operator=(const BrightnessCalculationManager&) = delete;
34     BrightnessCalculationManager(BrightnessCalculationManager&&) = delete;
35     BrightnessCalculationManager& operator=(BrightnessCalculationManager&&) = delete;
36     void InitParameters();
37     float GetInterpolatedValue(float lux);
38     void UpdateCurrentUserId(int userId);
39     void UpdateBrightnessOffset(float posBrightness, float lux);
40     void SetGameModeEnable(bool isGameCurveEnable);
41     void SetCameraModeEnable(bool isCameraCurveEnable);
42     void ResetOffsetFromHumanFactor(bool isOffsetResetEnable, int minOffsetBrightness, int maxOffsetBrightness);
43     int GetDisplayIdWithDisplayMode(int displayMode);
44     int GetSensorIdWithDisplayMode(int displayMode);
45     int GetDisplayIdWithFoldstatus(int foldStatus);
46     int GetSensorIdWithFoldstatus(int foldStatus);
47 
48 private:
49     void UpdateParaFromReboot();
50     void UpdateCurveAmbientLux(float lux);
51     float GetInterpolatedBrightenssLevel(float positionBrightness, float lux);
52     void UpdateDefaultBrightness(float lux);
53     float GetCurrentBrightness(float lux);
54 
55     bool IsDefaultBrightnessMode(float positionBrightness);
56     float GetAmbientOffsetLux();
57     float GetBrightenOffsetNoValidBrightenLux(float lux);
58 
59     float GetOffsetLevel(float brightnessStartOrig, float brightnessEndOrig,
60         float brightnessStartNew, float delta);
61     float GetDefaultBrightenOffsetBrightenRaio(float brightnessStartOrig, float brightnessEndOrig,
62         float brightnessStartNew, float deltaStart);
63     float GetDefaultDarkenOffsetBrightenRatio(float brightnessStartOrig, float brightnessEndOrig,
64         float brightnessStartNew, float deltaStart);
65     float GetDefaultDarkenOffsetDarkenRatio(float brightnessStartOrig, float brightnessEndOrig,
66         float brightnessStartNew, float deltaStart);
67     float GetDefaultBrightenOffsetDarkenRatio(float brightnessStartOrig, float brightnessEndOrig,
68         float brightnessStartNew);
69     void ResetDefaultBrightnessOffset();
70 
71     BrightnessCalculationCurve mBrightnessCalculationCurve{};
72     uint32_t mDisplayId{0};
73     int mCurrentUserId{0};
74     bool mIsCameraCurveEnable{false};
75     bool mIsGameCurveEnable{false};
76     float mDefaultBrightness{false};
77     float mDelta{0.0f};
78     float mOffsetLux{0.0f};
79     float mPosBrightness{0.0f};
80     bool mIsReboot{false};
81     float mOffsetBrightnessLast{0.0f};
82     float mLastLuxDefaultBrightness{0.0f};
83     float mStartLuxDefaultBrightness{0.0f};
84     float mCurveLux{0.0f};
85     float mDefaultBrightnessFromLux{0.0f};
86     float offsetBrightenAlphaRight{0.0f};
87     float offsetDarkenAlphaLeft{0.0f};
88     float offsetBrightenAlphaLeft{0.0f};
89     float offsetBrightenRatioLeft{0.0f};
90 };
91 
92 } // namespace DisplayPowerMgr
93 } // namespace OHOS
94 
95 #endif // BRIGHTNESS_CALCULATION_MANAGER_H
96