1 /*
2  * Copyright (c) 2018-2023 O.S.Systems
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @brief UpdateHub Firmware Over-the-Air for Zephyr Project.
9  * @defgroup updatehub UpdateHub Firmware Over-the-Air
10  * @ingroup third_party
11  * @{
12  */
13 
14 #ifndef ZEPHYR_INCLUDE_MGMT_UPDATEHUB_H_
15 #define ZEPHYR_INCLUDE_MGMT_UPDATEHUB_H_
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 /**
22  * @brief Responses messages from UpdateHub.
23  *
24  * @details These messages are used to inform the server and the
25  * user about the process status of the UpdateHub and also
26  * used to standardize the errors that may occur.
27  *
28  */
29 enum updatehub_response {
30 	UPDATEHUB_NETWORKING_ERROR = 0,
31 	UPDATEHUB_INCOMPATIBLE_HARDWARE,
32 	UPDATEHUB_UNCONFIRMED_IMAGE,
33 	UPDATEHUB_METADATA_ERROR,
34 	UPDATEHUB_DOWNLOAD_ERROR,
35 	UPDATEHUB_INSTALL_ERROR,
36 	UPDATEHUB_FLASH_INIT_ERROR,
37 	UPDATEHUB_OK,
38 	UPDATEHUB_HAS_UPDATE,
39 	UPDATEHUB_NO_UPDATE,
40 };
41 
42 /**
43  * @brief Runs UpdateHub probe and UpdateHub update automatically.
44  *
45  * @details The updatehub_autohandler handles the whole process
46  * in pre-determined time intervals.
47  */
48 __syscall void updatehub_autohandler(void);
49 
50 /**
51  * @brief The UpdateHub probe verify if there is some update to be performed.
52  *
53  * @return UPDATEHUB_HAS_UPDATE has an update available.
54  * @return UPDATEHUB_NO_UPDATE no update available.
55  * @return UPDATEHUB_NETWORKING_ERROR fail to connect to the UpdateHub server.
56  * @return UPDATEHUB_INCOMPATIBLE_HARDWARE if Incompatible hardware.
57  * @return UPDATEHUB_METADATA_ERROR fail to parse or to encode the metadata.
58  */
59 __syscall enum updatehub_response updatehub_probe(void);
60 
61 /**
62  * @brief Apply the update package.
63  *
64  * @details Must be used after the UpdateHub probe, if you have updates to
65  * be made, will perform the installation of the new image and the hardware
66  * will rebooting.
67  *
68  * @return Return UPDATEHUB_OK if success
69  * @return UPDATEHUB_NETWORKING_ERROR if fail to connect to the server.
70  * @return UPDATEHUB_DOWNLOAD_ERROR fail while downloading the update package.
71  * @return UPDATEHUB_INSTALL_ERROR fail while installing the update package.
72  * @return UPDATEHUB_FLASH_INIT_ERROR fail to initialize the flash.
73  */
74 __syscall enum updatehub_response updatehub_update(void);
75 
76 /**
77  * @brief Confirm that image is running as expected.
78  *
79  * @details Must be used before the UpdateHub probe. It should be one of first
80  * actions after reboot.
81  *
82  * @return Return 0 if success otherwise a negative 'errno' value.
83  */
84 __syscall int updatehub_confirm(void);
85 
86 /**
87  * @brief Request system to reboot.
88  *
89  * @return Return 0 if success otherwise a negative 'errno' value.
90  */
91 __syscall int updatehub_reboot(void);
92 
93 #ifdef __cplusplus
94 }
95 #endif
96 
97 /**
98  * @}
99  */
100 
101 #include <syscalls/updatehub.h>
102 #endif /* ZEPHYR_INCLUDE_MGMT_UPDATEHUB_H_ */
103