zephyr/subsys/bluetooth/mesh/va.h

80 lines
2.3 KiB
C

/*
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
/** Virtual address entry. */
struct bt_mesh_va {
uint16_t ref:15,
changed:1;
uint16_t addr;
uint8_t uuid[16];
};
/** @brief Store Label UUID.
*
* @param uuid Label UUID to be stored.
* @param entry Pointer to a memory where a new or updated entry will be stored, or NULL.
*
* @return STATUS_SUCCESS if entry is stored or updated, error code otherwise.
*/
uint8_t bt_mesh_va_add(const uint8_t uuid[16], const struct bt_mesh_va **entry);
/** @brief Delete Label UUID.
*
* @c uuid must be a pointer to @ref bt_mesh_va.uuid. Use @ref bt_mesh_va_uuid_get to get valid
* pointer.
*
* @param uuid Label UUID to delete.
*
* @return STATUS_SUCCESS if entry is deleted, error code otherwise.
*/
uint8_t bt_mesh_va_del(const uint8_t *uuid);
/** @brief Find virtual address entry by Label UUID.
*
* @c uuid can be a user data.
*
* @param uuid pointer to memory with Label UUID to be found.
*
* @return Pointer to a valid entry, NULL otherwise.
*/
const struct bt_mesh_va *bt_mesh_va_find(const uint8_t *uuid);
/** @brief Check if there are more than one Label UUID which hash has the specified virtual
* address.
*
* @param addr Virtual address to check
*
* @return True if there is collision, false otherwise.
*/
bool bt_mesh_va_collision_check(uint16_t addr);
/* Needed for storing va as indexes in persistent storage. */
/** @brief Get Label UUID by index.
*
* @param idx Index of virtual address entry.
*
* @return Pointer to a valid Label UUID, or NULL if entry is not found.
*/
const uint8_t *bt_mesh_va_get_uuid_by_idx(uint16_t idx);
/** @brief Get virtual address entry index by Label UUID.
*
* @c uuid must be a pointer to @ref bt_mesh_va.uuid. Use @ref bt_mesh_va_uuid_get to get valid
* pointer.
*
* @param uuid Label UUID which index to find
* @param uuidx Pointer to a memory where to store index.
*
* @return 0 if entry is found, error code otherwise.
*/
int bt_mesh_va_get_idx_by_uuid(const uint8_t *uuid, uint16_t *uuidx);
/** @brief Store pending virtual address entries in the persistent storage.*/
void bt_mesh_va_pending_store(void);
/** @brief Remove all stored virtual addresses and remove them from the persistent storage. */
void bt_mesh_va_clear(void);