6#ifndef INCLUDE_ZEPHYR_SYS_LINEAR_RANGE_H_
7#define INCLUDE_ZEPHYR_SYS_LINEAR_RANGE_H_
79#define LINEAR_RANGE_INIT(_min, _step, _min_idx, _max_idx) \
83 .min_idx = (_min_idx), \
84 .max_idx = (_max_idx), \
96 return r->max_idx -
r->min_idx + 1U;
112 for (
size_t i = 0U; i < r_cnt; i++) {
128 return r->min + (
int32_t)(
r->step * (
r->max_idx -
r->min_idx));
144 if ((idx < r->min_idx) || (idx >
r->max_idx)) {
148 *val =
r->min + (
int32_t)(
r->step * (idx -
r->min_idx));
170 for (
size_t i = 0U; (
ret != 0) && (i < r_cnt); i++) {
234 for (
size_t i = 0U; i < r_cnt; i++) {
236 (i < (r_cnt - 1U))) {
271 if ((
r->min +
r->step * (*idx -
r->min_idx)) > val_max) {
304 for (
size_t i = 0U; i < r_cnt; i++) {
workaround assembler barfing for ST r
Definition: asm-macro-32-bit-gnu.h:24
static int linear_range_group_get_win_index(const struct linear_range *r, size_t r_cnt, int32_t val_min, int32_t val_max, uint16_t *idx)
Obtain index in a group given a value that must be within a window of values.
Definition: linear_range.h:298
static uint32_t linear_range_group_values_count(const struct linear_range *r, size_t r_cnt)
Obtain the number of values representable by a group of linear ranges.
Definition: linear_range.h:107
static int linear_range_get_win_index(const struct linear_range *r, int32_t val_min, int32_t val_max, uint16_t *idx)
Obtain index given a window of values.
Definition: linear_range.h:264
static int linear_range_get_value(const struct linear_range *r, uint16_t idx, int32_t *val)
Obtain value given a linear range index.
Definition: linear_range.h:141
static int linear_range_get_index(const struct linear_range *r, int32_t val, uint16_t *idx)
Obtain index given a value.
Definition: linear_range.h:192
static int linear_range_group_get_index(const struct linear_range *r, size_t r_cnt, int32_t val, uint16_t *idx)
Obtain index in a group given a value.
Definition: linear_range.h:230
static int linear_range_group_get_value(const struct linear_range *r, size_t r_cnt, uint16_t idx, int32_t *val)
Obtain value in a group given a linear range index.
Definition: linear_range.h:164
static uint32_t linear_range_values_count(const struct linear_range *r)
Obtain the number of values representable in a linear range.
Definition: linear_range.h:94
static int32_t linear_range_get_max_value(const struct linear_range *r)
Obtain the maximum value representable by a linear range.
Definition: linear_range.h:126
#define ceiling_fraction(numerator, divider)
Ceiling function applied to numerator / divider as a fraction.
Definition: util.h:247
#define EINVAL
Definition: errno.h:61
#define ERANGE
Definition: errno.h:73
static ZTEST_BMEM volatile int ret
Definition: k_float_disable.c:28
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__INT32_TYPE__ int32_t
Definition: stdint.h:74
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Linear range.
Definition: linear_range.h:60
int32_t min
Definition: linear_range.h:62
uint16_t min_idx
Definition: linear_range.h:66
uint16_t max_idx
Definition: linear_range.h:68
uint32_t step
Definition: linear_range.h:64