Line data Source code
1 0 : /* 2 : * Copyright (c) 2021 Nordic Semiconductor ASA 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : /** 8 : * @file 9 : * @defgroup bt_mesh_dfu_metadata Bluetooth Mesh Device Firmware Update (DFU) metadata 10 : * @ingroup bt_mesh_dfu 11 : * @{ 12 : * @brief Common types and functions for the Bluetooth Mesh DFU metadata. 13 : */ 14 : 15 : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_DFU_METADATA_H__ 16 : #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_DFU_METADATA_H__ 17 : 18 : #include <stdint.h> 19 : 20 : #include <sys/types.h> 21 : 22 : #include <zephyr/kernel.h> 23 : 24 : #ifdef __cplusplus 25 : extern "C" { 26 : #endif 27 : 28 : /** Firmware version. */ 29 1 : struct bt_mesh_dfu_metadata_fw_ver { 30 : /** Firmware major version. */ 31 1 : uint8_t major; 32 : /** Firmware minor version. */ 33 1 : uint8_t minor; 34 : /** Firmware revision. */ 35 1 : uint16_t revision; 36 : /** Firmware build number. */ 37 1 : uint32_t build_num; 38 : }; 39 : 40 : /** Firmware core type. */ 41 1 : enum bt_mesh_dfu_metadata_fw_core_type { 42 : /** Application core. */ 43 : BT_MESH_DFU_FW_CORE_TYPE_APP = BIT(0), 44 : /** Network core. */ 45 : BT_MESH_DFU_FW_CORE_TYPE_NETWORK = BIT(1), 46 : /** Application-specific BLOB. */ 47 : BT_MESH_DFU_FW_CORE_TYPE_APP_SPECIFIC_BLOB = BIT(2), 48 : }; 49 : 50 : /** Firmware metadata. */ 51 1 : struct bt_mesh_dfu_metadata { 52 : /** New firmware version. */ 53 1 : struct bt_mesh_dfu_metadata_fw_ver fw_ver; 54 : /** New firmware size. */ 55 1 : uint32_t fw_size; 56 : /** New firmware core type. */ 57 1 : enum bt_mesh_dfu_metadata_fw_core_type fw_core_type; 58 : /** Hash of incoming Composition Data. */ 59 1 : uint32_t comp_hash; 60 : /** New number of node elements. */ 61 1 : uint16_t elems; 62 : /** Application-specific data for new firmware. This field is optional. */ 63 1 : uint8_t *user_data; 64 : /** Length of the application-specific field. */ 65 1 : uint32_t user_data_len; 66 : }; 67 : 68 : /** @brief Decode a firmware metadata from a network buffer. 69 : * 70 : * @param buf Buffer containing a raw metadata to be decoded. 71 : * @param metadata Pointer to a metadata structure to be filled. 72 : * 73 : * @return 0 on success, or (negative) error code otherwise. 74 : */ 75 1 : int bt_mesh_dfu_metadata_decode(struct net_buf_simple *buf, 76 : struct bt_mesh_dfu_metadata *metadata); 77 : 78 : /** @brief Encode a firmware metadata into a network buffer. 79 : * 80 : * @param metadata Firmware metadata to be encoded. 81 : * @param buf Buffer to store the encoded metadata. 82 : * 83 : * @return 0 on success, or (negative) error code otherwise. 84 : */ 85 1 : int bt_mesh_dfu_metadata_encode(const struct bt_mesh_dfu_metadata *metadata, 86 : struct net_buf_simple *buf); 87 : 88 : /** @brief Compute hash of the Composition Data state. 89 : * 90 : * The format of the Composition Data is defined in MshPRTv1.1: 4.2.2.1. 91 : * 92 : * @param buf Pointer to buffer holding Composition Data. 93 : * @param key 128-bit key to be used in the hash computation. 94 : * @param hash Pointer to a memory location to which the hash will be stored. 95 : * 96 : * @return 0 on success, or (negative) error code otherwise. 97 : */ 98 1 : int bt_mesh_dfu_metadata_comp_hash_get(struct net_buf_simple *buf, uint8_t *key, uint32_t *hash); 99 : 100 : /** @brief Compute hash of the Composition Data Page 0 of this device. 101 : * 102 : * @param key 128-bit key to be used in the hash computation. 103 : * @param hash Pointer to a memory location to which the hash will be stored. 104 : * 105 : * @return 0 on success, or (negative) error code otherwise. 106 : */ 107 1 : int bt_mesh_dfu_metadata_comp_hash_local_get(uint8_t *key, uint32_t *hash); 108 : 109 : #ifdef __cplusplus 110 : } 111 : #endif 112 : 113 : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_DFU_METADATA_H__ */ 114 : 115 : /** @} */