| 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 |