Adding host control signal monitoring support
Adds in support to subscribe and monitor for the signal
indicating the host command has been processed
Change-Id: Icab302fc5bd75ecd1d6804d7ab3196e6cceda3b1
Signed-off-by: Andrew Geissler <andrewg@us.ibm.com>
diff --git a/host_check_main.cpp b/host_check_main.cpp
index 6dab9cb..f4e895c 100644
--- a/host_check_main.cpp
+++ b/host_check_main.cpp
@@ -1,20 +1,77 @@
#include <cstdlib>
+#include <unistd.h>
#include <sdbusplus/bus.hpp>
+#include <sdbusplus/bus/match.hpp>
#include <phosphor-logging/log.hpp>
+#include <xyz/openbmc_project/Control/Host/server.hpp>
using namespace phosphor::logging;
+using namespace sdbusplus::xyz::openbmc_project::Control::server;
+
+
+bool cmdDone = false;
+bool hostRunning = false;
+
+// Function called on host control signals
+static int hostControlSignal(sd_bus_message* msg,
+ void* userData,
+ sd_bus_error* retError)
+{
+ std::string cmdCompleted{};
+ std::string cmdStatus{};
+
+ auto sdPlusMsg = sdbusplus::message::message(msg);
+ sdPlusMsg.read(cmdCompleted, cmdStatus);
+
+ log<level::DEBUG>("Host control signal values",
+ entry("COMMAND=%s",cmdCompleted.c_str()),
+ entry("STATUS=%s",cmdStatus.c_str()));
+
+ // Verify it's the command this code is interested in and then check status
+ if(Host::convertCommandFromString(cmdCompleted) == Host::Command::Heartbeat)
+ {
+ cmdDone = true;
+
+ if(Host::convertResultFromString(cmdStatus) == Host::Result::Success)
+ {
+ hostRunning = true;
+ }
+ }
+
+ return 0;
+}
int main(int argc, char *argv[])
{
log<level::INFO>("Check if host is running");
- // Setup Signal Handler
+ auto bus = sdbusplus::bus::new_default();
- // Initiate heartbeat command
+ // Setup Signal Handler
+ sdbusplus::bus::match::match hostControlSignals(bus,
+ "type='signal',"
+ "member='CommandComplete',"
+ "path='/xyz/openbmc_project/control/host0',"
+ "interface='xyz.openbmc_project.Control.Host'",
+ hostControlSignal,
+ nullptr);
+
+ // TODO Initiate heartbeat command
// Wait for signal
+ while(!cmdDone)
+ {
+ bus.process_discard();
+ if (cmdDone) break;
+ bus.wait();
+ }
// If host running then create file
+ if(hostRunning)
+ {
+ // TODO - Add file creation
+ log<level::INFO>("Host is running!");
+ }
return 0;
}