2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "LinuxPowerSyscall.h"
10 #include "FallbackPowerSyscall.h"
12 #include "ConsoleUPowerSyscall.h"
13 #include "LogindUPowerSyscall.h"
14 #include "UPowerSyscall.h"
22 IPowerSyscall
* CLinuxPowerSyscall::CreateInstance()
25 std::unique_ptr
<IPowerSyscall
> bestPowerManager
;
26 std::unique_ptr
<IPowerSyscall
> currPowerManager
;
30 std::list
< std::pair
< std::function
<bool()>,
31 std::function
<IPowerSyscall
*()> > > powerManagers
=
33 std::make_pair(CConsoleUPowerSyscall::HasConsoleKitAndUPower
,
34 [] { return new CConsoleUPowerSyscall(); }),
35 std::make_pair(CLogindUPowerSyscall::HasLogind
,
36 [] { return new CLogindUPowerSyscall(); }),
37 std::make_pair(CUPowerSyscall::HasUPower
,
38 [] { return new CUPowerSyscall(); })
40 for(const auto& powerManager
: powerManagers
)
42 if (powerManager
.first())
44 currPowerManager
.reset(powerManager
.second());
45 currCount
= currPowerManager
->CountPowerFeatures();
46 if (currCount
> bestCount
)
48 bestCount
= currCount
;
49 bestPowerManager
= std::move(currPowerManager
);
51 if (bestCount
== IPowerSyscall::MAX_COUNT_POWER_FEATURES
)
56 return bestPowerManager
.release();
59 return new CFallbackPowerSyscall();
62 void CLinuxPowerSyscall::Register()
64 IPowerSyscall::RegisterPowerSyscall(CLinuxPowerSyscall::CreateInstance
);