blob: cf1a283040a0bffe9c69ed0c74ffc072452dab5a [file] [log] [blame]
/*
* SPDX-FileCopyrightText: Copyright (c) 2022-2024. All rights
* reserved. SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include <xyz/openbmc_project/Inventory/Source/DevicePresence/aserver.hpp>
#include <string>
namespace gpio_presence
{
enum GPIO_POLARITY
{
ACTIVE_HIGH,
ACTIVE_LOW,
};
class DevicePresence;
using DevicePresenceInterface =
sdbusplus::aserver::xyz::openbmc_project::inventory::source::DevicePresence<
DevicePresence>;
class DevicePresence
{
public:
DevicePresence(sdbusplus::async::context& ctx,
const std::vector<std::string>& gpioNames,
const std::vector<uint64_t>& gpioValues,
const std::string& deviceName,
const std::unordered_map<std::string, bool>& gpioState);
auto updateGPIOPresence(const std::string& gpioLine) -> void;
// @returns the object path of the 'detected' interface
auto getObjPath() const -> sdbusplus::message::object_path;
// computed from the state of the configured gpios
auto isPresent() -> bool;
// name of the device to detect, e.g. 'cable0'
// (taken from EM config)
const std::string deviceName;
// maps the name of the gpio to its polarity
std::map<std::string, GPIO_POLARITY> gpioPolarity;
private:
// reference to the map in presence manager
const std::unordered_map<std::string, bool>& gpioState;
sdbusplus::async::context& ctx;
auto updateDbusInterfaces() -> void;
// property added when the hw is detected
std::unique_ptr<DevicePresenceInterface> detectedIface = nullptr;
};
} // namespace gpio_presence