blob: 1f95ffa34411c420c8165ff13f82c4f6f1823ce6 [file] [log] [blame]
Matthew Barth0c4b1572020-10-22 14:39:46 -05001/**
Matthew Barth41a34082021-01-27 15:31:48 -06002 * Copyright © 2021 IBM Corporation
Matthew Barth0c4b1572020-10-22 14:39:46 -05003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#include "default_floor.hpp"
17
Matthew Barth12cb1252021-03-08 16:47:30 -060018#include "../manager.hpp"
19#include "../zone.hpp"
20#include "group.hpp"
Matthew Barth0c4b1572020-10-22 14:39:46 -050021
22#include <nlohmann/json.hpp>
23
Matthew Barth41a34082021-01-27 15:31:48 -060024#include <algorithm>
25#include <tuple>
26
Matthew Barth0c4b1572020-10-22 14:39:46 -050027namespace phosphor::fan::control::json
28{
29
30using json = nlohmann::json;
31
32DefaultFloor::DefaultFloor(const json&) : ActionBase(DefaultFloor::name)
33{
Matthew Barth41a34082021-01-27 15:31:48 -060034 // There are no JSON configuration parameters for this action
Matthew Barth0c4b1572020-10-22 14:39:46 -050035}
36
Matthew Barth41a34082021-01-27 15:31:48 -060037void DefaultFloor::run(Zone& zone, const Group& group)
Matthew Barth0c4b1572020-10-22 14:39:46 -050038{
Matthew Barth12cb1252021-03-08 16:47:30 -060039 const auto& members = group.getMembers();
40 auto isMissingOwner =
41 std::any_of(members.begin(), members.end(),
42 [&intf = group.getInterface()](const auto& member) {
43 return !Manager::hasOwner(member, intf);
44 });
45 if (isMissingOwner)
Matthew Barth41a34082021-01-27 15:31:48 -060046 {
Matthew Barth12cb1252021-03-08 16:47:30 -060047 zone.setFloor(zone.getDefaultFloor());
Matthew Barth41a34082021-01-27 15:31:48 -060048 }
49 // Update fan control floor change allowed
Matthew Barth12cb1252021-03-08 16:47:30 -060050 zone.setFloorChangeAllow(group.getName(), !isMissingOwner);
Matthew Barth0c4b1572020-10-22 14:39:46 -050051}
52
53} // namespace phosphor::fan::control::json