blob: d023ce9415ed81de6033fa17a6e5e68a0497dbfc [file] [log] [blame]
#pragma once
#include "config.h"
#include "bios_parser.hpp"
#include "bios_table.hpp"
#include "handler.hpp"
#include <stdint.h>
#include <ctime>
#include <functional>
#include <map>
#include <vector>
#include "libpldm/bios.h"
#include "libpldm/bios_table.h"
namespace pldm
{
using AttributeHandle = uint16_t;
using StringHandle = uint16_t;
using PossibleValuesByHandle = std::vector<StringHandle>;
namespace responder
{
namespace bios
{
using AttrTableEntryHandler =
std::function<void(const struct pldm_bios_attr_table_entry*)>;
void traverseBIOSAttrTable(const bios::Table& BIOSAttrTable,
AttrTableEntryHandler handler);
namespace internal
{
/** @brief Constructs all the BIOS Tables
*
* @param[in] request - Request message
* @param[in] payload_length - Request message payload length
* @param[in] biosJsonDir - path to fetch the BIOS json files
* @param[in] biosTablePath - path where the BIOS tables will be persisted
*/
Response buildBIOSTables(const pldm_msg* request, size_t payloadLength,
const char* biosJsonDir, const char* biosTablePath);
} // namespace internal
class Handler : public CmdHandler
{
public:
Handler();
/** @brief Handler for GetDateTime
*
* @param[in] request - Request message payload
* @return Response - PLDM Response message
*/
Response getDateTime(const pldm_msg* request, size_t payloadLength);
/** @brief Handler for GetBIOSTable
*
* @param[in] request - Request message
* @param[in] payload_length - Request message payload length
* @return Response - PLDM Response message
*/
Response getBIOSTable(const pldm_msg* request, size_t payloadLength);
/** @brief Handler for GetBIOSAttributeCurrentValueByHandle
*
* @param[in] request - Request message
* @param[in] payloadLength - Request message payload length
* @return Response - PLDM Response message
*/
Response getBIOSAttributeCurrentValueByHandle(const pldm_msg* request,
size_t payloadLength);
/** @brief Handler for SetDateTime
*
* @param[in] request - Request message payload
* @param[in] payloadLength - Request message payload length
* @return Response - PLDM Response message
*/
Response setDateTime(const pldm_msg* request, size_t payloadLength);
/** @brief Handler for setBIOSAttributeCurrentValue
*
* @param[in] request - Request message
* @param[in] payloadLength - Request message payload length
* @return Response - PLDM Response message
*/
Response setBIOSAttributeCurrentValue(const pldm_msg* request,
size_t payloadLength);
};
} // namespace bios
namespace utils
{
/** @brief Convert epoch time to BCD time
*
* @param[in] timeSec - Time got from epoch time in seconds
* @param[out] seconds - number of seconds in BCD
* @param[out] minutes - number of minutes in BCD
* @param[out] hours - number of hours in BCD
* @param[out] day - day of the month in BCD
* @param[out] month - month number in BCD
* @param[out] year - year number in BCD
*/
void epochToBCDTime(uint64_t timeSec, uint8_t& seconds, uint8_t& minutes,
uint8_t& hours, uint8_t& day, uint8_t& month,
uint16_t& year);
/** @brief Convert dec time to epoch time
*
* @param[in] seconds - number of seconds in dec
* @param[in] minutes - number of minutes in dec
* @param[in] hours - number of hours in dec
* @param[in] day - day of the month in dec
* @param[in] month - month number in dec
* @param[in] year - year number in dec
* @return time - epoch time
*/
std::time_t timeToEpoch(uint8_t seconds, uint8_t minutes, uint8_t hours,
uint8_t day, uint8_t month, uint16_t year);
} // namespace utils
} // namespace responder
} // namespace pldm