Line data Source code
1 0 : /* 2 : * Copyright (c) 2018-2022 mcumgr authors 3 : * Copyright (c) 2022 Laird Connectivity 4 : * Copyright (c) 2022 Nordic Semiconductor ASA 5 : * 6 : * SPDX-License-Identifier: Apache-2.0 7 : */ 8 : 9 : #ifndef H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_ 10 : #define H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_ 11 : 12 : #include <zephyr/kernel.h> 13 : #include <zephyr/fs/fs.h> 14 : 15 : #ifdef __cplusplus 16 : extern "C" { 17 : #endif 18 : 19 : /** @typedef fs_mgmt_hash_checksum_handler_fn 20 : * @brief Function that gets called to generate a hash or checksum. 21 : * 22 : * @param file Opened file context 23 : * @param output Output buffer for hash/checksum 24 : * @param out_len Updated with size of input data 25 : * @param len Maximum length of data to perform hash/checksum on 26 : * 27 : * @return 0 on success, negative error code on failure. 28 : */ 29 1 : typedef int (*fs_mgmt_hash_checksum_handler_fn)(struct fs_file_t *file, uint8_t *output, 30 : size_t *out_len, size_t len); 31 : 32 : /** 33 : * @brief A collection of handlers for an entire hash/checksum group. 34 : */ 35 1 : struct fs_mgmt_hash_checksum_group { 36 : /** Entry list node. */ 37 1 : sys_snode_t node; 38 : 39 : /** Array of handlers; one entry per name. */ 40 1 : const char *group_name; 41 : 42 : /** Byte string or numerical output. */ 43 1 : bool byte_string; 44 : 45 : /** Size (in bytes) of output. */ 46 1 : uint8_t output_size; 47 : 48 : /** Hash/checksum function pointer. */ 49 1 : fs_mgmt_hash_checksum_handler_fn function; 50 : }; 51 : 52 : /** @typedef fs_mgmt_hash_checksum_list_cb 53 : * @brief Function that gets called with hash/checksum details 54 : * 55 : * @param group Details about a supported hash/checksum 56 : * @param user_data User-supplied value to calling function 57 : */ 58 1 : typedef void (*fs_mgmt_hash_checksum_list_cb)(const struct fs_mgmt_hash_checksum_group *group, 59 : void *user_data); 60 : 61 : /** 62 : * @brief Registers a full hash/checksum group. 63 : * 64 : * @param group The group to register. 65 : */ 66 1 : void fs_mgmt_hash_checksum_register_group(struct fs_mgmt_hash_checksum_group *group); 67 : 68 : /** 69 : * @brief Unregisters a full hash/checksum group. 70 : * 71 : * @param group The group to register. 72 : */ 73 1 : void fs_mgmt_hash_checksum_unregister_group(struct fs_mgmt_hash_checksum_group *group); 74 : 75 : /** 76 : * @brief Finds a registered hash/checksum handler. 77 : * 78 : * @param name The name of the hash/checksum group to find. 79 : * 80 : * @return The requested hash/checksum handler on success; 81 : * NULL on failure. 82 : */ 83 1 : const struct fs_mgmt_hash_checksum_group *fs_mgmt_hash_checksum_find_handler(const char *name); 84 : 85 : /** 86 : * @brief Runs a callback with all supported hash/checksum types. 87 : * 88 : * @param cb The callback function to call with each hash/checksum type. 89 : * @param user_data Data to pass back with the callback function. 90 : */ 91 1 : void fs_mgmt_hash_checksum_find_handlers(fs_mgmt_hash_checksum_list_cb cb, void *user_data); 92 : 93 : #ifdef __cplusplus 94 : } 95 : #endif 96 : 97 : #endif /* ifndef H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_ */