13#ifndef BT_MESH_SENSOR_H__
14#define BT_MESH_SENSOR_H__
16#include <zephyr/bluetooth/mesh.h>
18#include <zephyr/drivers/sensor.h>
25#ifndef CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX
26#define CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX 0
30#define BT_MESH_SENSOR_PERIOD_DIV_MAX 15
34#define BT_MESH_SENSOR_INTERVAL_MAX 26
37#define BT_MESH_SENSOR_CH_STR_LEN 23
48#define BT_MESH_SENSOR_VALUE_IN_RANGE(_value, _start, _end) ( \
49 (_value)->format->cb->compare((_value), (_start)) >= 0 && \
50 (_value)->format->cb->compare((_end), (_value)) >= 0)
106#ifdef CONFIG_BT_MESH_SENSOR_LABELS
113#define BT_MESH_SENSOR_TYPE_FLAG_SERIES BIT(0)
177#define BT_MESH_SENSOR_TOLERANCE_ENCODE(_percent) ((_percent) * 4095) / 100
409 char *str,
size_t len);
454#ifdef CONFIG_BT_MESH_SENSOR_LABELS
484 struct bt_mesh_msg_ctx *ctx,
506 struct bt_mesh_msg_ctx *ctx,
547 struct bt_mesh_msg_ctx *ctx,
548 uint32_t column_index,
592 struct bt_mesh_msg_ctx *ctx,
753 struct sensor_value *val);
776 const struct sensor_value *val,
883#define BT_MESH_SENSOR_OP_DESCRIPTOR_GET BT_MESH_MODEL_OP_2(0x82, 0x30)
884#define BT_MESH_SENSOR_OP_DESCRIPTOR_STATUS BT_MESH_MODEL_OP_1(0x51)
885#define BT_MESH_SENSOR_OP_GET BT_MESH_MODEL_OP_2(0x82, 0x31)
886#define BT_MESH_SENSOR_OP_STATUS BT_MESH_MODEL_OP_1(0x52)
887#define BT_MESH_SENSOR_OP_COLUMN_GET BT_MESH_MODEL_OP_2(0x82, 0x32)
888#define BT_MESH_SENSOR_OP_COLUMN_STATUS BT_MESH_MODEL_OP_1(0x53)
889#define BT_MESH_SENSOR_OP_SERIES_GET BT_MESH_MODEL_OP_2(0x82, 0x33)
890#define BT_MESH_SENSOR_OP_SERIES_STATUS BT_MESH_MODEL_OP_1(0x54)
891#define BT_MESH_SENSOR_OP_CADENCE_GET BT_MESH_MODEL_OP_2(0x82, 0x34)
892#define BT_MESH_SENSOR_OP_CADENCE_SET BT_MESH_MODEL_OP_1(0x55)
893#define BT_MESH_SENSOR_OP_CADENCE_SET_UNACKNOWLEDGED BT_MESH_MODEL_OP_1(0x56)
894#define BT_MESH_SENSOR_OP_CADENCE_STATUS BT_MESH_MODEL_OP_1(0x57)
895#define BT_MESH_SENSOR_OP_SETTINGS_GET BT_MESH_MODEL_OP_2(0x82, 0x35)
896#define BT_MESH_SENSOR_OP_SETTINGS_STATUS BT_MESH_MODEL_OP_1(0x58)
897#define BT_MESH_SENSOR_OP_SETTING_GET BT_MESH_MODEL_OP_2(0x82, 0x36)
898#define BT_MESH_SENSOR_OP_SETTING_SET BT_MESH_MODEL_OP_1(0x59)
899#define BT_MESH_SENSOR_OP_SETTING_SET_UNACKNOWLEDGED BT_MESH_MODEL_OP_1(0x5A)
900#define BT_MESH_SENSOR_OP_SETTING_STATUS BT_MESH_MODEL_OP_1(0x5B)
902#ifndef CONFIG_BT_MESH_SENSOR_CHANNELS_MAX
903#define CONFIG_BT_MESH_SENSOR_CHANNELS_MAX 0
906#ifndef CONFIG_BT_MESH_SENSOR_SRV_SENSORS_MAX
907#define CONFIG_BT_MESH_SENSOR_SRV_SENSORS_MAX 0
910#define BT_MESH_SENSOR_ENCODED_VALUE_MAXLEN \
911 (CONFIG_BT_MESH_SENSOR_CHANNELS_MAX * \
912 CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX)
914#define BT_MESH_SENSOR_STATUS_MAXLEN (3 + BT_MESH_SENSOR_ENCODED_VALUE_MAXLEN)
916#define BT_MESH_SENSOR_MSG_MINLEN_DESCRIPTOR_GET 0
917#define BT_MESH_SENSOR_MSG_MAXLEN_DESCRIPTOR_GET 2
918#define BT_MESH_SENSOR_MSG_MINLEN_DESCRIPTOR_STATUS 2
919#define BT_MESH_SENSOR_MSG_MAXLEN_DESCRIPTOR_STATUS 8
920#define BT_MESH_SENSOR_MSG_MINLEN_GET 0
921#define BT_MESH_SENSOR_MSG_MAXLEN_GET 2
922#define BT_MESH_SENSOR_MSG_MINLEN_STATUS 0
923#define BT_MESH_SENSOR_MSG_MINLEN_COLUMN_GET 2
924#define BT_MESH_SENSOR_MSG_MAXLEN_COLUMN_GET \
925 (2 + CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX)
926#define BT_MESH_SENSOR_MSG_MINLEN_COLUMN_STATUS 2
927#define BT_MESH_SENSOR_MSG_MAXLEN_COLUMN_STATUS \
928 (2 + CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX * 3)
929#define BT_MESH_SENSOR_MSG_MINLEN_SERIES_GET 2
930#define BT_MESH_SENSOR_MSG_MAXLEN_SERIES_GET \
931 (2 + 2 * CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX)
932#define BT_MESH_SENSOR_MSG_MINLEN_SERIES_STATUS 2
933#define BT_MESH_SENSOR_MSG_LEN_CADENCE_GET 2
934#define BT_MESH_SENSOR_MSG_MINLEN_CADENCE_SET 8
935#define BT_MESH_SENSOR_MSG_MAXLEN_CADENCE_SET \
936 (4 + CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX * 4)
937#define BT_MESH_SENSOR_MSG_MINLEN_CADENCE_STATUS 2
938#define BT_MESH_SENSOR_MSG_MAXLEN_CADENCE_STATUS \
939 (4 + 4 * CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX)
940#define BT_MESH_SENSOR_MSG_LEN_SETTINGS_GET 2
941#define BT_MESH_SENSOR_MSG_MINLEN_SETTINGS_STATUS 2
942#define BT_MESH_SENSOR_MSG_LEN_SETTING_GET 4
943#define BT_MESH_SENSOR_MSG_MINLEN_SETTING_SET 4
944#define BT_MESH_SENSOR_MSG_MAXLEN_SETTING_SET \
945 (4 + BT_MESH_SENSOR_ENCODED_VALUE_MAXLEN)
946#define BT_MESH_SENSOR_MSG_MINLEN_SETTING_STATUS 4
947#define BT_MESH_SENSOR_MSG_MAXLEN_SETTING_STATUS \
948 (4 + BT_MESH_SENSOR_ENCODED_VALUE_MAXLEN)
950#define BT_MESH_SENSOR_SRV_PUB_MAXLEN(_count) \
951 BT_MESH_MODEL_BUF_LEN(BT_MESH_SENSOR_OP_STATUS, \
952 MAX(CONFIG_BT_MESH_SENSOR_SRV_SENSORS_MAX, \
954 BT_MESH_SENSOR_STATUS_MAXLEN)
956#define BT_MESH_SENSOR_SETUP_SRV_PUB_MAXLEN \
957 MAX(BT_MESH_MODEL_BUF_LEN(BT_MESH_SENSOR_OP_SETTING_STATUS, \
958 BT_MESH_SENSOR_MSG_MAXLEN_SETTING_STATUS), \
959 BT_MESH_MODEL_BUF_LEN(BT_MESH_SENSOR_OP_CADENCE_STATUS, \
960 BT_MESH_SENSOR_MSG_MAXLEN_CADENCE_STATUS))
bt_mesh_sensor_sampling
Definition sensor.h:56
@ BT_MESH_SENSOR_SAMPLING_MINIMUM
Definition sensor.h:68
@ BT_MESH_SENSOR_SAMPLING_MAXIMUM
Definition sensor.h:66
@ BT_MESH_SENSOR_SAMPLING_UNSPECIFIED
Definition sensor.h:58
@ BT_MESH_SENSOR_SAMPLING_INSTANTANEOUS
Definition sensor.h:60
@ BT_MESH_SENSOR_SAMPLING_COUNT
Definition sensor.h:81
@ BT_MESH_SENSOR_SAMPLING_RMS
Definition sensor.h:64
@ BT_MESH_SENSOR_SAMPLING_ACCUMULATED
Definition sensor.h:75
@ BT_MESH_SENSOR_SAMPLING_ARITHMETIC_MEAN
Definition sensor.h:62
bt_mesh_sensor_cadence
Definition sensor.h:85
@ BT_MESH_SENSOR_CADENCE_NORMAL
Definition sensor.h:87
@ BT_MESH_SENSOR_CADENCE_FAST
Definition sensor.h:89
int bt_mesh_sensor_ch_to_str(const struct bt_mesh_sensor_value *ch, char *str, size_t len)
Get a human readable representation of a single sensor channel.
const struct bt_mesh_sensor_format * bt_mesh_sensor_column_format_get(const struct bt_mesh_sensor_type *type)
Get the format of the sensor column data.
enum bt_mesh_sensor_value_status bt_mesh_sensor_value_get_status(const struct bt_mesh_sensor_value *sensor_val)
Return a bt_mesh_sensor_value_status describing the value in a bt_mesh_sensor_value.
int bt_mesh_sensor_value_from_special_status(const struct bt_mesh_sensor_format *format, enum bt_mesh_sensor_value_status status, struct bt_mesh_sensor_value *sensor_val)
Convert a bt_mesh_sensor_value_status value to a bt_mesh_sensor_value.
const struct bt_mesh_sensor_type * bt_mesh_sensor_type_get(uint16_t id)
Get the sensor type associated with the given Device Property ID.
enum bt_mesh_sensor_value_status bt_mesh_sensor_value_to_sensor_value(const struct bt_mesh_sensor_value *sensor_val, struct sensor_value *val)
Convert a bt_mesh_sensor_value instance to a sensor_value (include/zephyr/drivers/sensor....
#define CONFIG_BT_MESH_SENSOR_CHANNEL_ENCODED_SIZE_MAX
Definition sensor.h:26
bt_mesh_sensor_value_status
Definition sensor.h:136
@ BT_MESH_SENSOR_VALUE_CONVERSION_ERROR
Definition sensor.h:140
@ BT_MESH_SENSOR_VALUE_MIN_OR_LESS
Definition sensor.h:156
@ BT_MESH_SENSOR_VALUE_INVALID
Definition sensor.h:148
@ BT_MESH_SENSOR_VALUE_NUMBER
Definition sensor.h:138
@ BT_MESH_SENSOR_VALUE_UNKNOWN
Definition sensor.h:146
@ BT_MESH_SENSOR_VALUE_MAX_OR_GREATER
Definition sensor.h:152
@ BT_MESH_SENSOR_VALUE_CLAMPED
Definition sensor.h:144
@ BT_MESH_SENSOR_VALUE_TOTAL_DEVICE_LIFE
Definition sensor.h:158
enum bt_mesh_sensor_value_status bt_mesh_sensor_value_to_micro(const struct bt_mesh_sensor_value *sensor_val, int64_t *val)
Convert a bt_mesh_sensor_value instance to an integer in micro units.
enum bt_mesh_sensor_value_status bt_mesh_sensor_value_to_float(const struct bt_mesh_sensor_value *sensor_val, float *val)
Convert a bt_mesh_sensor_value to a float.
const char * bt_mesh_sensor_ch_str(const struct bt_mesh_sensor_value *ch)
Get a human readable representation of a single sensor channel.
bool bt_mesh_sensor_value_in_column(const struct bt_mesh_sensor_value *value, const struct bt_mesh_sensor_column *col)
Check whether a single channel sensor value lies within a column.
int bt_mesh_sensor_value_from_float(const struct bt_mesh_sensor_format *format, float val, struct bt_mesh_sensor_value *sensor_val)
Convert a float to a bt_mesh_sensor_value.
int bt_mesh_sensor_value_from_sensor_value(const struct bt_mesh_sensor_format *format, const struct sensor_value *val, struct bt_mesh_sensor_value *sensor_val)
Convert a sensor_value (include/zephyr/drivers/sensor.h) instance to a bt_mesh_sensor_value.
int bt_mesh_sensor_value_from_micro(const struct bt_mesh_sensor_format *format, int64_t val, struct bt_mesh_sensor_value *sensor_val)
Convert an integer in micro units to a bt_mesh_sensor_value.
static bool bt_mesh_sensor_value_status_is_numeric(enum bt_mesh_sensor_value_status status)
Returns true if status is a value which can be represented by a number, meaning one of BT_MESH_SENSOR...
Definition sensor.h:653
int bt_mesh_sensor_value_compare(const struct bt_mesh_sensor_value *a, const struct bt_mesh_sensor_value *b)
Compare two bt_mesh_sensor_value instances.
const struct bt_mesh_sensor_format * format
Definition sensor.h:105
struct bt_mesh_sensor_value start
Definition sensor.h:265
struct bt_mesh_sensor_value width
Definition sensor.h:267
struct bt_mesh_sensor_value down
Definition sensor.h:221
struct bt_mesh_sensor_value up
Definition sensor.h:219
enum bt_mesh_sensor_sampling sampling_type
Definition sensor.h:209
uint64_t period
Definition sensor.h:211
uint64_t update_interval
Definition sensor.h:213
struct bt_mesh_sensor_descriptor::@151 tolerance
uint16_t positive
Encoded maximum positive measurement error.
Definition sensor.h:194
uint16_t negative
Encoded maximum negative measurement error.
Definition sensor.h:206
uint32_t column_count
Definition sensor.h:525
int(* get)(struct bt_mesh_sensor_srv *srv, struct bt_mesh_sensor *sensor, struct bt_mesh_msg_ctx *ctx, uint32_t column_index, struct bt_mesh_sensor_value *value)
Getter for the series values.
Definition sensor.h:545
const struct bt_mesh_sensor_column * columns
Definition sensor.h:522
void(* get)(struct bt_mesh_sensor_srv *srv, struct bt_mesh_sensor *sensor, const struct bt_mesh_sensor_setting *setting, struct bt_mesh_msg_ctx *ctx, struct bt_mesh_sensor_value *rsp)
Getter for this sensor setting.
Definition sensor.h:481
const struct bt_mesh_sensor_type * type
Definition sensor.h:463
int(* set)(struct bt_mesh_sensor_srv *srv, struct bt_mesh_sensor *sensor, const struct bt_mesh_sensor_setting *setting, struct bt_mesh_msg_ctx *ctx, const struct bt_mesh_sensor_value *value)
Setter for this sensor setting.
Definition sensor.h:503
Definition sensor_srv.h:78
enum bt_mesh_sensor_cadence cadence
Definition sensor.h:246
struct bt_mesh_sensor_threshold::@152 range
struct bt_mesh_sensor_deltas deltas
Definition sensor.h:231
uint8_t channel_count
Definition sensor.h:124
const struct bt_mesh_sensor_channel * channels
Definition sensor.h:129
uint8_t flags
Definition sensor.h:122
uint16_t id
Definition sensor.h:120
const char * name
Definition sensor.h:95
const char * symbol
Definition sensor.h:97
uint8_t raw[0]
Definition sensor.h:168
const struct bt_mesh_sensor_format * format
Definition sensor.h:166
struct bt_mesh_sensor::@154 state
size_t count
Definition sensor.h:567
sys_snode_t node
Definition sensor.h:603
const struct bt_mesh_sensor_type * type
Definition sensor.h:559
uint8_t configured
Definition sensor.h:627
uint8_t pub_div
Definition sensor.h:620
int(*const get)(struct bt_mesh_sensor_srv *srv, struct bt_mesh_sensor *sensor, struct bt_mesh_msg_ctx *ctx, struct bt_mesh_sensor_value *rsp)
Getter function for the sensor value.
Definition sensor.h:590
uint8_t min_int
Definition sensor.h:616
const struct bt_mesh_sensor_descriptor * descriptor
Definition sensor.h:561
const struct bt_mesh_sensor_series series
Definition sensor.h:576
const struct bt_mesh_sensor_setting * list
Definition sensor.h:565
uint8_t fast_pub
Definition sensor.h:624
uint16_t seq
Definition sensor.h:609
const struct bt_mesh_sensor::@153 settings