/* * * 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 */ #pragma once #include #include namespace chip { // A class that abstracts the image download functionality from the particular // protocol used for that (BDX or possibly HTTPS) class OTADownloader { public: enum class State : uint8_t { kIdle, kPreparing, kInProgress, kComplete, }; OTADownloader() : mImageProcessor(nullptr), mState(State::kIdle) {} // Application calls this method to direct OTADownloader to begin the download. // OTADownloader should handle calling into OTAImageProcessorDriver::PrepareDownload(). CHIP_ERROR virtual BeginPrepareDownload() = 0; // Platform calls this method when it is ready to begin processing downloaded image data. // Upon this call, the OTADownloader may begin downloading data. CHIP_ERROR virtual OnPreparedForDownload(CHIP_ERROR status) = 0; // Should be called when it has been determined that the download has timed out. void virtual OnDownloadTimeout() = 0; // Not all download protocols will be able to close gracefully from the receiver side. // The reason parameter should be used to indicate if this is a graceful end or a forceful abort. void virtual EndDownload(CHIP_ERROR reason = CHIP_NO_ERROR) = 0; // Fetch the next set of data. May be a no-op for asynchronous protocols. CHIP_ERROR virtual FetchNextData() { return CHIP_ERROR_NOT_IMPLEMENTED; } // Skip ahead some number of bytes in the download of the image file. May not be supported by some transport protocols. CHIP_ERROR virtual SkipData(uint32_t numBytes) { return CHIP_ERROR_NOT_IMPLEMENTED; } // A setter for the delegate class pointer void SetImageProcessorDelegate(OTAImageProcessorInterface * delegate) { mImageProcessor = delegate; } OTAImageProcessorInterface * GetImageProcessorDelegate() const { return mImageProcessor; } State GetState() const { return mState; } virtual ~OTADownloader() = default; protected: OTAImageProcessorInterface * mImageProcessor = nullptr; State mState; }; } // namespace chip