• 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 "iremote_object.h"
30 #ifdef ENABLE_SENSOR_PART
31 #include "sensor_agent_type.h"
32 #endif
33 #include "idisplay_power_callback.h"
34 #include "display_power_info.h"
35 #include "display_common.h"
36 #include "display_power_mgr_stub.h"
37 #include "display_xcollie.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 
48     int32_t SetDisplayState(uint32_t id, uint32_t state, uint32_t reason, bool& result) override;
49     int32_t GetDisplayState(uint32_t id, int32_t& displayState) override;
50     int32_t GetDisplayIds(std::vector<uint32_t>& ids) override;
51     int32_t GetMainDisplayId(uint32_t& id) override;
52     int32_t SetBrightness(uint32_t value, uint32_t displayId, bool continuous, bool& result,
53         int32_t& displayError) override;
54     int32_t SetMaxBrightness(double value, uint32_t mode, bool& result, int32_t& displayError) override;
55     int32_t SetMaxBrightnessNit(uint32_t maxNit, uint32_t mode, bool& result, int32_t& displayError) override;
56     int32_t DiscountBrightness(double discount, uint32_t displayId, bool& result) override;
57     int32_t OverrideBrightness(uint32_t value, uint32_t displayId, uint32_t duration, bool& result) override;
58     int32_t OverrideDisplayOffDelay(uint32_t delayMs, bool& result) override;
59 
60     int32_t RestoreBrightness(uint32_t displayId, uint32_t duration, bool& result) override;
61 
62     int32_t GetBrightness(uint32_t displayId, uint32_t& brightness) override;
63     int32_t GetDefaultBrightness(uint32_t& defaultBrightness) override;
64     int32_t GetMaxBrightness(uint32_t& maxBrightness) override;
65     int32_t GetMinBrightness(uint32_t& minBrightness) override;
66     int32_t AdjustBrightness(uint32_t id, int32_t value, uint32_t duration, bool& result) override;
67     int32_t AutoAdjustBrightness(bool enable, bool& result) override;
68     int32_t IsAutoAdjustBrightness(bool& result) override;
69     int32_t RegisterCallback(const sptr<IDisplayPowerCallback>& callback, bool& result) override;
70     int32_t BoostBrightness(int32_t timeoutMs, uint32_t displayId, bool& result) override;
71     int32_t CancelBoostBrightness(uint32_t displayId, bool& result) override;
72     int32_t GetDeviceBrightness(uint32_t displayId, uint32_t& deviceBrightness) override;
73     int32_t SetCoordinated(bool coordinated, uint32_t displayId, bool& result) override;
74     int32_t SetLightBrightnessThreshold(const std::vector<int32_t>& threshold,
75         const sptr<IDisplayBrightnessCallback>& callback, uint32_t& result) override;
76     int32_t SetScreenOnBrightness(bool& result) override;
77     int32_t NotifyScreenPowerStatus(uint32_t displayId, uint32_t displayPowerStatus, int32_t& result) override;
78 private:
79     bool SetDisplayStateInner(uint32_t id, DisplayState state, uint32_t reason);
80     DisplayState GetDisplayStateInner(uint32_t id);
81     std::vector<uint32_t> GetDisplayIdsInner();
82     uint32_t GetMainDisplayIdInner();
83     bool SetBrightnessInner(uint32_t value, uint32_t displayId, bool continuous = false);
84     bool SetMaxBrightnessInner(double value, uint32_t mode);
85     bool SetMaxBrightnessNitInner(uint32_t maxNit, uint32_t mode);
86     bool DiscountBrightnessInner(double discount, uint32_t displayId);
87     bool OverrideBrightnessInner(uint32_t value, uint32_t displayId, uint32_t duration = 500);
88     bool OverrideDisplayOffDelayInner(uint32_t delayMs);
89     bool RestoreBrightnessInner(uint32_t displayId, uint32_t duration = 500);
90     uint32_t GetBrightnessInner(uint32_t displayId);
91     uint32_t GetDefaultBrightnessInner();
92     uint32_t GetMaxBrightnessInner();
93     uint32_t GetMinBrightnessInner();
94     bool AdjustBrightnessInner(uint32_t id, int32_t value, uint32_t duration);
95     bool AutoAdjustBrightnessInner(bool enable);
96     bool IsAutoAdjustBrightnessInner();
97     bool SetScreenOnBrightnessInner();
98     bool RegisterCallbackInner(sptr<IDisplayPowerCallback> callback);
99     bool BoostBrightnessInner(int32_t timeoutMs, uint32_t displayId);
100     bool CancelBoostBrightnessInner(uint32_t displayId);
101     uint32_t GetDeviceBrightnessInner(uint32_t displayId);
102     bool SetCoordinatedInner(bool coordinated, uint32_t displayId);
103     uint32_t SetLightBrightnessThresholdInner(
104         std::vector<int32_t> threshold, sptr<IDisplayBrightnessCallback> callback);
105     int NotifyScreenPowerStatusInner(uint32_t displayId, uint32_t displayPowerStatus);
106 public:
107     DisplayErrors GetError();
108     virtual int32_t Dump(int32_t fd, const std::vector<std::u16string>& args) override;
109     void NotifyStateChangeCallback(uint32_t displayId, DisplayState state, uint32_t reason);
110     void Init();
111     void Deinit();
112     void Reset();
113     void ClearOffset();
114     void HandleBootBrightness();
115     static uint32_t GetSafeBrightness(uint32_t value);
116     static double GetSafeDiscount(double discount, uint32_t brightness);
117 
118 private:
119     class CallbackDeathRecipient : public IRemoteObject::DeathRecipient {
120     public:
121         CallbackDeathRecipient() = default;
122         virtual ~CallbackDeathRecipient() = default;
123         virtual void OnRemoteDied(const wptr<IRemoteObject>& remote);
124     private:
125         std::mutex callbackMutex_;
126     };
127 
128     static const uint32_t BRIGHTNESS_OFF = 0;
129     static const uint32_t BRIGHTNESS_MIN;
130     static const uint32_t BRIGHTNESS_DEFAULT;
131     static const uint32_t BRIGHTNESS_MAX;
132     static const uint32_t DELAY_TIME_UNSET = 0;
133     static constexpr const double DISCOUNT_MIN = 0.01;
134     static constexpr const double DISCOUNT_MAX = 1.00;
135 
136     friend DelayedSpSingleton<DisplayPowerMgrService>;
137 
138     DisplayPowerMgrService();
139     void DumpDisplayInfo(std::string& result);
140     static void RegisterBootCompletedCallback();
141     static void SetBootCompletedBrightness();
142     static void SetBootCompletedAutoBrightness();
143     static void RegisterSettingObservers();
144     static void UnregisterSettingObservers();
145     static void RegisterSettingAutoBrightnessObserver();
146     static void UnregisterSettingAutoBrightnessObserver();
147     static void AutoBrightnessSettingUpdateFunc(const std::string& key);
148     static bool GetSettingAutoBrightness(const std::string& key = SETTING_AUTO_ADJUST_BRIGHTNESS_KEY);
149     void ScreenOffDelay(uint32_t id, DisplayState state, uint32_t reason);
150     bool IsSupportLightSensor(void);
151 
152     static constexpr const char* SETTING_AUTO_ADJUST_BRIGHTNESS_KEY {"settings.display.auto_screen_brightness"};
153     std::map<uint64_t, std::shared_ptr<ScreenController>> controllerMap_;
154     sptr<IDisplayPowerCallback> callback_;
155     sptr<CallbackDeathRecipient> cbDeathRecipient_;
156 
157     DisplayErrors lastError_ {DisplayErrors::ERR_OK};
158     std::mutex mutex_;
159     static std::atomic_bool isBootCompleted_;
160     uint32_t displayOffDelayMs_ {0};
161     bool isDisplayDelayOff_ = false;
162     uint32_t displayId_ {0};
163     DisplayState displayState_ {DisplayState::DISPLAY_UNKNOWN};
164     uint32_t displayReason_ {0};
165     std::shared_ptr<PowerMgr::FFRTQueue> queue_;
166     bool isInTestMode_ {false};
167     std::once_flag initFlag_;
168 };
169 } // namespace DisplayPowerMgr
170 } // namespace OHOS
171 #endif // DISPLAYMGR_DISPLAY_MGR_SERVICE_H
172