1 #pragma once 2 #include <string> 3 #include <tuple> 4 #include <vector> 5 #include <sdbusplus/server.hpp> 6 7 namespace phosphor 8 { 9 namespace fan 10 { 11 namespace control 12 { 13 14 class Zone; 15 16 constexpr auto propertyNamePos = 0; 17 constexpr auto propertyInterfacePos = 1; 18 constexpr auto propertyPathPos = 2; 19 constexpr auto propertyValuePos = 3; 20 21 // TODO openbmc/openbmc#1769: Support more property types. 22 using ConditionProperty = std::tuple<std::string, 23 std::string, 24 std::string, 25 bool>; 26 27 constexpr auto conditionTypePos = 0; 28 constexpr auto conditionPropertyListPos = 1; 29 using Condition = std::tuple<std::string, 30 std::vector<ConditionProperty>>; 31 32 using PropertyVariantType = sdbusplus::message::variant<bool, int64_t>; 33 34 constexpr auto fanNamePos = 0; 35 constexpr auto sensorListPos = 1; 36 using FanDefinition = std::tuple<std::string, std::vector<std::string>>; 37 38 constexpr auto intfPos = 0; 39 constexpr auto propPos = 1; 40 using Group = std::map<std::string, std::tuple<std::string, std::string>>; 41 using Handler = std::function<void(sdbusplus::bus::bus&, 42 sdbusplus::message::message&, 43 Zone&)>; 44 using Action = std::function<void(Zone&, const Group&)>; 45 46 constexpr auto pcPathPos = 0; 47 constexpr auto pcIntfPos = 1; 48 constexpr auto pcPropPos = 2; 49 constexpr auto pcValuePos = 3; 50 using PrecondGroup = std::tuple<std::string, 51 std::string, 52 std::string, 53 PropertyVariantType>; 54 55 constexpr auto signaturePos = 0; 56 constexpr auto handlerObjPos = 1; 57 using PropertyChange = std::tuple<std::string, Handler>; 58 59 constexpr auto groupPos = 0; 60 constexpr auto actionPos = 1; 61 constexpr auto propChangeListPos = 2; 62 using SetSpeedEvent = std::tuple<Group, 63 Action, 64 std::vector<PropertyChange>>; 65 66 constexpr auto eventGroupPos = 0; 67 constexpr auto eventHandlerPos = 1; 68 constexpr auto eventActionPos = 2; 69 using EventData = std::tuple<Group, Handler, Action>; 70 71 constexpr auto signalEventDataPos = 0; 72 constexpr auto signalMatchPos = 1; 73 using SignalEvent = 74 std::tuple<std::unique_ptr<EventData>, 75 std::unique_ptr<sdbusplus::server::match::match>>; 76 77 constexpr auto zoneNumPos = 0; 78 constexpr auto fullSpeedPos = 1; 79 constexpr auto floorSpeedPos = 2; 80 constexpr auto incDelayPos = 3; 81 constexpr auto decIntervalPos = 4; 82 constexpr auto fanListPos = 5; 83 constexpr auto setSpeedEventsPos = 6; 84 using ZoneDefinition = std::tuple<size_t, 85 uint64_t, 86 uint64_t, 87 size_t, 88 size_t, 89 std::vector<FanDefinition>, 90 std::vector<SetSpeedEvent>>; 91 92 constexpr auto conditionListPos = 0; 93 constexpr auto zoneListPos = 1; 94 using ZoneGroup = std::tuple<std::vector<Condition>, 95 std::vector<ZoneDefinition>>; 96 97 } 98 } 99 } 100