• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 DISPLAYMGR_DISPLAY_MGR_SERVICE_H
17 #define DISPLAYMGR_DISPLAY_MGR_SERVICE_H
18 
19 #include <atomic>
20 #include <cstdint>
21 #include <string>
22 #include <vector>
23 #include <map>
24 #include <memory>
25 #include <functional>
26 #include <sys/types.h>
27 #include "delayed_sp_singleton.h"
28 #include "refbase.h"
29 #include "event_runner.h"
30 #include "iremote_object.h"
31 #ifdef ENABLE_SENSOR_PART
32 #include "sensor_agent_type.h"
33 #endif
34 #include "idisplay_power_callback.h"
35 #include "display_power_info.h"
36 #include "display_common.h"
37 #include "display_power_mgr_stub.h"
38 #include "screen_controller.h"
39 #include "brightness_manager.h"
40 #include "ffrt_utils.h"
41 
42 namespace OHOS {
43 namespace DisplayPowerMgr {
44 class DisplayPowerMgrService : public DisplayPowerMgrStub {
45 public:
46     virtual ~DisplayPowerMgrService() = default;
47     virtual bool SetDisplayState(uint32_t id, DisplayState state, uint32_t reason) override;
48     virtual DisplayState GetDisplayState(uint32_t id) override;
49     virtual std::vector<uint32_t> GetDisplayIds() override;
50     virtual uint32_t GetMainDisplayId() override;
51     virtual bool SetBrightness(uint32_t value, uint32_t displayId, bool continuous = false) override;
52     virtual bool DiscountBrightness(double discount, uint32_t displayId) override;
53     virtual bool OverrideBrightness(uint32_t value, uint32_t displayId) override;
54     virtual bool OverrideDisplayOffDelay(uint32_t delayMs) override;
55     virtual bool RestoreBrightness(uint32_t displayId) override;
56     virtual uint32_t GetBrightness(uint32_t displayId) override;
57     virtual uint32_t GetDefaultBrightness() override;
58     virtual uint32_t GetMaxBrightness() override;
59     virtual uint32_t GetMinBrightness() override;
60     virtual bool AdjustBrightness(uint32_t id, int32_t value, uint32_t duration) override;
61     virtual bool AutoAdjustBrightness(bool enable) override;
62     virtual bool IsAutoAdjustBrightness() override;
63     virtual bool RegisterCallback(sptr<IDisplayPowerCallback> callback) override;
64     virtual bool BoostBrightness(int32_t timeoutMs, uint32_t displayId) override;
65     virtual bool CancelBoostBrightness(uint32_t displayId) override;
66     virtual uint32_t GetDeviceBrightness(uint32_t displayId) override;
67     virtual bool SetCoordinated(bool coordinated, uint32_t displayId) override;
68     virtual int32_t Dump(int32_t fd, const std::vector<std::u16string>& args) override;
69     virtual DisplayErrors GetError() override;
70     void NotifyStateChangeCallback(uint32_t displayId, DisplayState state, uint32_t reason);
71     void Init();
72     void Deinit();
73     void Reset();
74     void ClearOffset();
75     void SetScreenOnBrightness();
76     static uint32_t GetSafeBrightness(uint32_t value);
77     static double GetSafeDiscount(double discount, uint32_t brightness);
78 
79 private:
80     class CallbackDeathRecipient : public IRemoteObject::DeathRecipient {
81     public:
82         CallbackDeathRecipient() = default;
83         virtual ~CallbackDeathRecipient() = default;
84         virtual void OnRemoteDied(const wptr<IRemoteObject>& remote);
85     private:
86         std::mutex callbackMutex_;
87     };
88 
89 #ifdef ENABLE_SENSOR_PART
90     static void AmbientLightCallback(SensorEvent* event);
91     void InitSensors();
92     void ActivateAmbientSensor();
93     void DeactivateAmbientSensor();
94     bool ambientSensorEnabled_ {false};
95     SensorUser sensorUser_ {};
96 #endif
97     bool supportLightSensor_ {false};
98 
99     static const uint32_t AUTO_ADJUST_BRIGHTNESS_STRIDE = 1;
100     static const uint32_t SAMPLING_RATE = 100000000;
101     static const int32_t BRIGHTNESS_CHANGE_MIN = 2;
102     static const int32_t LUX_TO_NIT_SQRT_RADIO = 5;
103     static const time_t LUX_STABLE_TIME = 1;
104     static constexpr float LUX_CHANGE_RATE_THRESHOLD = 2;
105     static constexpr float LUX_CHANGE_STABLE_MIN = 10.0;
106     static const int32_t NIT_MIN = 2;
107     static const int32_t NIT_MAX = 450;
108     static const uint32_t BRIGHTNESS_OFF = 0;
109     static const uint32_t BRIGHTNESS_MIN;
110     static const uint32_t BRIGHTNESS_DEFAULT;
111     static const uint32_t BRIGHTNESS_MAX;
112     static const uint32_t DELAY_TIME_UNSET = 0;
113     static constexpr const double DISCOUNT_MIN = 0.01;
114     static constexpr const double DISCOUNT_MAX = 1.00;
115 
116     friend DelayedSpSingleton<DisplayPowerMgrService>;
117 
118     DisplayPowerMgrService();
119     bool IsChangedLux(float scalar);
120     bool CalculateBrightness(float scalar, int32_t& brightness, int32_t& change);
121     int32_t GetBrightnessFromLightScalar(float scalar);
122     void DumpDisplayInfo(std::string& result);
123     static void RegisterBootCompletedCallback();
124     static void SetBootCompletedBrightness();
125     static void SetBootCompletedAutoBrightness();
126     static void RegisterSettingObservers();
127     static void UnregisterSettingObservers();
128     static void RegisterSettingAutoBrightnessObserver();
129     static void UnregisterSettingAutoBrightnessObserver();
130     static void AutoBrightnessSettingUpdateFunc(const std::string& key);
131     static void SetSettingAutoBrightness(bool enable);
132     static bool GetSettingAutoBrightness(const std::string& key = SETTING_AUTO_ADJUST_BRIGHTNESS_KEY);
133     void ScreenOffDelay(uint32_t id, DisplayState state, uint32_t reason);
134 
135     static constexpr const char* SETTING_AUTO_ADJUST_BRIGHTNESS_KEY {"settings.display.auto_screen_brightness"};
136     std::map<uint64_t, std::shared_ptr<ScreenController>> controllerMap_;
137     bool autoBrightness_ {false};
138     sptr<IDisplayPowerCallback> callback_;
139     sptr<CallbackDeathRecipient> cbDeathRecipient_;
140 
141     DisplayErrors lastError_ {DisplayErrors::ERR_OK};
142     time_t lastLuxTime_ {0};
143     float lastLux_ {0};
144     bool luxChanged_ {false};
145     std::mutex mutex_;
146     static std::atomic_bool isBootCompleted_;
147     uint32_t displayOffDelayMs_ {0};
148     bool isDisplayDelayOff_ = false;
149     bool setDisplayStateRet_ = true;
150     uint32_t displayId_ {0};
151     DisplayState displayState_ {DisplayState::DISPLAY_UNKNOWN};
152     DisplayState tempState_ {DisplayState::DISPLAY_UNKNOWN};
153     uint32_t displayReason_ {0};
154     std::shared_ptr<PowerMgr::FFRTQueue> queue_;
155 };
156 } // namespace DisplayPowerMgr
157 } // namespace OHOS
158 #endif // DISPLAYMGR_DISPLAY_MGR_SERVICE_H
159