blob: 8f0ebb1fb1f7e29ccadb0667fdb5ad80c610792d [file] [log] [blame]
// 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_SYSTEM_PLUGGABLE_INTERNAL_BACKLIGHT_H_
#define POWER_MANAGER_POWERD_SYSTEM_PLUGGABLE_INTERNAL_BACKLIGHT_H_
#include <memory>
#include <string>
#include <base/files/file_path.h>
#include <base/macros.h>
#include <base/observer_list.h>
#include "power_manager/powerd/system/backlight_interface.h"
#include "power_manager/powerd/system/udev_subsystem_observer.h"
namespace power_manager {
namespace system {
class BacklightObserver;
class InternalBacklight;
struct UdevEvent;
class UdevInterface;
// This class wraps the InternalBacklight class, refreshing it in response to
// udev events about the backlight being added or removed.
class PluggableInternalBacklight : public BacklightInterface,
public UdevSubsystemObserver {
public:
PluggableInternalBacklight();
PluggableInternalBacklight(const PluggableInternalBacklight&) = delete;
PluggableInternalBacklight& operator=(const PluggableInternalBacklight&) =
delete;
~PluggableInternalBacklight() override;
// Ownership of |udev| remains with the caller.
void Init(UdevInterface* udev,
const std::string& udev_subsystem,
const base::FilePath& base_path,
const std::string& pattern);
// BacklightInterface:
void AddObserver(BacklightObserver* observer) override;
void RemoveObserver(BacklightObserver* observer) override;
bool DeviceExists() override;
int64_t GetMaxBrightnessLevel() override;
int64_t GetCurrentBrightnessLevel() override;
bool SetBrightnessLevel(int64_t level, base::TimeDelta interval) override;
BrightnessScale GetBrightnessScale() override;
bool TransitionInProgress() const override;
// UdevSubsystemObserver:
void OnUdevEvent(const UdevEvent& event) override;
private:
// Recreates |device_|, setting it to null if the device wasn't found.
void UpdateDevice();
base::ObserverList<BacklightObserver> observers_;
UdevInterface* udev_ = nullptr; // Not owned.
// udev subsystem used to observe |udev_|.
std::string udev_subsystem_;
// Information used to find the backlight device. See the InternalBacklight
// class for details.
base::FilePath base_path_;
std::string pattern_;
// The underlying backlight device, or null when the device isn't present.
std::unique_ptr<InternalBacklight> device_;
};
} // namespace system
} // namespace power_manager
#endif // POWER_MANAGER_POWERD_SYSTEM_PLUGGABLE_INTERNAL_BACKLIGHT_H_