| // Copyright 2017 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef POWER_MANAGER_POWERD_POLICY_WIFI_CONTROLLER_H_ |
| #define POWER_MANAGER_POWERD_POLICY_WIFI_CONTROLLER_H_ |
| |
| #include <string> |
| |
| #include <base/macros.h> |
| |
| #include "power_manager/common/power_constants.h" |
| #include "power_manager/powerd/policy/user_proximity_handler.h" |
| #include "power_manager/powerd/system/udev.h" |
| #include "power_manager/powerd/system/udev_subsystem_observer.h" |
| |
| namespace power_manager { |
| |
| class PrefsInterface; |
| |
| namespace policy { |
| |
| // WifiController initiates power-related changes to the wifi chipset. |
| class WifiController : public system::UdevSubsystemObserver, |
| public UserProximityHandler::Delegate { |
| public: |
| // Performs work on behalf of WifiController. |
| class Delegate { |
| public: |
| virtual ~Delegate() = default; |
| |
| // Updates the wifi transmit power to |power|. |
| virtual void SetWifiTransmitPower(RadioTransmitPower power) = 0; |
| }; |
| |
| // Net subsystem and wlan devtype for udev events. |
| static const char kUdevSubsystem[]; |
| static const char kUdevDevtype[]; |
| |
| WifiController(); |
| ~WifiController() override; |
| |
| // Ownership of raw pointers remains with the caller. |
| void Init(Delegate* delegate, |
| PrefsInterface* prefs, |
| system::UdevInterface* udev, |
| TabletMode tablet_mode); |
| |
| // Called when the tablet mode changes. |
| void HandleTabletModeChange(TabletMode mode); |
| |
| // UserProximityHandler::Delegate overrides: |
| void ProximitySensorDetected(UserProximity proximity) override; |
| void HandleProximityChange(UserProximity proximity) override; |
| |
| // system::UdevSubsystemObserver: |
| void OnUdevEvent(const system::UdevEvent& event) override; |
| |
| private: |
| enum class UpdatePowerInputSource { |
| NONE, |
| TABLET_MODE, |
| PROXIMITY, |
| }; |
| |
| // Updates transmit power via |delegate_|. Ends up invoking either one of |
| // UpdateTransmitPowerFor*() depending on |update_power_input_source_|. |
| void UpdateTransmitPower(); |
| |
| void UpdateTransmitPowerForTabletMode(); |
| void UpdateTransmitPowerForProximity(); |
| |
| UpdatePowerInputSource update_power_input_source_ = |
| UpdatePowerInputSource::NONE; |
| Delegate* delegate_ = nullptr; // Not owned. |
| system::UdevInterface* udev_ = nullptr; // Not owned. |
| |
| TabletMode tablet_mode_ = TabletMode::UNSUPPORTED; |
| UserProximity proximity_ = UserProximity::UNKNOWN; |
| |
| // True if powerd has been configured to set wifi transmit power in response |
| // to tablet mode changes. |
| bool set_transmit_power_for_tablet_mode_ = false; |
| |
| // True if powerd has been configured to set wifi transmit power in response |
| // to proximity changes. |
| bool set_transmit_power_for_proximity_ = false; |
| |
| DISALLOW_COPY_AND_ASSIGN(WifiController); |
| }; |
| |
| } // namespace policy |
| } // namespace power_manager |
| |
| #endif // POWER_MANAGER_POWERD_POLICY_WIFI_CONTROLLER_H_ |