1 
2 #pragma once
3 #include "button_factory.hpp"
4 #include "button_interface.hpp"
5 #include "common.hpp"
6 #include "config.hpp"
7 #include "gpio.hpp"
8 #include "xyz/openbmc_project/Chassis/Buttons/Button/server.hpp"
9 #include "xyz/openbmc_project/Chassis/Common/error.hpp"
10 
11 #include <unistd.h>
12 
13 #include <phosphor-logging/elog-errors.hpp>
14 #include <phosphor-logging/lg2.hpp>
15 
16 static constexpr auto DEBUG_SELECTOR_BUTTON = "DEBUG_SELECTOR_BUTTON";
17 
18 class DebugHostSelector final :
19     public sdbusplus::server::object_t<
20         sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Button>,
21     public ButtonIface
22 
23 {
24   public:
25     DebugHostSelector(sdbusplus::bus_t& bus, const char* path, EventPtr& event,
26                       ButtonConfig& buttonCfg) :
27         sdbusplus::server::object_t<
28             sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Button>(
29             bus, path, action::defer_emit),
30         ButtonIface(bus, event, buttonCfg)
31     {
32         init();
33         emit_object_added();
34     }
35 
36     ~DebugHostSelector()
37     {
38         deInit();
39     }
40 
41     void simPress() override;
42     void simRelease() override;
43     void simLongPress() override;
44     void handleEvent(sd_event_source* es, int fd, uint32_t revents) override;
45 
46     static constexpr std::string getFormFactorName()
47     {
48         return DEBUG_SELECTOR_BUTTON;
49     }
50 
51     static constexpr std::string getDbusObjectPath()
52     {
53         return DBG_HS_DBUS_OBJECT_NAME;
54     }
55 };
56