1cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat/* 2cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * Copyright (C) 2015 The Android Open Source Project 3cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * 4cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * Licensed under the Apache License, Version 2.0 (the "License"); 5cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * you may not use this file except in compliance with the License. 6cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * You may obtain a copy of the License at 7cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * 8cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * http://www.apache.org/licenses/LICENSE-2.0 9cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * 10cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * Unless required by applicable law or agreed to in writing, software 11cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * distributed under the License is distributed on an "AS IS" BASIS, 12cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * See the License for the specific language governing permissions and 14cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * limitations under the License. 15cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat */ 16cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 17cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <sysexits.h> 18cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 19cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <base/logging.h> 20cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <base/macros.h> 21cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <binderwrapper/binder_wrapper.h> 2278132a0e300173bf3b738c9caf30f3941ff31cd2Alex Vakulenko#include <brillo/binder_watcher.h> 2378132a0e300173bf3b738c9caf30f3941ff31cd2Alex Vakulenko#include <brillo/daemons/daemon.h> 2478132a0e300173bf3b738c9caf30f3941ff31cd2Alex Vakulenko#include <brillo/flag_helper.h> 25cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 26cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include "power_manager.h" 27cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 28cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Eratnamespace { 29cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 3078132a0e300173bf3b738c9caf30f3941ff31cd2Alex Vakulenkoclass PowerManagerDaemon : public brillo::Daemon { 31cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat public: 32cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat PowerManagerDaemon() = default; 33cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat ~PowerManagerDaemon() override = default; 34cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 35cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat private: 3678132a0e300173bf3b738c9caf30f3941ff31cd2Alex Vakulenko // brillo::Daemon: 37cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat int OnInit() override { 3878132a0e300173bf3b738c9caf30f3941ff31cd2Alex Vakulenko int result = brillo::Daemon::OnInit(); 39cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat if (result != EX_OK) 40cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat return result; 41cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 42cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat android::BinderWrapper::Create(); 43cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat if (!binder_watcher_.Init()) 44cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat return EX_OSERR; 45cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat if (!power_manager_.Init()) 46cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat return EX_OSERR; 47cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 48cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat LOG(INFO) << "Initialization complete"; 49cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat return EX_OK; 50cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat } 51cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 5278132a0e300173bf3b738c9caf30f3941ff31cd2Alex Vakulenko brillo::BinderWatcher binder_watcher_; 53cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat android::PowerManager power_manager_; 54cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 55cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat DISALLOW_COPY_AND_ASSIGN(PowerManagerDaemon); 56cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat}; 57cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 58cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat} // namespace 59cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 60cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Eratint main(int argc, char *argv[]) { 61cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat // This also initializes base::CommandLine(), which is needed for logging. 6278132a0e300173bf3b738c9caf30f3941ff31cd2Alex Vakulenko brillo::FlagHelper::Init(argc, argv, "Power management daemon"); 63cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat logging::InitLogging(logging::LoggingSettings()); 64cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat return PowerManagerDaemon().Run(); 65cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat} 66