1. Add an API to set Provisioner static oob value 2. Add an API to deinit BLE Mesh stack 3. Add an API to set Provisioner unicast address 4. Add an API to provision devices with fixed address 5. Add an API to store node composition data 6. Add an API to get node with device uuid 7. Add an API to get node with unicast address 8. Add an API to delete node with device uuid 9. Add an API to delete node with unicast address 10. Add an API for Provisioner to update local AppKey 11. Add an API for Provisioner to update local NetKey 12. Support Provisioner persistent functionality 13. Fix Provisioner entering IV Update procedure 14. Fix an issue which may cause client failing to send msg 15. Use bt_mesh.flags to indicate device role 16. Remove several useless macros 17. Callback RSSI of received mesh provisioning packets 18. Modify the Provisioner disable function 19. Change some log level from debug to info 20. Add parameters to Provisioner bind AppKey completion event 21. Fix node ignoring relay messages issue 22. Support using a specific partition for BLE Mesh 23. Fix compile warning when proxy related macros are disabled 24. Clean up BLE Mesh stack included header files 25. NULL can be input if client message needs no parameters 26. Fix compile warning when BT log is disabled 27. Initilize BLE Mesh stack local variables 28. Support using PSRAM for BLE Mesh mutex, queue and task 29. Add a menuconfig option to enable using memory from PSRAM 30. Clean up sdkconfig.defaults of BLE Mesh examples
173 lines
3.9 KiB
C
173 lines
3.9 KiB
C
/**
|
|
* @brief Atomically set a bit.
|
|
*
|
|
* Atomically set bit number @a bit of @a target.
|
|
* The target may be a single atomic variable or an array of them.
|
|
*
|
|
* @param target Address of atomic variable or array.
|
|
* @param bit Bit number (starting from 0).
|
|
*
|
|
* @return N/A
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 2016 Intel Corporation
|
|
* Copyright (c) 2011-2014 Wind River Systems, Inc.
|
|
* Additional Copyright (c) 2018 Espressif Systems (Shanghai) PTE LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include "mesh_atomic.h"
|
|
#include "mesh_kernel.h"
|
|
|
|
#ifndef CONFIG_ATOMIC_OPERATIONS_BUILTIN
|
|
|
|
/**
|
|
*
|
|
* @brief Atomic get primitive
|
|
*
|
|
* @param target memory location to read from
|
|
*
|
|
* This routine provides the atomic get primitive to atomically read
|
|
* a value from <target>. It simply does an ordinary load. Note that <target>
|
|
* is expected to be aligned to a 4-byte boundary.
|
|
*
|
|
* @return The value read from <target>
|
|
*/
|
|
bt_mesh_atomic_val_t bt_mesh_atomic_get(const bt_mesh_atomic_t *target)
|
|
{
|
|
return *target;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @brief Atomic get-and-set primitive
|
|
*
|
|
* This routine provides the atomic set operator. The <value> is atomically
|
|
* written at <target> and the previous value at <target> is returned.
|
|
*
|
|
* @param target the memory location to write to
|
|
* @param value the value to write
|
|
*
|
|
* @return The previous value from <target>
|
|
*/
|
|
bt_mesh_atomic_val_t bt_mesh_atomic_set(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t value)
|
|
{
|
|
bt_mesh_atomic_val_t ret = 0;
|
|
|
|
bt_mesh_atomic_lock();
|
|
|
|
ret = *target;
|
|
*target = value;
|
|
|
|
bt_mesh_atomic_unlock();
|
|
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @brief Atomic bitwise inclusive OR primitive
|
|
*
|
|
* This routine provides the atomic bitwise inclusive OR operator. The <value>
|
|
* is atomically bitwise OR'ed with the value at <target>, placing the result
|
|
* at <target>, and the previous value at <target> is returned.
|
|
*
|
|
* @param target the memory location to be modified
|
|
* @param value the value to OR
|
|
*
|
|
* @return The previous value from <target>
|
|
*/
|
|
bt_mesh_atomic_val_t bt_mesh_atomic_or(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t value)
|
|
{
|
|
bt_mesh_atomic_val_t ret = 0;
|
|
|
|
bt_mesh_atomic_lock();
|
|
|
|
ret = *target;
|
|
*target |= value;
|
|
|
|
bt_mesh_atomic_unlock();
|
|
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @brief Atomic bitwise AND primitive
|
|
*
|
|
* This routine provides the atomic bitwise AND operator. The <value> is
|
|
* atomically bitwise AND'ed with the value at <target>, placing the result
|
|
* at <target>, and the previous value at <target> is returned.
|
|
*
|
|
* @param target the memory location to be modified
|
|
* @param value the value to AND
|
|
*
|
|
* @return The previous value from <target>
|
|
*/
|
|
bt_mesh_atomic_val_t bt_mesh_atomic_and(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t value)
|
|
{
|
|
bt_mesh_atomic_val_t ret = 0;
|
|
|
|
bt_mesh_atomic_lock();
|
|
|
|
ret = *target;
|
|
*target &= value;
|
|
|
|
bt_mesh_atomic_unlock();
|
|
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @brief Atomic decrement primitive
|
|
*
|
|
* @param target memory location to decrement
|
|
*
|
|
* This routine provides the atomic decrement operator. The value at <target>
|
|
* is atomically decremented by 1, and the old value from <target> is returned.
|
|
*
|
|
* @return The value from <target> prior to the decrement
|
|
*/
|
|
bt_mesh_atomic_val_t bt_mesh_atomic_dec(bt_mesh_atomic_t *target)
|
|
{
|
|
bt_mesh_atomic_val_t ret = 0;
|
|
|
|
bt_mesh_atomic_lock();
|
|
|
|
ret = *target;
|
|
(*target)--;
|
|
|
|
bt_mesh_atomic_unlock();
|
|
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @brief Atomic increment primitive
|
|
*
|
|
* @param target memory location to increment
|
|
*
|
|
* This routine provides the atomic increment operator. The value at <target>
|
|
* is atomically incremented by 1, and the old value from <target> is returned.
|
|
*
|
|
* @return The value from <target> before the increment
|
|
*/
|
|
bt_mesh_atomic_val_t bt_mesh_atomic_inc(bt_mesh_atomic_t *target)
|
|
{
|
|
bt_mesh_atomic_val_t ret = 0;
|
|
|
|
bt_mesh_atomic_lock();
|
|
|
|
ret = *target;
|
|
(*target)++;
|
|
|
|
bt_mesh_atomic_unlock();
|
|
|
|
return ret;
|
|
}
|
|
|
|
#endif /* #ifndef CONFIG_ATOMIC_OPERATIONS_BUILTIN */
|