1 #pragma once 2 3 #include "config.h" 4 5 #include "libpldm/bios.h" 6 #include "libpldm/bios_table.h" 7 8 #include "bios_config.hpp" 9 #include "bios_table.hpp" 10 #include "pldmd/handler.hpp" 11 12 #include <stdint.h> 13 14 #include <ctime> 15 #include <functional> 16 #include <map> 17 #include <vector> 18 19 namespace pldm 20 { 21 22 namespace responder 23 { 24 25 namespace bios 26 { 27 28 class Handler : public CmdHandler 29 { 30 public: 31 Handler(); 32 33 /** @brief Handler for GetDateTime 34 * 35 * @param[in] request - Request message payload 36 * @return Response - PLDM Response message 37 */ 38 Response getDateTime(const pldm_msg* request, size_t payloadLength); 39 40 /** @brief Handler for GetBIOSTable 41 * 42 * @param[in] request - Request message 43 * @param[in] payload_length - Request message payload length 44 * @return Response - PLDM Response message 45 */ 46 Response getBIOSTable(const pldm_msg* request, size_t payloadLength); 47 48 /** @brief Handler for GetBIOSAttributeCurrentValueByHandle 49 * 50 * @param[in] request - Request message 51 * @param[in] payloadLength - Request message payload length 52 * @return Response - PLDM Response message 53 */ 54 Response getBIOSAttributeCurrentValueByHandle(const pldm_msg* request, 55 size_t payloadLength); 56 57 /** @brief Handler for SetDateTime 58 * 59 * @param[in] request - Request message payload 60 * @param[in] payloadLength - Request message payload length 61 * @return Response - PLDM Response message 62 */ 63 Response setDateTime(const pldm_msg* request, size_t payloadLength); 64 65 /** @brief Handler for setBIOSAttributeCurrentValue 66 * 67 * @param[in] request - Request message 68 * @param[in] payloadLength - Request message payload length 69 * @return Response - PLDM Response message 70 */ 71 Response setBIOSAttributeCurrentValue(const pldm_msg* request, 72 size_t payloadLength); 73 74 private: 75 BIOSConfig biosConfig; 76 }; 77 78 } // namespace bios 79 80 namespace utils 81 { 82 83 /** @brief Convert epoch time to BCD time 84 * 85 * @param[in] timeSec - Time got from epoch time in seconds 86 * @param[out] seconds - number of seconds in BCD 87 * @param[out] minutes - number of minutes in BCD 88 * @param[out] hours - number of hours in BCD 89 * @param[out] day - day of the month in BCD 90 * @param[out] month - month number in BCD 91 * @param[out] year - year number in BCD 92 */ 93 void epochToBCDTime(uint64_t timeSec, uint8_t& seconds, uint8_t& minutes, 94 uint8_t& hours, uint8_t& day, uint8_t& month, 95 uint16_t& year); 96 97 /** @brief Convert dec time to epoch time 98 * 99 * @param[in] seconds - number of seconds in dec 100 * @param[in] minutes - number of minutes in dec 101 * @param[in] hours - number of hours in dec 102 * @param[in] day - day of the month in dec 103 * @param[in] month - month number in dec 104 * @param[in] year - year number in dec 105 * @return time - epoch time 106 */ 107 std::time_t timeToEpoch(uint8_t seconds, uint8_t minutes, uint8_t hours, 108 uint8_t day, uint8_t month, uint16_t year); 109 } // namespace utils 110 111 } // namespace responder 112 } // namespace pldm 113