| /* |
| * Copyright (c) 2020 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_DFU_H__ |
| #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_DFU_H__ |
| |
| #include <sys/types.h> |
| |
| #include <zephyr/kernel.h> |
| #include <zephyr/bluetooth/mesh/blob.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** |
| * @defgroup bt_mesh_dfu Bluetooth Mesh Device Firmware Update |
| * @ingroup bt_mesh |
| * @{ |
| */ |
| |
| #ifndef CONFIG_BT_MESH_DFU_FWID_MAXLEN |
| #define CONFIG_BT_MESH_DFU_FWID_MAXLEN 0 |
| #endif |
| |
| #ifndef CONFIG_BT_MESH_DFU_METADATA_MAXLEN |
| #define CONFIG_BT_MESH_DFU_METADATA_MAXLEN 0 |
| #endif |
| |
| #ifndef CONFIG_BT_MESH_DFU_URI_MAXLEN |
| #define CONFIG_BT_MESH_DFU_URI_MAXLEN 0 |
| #endif |
| |
| /** DFU transfer phase. */ |
| enum bt_mesh_dfu_phase { |
| /** Ready to start a Receive Firmware procedure. */ |
| BT_MESH_DFU_PHASE_IDLE, |
| |
| /** The Transfer BLOB procedure failed. */ |
| BT_MESH_DFU_PHASE_TRANSFER_ERR, |
| |
| /** The Receive Firmware procedure is being executed. */ |
| BT_MESH_DFU_PHASE_TRANSFER_ACTIVE, |
| |
| /** The Verify Firmware procedure is being executed. */ |
| BT_MESH_DFU_PHASE_VERIFY, |
| |
| /** The Verify Firmware procedure completed successfully. */ |
| BT_MESH_DFU_PHASE_VERIFY_OK, |
| |
| /** The Verify Firmware procedure failed. */ |
| BT_MESH_DFU_PHASE_VERIFY_FAIL, |
| |
| /** The Apply New Firmware procedure is being executed. */ |
| BT_MESH_DFU_PHASE_APPLYING, |
| |
| /** Firmware transfer has been canceled. */ |
| BT_MESH_DFU_PHASE_TRANSFER_CANCELED, |
| |
| /** Firmware applying succeeded. */ |
| BT_MESH_DFU_PHASE_APPLY_SUCCESS, |
| |
| /** Firmware applying failed. */ |
| BT_MESH_DFU_PHASE_APPLY_FAIL, |
| |
| /** The current phase is unknown. |
| * |
| * This is a metaphase, used by the Firmware Update Client to keep track of |
| * the Target state, and is not defined by the specification. |
| */ |
| BT_MESH_DFU_PHASE_UNKNOWN, |
| }; |
| |
| |
| /** DFU status. */ |
| enum bt_mesh_dfu_status { |
| /** The message was processed successfully. */ |
| BT_MESH_DFU_SUCCESS, |
| |
| /** Insufficient resources on the node */ |
| BT_MESH_DFU_ERR_RESOURCES, |
| |
| /** The operation cannot be performed while the Server is in the current |
| * phase. |
| */ |
| BT_MESH_DFU_ERR_WRONG_PHASE, |
| |
| /** An internal error occurred on the node. */ |
| BT_MESH_DFU_ERR_INTERNAL, |
| |
| /** The message contains a firmware index value that is not expected. */ |
| BT_MESH_DFU_ERR_FW_IDX, |
| |
| /** The metadata check failed. */ |
| BT_MESH_DFU_ERR_METADATA, |
| |
| /** The Server cannot start a firmware update. */ |
| BT_MESH_DFU_ERR_TEMPORARILY_UNAVAILABLE, |
| |
| /** Another BLOB transfer is in progress. */ |
| BT_MESH_DFU_ERR_BLOB_XFER_BUSY, |
| }; |
| |
| /** Expected effect of a DFU transfer. */ |
| enum bt_mesh_dfu_effect { |
| /** No changes to node Composition Data. */ |
| BT_MESH_DFU_EFFECT_NONE, |
| |
| /** Node Composition Data changed and the node does not support remote |
| * provisioning. |
| */ |
| BT_MESH_DFU_EFFECT_COMP_CHANGE_NO_RPR, |
| |
| /** Node Composition Data changed, and remote provisioning is supported. |
| * The node supports remote provisioning and Composition Data Page |
| * 0x80. Page 0x80 contains different Composition Data than Page 0x0. |
| */ |
| BT_MESH_DFU_EFFECT_COMP_CHANGE, |
| |
| /** Node will be unprovisioned after the update. */ |
| BT_MESH_DFU_EFFECT_UNPROV, |
| }; |
| |
| /** Action for DFU iteration callbacks. */ |
| enum bt_mesh_dfu_iter { |
| /** Stop iterating. */ |
| BT_MESH_DFU_ITER_STOP, |
| |
| /** Continue iterating. */ |
| BT_MESH_DFU_ITER_CONTINUE, |
| }; |
| |
| /** DFU image instance. |
| * |
| * Each DFU image represents a single updatable firmware image. |
| */ |
| struct bt_mesh_dfu_img { |
| /** Firmware ID. */ |
| const void *fwid; |
| |
| /** Length of the firmware ID. */ |
| size_t fwid_len; |
| |
| /** Update URI, or NULL. |
| * |
| * Must use one of the http: or https: schemes. |
| */ |
| const char *uri; |
| }; |
| |
| /** DFU image slot for DFU distribution. */ |
| struct bt_mesh_dfu_slot { |
| /** Size of the firmware in bytes. */ |
| size_t size; |
| /** Length of the firmware ID. */ |
| size_t fwid_len; |
| /** Length of the metadata. */ |
| size_t metadata_len; |
| /** Length of the image URI. */ |
| size_t uri_len; |
| /** Firmware ID. */ |
| uint8_t fwid[CONFIG_BT_MESH_DFU_FWID_MAXLEN]; |
| /** Metadata. */ |
| uint8_t metadata[CONFIG_BT_MESH_DFU_METADATA_MAXLEN]; |
| /** Image URI. */ |
| char uri[CONFIG_BT_MESH_DFU_URI_MAXLEN]; |
| }; |
| |
| /** @} */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_DFU_H__ */ |