libpldmresponder: bios: Add SetDataTime

Implement the time setting function based on decode requests,
set values and return responses.
It contains the error response.
Unit tests only include tests for numerical conversion.

Tested:
 ~# pldmtool bios SetDateTime -d 20200101080000
 Encode request successfully
 Request Message:
 08 01 80 03 0d 00 00 08 01 01 20 20
 On first recv(),response == request : RC = 0
 Total length: 6
 Shutdown Socket successful :  RC = 0
 Response Message:
 08 01 00 03 0d 00
 Set date time successfully.

 ~# busctl get-property xyz.openbmc_project.Time.Manager\
 /xyz/openbmc_project/time/host\
 xyz.openbmc_project.Time.EpochTime Elapsed

 t 1577865726549597

The value of epochtime matches the time entered.

Signed-off-by: Xiaochao Ma <maxiaochao@inspur.com>
Change-Id: I8d123b993d515bcadba1468974907eb56d7e98b9
diff --git a/libpldmresponder/bios.hpp b/libpldmresponder/bios.hpp
index 41ac70c..4a42bf4 100644
--- a/libpldmresponder/bios.hpp
+++ b/libpldmresponder/bios.hpp
@@ -8,6 +8,7 @@
 
 #include <stdint.h>
 
+#include <ctime>
 #include <functional>
 #include <map>
 #include <vector>
@@ -56,7 +57,7 @@
     /** @brief Handler for GetDateTime
      *
      *  @param[in] request - Request message payload
-     *  @param[return] Response - PLDM Response message
+     *  @return Response - PLDM Response message
      */
     Response getDateTime(const pldm_msg* request, size_t payloadLength);
 
@@ -64,7 +65,7 @@
      *
      *  @param[in] request - Request message
      *  @param[in] payload_length - Request message payload length
-     *  @param[return] Response - PLDM Response message
+     *  @return Response - PLDM Response message
      */
     Response getBIOSTable(const pldm_msg* request, size_t payloadLength);
 
@@ -76,6 +77,14 @@
      */
     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);
 };
 
 } // namespace bios
@@ -96,6 +105,19 @@
 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