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

Restyle Introduce ota-requestor.h containing Requestor API declarations #11606

Closed
wants to merge 4 commits into from
Closed
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
50 changes: 50 additions & 0 deletions src/app/clusters/ota-requestor/ota-downloader.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
*
* Copyright (c) 2021 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* This file contains the declarations for the OTADownloader class which
* abstracts the image download functionality from the particular protocol
* used for it.
* Applications and platforms implementing the OTA Requestor functionality
* must include this file
*/

#include <ota-image-processor.h>

#pragma once

// A class that abstracts the image download functionality from the particular
// protocol used for that (BDX or possibly HTTPS)
class OTADownloader : public BlockWriter
{
public:
// API declarations start

// Application calls this method to direct OTADownloader to begin the download
void BeginDownload();

// Platform calls this method upon the completion of PrepareDownload() processing
void OnDownloadPrepared();

// Platform calls this method upon the completion of ProcessBlock() processing
void OnBlockProcessed(action);

// API declarations end

// Invoked by an incoming block
void HandleBlock();
};
70 changes: 70 additions & 0 deletions src/app/clusters/ota-requestor/ota-image-processor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
*
* Copyright (c) 2021 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* This file contains the declarations for OTAImageProcessor, a platform-agnostic
* interface for processing downloaded chunks of OTA image data.
* Each platform should provide an implementation of this interface.
*/

#pragma once

// This is a platform-agnostic interface for processing downloaded
// chunks of OTA image data (data could be raw image data meant for flash or
// metadata). Each platform should provide an implementation of this
// interface.
class OTAImageProcessor
{
public:
// Open file, find block of space in persistent memory, or allocate a buffer, etc.
virtual CHIP_ERROR PrepareDownload() = 0;

// Must not be a blocking call to support cases that require IO to elements such as // external peripherals/radios
virtual CHIP_ERROR ProcessBlock(ByteSpan & data) = 0;

// Close file, close persistent storage, etc
// (probably should not actually apply the image)
virtual CHIP_ERROR Finalize() = 0;

virtual chip::Optional<uint8_t> PercentComplete() = 0;

// Clean up the download which could mean erasing everything that was written,
// releasing buffers, etc.
virtual CHIP_ERROR Abort() = 0;
};

// A class that abstracts the image download functionality from the particular
// protocol used for that (BDX or possibly HTTPS)
class OTADownloader : public BlockWriter
{
public:
// API declarations start

// Application calls this method to direct OTADownloader to begin the download
void BeginDownload();

// Platform calls this method upon the completion of PrepareDownload() processing
void OnDownloadPrepared();

// Platform calls this method upon the completion of ProcessBlock() processing
void OnBlockProcessed(action);

// API declarations end

// Invoked by an incoming block
void HandleBlock();
};
39 changes: 39 additions & 0 deletions src/app/clusters/ota-requestor/ota-requestor-driver.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
*
* Copyright (c) 2021 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* This file contains the declaration for the OTARequestorDriver class, an interface
* that abstracts the OTA-related business logic out of the Requestor functionality in
* the Matter SDK. Applications implementing the OTA Requestor functionality must include
* this file.
*/

#pragma once

// Interface class to abstract the OTA-related business logic. Each application
// must implement this interface. All calls must be non-blocking unless stated otherwise
class OTARequestorDriver
{
public:
// A call into the application logic to give it a chance to allow or stop the Requestor
// from proceeding with actual image download. Returning TRUE will allow the download
// to proceed, returning FALSE will abort the download process.
virtual bool AllowImageDownload() = 0;

// Notify the application that the download is complete and the image can be applied
virtual void ImageDownloadComplete() = 0;
};
36 changes: 36 additions & 0 deletions src/app/clusters/ota-requestor/ota-requestor-interface.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
*
* Copyright (c) 2021 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* This file contains the declaration for the OTA Requestor interface.
* Any implementation of the OTA Requestor (e.g. the OTARequestor class) must implement
* this interface.
*/

#pragma once

// Interface class to connect the OTA Software Update Requestor cluster command processing
// with the core OTA Requestor logic. The OTARequestor class implements this interface
class OTARequestorInterface
{
public:
// Handler for the AnnounceOTAProvider command
virtual bool HandleAnnounceOTAProvider(commandData_t) = 0;

// Handler for the QueryImageResponse command
virtual bool HandleQueryImageResponse(commandData_t) = 0;
};
42 changes: 42 additions & 0 deletions src/app/clusters/ota-requestor/ota-requestor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
*
* Copyright (c) 2021 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* This file contains the declarations for the Matter OTA Requestor implementation and API.
* Applications implementing the OTA Requestor functionality must include this file.
*/

#include <ota-requestor-driver.h>
#include <ota-requestor-interface.h>

#pragma once

// This class implements all of the core logic of the OTA Requestor
class OTARequestor : public OTARequestorInterface
{
public:
// Application interface declarations start

// Application directs the Requestor to start the Image Query process
// and download the new image if available
void TriggerImmediateQuery();

// Application interface declarations end

private:
OTARequestorDriver * driver;
};