|
Zephyr Project API 4.0.0
A Scalable Open Source RTOS
|
Store and manipulate bits in a bit array. More...
Macros | |
| #define | SYS_BITARRAY_DEFINE(name, total_bits) _SYS_BITARRAY_DEFINE(name, total_bits,) |
| Create a bitarray object. | |
| #define | SYS_BITARRAY_DEFINE_STATIC(name, total_bits) _SYS_BITARRAY_DEFINE(name, total_bits, static) |
| Create a static bitarray object. | |
Typedefs | |
| typedef struct sys_bitarray | sys_bitarray_t |
| Bitarray structure. | |
Functions | |
| int | sys_bitarray_set_bit (sys_bitarray_t *bitarray, size_t bit) |
| Set a bit in a bit array. | |
| int | sys_bitarray_clear_bit (sys_bitarray_t *bitarray, size_t bit) |
| Clear a bit in a bit array. | |
| int | sys_bitarray_test_bit (sys_bitarray_t *bitarray, size_t bit, int *val) |
| Test whether a bit is set or not. | |
| int | sys_bitarray_test_and_set_bit (sys_bitarray_t *bitarray, size_t bit, int *prev_val) |
| Test the bit and set it. | |
| int | sys_bitarray_test_and_clear_bit (sys_bitarray_t *bitarray, size_t bit, int *prev_val) |
| Test the bit and clear it. | |
| int | sys_bitarray_alloc (sys_bitarray_t *bitarray, size_t num_bits, size_t *offset) |
| Allocate bits in a bit array. | |
| int | sys_bitarray_xor (sys_bitarray_t *dst, sys_bitarray_t *other, size_t num_bits, size_t offset) |
| Calculates the bit-wise XOR of two bitarrays in a region. | |
| int | sys_bitarray_find_nth_set (sys_bitarray_t *bitarray, size_t n, size_t num_bits, size_t offset, size_t *found_at) |
| Find nth bit set in region. | |
| int | sys_bitarray_popcount_region (sys_bitarray_t *bitarray, size_t num_bits, size_t offset, size_t *count) |
| Count bits set in a bit array region. | |
| int | sys_bitarray_free (sys_bitarray_t *bitarray, size_t num_bits, size_t offset) |
| Free bits in a bit array. | |
| bool | sys_bitarray_is_region_set (sys_bitarray_t *bitarray, size_t num_bits, size_t offset) |
| Test if bits in a region is all set. | |
| bool | sys_bitarray_is_region_cleared (sys_bitarray_t *bitarray, size_t num_bits, size_t offset) |
| Test if bits in a region is all cleared. | |
| int | sys_bitarray_set_region (sys_bitarray_t *bitarray, size_t num_bits, size_t offset) |
| Set all bits in a region. | |
| int | sys_bitarray_test_and_set_region (sys_bitarray_t *bitarray, size_t num_bits, size_t offset, bool to_set) |
| Test if all bits in a region are cleared/set and set/clear them in a single atomic operation. | |
| int | sys_bitarray_clear_region (sys_bitarray_t *bitarray, size_t num_bits, size_t offset) |
| Clear all bits in a region. | |
Store and manipulate bits in a bit array.
| #define SYS_BITARRAY_DEFINE | ( | name, | |
| total_bits | |||
| ) | _SYS_BITARRAY_DEFINE(name, total_bits,) |
#include <include/zephyr/sys/bitarray.h>
Create a bitarray object.
| name | Name of the bitarray object. |
| total_bits | Total number of bits in this bitarray object. |
| #define SYS_BITARRAY_DEFINE_STATIC | ( | name, | |
| total_bits | |||
| ) | _SYS_BITARRAY_DEFINE(name, total_bits, static) |
#include <include/zephyr/sys/bitarray.h>
Create a static bitarray object.
| name | Name of the bitarray object. |
| total_bits | Total number of bits in this bitarray object. |
| typedef struct sys_bitarray sys_bitarray_t |
#include <include/zephyr/sys/bitarray.h>
Bitarray structure.
| int sys_bitarray_alloc | ( | sys_bitarray_t * | bitarray, |
| size_t | num_bits, | ||
| size_t * | offset | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Allocate bits in a bit array.
This finds a number of bits (num_bits) in a contiguous of previously unallocated region. If such a region exists, the bits are marked as allocated and the offset to the start of this region is returned via offset.
| [in] | bitarray | Bitarray struct |
| [in] | num_bits | Number of bits to allocate |
| [out] | offset | Offset to the start of allocated region if successful |
| 0 | Allocation successful |
| -EINVAL | Invalid argument (e.g. allocating more bits than the bitarray has, trying to allocate 0 bits, etc.) |
| -ENOSPC | No contiguous region big enough to accommodate the allocation |
| int sys_bitarray_clear_bit | ( | sys_bitarray_t * | bitarray, |
| size_t | bit | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Clear a bit in a bit array.
| [in] | bitarray | Bitarray struct |
| [in] | bit | The bit to be cleared |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. bit to clear exceeds the number of bits in bit array, etc.) |
| int sys_bitarray_clear_region | ( | sys_bitarray_t * | bitarray, |
| size_t | num_bits, | ||
| size_t | offset | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Clear all bits in a region.
This clears the number of bits (num_bits) in region starting from offset.
| bitarray | Bitarray struct |
| num_bits | Number of bits to test |
| offset | Starting bit position to test |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. bit to set exceeds the number of bits in bit array, etc.) |
| int sys_bitarray_find_nth_set | ( | sys_bitarray_t * | bitarray, |
| size_t | n, | ||
| size_t | num_bits, | ||
| size_t | offset, | ||
| size_t * | found_at | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Find nth bit set in region.
This counts the number of bits set (count) in a region (offset, num_bits) and returns the index (found_at) of the nth set bit, if it exists, as long with a zero return value.
If it does not exist, found_at is not updated and the method returns
| [in] | bitarray | Bitarray struct |
| [in] | n | Nth bit set to look for |
| [in] | num_bits | Number of bits to check, must be larger than 0 |
| [in] | offset | Starting bit position |
| [out] | found_at | Index of the nth bit set, if found |
| 0 | Operation successful |
| 1 | Nth bit set was not found in region |
| -EINVAL | Invalid argument (e.g. out-of-bounds access, trying to count 0 bits, etc.) |
| int sys_bitarray_free | ( | sys_bitarray_t * | bitarray, |
| size_t | num_bits, | ||
| size_t | offset | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Free bits in a bit array.
This marks the number of bits (num_bits) starting from offset as no longer allocated.
| bitarray | Bitarray struct |
| num_bits | Number of bits to free |
| offset | Starting bit position to free |
| 0 | Free is successful |
| -EINVAL | Invalid argument (e.g. try to free more bits than the bitarray has, trying to free 0 bits, etc.) |
| -EFAULT | The bits in the indicated region are not all allocated. |
| bool sys_bitarray_is_region_cleared | ( | sys_bitarray_t * | bitarray, |
| size_t | num_bits, | ||
| size_t | offset | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Test if bits in a region is all cleared.
This tests if the number of bits (num_bits) in region starting from offset are all cleared.
| bitarray | Bitarray struct |
| num_bits | Number of bits to test |
| offset | Starting bit position to test |
| true | All bits are cleared. |
| false | Not all bits are cleared. |
| bool sys_bitarray_is_region_set | ( | sys_bitarray_t * | bitarray, |
| size_t | num_bits, | ||
| size_t | offset | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Test if bits in a region is all set.
This tests if the number of bits (num_bits) in region starting from offset are all set.
| bitarray | Bitarray struct |
| num_bits | Number of bits to test |
| offset | Starting bit position to test |
| true | All bits are set. |
| false | Not all bits are set. |
| int sys_bitarray_popcount_region | ( | sys_bitarray_t * | bitarray, |
| size_t | num_bits, | ||
| size_t | offset, | ||
| size_t * | count | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Count bits set in a bit array region.
This counts the number of bits set (count) in a region (offset, num_bits).
| [in] | bitarray | Bitarray struct |
| [in] | num_bits | Number of bits to check, must be larger than 0 |
| [in] | offset | Starting bit position |
| [out] | count | Number of bits set in the region if successful |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. out-of-bounds access, trying to count 0 bits, etc.) |
| int sys_bitarray_set_bit | ( | sys_bitarray_t * | bitarray, |
| size_t | bit | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Set a bit in a bit array.
| [in] | bitarray | Bitarray struct |
| [in] | bit | The bit to be set |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. bit to set exceeds the number of bits in bit array, etc.) |
| int sys_bitarray_set_region | ( | sys_bitarray_t * | bitarray, |
| size_t | num_bits, | ||
| size_t | offset | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Set all bits in a region.
This sets the number of bits (num_bits) in region starting from offset.
| bitarray | Bitarray struct |
| num_bits | Number of bits to test |
| offset | Starting bit position to test |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. bit to set exceeds the number of bits in bit array, etc.) |
| int sys_bitarray_test_and_clear_bit | ( | sys_bitarray_t * | bitarray, |
| size_t | bit, | ||
| int * | prev_val | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Test the bit and clear it.
| [in] | bitarray | Bitarray struct |
| [in] | bit | The bit to be tested and cleared |
| [out] | prev_val | Previous value of the bit (0 or 1) |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. bit to test exceeds the number of bits in bit array, etc.) |
| int sys_bitarray_test_and_set_bit | ( | sys_bitarray_t * | bitarray, |
| size_t | bit, | ||
| int * | prev_val | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Test the bit and set it.
| [in] | bitarray | Bitarray struct |
| [in] | bit | The bit to be tested and set |
| [out] | prev_val | Previous value of the bit (0 or 1) |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. bit to test exceeds the number of bits in bit array, etc.) |
| int sys_bitarray_test_and_set_region | ( | sys_bitarray_t * | bitarray, |
| size_t | num_bits, | ||
| size_t | offset, | ||
| bool | to_set | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Test if all bits in a region are cleared/set and set/clear them in a single atomic operation.
This checks if all the bits (num_bits) in region starting from offset are in required state. If even one bit is not, -EEXIST is returned. If the whole region is set/cleared it is set to opposite state. The check and set is performed as a single atomic operation.
| bitarray | Bitarray struct |
| num_bits | Number of bits to test and set |
| offset | Starting bit position to test and set |
| to_set | if true the region will be set if all bits are cleared if false the region will be cleard if all bits are set |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. bit to set exceeds the number of bits in bit array, etc.) |
| -EEXIST | at least one bit in the region is set/cleared, operation cancelled |
| int sys_bitarray_test_bit | ( | sys_bitarray_t * | bitarray, |
| size_t | bit, | ||
| int * | val | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Test whether a bit is set or not.
| [in] | bitarray | Bitarray struct |
| [in] | bit | The bit to be tested |
| [out] | val | The value of the bit (0 or 1) |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. bit to test exceeds the number of bits in bit array, etc.) |
| int sys_bitarray_xor | ( | sys_bitarray_t * | dst, |
| sys_bitarray_t * | other, | ||
| size_t | num_bits, | ||
| size_t | offset | ||
| ) |
#include <include/zephyr/sys/bitarray.h>
Calculates the bit-wise XOR of two bitarrays in a region.
The result is stored in the first bitarray passed in (dst). Both bitarrays must be of the same size.
| dst | Bitarray struct |
| other | Bitarray struct |
| num_bits | Number of bits in the region, must be larger than 0 |
| offset | Starting bit location |
| 0 | Operation successful |
| -EINVAL | Invalid argument (e.g. out-of-bounds access, mismatching bitarrays, trying to xor 0 bits, etc.) |