blob: fae9f2bde58ceb2076bb727779406c9b99fd4161 [file] [log] [blame]
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include "ec_util.hpp"
#include "host_command_interface.hpp"
#include <boost/asio/io_context.hpp>
#include <sdbusplus/bus.hpp>
#include <xyz/openbmc_project/Control/Hoth/State/server.hpp>
#include <future>
namespace google
{
namespace hoth
{
template <typename... T>
using ServerObject = typename sdbusplus::server::object::object<T...>;
using HothStateInterface =
sdbusplus::xyz::openbmc_project::Control::Hoth::server::State;
using HothStateObject = ServerObject<HothStateInterface>;
/** @class HothState
* @brief Hoth state interface implementation.
* @details A concrete implementation for
* xyz.openbmc_project.Control.Hoth.State
* DBus API.
*/
class HothState : public HothStateObject
{
public:
/** @brief Constructs Hoth Control Interface
*
* @param[in] bus - The Dbus bus object
* @param[in] io - The io_context handle
* @param[in] objPath - The Dbus object path
* @param[in] hostCmd - Reference to the host command interface
* @param[in] ecutil - Reference to the ec utility interface
*/
HothState(sdbusplus::bus::bus& bus, boost::asio::io_context& io,
const char* objPath, internal::HostCommand* hostCmd,
internal::EcUtil* ecutil);
/** @brief Updates buffered hoth metrics **/
void updateMetrics();
private:
/** @brief Handler function for ASIO timer **/
void timerUpdateMetrics();
/** @brief sdbusplus DBus bus connection. */
sdbusplus::bus::bus& bus;
/** @brief io_context handle */
boost::asio::io_context& io;
/** @brief Connection to Hoth for sending and receiving host commands */
internal::HostCommand* hostCmd = nullptr;
/** @brief EC utility object to access the utility function from Hoth */
internal::EcUtil* ecUtil = nullptr;
/** @brief Timer that periodically collects metrics from Hoth */
boost::asio::steady_timer timer;
/** @brief Buffered statistics queried from Hoth */
ec_response_statistics statistics;
};
} // namespace hoth
} // namespace google