1 /* 2 * Copyright (c) 2020 Linumiz 3 * Copyright (c) 2024 Vogl Electronic GmbH 4 * 5 * SPDX-License-Identifier: Apache-2.0 6 */ 7 8 /** 9 * @file 10 * @brief hawkBit main header file 11 */ 12 13 /** 14 * @brief hawkBit Firmware Over-the-Air for Zephyr Project. 15 * @defgroup hawkbit hawkBit Firmware Over-the-Air 16 * @ingroup third_party 17 * @{ 18 */ 19 20 #ifndef ZEPHYR_INCLUDE_MGMT_HAWKBIT_HAWKBIT_H_ 21 #define ZEPHYR_INCLUDE_MGMT_HAWKBIT_HAWKBIT_H_ 22 23 #include <stdint.h> 24 25 /** 26 * @brief Response message from hawkBit. 27 * 28 * @details These messages are used to inform the server and the 29 * user about the process status of the hawkBit and also 30 * used to standardize the errors that may occur. 31 * 32 */ 33 enum hawkbit_response { 34 /** matching events were not received within the specified time */ 35 HAWKBIT_NO_RESPONSE, 36 /** an update was installed. Reboot is required to apply it */ 37 HAWKBIT_UPDATE_INSTALLED, 38 /** no update was available */ 39 HAWKBIT_NO_UPDATE, 40 /** fail to connect to the hawkBit server */ 41 HAWKBIT_NETWORKING_ERROR, 42 /** image is unconfirmed */ 43 HAWKBIT_UNCONFIRMED_IMAGE, 44 /** fail to get the permission to access the hawkBit server */ 45 HAWKBIT_PERMISSION_ERROR, 46 /** fail to parse or to encode the metadata */ 47 HAWKBIT_METADATA_ERROR, 48 /** fail while downloading the update package */ 49 HAWKBIT_DOWNLOAD_ERROR, 50 /** fail to allocate memory */ 51 HAWKBIT_ALLOC_ERROR, 52 /** hawkBit is not initialized */ 53 HAWKBIT_NOT_INITIALIZED, 54 /** probe is currently running */ 55 HAWKBIT_PROBE_IN_PROGRESS, 56 }; 57 58 /** 59 * @brief Callback to provide the custom data to the hawkBit server. 60 * 61 * @details This callback is used to provide the custom data to the hawkBit server. 62 * The custom data is used to provide the hawkBit server with the device specific 63 * data. 64 * 65 * @param device_id The device ID. 66 * @param buffer The buffer to store the json. 67 * @param buffer_size The size of the buffer. 68 */ 69 typedef int (*hawkbit_config_device_data_cb_handler_t)(const char *device_id, uint8_t *buffer, 70 const size_t buffer_size); 71 72 /** 73 * @brief Set the custom data callback. 74 * 75 * @details This function is used to set the custom data callback. 76 * The callback is used to provide the custom data to the hawkBit server. 77 * 78 * @param cb The callback function. 79 * 80 * @retval 0 on success. 81 * @retval -EINVAL if the callback is NULL. 82 */ 83 int hawkbit_set_custom_data_cb(hawkbit_config_device_data_cb_handler_t cb); 84 85 /** 86 * @brief Init the flash partition 87 * 88 * @retval 0 on success. 89 * @retval -errno if init fails. 90 */ 91 int hawkbit_init(void); 92 93 /** 94 * @brief The hawkBit probe verify if there is some update to be performed. 95 * 96 * @return A value from ::hawkbit_response. 97 */ 98 enum hawkbit_response hawkbit_probe(void); 99 100 /** 101 * @brief Request system to reboot. 102 */ 103 void hawkbit_reboot(void); 104 105 /** 106 * @brief Callback to get the device identity. 107 * 108 * @param id Pointer to the buffer to store the device identity 109 * @param id_max_len The maximum length of the buffer 110 */ 111 typedef bool (*hawkbit_get_device_identity_cb_handler_t)(char *id, int id_max_len); 112 113 /** 114 * @brief Set the device identity callback. 115 * 116 * @details This function is used to set a custom device identity callback. 117 * 118 * @param cb The callback function. 119 * 120 * @retval 0 on success. 121 * @retval -EINVAL if the callback is NULL. 122 */ 123 int hawkbit_set_device_identity_cb(hawkbit_get_device_identity_cb_handler_t cb); 124 125 /** 126 * @brief Resets the hawkBit action id, that is saved in settings. 127 * 128 * @details This should be done after changing the hawkBit server. 129 * 130 * @retval 0 on success. 131 * @retval -EAGAIN if probe is currently running. 132 * @retval -EIO if the action id could not be reset. 133 * 134 */ 135 int hawkbit_reset_action_id(void); 136 137 /** 138 * @} 139 */ 140 141 #endif /* ZEPHYR_INCLUDE_MGMT_HAWKBIT_HAWKBIT_H_ */ 142