Skip to content

Commit

Permalink
fix the delta time init and event number calculation (#12862)
Browse files Browse the repository at this point in the history
  • Loading branch information
yunhanw-google authored and pull[bot] committed Jan 25, 2022
1 parent 0b15dd3 commit 2605273
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 35 deletions.
4 changes: 3 additions & 1 deletion src/app/EventLoggingTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ class EventOptions
struct EventLoadOutContext
{
EventLoadOutContext(TLV::TLVWriter & aWriter, PriorityLevel aPriority, EventNumber aStartingEventNumber) :
mWriter(aWriter), mPriority(aPriority), mStartingEventNumber(aStartingEventNumber), mCurrentEventNumber(0), mFirst(true)
mWriter(aWriter), mPriority(aPriority), mStartingEventNumber(aStartingEventNumber), mCurrentEventNumber(0), mFirst(true),
mSamePriorityEvent(false)
{}

TLV::TLVWriter & mWriter;
Expand All @@ -161,6 +162,7 @@ struct EventLoadOutContext
size_t mEventCount = 0;
ClusterInfo * mpInterestedEventPaths = nullptr;
bool mFirst = true;
bool mSamePriorityEvent = false;
};
} // namespace app
} // namespace chip
27 changes: 26 additions & 1 deletion src/app/EventManagement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,10 @@ CHIP_ERROR EventManagement::EventIterator(const TLVReader & aReader, size_t aDep
if (event.mPriority == apEventLoadOutContext->mPriority)
{
apEventLoadOutContext->mCurrentTime.mValue += event.mDeltaTime.mValue;
// If the retrieved event has the same priority as the one set by FetchEventSince, we need to use mSamePriorityEvent to
// increase the event number after encoding the current event number. Then this updated event number will be used by
// FetchEventSince for next use
apEventLoadOutContext->mSamePriorityEvent = true;
if (IsInterestedEventPaths(apEventLoadOutContext, event))
{
return CHIP_EVENT_ID_FOUND;
Expand Down Expand Up @@ -692,7 +696,13 @@ CHIP_ERROR EventManagement::CopyEventsSince(const TLVReader & aReader, size_t aD
loadOutContext->mFirst = false;
loadOutContext->mEventCount++;
}
loadOutContext->mCurrentEventNumber++;
if (loadOutContext->mSamePriorityEvent)
{
// Update to next Event Number
loadOutContext->mCurrentEventNumber++;
loadOutContext->mSamePriorityEvent = false;
}

return err;
}

Expand Down Expand Up @@ -771,6 +781,21 @@ CHIP_ERROR EventManagement::FetchEventParameters(const TLVReader & aReader, size
envelope->mFieldsToRead |= 1 << to_underlying(EventDataIB::Tag::kPriority);
}

if (reader.GetTag() == TLV::ContextTag(to_underlying(EventDataIB::Tag::kDeltaSystemTimestamp)))
{
uint64_t deltaSystemTime;
ReturnErrorOnFailure(reader.Get(deltaSystemTime));
envelope->mDeltaTime.mType = Timestamp::Type::kSystem;
envelope->mDeltaTime.mValue = deltaSystemTime;
}

if (reader.GetTag() == TLV::ContextTag(to_underlying(EventDataIB::Tag::kDeltaEpochTimestamp)))
{
uint64_t deltaEpochTime;
ReturnErrorOnFailure(reader.Get(deltaEpochTime));
envelope->mDeltaTime.mType = Timestamp::Type::kEpoch;
envelope->mDeltaTime.mValue = deltaEpochTime;
}
return CHIP_NO_ERROR;
}

Expand Down
34 changes: 1 addition & 33 deletions src/app/reporting/Engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,7 @@ CHIP_ERROR Engine::BuildSingleReportDataEventReports(ReportDataMessage::Builder
CHIP_ERROR err = CHIP_NO_ERROR;
size_t eventCount = 0;
TLV::TLVWriter backup;
bool eventClean = true;
EventNumber initialEvents[kNumPriorityLevel];
bool eventClean = true;
ClusterInfo * clusterInfoList = apReadHandler->GetEventClusterInfolist();
EventNumber * eventNumberList = apReadHandler->GetVendedEventNumberList();
EventManagement & eventManager = EventManagement::GetInstance();
Expand All @@ -250,17 +249,6 @@ CHIP_ERROR Engine::BuildSingleReportDataEventReports(ReportDataMessage::Builder
// skip the rest of processing
VerifyOrExit(eventManager.IsValid(), ChipLogError(DataManagement, "EventManagement has not yet initialized"));

memcpy(initialEvents, eventNumberList, sizeof(initialEvents));

for (size_t index = 0; index < kNumPriorityLevel; index++)
{
EventNumber tmpNumber = eventManager.GetFirstEventNumber(static_cast<PriorityLevel>(index));
if (tmpNumber > initialEvents[index])
{
initialEvents[index] = tmpNumber;
}
}

eventClean = apReadHandler->CheckEventClean(eventManager);

// proceed only if there are new events.
Expand Down Expand Up @@ -438,26 +426,6 @@ CHIP_ERROR Engine::BuildAndSendSingleReportData(ReadHandler * apReadHandler)
err = reportDataWriter.Finalize(&bufHandle);
SuccessOrExit(err);

#if CHIP_CONFIG_IM_ENABLE_SCHEMA_CHECK
{
ChipLogDetail(DataManagement, "<RE> Dumping report data...");
chip::System::PacketBufferTLVReader reader;
ReportDataMessage::Parser report;

reader.Init(bufHandle.Retain());
reader.Next();

err = report.Init(reader);
SuccessOrExit(err);

if ((err = report.CheckSchemaValidity()) != CHIP_NO_ERROR)
{
ChipLogError(DataManagement, "<RE> Schema check failed: %s", chip::ErrorStr(err));
}
SuccessOrExit(err);
}
#endif // CHIP_CONFIG_IM_ENABLE_SCHEMA_CHECK

ChipLogDetail(DataManagement, "<RE> Sending report (payload has %" PRIu32 " bytes)...", reportDataWriter.GetLengthWritten());
err = SendReport(apReadHandler, std::move(bufHandle), hasMoreChunks);
VerifyOrExit(err == CHIP_NO_ERROR,
Expand Down

0 comments on commit 2605273

Please sign in to comment.