21 bool usableTimeBase(
const TimeBase& timeBase) {
27 const bool ascending = timeBaseValue(from) < timeBaseValue(to);
60 if (timeBaseValue(in_tb) == timeBaseValue(out_tb)) {
73 const I64 out_time_us = in_time_us + offset_us;
74 if ((out_time_us < 0) || (out_time_us >
MAX_TIME_US)) {
88 void TimeConverter ::SET_OFFSET_cmdHandler(
FwOpcodeType opCode,
94 switch (this->storeOffset(from, to, offset_us)) {
99 case StoreStatus::TABLE_FULL:
102 case StoreStatus::INVALID:
109 void TimeConverter ::CLEAR_OFFSETS_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq) {
111 this->m_offsets.
clear();
129 if (timeBaseValue(from) == timeBaseValue(to)) {
146 void TimeConverter ::DUMP_OFFSETS_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq) {
147 if (this->m_offsets.
getSize() == 0) {
150 for (
auto it = this->m_offsets.
begin(); it != this->m_offsets.
end(); ++it) {
163 const Fw::Success status = this->m_offsets.
find(canonicalPair(from, to), stored_us);
166 offset_us = (timeBaseValue(from) < timeBaseValue(to)) ? stored_us : -stored_us;
171 TimeConverter::StoreStatus TimeConverter ::storeOffset(
const TimeBase& from,
const TimeBase& to, I64 offset_us) {
173 return StoreStatus::INVALID;
175 if (timeBaseValue(from) == timeBaseValue(to)) {
177 return StoreStatus::INVALID;
182 return StoreStatus::INVALID;
185 const bool ascending = timeBaseValue(from) < timeBaseValue(to);
186 const I64 stored_us = ascending ? offset_us : -offset_us;
191 return StoreStatus::TABLE_FULL;
193 return StoreStatus::OK;
199 if (!usableTimeBase(from)) {
203 if (!usableTimeBase(to)) {
TimeBase::T get_lower() const
Get member lower.
void log_WARNING_LO_InvalidTime_ThrottleClear()
Reset throttle value for InvalidTime.
void log_WARNING_LO_InvalidTime(const TimeBase &in_tb, const TimeBase &out_tb, I64 offset_us, I64 in_time_us)
ConstIterator end() const override
conversion result is not representable as an Fw::Time
void log_ACTIVITY_HI_OffsetReport(const TimeBase &from, const TimeBase &to, I64 offset_us) const
FwIdType FwOpcodeType
The type of a command opcode.
TimeBase::T get_to() const
Get member to.
PlatformSizeType FwSizeType
void log_WARNING_LO_IdenticalTimeBases_ThrottleClear()
Reset throttle value for IdenticalTimeBases.
TimeConverter(const char *const compName)
Construct TimeConverter object.
Don't care value for sequences. If FwTimeBaseStoreType is changed, value should be changed (Required)...
Auto-generated base for TimeConverter component.
TimeBase getTimeBase() const
void log_WARNING_HI_OffsetTableFull(const TimeBase &from, const TimeBase &to, U32 capacity)
I64 get_offset_us() const
Get member offset_us.
Enum representing a command response.
No time base has been established (Required)
void log_WARNING_HI_OffsetTableFull_ThrottleClear()
Reset throttle value for OffsetTableFull.
TimeBase::T get_upper() const
Get member upper.
void log_WARNING_LO_NoConversionAvailable(const TimeBase &in_tb, const TimeBase &out_tb)
Success insert(const K &key, const V &value) override
void log_WARNING_HI_UnusableTimeBase_ThrottleClear()
Reset throttle value for UnusableTimeBase.
void set(U32 seconds, U32 useconds)
void clear() override
Clear the map.
~TimeConverter()
Destroy TimeConverter object.
void log_WARNING_HI_UnusableTimeBase(const TimeBase &tb)
void log_ACTIVITY_HI_OffsetTableEmpty() const
ConstIterator begin() const override
void log_WARNING_HI_OffsetOutOfRange(const TimeBase &from, const TimeBase &to, I64 offset_us)
TimeBase::T get_from() const
Get member from.
Result of a time base conversion.
Command successfully executed.
void log_ACTIVITY_HI_OffsetsCleared(U32 entries) const
static constexpr I64 US_PER_SECOND
Microseconds in one second.
void log_ACTIVITY_HI_OffsetSet(const TimeBase &from, const TimeBase &to, I64 offset_us) const
Command had execution error.
void log_WARNING_LO_NoConversionAvailable_ThrottleClear()
Reset throttle value for NoConversionAvailable.
FwTimeContextStoreType getContext() const
no offset is stored for the requested pair of time bases
Success find(const K &key, V &value) const override
PlatformIndexType FwIndexType
Command failed validation.
RateGroupDivider component implementation.
void log_WARNING_LO_IdenticalTimeBases(const TimeBase &tb)
U16 FwTimeBaseStoreType
The type used to serialize a time base value.
enum T e
The raw enum value.
void log_WARNING_HI_OffsetOutOfRange_ThrottleClear()
Reset throttle value for OffsetOutOfRange.
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
FwSizeType getSize() const override
Define enumeration for Time base types.
static constexpr I64 MAX_TIME_US
Largest time representable by an Fw::Time, in microseconds.
void log_WARNING_LO_NoOffsetStored(const TimeBase &from, const TimeBase &to) const