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