[meshcop] simplify Timestamp TLV Get/Set 48-bit seconds value (#4638)

This commit is contained in:
Jonathan Hui
2020-03-05 09:55:03 -08:00
parent 6e992e1f3e
commit b19d2cc8ce
+8 -19
View File
@@ -47,6 +47,7 @@ namespace ot {
namespace MeshCoP {
using ot::Encoding::BigEndian::HostSwap16;
using ot::Encoding::BigEndian::HostSwap32;
/**
* This class implements Timestamp generation and parsing.
@@ -60,11 +61,7 @@ public:
* This method initializes the Timestamp
*
*/
void Init(void)
{
memset(mSeconds, 0, sizeof(mSeconds));
mTicks = 0;
}
void Init(void) { memset(this, 0, sizeof(*this)); }
/**
* This method compares this timestamp to another.
@@ -86,14 +83,7 @@ public:
*/
uint64_t GetSeconds(void) const
{
uint64_t seconds = 0;
for (size_t i = 0; i < sizeof(mSeconds); i++)
{
seconds = (seconds << 8) | mSeconds[i];
}
return seconds;
return (static_cast<uint64_t>(HostSwap16(mSeconds16)) << 32) + HostSwap32(mSeconds32);
}
/**
@@ -104,10 +94,8 @@ public:
*/
void SetSeconds(uint64_t aSeconds)
{
for (size_t i = 0; i < sizeof(mSeconds); i++, aSeconds >>= 8)
{
mSeconds[sizeof(mSeconds) - 1 - i] = aSeconds & 0xff;
}
mSeconds16 = HostSwap16(static_cast<uint16_t>(aSeconds >> 32));
mSeconds32 = HostSwap32(static_cast<uint32_t>(aSeconds & 0xffffffff));
}
/**
@@ -150,8 +138,6 @@ public:
}
private:
uint8_t mSeconds[6];
enum
{
kTicksOffset = 1,
@@ -159,6 +145,9 @@ private:
kAuthoritativeOffset = 0,
kAuthoritativeMask = 1 << kAuthoritativeOffset,
};
uint16_t mSeconds16; // bits 32-47
uint32_t mSeconds32; // bits 0-31
uint16_t mTicks;
} OT_TOOL_PACKED_END;