| Alexander Hansen | 8c4b1d9 | 2024-11-04 14:06:24 +0100 | [diff] [blame] | 1 | /* | 
 | 2 |  * SPDX-FileCopyrightText: Copyright (c) 2022-2024. All rights | 
 | 3 |  * reserved. SPDX-License-Identifier: Apache-2.0 | 
 | 4 |  */ | 
 | 5 | #pragma once | 
 | 6 |  | 
 | 7 | #include <xyz/openbmc_project/Inventory/Source/DevicePresence/aserver.hpp> | 
 | 8 |  | 
 | 9 | #include <string> | 
 | 10 |  | 
 | 11 | namespace gpio_presence | 
 | 12 | { | 
 | 13 |  | 
 | 14 | enum GPIO_POLARITY | 
 | 15 | { | 
 | 16 |     ACTIVE_HIGH, | 
 | 17 |     ACTIVE_LOW, | 
 | 18 | }; | 
 | 19 |  | 
 | 20 | class DevicePresence; | 
 | 21 |  | 
 | 22 | using DevicePresenceInterface = | 
 | 23 |     sdbusplus::aserver::xyz::openbmc_project::inventory::source::DevicePresence< | 
 | 24 |         DevicePresence>; | 
 | 25 |  | 
 | 26 | class DevicePresence | 
 | 27 | { | 
 | 28 |   public: | 
 | 29 |     DevicePresence(sdbusplus::async::context& ctx, | 
 | 30 |                    const std::vector<std::string>& gpioNames, | 
 | 31 |                    const std::vector<uint64_t>& gpioValues, | 
 | 32 |                    const std::string& deviceName, | 
 | 33 |                    const std::unordered_map<std::string, bool>& gpioState); | 
 | 34 |  | 
 | 35 |     auto updateGPIOPresence(const std::string& gpioLine) -> void; | 
 | 36 |  | 
 | 37 |     // @returns the object path of the 'detected' interface | 
 | 38 |     auto getObjPath() const -> sdbusplus::message::object_path; | 
 | 39 |  | 
 | 40 |     // computed from the state of the configured gpios | 
 | 41 |     auto isPresent() -> bool; | 
 | 42 |  | 
 | 43 |     // name of the device to detect, e.g. 'cable0' | 
 | 44 |     // (taken from EM config) | 
 | 45 |     const std::string deviceName; | 
 | 46 |  | 
 | 47 |     // maps the name of the gpio to its polarity | 
 | 48 |     std::map<std::string, GPIO_POLARITY> gpioPolarity; | 
 | 49 |  | 
 | 50 |   private: | 
 | 51 |     // reference to the map in presence manager | 
 | 52 |     const std::unordered_map<std::string, bool>& gpioState; | 
 | 53 |  | 
 | 54 |     sdbusplus::async::context& ctx; | 
 | 55 |  | 
 | 56 |     auto updateDbusInterfaces() -> void; | 
 | 57 |  | 
 | 58 |     // property added when the hw is detected | 
 | 59 |     std::unique_ptr<DevicePresenceInterface> detectedIface = nullptr; | 
 | 60 | }; | 
 | 61 |  | 
 | 62 | } // namespace gpio_presence |