7#ifndef ZEPHYR_INCLUDE_SENSING_SENSOR_H_
8#define ZEPHYR_INCLUDE_SENSING_SENSOR_H_
113#define SENSING_SENSOR_INFO_NAME(node, idx) \
114 _CONCAT(_CONCAT(__sensing_sensor_info_, idx), DEVICE_DT_NAME_GET(node))
116#define SENSING_SENSOR_INFO_DEFINE(node, idx) \
117 const static STRUCT_SECTION_ITERABLE(sensing_sensor_info, \
118 SENSING_SENSOR_INFO_NAME(node, idx)) = { \
119 .type = DT_PROP_BY_IDX(node, sensor_types, idx), \
120 .name = DT_NODE_FULL_NAME(node), \
121 .friendly_name = DT_PROP(node, friendly_name), \
122 .vendor = DT_NODE_VENDOR_OR(node, NULL), \
123 .model = DT_NODE_MODEL_OR(node, NULL), \
124 .minimal_interval = DT_PROP(node, minimal_interval),\
127#define SENSING_CONNECTIONS_NAME(node) \
128 _CONCAT(__sensing_connections_, DEVICE_DT_NAME_GET(node))
130#define SENSING_SENSOR_SOURCE_NAME(idx, node) \
131 SENSING_SENSOR_NAME(DT_PHANDLE_BY_IDX(node, reporters, idx), \
132 DT_PROP_BY_IDX(node, reporters_index, idx))
134#define SENSING_SENSOR_SOURCE_EXTERN(idx, node) \
135extern struct sensing_sensor SENSING_SENSOR_SOURCE_NAME(idx, node); \
137#define SENSING_CONNECTION_INITIALIZER(source_name, cb_list_ptr) \
139 .callback_list = cb_list_ptr, \
140 .source = &source_name, \
143#define SENSING_CONNECTION_DEFINE(idx, node, cb_list_ptr) \
144 SENSING_CONNECTION_INITIALIZER(SENSING_SENSOR_SOURCE_NAME(idx, node), \
147#define SENSING_CONNECTIONS_DEFINE(node, num, cb_list_ptr) \
148 LISTIFY(num, SENSING_SENSOR_SOURCE_EXTERN, \
150 static struct sensing_connection \
151 SENSING_CONNECTIONS_NAME(node)[(num)] = { \
152 LISTIFY(num, SENSING_CONNECTION_DEFINE, \
153 (,), node, cb_list_ptr) \
164#define SENSING_SUBMIT_CFG_NAME(node, idx) \
165 _CONCAT(_CONCAT(__sensing_submit_cfg_, idx), DEVICE_DT_NAME_GET(node))
167#define SENSING_SENSOR_IODEV_NAME(node, idx) \
168 _CONCAT(_CONCAT(__sensing_iodev_, idx), DEVICE_DT_NAME_GET(node))
170#define SENSING_SENSOR_IODEV_DEFINE(node, idx) \
171 static struct sensing_submit_config SENSING_SUBMIT_CFG_NAME(node, idx) = { \
172 .is_streaming = DT_PROP(node, stream_mode), \
175 RTIO_IODEV_DEFINE(SENSING_SENSOR_IODEV_NAME(node, idx), \
176 &__sensing_iodev_api, \
177 &SENSING_SUBMIT_CFG_NAME(node, idx));
179#define SENSING_SENSOR_NAME(node, idx) \
180 _CONCAT(_CONCAT(__sensing_sensor_, idx), DEVICE_DT_NAME_GET(node))
182#define SENSING_SENSOR_DEFINE(node, prop, idx, reg_ptr, cb_list_ptr) \
183 SENSING_SENSOR_INFO_DEFINE(node, idx) \
184 SENSING_SENSOR_IODEV_DEFINE(node, idx) \
185 STRUCT_SECTION_ITERABLE(sensing_sensor, \
186 SENSING_SENSOR_NAME(node, idx)) = { \
187 .dev = DEVICE_DT_GET(node), \
188 .info = &SENSING_SENSOR_INFO_NAME(node, idx), \
189 .register_info = reg_ptr, \
190 .reporter_num = DT_PROP_LEN_OR(node, reporters, 0), \
191 .conns = SENSING_CONNECTIONS_NAME(node), \
192 .iodev = &SENSING_SENSOR_IODEV_NAME(node, idx), \
195#define SENSING_SENSORS_DEFINE(node, reg_ptr, cb_list_ptr) \
196 DT_FOREACH_PROP_ELEM_VARGS(node, sensor_types, \
197 SENSING_SENSOR_DEFINE, reg_ptr, cb_list_ptr)
229#define SENSING_SENSORS_DT_DEFINE(node, reg_ptr, cb_list_ptr, \
230 init_fn, pm_device, \
231 data_ptr, cfg_ptr, level, prio, \
233 SENSOR_DEVICE_DT_DEFINE(node, init_fn, pm_device, \
234 data_ptr, cfg_ptr, level, prio, \
235 api_ptr, __VA_ARGS__); \
236 SENSING_CONNECTIONS_DEFINE(node, \
237 DT_PROP_LEN_OR(node, reporters, 0), \
239 SENSING_SENSORS_DEFINE(node, reg_ptr, cb_list_ptr);
250#define SENSING_SENSORS_DT_INST_DEFINE(inst, ...) \
251 SENSING_SENSORS_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__)
270 const struct device *dev,
int type,
283 const struct device *dev,
int type);
long atomic_t
Definition: atomic_types.h:15
sensing_sensor_state
Sensing subsystem sensor state.
Definition: sensing.h:85
void * sensing_sensor_handle_t
Define Sensing subsystem sensor handle.
Definition: sensing.h:106
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.
@ EVENT_CONFIG_READY
Definition: sensing_sensor.h:61
@ SENSOR_LATER_CFG_BIT
Definition: sensing_sensor.h:65
sensor_channel
Sensor channels.
Definition: sensor.h:59
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:387
API that an RTIO IO device should implement.
Definition: rtio.h:429
An IO device with a function table for submitting requests.
Definition: rtio.h:444
A submission queue event.
Definition: rtio.h:230
Sensing subsystem event callback list.
Definition: sensing.h:151
Connection between a source and sink of sensor data.
Definition: sensing_sensor.h:71
sys_snode_t snode
Definition: sensing_sensor.h:72
int sensitivity[CONFIG_SENSING_MAX_SENSITIVITY_COUNT]
Definition: sensing_sensor.h:77
struct sensing_callback_list * callback_list
Definition: sensing_sensor.h:83
void * data
Definition: sensing_sensor.h:79
struct sensing_sensor * sink
Definition: sensing_sensor.h:74
uint32_t interval
Definition: sensing_sensor.h:76
struct sensing_sensor * source
Definition: sensing_sensor.h:73
uint64_t next_consume_time
Definition: sensing_sensor.h:81
Sensor basic constant information.
Definition: sensing.h:126
Sensor registration information.
Definition: sensing_sensor.h:36
uint16_t sample_size
Sample size in bytes for a single sample of the registered sensor.
Definition: sensing_sensor.h:46
uint16_t flags
Sensor flags.
Definition: sensing_sensor.h:40
uint8_t sensitivity_count
The number of sensor sensitivities.
Definition: sensing_sensor.h:51
struct sensing_sensor_version version
Sensor version.
Definition: sensing_sensor.h:57
Sensor Version.
Definition: sensing.h:39
Internal sensor instance data structure.
Definition: sensing_sensor.h:95
sys_slist_t client_list
Definition: sensing_sensor.h:100
const struct device * dev
Definition: sensing_sensor.h:96
uint32_t interval
Definition: sensing_sensor.h:101
const uint16_t reporter_num
Definition: sensing_sensor.h:99
int sensitivity[CONFIG_SENSING_MAX_SENSITIVITY_COUNT]
Definition: sensing_sensor.h:103
struct sensing_connection * conns
Definition: sensing_sensor.h:110
struct k_timer timer
Definition: sensing_sensor.h:107
uint8_t sensitivity_count
Definition: sensing_sensor.h:102
struct rtio_iodev * iodev
Definition: sensing_sensor.h:106
enum sensing_sensor_state state
Definition: sensing_sensor.h:104
struct rtio_sqe * stream_sqe
Definition: sensing_sensor.h:108
const struct sensing_sensor_register_info * register_info
Definition: sensing_sensor.h:98
const struct sensing_sensor_info * info
Definition: sensing_sensor.h:97
atomic_t flag
Definition: sensing_sensor.h:109
Definition: sensing_sensor.h:156
enum sensor_channel chan
Definition: sensing_sensor.h:157
const bool is_streaming
Definition: sensing_sensor.h:159
const int info_index
Definition: sensing_sensor.h:158