summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2019-08-27 16:31:57 -0500
committerMatt Spinler <spinler@us.ibm.com>2019-09-10 20:16:56 +0000
commit5fa87f08fa9ae9a41acf7b5f3159d9916d97e40e (patch)
treee53321262171a83548a92cbac04da9a31776525b
parent5991389ad6d029f3c2a0662097e10c2f0693c974 (diff)
downloadphosphor-logging-5fa87f08fa9ae9a41acf7b5f3159d9916d97e40e.tar.gz
phosphor-logging-5fa87f08fa9ae9a41acf7b5f3159d9916d97e40e.zip
PEL: Get BCD time from epoch milliseconds
Add a new BCD time conversion function which will be used in a future commit to convert an OpenBMC event log timestamp into BCD time. Signed-off-by: Matt Spinler <spinler@us.ibm.com> Change-Id: I08f585d1663bf2d2f73d42b8716756d8c7e3559e
-rw-r--r--extensions/openpower-pels/bcd_time.cpp8
-rw-r--r--extensions/openpower-pels/bcd_time.hpp8
-rw-r--r--test/openpower-pels/bcd_time_test.cpp10
3 files changed, 26 insertions, 0 deletions
diff --git a/extensions/openpower-pels/bcd_time.cpp b/extensions/openpower-pels/bcd_time.cpp
index bb80f1a..675b625 100644
--- a/extensions/openpower-pels/bcd_time.cpp
+++ b/extensions/openpower-pels/bcd_time.cpp
@@ -43,6 +43,14 @@ BCDTime getBCDTime(std::chrono::time_point<std::chrono::system_clock>& time)
return bcd;
}
+BCDTime getBCDTime(uint64_t epochMS)
+{
+ std::chrono::milliseconds ms{epochMS};
+ std::chrono::time_point<std::chrono::system_clock> time{ms};
+
+ return getBCDTime(time);
+}
+
Stream& operator>>(Stream& s, BCDTime& time)
{
s >> time.yearMSB >> time.yearLSB >> time.month >> time.day >> time.hour;
diff --git a/extensions/openpower-pels/bcd_time.hpp b/extensions/openpower-pels/bcd_time.hpp
index e218756..86d9f4e 100644
--- a/extensions/openpower-pels/bcd_time.hpp
+++ b/extensions/openpower-pels/bcd_time.hpp
@@ -36,6 +36,14 @@ struct BCDTime
BCDTime getBCDTime(std::chrono::time_point<std::chrono::system_clock>& time);
/**
+ * @brief Converts the number of milliseconds since the epoch into BCD time
+ *
+ * @param[in] milliseconds - Number of milliseconds since the epoch
+ * @return BCDTime - the BCD time
+ */
+BCDTime getBCDTime(uint64_t milliseconds);
+
+/**
* @brief Converts a number to a BCD.
*
* For example 32 -> 0x32.
diff --git a/test/openpower-pels/bcd_time_test.cpp b/test/openpower-pels/bcd_time_test.cpp
index f1b7663..c8342a2 100644
--- a/test/openpower-pels/bcd_time_test.cpp
+++ b/test/openpower-pels/bcd_time_test.cpp
@@ -78,3 +78,13 @@ TEST(BCDTimeTest, ConvertTest)
EXPECT_EQ(timeInBCD.seconds, 0x42);
EXPECT_EQ(timeInBCD.hundredths, 0x00);
}
+
+TEST(BCDTimeTest, ConvertFromMSTest)
+{
+ auto now = std::chrono::system_clock::now();
+ uint64_t ms = std::chrono::duration_cast<std::chrono::milliseconds>(
+ now.time_since_epoch())
+ .count();
+
+ ASSERT_EQ(getBCDTime(now), getBCDTime(ms));
+}
OpenPOWER on IntegriCloud