diff options
author | Matt Spinler <spinler@us.ibm.com> | 2019-08-27 16:31:57 -0500 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2019-09-10 20:16:56 +0000 |
commit | 5fa87f08fa9ae9a41acf7b5f3159d9916d97e40e (patch) | |
tree | e53321262171a83548a92cbac04da9a31776525b | |
parent | 5991389ad6d029f3c2a0662097e10c2f0693c974 (diff) | |
download | phosphor-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.cpp | 8 | ||||
-rw-r--r-- | extensions/openpower-pels/bcd_time.hpp | 8 | ||||
-rw-r--r-- | test/openpower-pels/bcd_time_test.cpp | 10 |
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)); +} |