The mesh settings.c module is a giant piece of code responsible for storing the mesh stack configuration. Such approach makes it difficult to control the data to be stored, breaks the stack modules' encapsulation by forcing them to reveal the internal kitchen, which leads to unpleasant issues such as #19799. This commit moves the responsibility of storing the configuration to corresponding modules while keeping control of the moment of storing the configuration and of starting the stack after the settingss loading is completed. This doesn't introduce any abstraction between the mesh settings.c and other modules as it will add more complexity and overhead than necessary for the actual task. Fixes #19850 Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
66 lines
2.3 KiB
C
66 lines
2.3 KiB
C
/*
|
|
* Copyright (c) 2020 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_SUBSYS_BLUETOOTH_MESH_APP_KEYS_H_
|
|
#define ZEPHYR_SUBSYS_BLUETOOTH_MESH_APP_KEYS_H_
|
|
|
|
#include <bluetooth/mesh.h>
|
|
#include "subnet.h"
|
|
|
|
/** @brief Reset the app keys module. */
|
|
void bt_mesh_app_keys_reset(void);
|
|
|
|
/** @brief Initialize a new application key with the given parameters.
|
|
*
|
|
* @param app_idx AppIndex.
|
|
* @param net_idx NetIndex the application is bound to.
|
|
* @param old_key Current application key.
|
|
* @param new_key Updated application key, or NULL if not known.
|
|
*
|
|
* @return 0 on success, or (negative) error code on failure.
|
|
*/
|
|
int bt_mesh_app_key_set(uint16_t app_idx, uint16_t net_idx,
|
|
const uint8_t old_key[16], const uint8_t new_key[16]);
|
|
|
|
/** @brief Resolve the message encryption keys, given a message context.
|
|
*
|
|
* Will use the @c ctx::app_idx and @c ctx::net_idx fields to find a pair of
|
|
* message encryption keys. If @c ctx::app_idx represents a device key, the
|
|
* @c ctx::net_idx will be used to determine the net key. Otherwise, the
|
|
* @c ctx::net_idx parameter will be ignored.
|
|
*
|
|
* @param ctx Message context.
|
|
* @param sub Subnet return parameter.
|
|
* @param app_key Application return parameter.
|
|
* @param aid Application ID return parameter.
|
|
*
|
|
* @return 0 on success, or (negative) error code on failure.
|
|
*/
|
|
int bt_mesh_keys_resolve(struct bt_mesh_msg_ctx *ctx,
|
|
struct bt_mesh_subnet **sub,
|
|
const uint8_t *app_key[16], uint8_t *aid);
|
|
|
|
/** @brief Iterate through all matching application keys and call @c cb on each.
|
|
*
|
|
* @param dev_key Whether to return device keys.
|
|
* @param aid 7 bit application ID to match.
|
|
* @param rx RX structure to match against.
|
|
* @param cb Callback to call for every valid app key.
|
|
* @param cb_data Callback data to pass to the callback.
|
|
*
|
|
* @return The AppIdx that yielded a 0-return from the callback.
|
|
*/
|
|
uint16_t bt_mesh_app_key_find(bool dev_key, uint8_t aid,
|
|
struct bt_mesh_net_rx *rx,
|
|
int (*cb)(struct bt_mesh_net_rx *rx,
|
|
const uint8_t key[16], void *cb_data),
|
|
void *cb_data);
|
|
|
|
/** @brief Store pending application keys in persistent storage. */
|
|
void bt_mesh_app_key_pending_store(void);
|
|
|
|
#endif /* ZEPHYR_SUBSYS_BLUETOOTH_MESH_APP_KEYS_H_ */
|