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