14d5ea236Sopenharmony_ci/*
24d5ea236Sopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd.
34d5ea236Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44d5ea236Sopenharmony_ci * you may not use this file except in compliance with the License.
54d5ea236Sopenharmony_ci * You may obtain a copy of the License at
64d5ea236Sopenharmony_ci *
74d5ea236Sopenharmony_ci *    http://www.apache.org/licenses/LICENSE-2.0
84d5ea236Sopenharmony_ci *
94d5ea236Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104d5ea236Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114d5ea236Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124d5ea236Sopenharmony_ci * See the License for the specific language governing permissions and
134d5ea236Sopenharmony_ci * limitations under the License.
144d5ea236Sopenharmony_ci */
154d5ea236Sopenharmony_ci
164d5ea236Sopenharmony_ci/**
174d5ea236Sopenharmony_ci * @addtogroup OTA
184d5ea236Sopenharmony_ci * @{
194d5ea236Sopenharmony_ci *
204d5ea236Sopenharmony_ci * @brief Provides system upgrades.
214d5ea236Sopenharmony_ci *
224d5ea236Sopenharmony_ci * @since 1.0
234d5ea236Sopenharmony_ci * @version 1.0
244d5ea236Sopenharmony_ci */
254d5ea236Sopenharmony_ci
264d5ea236Sopenharmony_ci /**
274d5ea236Sopenharmony_ci * @file hota_updater.h
284d5ea236Sopenharmony_ci *
294d5ea236Sopenharmony_ci * @brief Defines the functions for system upgrades.
304d5ea236Sopenharmony_ci *
314d5ea236Sopenharmony_ci * @since 1.0
324d5ea236Sopenharmony_ci * @version 1.0
334d5ea236Sopenharmony_ci */
344d5ea236Sopenharmony_ci#ifndef OHOS_LITE_HOTA_UPDATER_H
354d5ea236Sopenharmony_ci#define OHOS_LITE_HOTA_UPDATER_H
364d5ea236Sopenharmony_ci
374d5ea236Sopenharmony_ci#ifdef __cplusplus
384d5ea236Sopenharmony_ci#if __cplusplus
394d5ea236Sopenharmony_ciextern "C" {
404d5ea236Sopenharmony_ci#endif
414d5ea236Sopenharmony_ci#endif /* End of #ifdef __cplusplus */
424d5ea236Sopenharmony_ci
434d5ea236Sopenharmony_ci#define USE_DEFAULT_PKG                  1
444d5ea236Sopenharmony_ci#define NOT_USE_DEFAULT_PKG              0
454d5ea236Sopenharmony_ci
464d5ea236Sopenharmony_citypedef enum {
474d5ea236Sopenharmony_ci    HOTA_NOT_INIT = 0X01,
484d5ea236Sopenharmony_ci    HOTA_INITED = 0x02,
494d5ea236Sopenharmony_ci    HOTA_TRANSPORT_INFO_DONE = 0x03,
504d5ea236Sopenharmony_ci    HOTA_TRANSPORT_ALL_DONE = 0x04,
514d5ea236Sopenharmony_ci    HOTA_FAILED = 0x05,
524d5ea236Sopenharmony_ci    HOTA_CANCELED = 0x06
534d5ea236Sopenharmony_ci} HotaStatus;
544d5ea236Sopenharmony_ci
554d5ea236Sopenharmony_citypedef enum {
564d5ea236Sopenharmony_ci    HOTA_DATA_COMMON_ERR = 0,
574d5ea236Sopenharmony_ci    HOTA_DATA_WRITE_ERR = 1,
584d5ea236Sopenharmony_ci    HOTA_VERSION_INVALID = 2,
594d5ea236Sopenharmony_ci    HOTA_DATA_SIGN_CHECK_ERR = 3,
604d5ea236Sopenharmony_ci    HOTA_DATA_VERIFY_HASH_ERR = 4,
614d5ea236Sopenharmony_ci    HOTA_DATA_COPY_TO_BUFFER_ERR = 5
624d5ea236Sopenharmony_ci} HotaErrorCode;
634d5ea236Sopenharmony_ci
644d5ea236Sopenharmony_citypedef void (*ErrorCallBackFunc)(HotaErrorCode errorCode);
654d5ea236Sopenharmony_citypedef void (*StatusCallBackFunc)(HotaStatus status);
664d5ea236Sopenharmony_ci
674d5ea236Sopenharmony_ci/**
684d5ea236Sopenharmony_ci * @brief Sets the switch for using the default upgrade package format.
694d5ea236Sopenharmony_ci *
704d5ea236Sopenharmony_ci * You can call this function to choose the default upgrade package format when developing the system upgrade
714d5ea236Sopenharmony_ci * capability. \n
724d5ea236Sopenharmony_ci * If the default upgrade package format is used, the system ensures the security and integrity of the
734d5ea236Sopenharmony_ci * upgrade package. \n
744d5ea236Sopenharmony_ci * If it is not used, you need to ensure the security and integrity of the upgrade package you have chosen.
754d5ea236Sopenharmony_ci * To be specific, you need to call the {@link HotaRead} function to read the data that has been written into
764d5ea236Sopenharmony_ci * flash memory, and then verify the data. \n
774d5ea236Sopenharmony_ci *
784d5ea236Sopenharmony_ci * @param flag Specifies whether to use the default system upgrade package format. The value <b>1</b> (default value)
794d5ea236Sopenharmony_ci * means to use it, and <b>0</b> means not to use it.
804d5ea236Sopenharmony_ci *
814d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
824d5ea236Sopenharmony_ci *
834d5ea236Sopenharmony_ci * @since 1.0
844d5ea236Sopenharmony_ci * @version 1.0
854d5ea236Sopenharmony_ci */
864d5ea236Sopenharmony_ciint HotaSetPackageType(unsigned int flag);
874d5ea236Sopenharmony_ci
884d5ea236Sopenharmony_ci/**
894d5ea236Sopenharmony_ci * @brief Obtains the index of the A/B partition to be upgraded.
904d5ea236Sopenharmony_ci *
914d5ea236Sopenharmony_ci * In the A/B upgrade scenario, you can use this function to determine whether partition A or B will be upgraded. \n
924d5ea236Sopenharmony_ci *
934d5ea236Sopenharmony_ci * @param index Indicates the index of a partition. The value <b>1</b> means partition A, and <b>2</b>
944d5ea236Sopenharmony_ci * means partition B.
954d5ea236Sopenharmony_ci *
964d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
974d5ea236Sopenharmony_ci *
984d5ea236Sopenharmony_ci * @since 1.0
994d5ea236Sopenharmony_ci * @version 1.0
1004d5ea236Sopenharmony_ci */
1014d5ea236Sopenharmony_ciint HotaGetUpdateIndex(unsigned int *index);
1024d5ea236Sopenharmony_ci
1034d5ea236Sopenharmony_ci/**
1044d5ea236Sopenharmony_ci * @brief Initializes the OTA module.
1054d5ea236Sopenharmony_ci *
1064d5ea236Sopenharmony_ci * @param errorCallback Indicates the callback invoked when an error occurs during the upgrade.
1074d5ea236Sopenharmony_ci * This parameter can be null.
1084d5ea236Sopenharmony_ci * @param statusCallback Indicates the callback invoked when the upgrade status changes. This parameter can be null.
1094d5ea236Sopenharmony_ci *
1104d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
1114d5ea236Sopenharmony_ci *
1124d5ea236Sopenharmony_ci * @since 1.0
1134d5ea236Sopenharmony_ci * @version 1.0
1144d5ea236Sopenharmony_ci */
1154d5ea236Sopenharmony_ciint HotaInit(ErrorCallBackFunc errorCallback, StatusCallBackFunc statusCallback);
1164d5ea236Sopenharmony_ci
1174d5ea236Sopenharmony_ci/**
1184d5ea236Sopenharmony_ci * @brief Writes specified data into flash memory.
1194d5ea236Sopenharmony_ci *
1204d5ea236Sopenharmony_ci * @param buffer Indicates the data to be written into flash memory.
1214d5ea236Sopenharmony_ci * @param offset Indicates the offset from where to start writing data.
1224d5ea236Sopenharmony_ci * @param buffSize Indicates the size of the data to be written.
1234d5ea236Sopenharmony_ci *
1244d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
1254d5ea236Sopenharmony_ci *
1264d5ea236Sopenharmony_ci * @since 1.0
1274d5ea236Sopenharmony_ci * @version 1.0
1284d5ea236Sopenharmony_ci */
1294d5ea236Sopenharmony_ciint HotaWrite(unsigned char *buffer, unsigned int offset, unsigned int buffSize);
1304d5ea236Sopenharmony_ci
1314d5ea236Sopenharmony_ci/**
1324d5ea236Sopenharmony_ci * @brief Reads the data that has been written into flash memory.
1334d5ea236Sopenharmony_ci *
1344d5ea236Sopenharmony_ci * This function is required for verifying data correctness when the default upgrade package format is not used. \n
1354d5ea236Sopenharmony_ci * It is not required when the default upgrade package format is used. \n
1364d5ea236Sopenharmony_ci *
1374d5ea236Sopenharmony_ci * @param offset Indicates the offset from where to start reading data.
1384d5ea236Sopenharmony_ci * @param bufLen Indicates the length of the data to be read.
1394d5ea236Sopenharmony_ci * @param buf Indicates the buffer to store the data that has been read.
1404d5ea236Sopenharmony_ci *
1414d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
1424d5ea236Sopenharmony_ci *
1434d5ea236Sopenharmony_ci * @since 1.0
1444d5ea236Sopenharmony_ci * @version 1.0
1454d5ea236Sopenharmony_ci */
1464d5ea236Sopenharmony_ciint HotaRead(unsigned int offset, unsigned int bufLen, unsigned char *buf);
1474d5ea236Sopenharmony_ci
1484d5ea236Sopenharmony_ci/**
1494d5ea236Sopenharmony_ci * @brief Cancels an upgrade.
1504d5ea236Sopenharmony_ci *
1514d5ea236Sopenharmony_ci * If an upgrade fails or is interrupted, you can use this function to cancel it. \n
1524d5ea236Sopenharmony_ci *
1534d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
1544d5ea236Sopenharmony_ci *
1554d5ea236Sopenharmony_ci * @since 1.0
1564d5ea236Sopenharmony_ci * @version 1.0
1574d5ea236Sopenharmony_ci */
1584d5ea236Sopenharmony_ciint HotaCancel(void);
1594d5ea236Sopenharmony_ci
1604d5ea236Sopenharmony_ci/**
1614d5ea236Sopenharmony_ci * @brief Sets the system state to be upgrading after data has been written into flash memory by {@link HotaWrite}.
1624d5ea236Sopenharmony_ci *
1634d5ea236Sopenharmony_ci * After this operation is successful, you need to call the {@link HotaRestart} function to complete the upgrade. \n
1644d5ea236Sopenharmony_ci *
1654d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
1664d5ea236Sopenharmony_ci *
1674d5ea236Sopenharmony_ci * @since 1.0
1684d5ea236Sopenharmony_ci * @version 1.0
1694d5ea236Sopenharmony_ci */
1704d5ea236Sopenharmony_ciint HotaSetBootSettings(void);
1714d5ea236Sopenharmony_ci
1724d5ea236Sopenharmony_ci/**
1734d5ea236Sopenharmony_ci * @brief Restarts the system after an upgrade.
1744d5ea236Sopenharmony_ci *
1754d5ea236Sopenharmony_ci * You need to call this function after you have called the {@link HotaSetBootSettings} function. \n
1764d5ea236Sopenharmony_ci *
1774d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
1784d5ea236Sopenharmony_ci *
1794d5ea236Sopenharmony_ci * @since 1.0
1804d5ea236Sopenharmony_ci * @version 1.0
1814d5ea236Sopenharmony_ci */
1824d5ea236Sopenharmony_ciint HotaRestart(void);
1834d5ea236Sopenharmony_ci
1844d5ea236Sopenharmony_ci/**
1854d5ea236Sopenharmony_ci * @brief get update ability.
1864d5ea236Sopenharmony_ci *
1874d5ea236Sopenharmony_ci * You need to call this function when update process init. \n
1884d5ea236Sopenharmony_ci *
1894d5ea236Sopenharmony_ci * @return Returns update abilty.
1904d5ea236Sopenharmony_ci *
1914d5ea236Sopenharmony_ci * @since 1.0
1924d5ea236Sopenharmony_ci * @version 1.0
1934d5ea236Sopenharmony_ci */
1944d5ea236Sopenharmony_ciint HotaGetUpdateAbility(void);
1954d5ea236Sopenharmony_ci
1964d5ea236Sopenharmony_ci/**
1974d5ea236Sopenharmony_ci * @brief get ota package update path.
1984d5ea236Sopenharmony_ci *
1994d5ea236Sopenharmony_ci * You need to call this function before update process. \n
2004d5ea236Sopenharmony_ci *
2014d5ea236Sopenharmony_ci * @param path Indicates where ota package you place.
2024d5ea236Sopenharmony_ci * @param len Indicates  path len.
2034d5ea236Sopenharmony_ci *
2044d5ea236Sopenharmony_ci * @return Returns <b>0</b> if the operation is successful; returns <b>-1</b> otherwise.
2054d5ea236Sopenharmony_ci *
2064d5ea236Sopenharmony_ci * @since 1.0
2074d5ea236Sopenharmony_ci * @version 1.0
2084d5ea236Sopenharmony_ci */
2094d5ea236Sopenharmony_ciint HotaGetOtaPkgPath(char *path, int len);
2104d5ea236Sopenharmony_ci
2114d5ea236Sopenharmony_ci/**
2124d5ea236Sopenharmony_ci * @brief judge device can auto reboot.
2134d5ea236Sopenharmony_ci *
2144d5ea236Sopenharmony_ci * You need to call this function when update process init.\n
2154d5ea236Sopenharmony_ci *
2164d5ea236Sopenharmony_ci * @return Returns <b>1</b> if device can auto update; returns <b>0</b> if device can not auto update.
2174d5ea236Sopenharmony_ci *
2184d5ea236Sopenharmony_ci * @since 1.0
2194d5ea236Sopenharmony_ci * @version 1.0
2204d5ea236Sopenharmony_ci */
2214d5ea236Sopenharmony_ciint HotaIsDeviceCanReboot(void);
2224d5ea236Sopenharmony_ci
2234d5ea236Sopenharmony_ci/**
2244d5ea236Sopenharmony_ci * @brief judge is develop mode now.
2254d5ea236Sopenharmony_ci *
2264d5ea236Sopenharmony_ci * You need to call this function to get develop mode.\n
2274d5ea236Sopenharmony_ci *
2284d5ea236Sopenharmony_ci * @return Returns <b>1</b> if device is develop mode; returns <b>0</b> if device is not develop mode.
2294d5ea236Sopenharmony_ci *
2304d5ea236Sopenharmony_ci * @since 1.0
2314d5ea236Sopenharmony_ci * @version 1.0
2324d5ea236Sopenharmony_ci */
2334d5ea236Sopenharmony_ciint HotaIsDevelopMode(void);
2344d5ea236Sopenharmony_ci
2354d5ea236Sopenharmony_ci/**
2364d5ea236Sopenharmony_ci * @brief get update status.
2374d5ea236Sopenharmony_ci *
2384d5ea236Sopenharmony_ci * You need to call this function when update process .\n
2394d5ea236Sopenharmony_ci *
2404d5ea236Sopenharmony_ci * @return Returns UpdateStatus if the operation is successful; returns <b>-1</b> otherwise.
2414d5ea236Sopenharmony_ci *
2424d5ea236Sopenharmony_ci * @since 1.0
2434d5ea236Sopenharmony_ci * @version 1.0
2444d5ea236Sopenharmony_ci */
2454d5ea236Sopenharmony_ciint HotaGetUpdateStatus(void);
2464d5ea236Sopenharmony_ci
2474d5ea236Sopenharmony_ci/**
2484d5ea236Sopenharmony_ci * @brief reboot and clean userdata.
2494d5ea236Sopenharmony_ci *
2504d5ea236Sopenharmony_ci * You need to call this function when update process .\n
2514d5ea236Sopenharmony_ci *
2524d5ea236Sopenharmony_ci * @return Returns UpdateStatus if the operation is successful; returns <b>-1</b> otherwise.
2534d5ea236Sopenharmony_ci *
2544d5ea236Sopenharmony_ci * @since 1.0
2554d5ea236Sopenharmony_ci * @version 1.0
2564d5ea236Sopenharmony_ci */
2574d5ea236Sopenharmony_ciint HotaRebootAndCleanUserData(void);
2584d5ea236Sopenharmony_ci
2594d5ea236Sopenharmony_ci/**
2604d5ea236Sopenharmony_ci * @brief reboot and clean cache.
2614d5ea236Sopenharmony_ci *
2624d5ea236Sopenharmony_ci * You need to call this function when update process .\n
2634d5ea236Sopenharmony_ci *
2644d5ea236Sopenharmony_ci * @return Returns UpdateStatus if the operation is successful; returns <b>-1</b> otherwise.
2654d5ea236Sopenharmony_ci *
2664d5ea236Sopenharmony_ci * @since 1.0
2674d5ea236Sopenharmony_ci * @version 1.0
2684d5ea236Sopenharmony_ci */
2694d5ea236Sopenharmony_ciint HotaRebootAndCleanCache(void);
2704d5ea236Sopenharmony_ci
2714d5ea236Sopenharmony_ci
2724d5ea236Sopenharmony_ci#ifdef __cplusplus
2734d5ea236Sopenharmony_ci#if __cplusplus
2744d5ea236Sopenharmony_ci}
2754d5ea236Sopenharmony_ci#endif
2764d5ea236Sopenharmony_ci#endif /* End of #ifdef __cplusplus */
2774d5ea236Sopenharmony_ci
2784d5ea236Sopenharmony_ci#endif /* End of #ifndef OHOS_LITE_HOTA_UPDATER_H */
2794d5ea236Sopenharmony_ci/** @} */
280