Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[OTA] Set the current state on every attempt for CASE session establishment #15846

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 8 additions & 15 deletions src/app/clusters/ota-requestor/OTARequestor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -385,11 +385,9 @@ void OTARequestor::OnConnected(void * context, OperationalDeviceProxy * devicePr
requestorCore->RecordErrorUpdateState(UpdateFailureState::kQuerying, err);
return;
}

// The kQuerying state is set in TriggerImmediateQueryInternal(), do not set it here
break;
}
case kStartBDX: {
case kDownload: {
CHIP_ERROR err = requestorCore->StartDownload(*deviceProxy);

if (err != CHIP_NO_ERROR)
Expand All @@ -398,8 +396,6 @@ void OTARequestor::OnConnected(void * context, OperationalDeviceProxy * devicePr
requestorCore->RecordErrorUpdateState(UpdateFailureState::kDownloading, err);
return;
}

requestorCore->RecordNewUpdateState(OTAUpdateStateEnum::kDownloading, OTAChangeReasonEnum::kSuccess);
break;
}
case kApplyUpdate: {
Expand All @@ -411,8 +407,6 @@ void OTARequestor::OnConnected(void * context, OperationalDeviceProxy * devicePr
requestorCore->RecordErrorUpdateState(UpdateFailureState::kApplying, err);
return;
}

requestorCore->RecordNewUpdateState(OTAUpdateStateEnum::kApplying, OTAChangeReasonEnum::kSuccess);
break;
}
case kNotifyUpdateApplied: {
Expand All @@ -424,8 +418,6 @@ void OTARequestor::OnConnected(void * context, OperationalDeviceProxy * devicePr
requestorCore->RecordErrorUpdateState(UpdateFailureState::kNotifying, err);
return;
}

requestorCore->RecordNewUpdateState(OTAUpdateStateEnum::kIdle, OTAChangeReasonEnum::kSuccess);
break;
}
default:
Expand All @@ -447,7 +439,7 @@ void OTARequestor::OnConnectionFailure(void * context, PeerId peerId, CHIP_ERROR
case kQueryImage:
requestorCore->RecordErrorUpdateState(UpdateFailureState::kQuerying, error);
break;
case kStartBDX:
case kDownload:
requestorCore->RecordErrorUpdateState(UpdateFailureState::kDownloading, error);
break;
case kApplyUpdate:
Expand Down Expand Up @@ -483,10 +475,6 @@ OTARequestorInterface::OTATriggerResult OTARequestor::TriggerImmediateQuery()

SetCurrentProviderLocation(providerLocation);

// We are now querying a provider, leave the kIdle state.
// No state matches this one fully but we can't be in kIdle.
RecordNewUpdateState(OTAUpdateStateEnum::kQuerying, OTAChangeReasonEnum::kSuccess);

// Go through the driver as it has additional logic to execute
mOtaRequestorDriver->SendQueryImage();

Expand All @@ -495,11 +483,13 @@ OTARequestorInterface::OTATriggerResult OTARequestor::TriggerImmediateQuery()

void OTARequestor::DownloadUpdate()
{
ConnectToProvider(kStartBDX);
RecordNewUpdateState(OTAUpdateStateEnum::kDownloading, OTAChangeReasonEnum::kSuccess);
ConnectToProvider(kDownload);
}

void OTARequestor::ApplyUpdate()
{
RecordNewUpdateState(OTAUpdateStateEnum::kApplying, OTAChangeReasonEnum::kSuccess);
ConnectToProvider(kApplyUpdate);
}

Expand All @@ -519,6 +509,9 @@ void OTARequestor::NotifyUpdateApplied(uint32_t version)

OtaRequestorServerOnVersionApplied(version, productId);

// There is no response for a notify so consider this OTA complete
RecordNewUpdateState(OTAUpdateStateEnum::kIdle, OTAChangeReasonEnum::kSuccess);

ConnectToProvider(kNotifyUpdateApplied);
}

Expand Down
6 changes: 3 additions & 3 deletions src/app/clusters/ota-requestor/OTARequestor.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ class OTARequestor : public OTARequestorInterface, public BDXDownloader::StateDe
// Initiate download of the new image
void DownloadUpdate() override;

// Send ApplyImage
// Initiate the session to send ApplyUpdateRequest command
void ApplyUpdate() override;

// Send NotifyUpdateApplied, update Basic cluster SoftwareVersion attribute, log the VersionApplied event
// Initiate the session to send NotifyUpdateApplied command
void NotifyUpdateApplied(uint32_t version) override;

// Get image update progress in percents unit
Expand Down Expand Up @@ -230,7 +230,7 @@ class OTARequestor : public OTARequestorInterface, public BDXDownloader::StateDe
enum OnConnectedAction
{
kQueryImage = 0,
kStartBDX,
kDownload,
kApplyUpdate,
kNotifyUpdateApplied,
};
Expand Down
4 changes: 2 additions & 2 deletions src/include/platform/OTARequestorInterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -182,10 +182,10 @@ class OTARequestorInterface
// Download image
virtual void DownloadUpdate() = 0;

// Send ApplyImage command
// Initiate the session to send ApplyUpdateRequest command
virtual void ApplyUpdate() = 0;

// Send NotifyUpdateApplied command
// Initiate the session to send NotifyUpdateApplied command
virtual void NotifyUpdateApplied(uint32_t version) = 0;

// Get image update progress in percents unit
Expand Down