7#ifndef ZEPHYR_INCLUDE_SENSING_SENSOR_H_
8#define ZEPHYR_INCLUDE_SENSING_SENSOR_H_
77struct sensing_connection {
79 struct sensing_sensor *source;
80 struct sensing_sensor *sink;
83 int sensitivity[CONFIG_SENSING_MAX_SENSITIVITY_COUNT];
87 struct sensing_callback_list *callback_list;
99struct sensing_sensor {
100 const struct device *dev;
101 const struct sensing_sensor_info *info;
103 const struct sensing_sensor_register_info *register_info;
109 int sensitivity[CONFIG_SENSING_MAX_SENSITIVITY_COUNT];
111 struct rtio_iodev *iodev;
112 struct k_timer timer;
113 struct rtio_sqe *stream_sqe;
115 struct sensing_connection *conns;
126#define SENSING_SENSOR_INFO_NAME(node, idx) \
127 _CONCAT(_CONCAT(__sensing_sensor_info_, idx), DEVICE_DT_NAME_GET(node))
139#define SENSING_SENSOR_INFO_DEFINE(node, idx) \
140 const static STRUCT_SECTION_ITERABLE(sensing_sensor_info, \
141 SENSING_SENSOR_INFO_NAME(node, idx)) = { \
142 .type = DT_PROP_BY_IDX(node, sensor_types, idx), \
143 .name = DT_NODE_FULL_NAME(node), \
144 .friendly_name = DT_PROP(node, friendly_name), \
145 .vendor = DT_NODE_VENDOR_OR(node, NULL), \
146 .model = DT_NODE_MODEL_OR(node, NULL), \
147 .minimal_interval = DT_PROP(node, minimal_interval), \
157#define SENSING_CONNECTIONS_NAME(node) \
158 _CONCAT(__sensing_connections_, DEVICE_DT_NAME_GET(node))
168#define SENSING_SENSOR_SOURCE_NAME(idx, node) \
169 SENSING_SENSOR_NAME(DT_PHANDLE_BY_IDX(node, reporters, idx), \
170 DT_PROP_BY_IDX(node, reporters_index, idx))
180#define SENSING_SENSOR_SOURCE_EXTERN(idx, node) \
181extern struct sensing_sensor SENSING_SENSOR_SOURCE_NAME(idx, node);
191#define SENSING_CONNECTION_INITIALIZER(source_name, cb_list_ptr) \
193 .callback_list = cb_list_ptr, \
194 .source = &source_name, \
206#define SENSING_CONNECTION_DEFINE(idx, node, cb_list_ptr) \
207 SENSING_CONNECTION_INITIALIZER(SENSING_SENSOR_SOURCE_NAME(idx, node), \
220#define SENSING_CONNECTIONS_DEFINE(node, num, cb_list_ptr) \
221 LISTIFY(num, SENSING_SENSOR_SOURCE_EXTERN, \
223 static struct sensing_connection \
224 SENSING_CONNECTIONS_NAME(node)[(num)] = { \
225 LISTIFY(num, SENSING_CONNECTION_DEFINE, \
226 (,), node, cb_list_ptr) \
235struct sensing_submit_config {
237 const int info_index;
238 const bool is_streaming;
256#define SENSING_SUBMIT_CFG_NAME(node, idx) \
257 _CONCAT(_CONCAT(__sensing_submit_cfg_, idx), DEVICE_DT_NAME_GET(node))
267#define SENSING_SENSOR_IODEV_NAME(node, idx) \
268 _CONCAT(_CONCAT(__sensing_iodev_, idx), DEVICE_DT_NAME_GET(node))
279#define SENSING_SENSOR_IODEV_DEFINE(node, idx) \
280 static struct sensing_submit_config SENSING_SUBMIT_CFG_NAME(node, idx) = { \
281 .is_streaming = DT_PROP(node, stream_mode), \
284 RTIO_IODEV_DEFINE(SENSING_SENSOR_IODEV_NAME(node, idx), \
285 &__sensing_iodev_api, \
286 &SENSING_SUBMIT_CFG_NAME(node, idx));
296#define SENSING_SENSOR_NAME(node, idx) \
297 _CONCAT(_CONCAT(__sensing_sensor_, idx), DEVICE_DT_NAME_GET(node))
312#define SENSING_SENSOR_DEFINE(node, prop, idx, reg_ptr, cb_list_ptr) \
313 SENSING_SENSOR_INFO_DEFINE(node, idx) \
314 SENSING_SENSOR_IODEV_DEFINE(node, idx) \
315 STRUCT_SECTION_ITERABLE(sensing_sensor, \
316 SENSING_SENSOR_NAME(node, idx)) = { \
317 .dev = DEVICE_DT_GET(node), \
318 .info = &SENSING_SENSOR_INFO_NAME(node, idx), \
319 .register_info = reg_ptr, \
320 .reporter_num = DT_PROP_LEN_OR(node, reporters, 0), \
321 .conns = SENSING_CONNECTIONS_NAME(node), \
322 .iodev = &SENSING_SENSOR_IODEV_NAME(node, idx), \
335#define SENSING_SENSORS_DEFINE(node, reg_ptr, cb_list_ptr) \
336 DT_FOREACH_PROP_ELEM_VARGS(node, sensor_types, \
337 SENSING_SENSOR_DEFINE, reg_ptr, cb_list_ptr)
363#define SENSING_SENSORS_DT_DEFINE(node, reg_ptr, cb_list_ptr, \
364 init_fn, pm_device, \
365 data_ptr, cfg_ptr, level, prio, \
367 SENSOR_DEVICE_DT_DEFINE(node, init_fn, pm_device, \
368 data_ptr, cfg_ptr, level, prio, \
369 api_ptr, __VA_ARGS__); \
370 SENSING_CONNECTIONS_DEFINE(node, \
371 DT_PROP_LEN_OR(node, reporters, 0), \
373 SENSING_SENSORS_DEFINE(node, reg_ptr, cb_list_ptr);
383#define SENSING_SENSORS_DT_INST_DEFINE(inst, ...) \
384 SENSING_SENSORS_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__)
399 const struct device *dev,
int type,
410 const struct device *dev,
int type);
long atomic_t
Definition atomic_types.h:15
sensing_sensor_state
Sensor state.
Definition sensing.h:98
void * sensing_sensor_handle_t
Opaque handle to an opened sensor instance.
Definition sensing.h:140
int sensing_sensor_get_reporters_count(const struct device *dev, int type)
Get reporters count of a given sensor instance by sensor type.
int sensing_sensor_get_reporters(const struct device *dev, int type, sensing_sensor_handle_t *reporter_handles, int max_handles)
Get reporter handles of a given sensor instance by sensor type.
int sensing_sensor_get_state(const struct device *dev, enum sensing_sensor_state *state)
Get this sensor's state.
sensor_channel
Sensor channels.
Definition sensor.h:65
struct _slist sys_slist_t
Single-linked list structure.
Definition slist.h:49
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:39
state
Definition parser_state.h:29
Public APIs for the sensor driver.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:510
API that an RTIO IO device should implement.
Definition rtio.h:524
Sensor registration information.
Definition sensing_sensor.h:30
uint16_t sample_size
Sample size in bytes for a single sample of the registered sensor.
Definition sensing_sensor.h:40
uint16_t flags
Sensor flags.
Definition sensing_sensor.h:34
uint8_t sensitivity_count
The number of sensor sensitivities.
Definition sensing_sensor.h:45
struct sensing_sensor_version version
Sensor version.
Definition sensing_sensor.h:51
Sensor Version.
Definition sensing.h:33