blob: 5ca3c105d4fb42f507847d5cea16b651f8ef7dd1 [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>
Matthew Barth41a34082021-01-27 15:31:48 -060025
Matthew Barth0c4b1572020-10-22 14:39:46 -050026namespace phosphor::fan::control::json
27{
28
29using json = nlohmann::json;
30
Matthew Barth19c77492021-04-08 10:06:06 -050031DefaultFloor::DefaultFloor(const json& jsonObj,
32 const std::vector<Group>& groups) :
33 ActionBase(jsonObj, groups)
Matthew Barth0c4b1572020-10-22 14:39:46 -050034{
Matthew Barth41a34082021-01-27 15:31:48 -060035 // There are no JSON configuration parameters for this action
Matthew Barth0c4b1572020-10-22 14:39:46 -050036}
37
Matthew Barth6d2476c2021-04-08 10:48:57 -050038void DefaultFloor::run(Zone& zone)
Matthew Barth0c4b1572020-10-22 14:39:46 -050039{
Matthew Barth6d2476c2021-04-08 10:48:57 -050040 for (const auto& group : _groups)
Matthew Barth41a34082021-01-27 15:31:48 -060041 {
Matthew Barth6d2476c2021-04-08 10:48:57 -050042 const auto& members = group.getMembers();
43 auto isMissingOwner =
44 std::any_of(members.begin(), members.end(),
45 [&intf = group.getInterface()](const auto& member) {
Patrick Williamsdfddd642024-08-16 15:21:51 -040046 return !Manager::hasOwner(member, intf);
47 });
Matthew Barth6d2476c2021-04-08 10:48:57 -050048 if (isMissingOwner)
49 {
50 zone.setFloor(zone.getDefaultFloor());
51 }
52 // Update fan control floor change allowed
53 zone.setFloorChangeAllow(group.getName(), !isMissingOwner);
Matthew Barth41a34082021-01-27 15:31:48 -060054 }
Matthew Barth0c4b1572020-10-22 14:39:46 -050055}
56
57} // namespace phosphor::fan::control::json