Zephyr API Documentation  3.6.0
A Scalable Open Source RTOS
3.6.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
sensing_sensor.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022-2023 Intel Corporation.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_SENSING_SENSOR_H_
8#define ZEPHYR_INCLUDE_SENSING_SENSOR_H_
9
10#include <stdbool.h>
11#include <zephyr/device.h>
14
28#ifdef __cplusplus
29extern "C" {
30#endif
31
41
47
52
58};
59
60enum {
62};
63
64enum {
66};
67
75 /* interval and sensitivity set from client(sink) to reporter(source) */
77 int sensitivity[CONFIG_SENSING_MAX_SENSITIVITY_COUNT];
78 /* copy sensor data to connection data buf from reporter */
79 void *data;
80 /* client(sink) next consume time */
82 /* post data to application */
84};
85
96 const struct device *dev;
103 int sensitivity[CONFIG_SENSING_MAX_SENSITIVITY_COUNT];
105 /* runtime info */
107 struct k_timer timer;
111};
112
113#define SENSING_SENSOR_INFO_NAME(node, idx) \
114 _CONCAT(_CONCAT(__sensing_sensor_info_, idx), DEVICE_DT_NAME_GET(node))
115
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),\
125 };
126
127#define SENSING_CONNECTIONS_NAME(node) \
128 _CONCAT(__sensing_connections_, DEVICE_DT_NAME_GET(node))
129
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))
133
134#define SENSING_SENSOR_SOURCE_EXTERN(idx, node) \
135extern struct sensing_sensor SENSING_SENSOR_SOURCE_NAME(idx, node); \
136
137#define SENSING_CONNECTION_INITIALIZER(source_name, cb_list_ptr) \
138{ \
139 .callback_list = cb_list_ptr, \
140 .source = &source_name, \
141}
142
143#define SENSING_CONNECTION_DEFINE(idx, node, cb_list_ptr) \
144 SENSING_CONNECTION_INITIALIZER(SENSING_SENSOR_SOURCE_NAME(idx, node), \
145 cb_list_ptr)
146
147#define SENSING_CONNECTIONS_DEFINE(node, num, cb_list_ptr) \
148 LISTIFY(num, SENSING_SENSOR_SOURCE_EXTERN, \
149 (), node) \
150 static struct sensing_connection \
151 SENSING_CONNECTIONS_NAME(node)[(num)] = { \
152 LISTIFY(num, SENSING_CONNECTION_DEFINE, \
153 (,), node, cb_list_ptr) \
154 };
155
158 const int info_index;
159 const bool is_streaming;
160};
161
162extern const struct rtio_iodev_api __sensing_iodev_api;
163
164#define SENSING_SUBMIT_CFG_NAME(node, idx) \
165 _CONCAT(_CONCAT(__sensing_submit_cfg_, idx), DEVICE_DT_NAME_GET(node))
166
167#define SENSING_SENSOR_IODEV_NAME(node, idx) \
168 _CONCAT(_CONCAT(__sensing_iodev_, idx), DEVICE_DT_NAME_GET(node))
169
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), \
173 .info_index = idx, \
174 }; \
175 RTIO_IODEV_DEFINE(SENSING_SENSOR_IODEV_NAME(node, idx), \
176 &__sensing_iodev_api, \
177 &SENSING_SUBMIT_CFG_NAME(node, idx));
178
179#define SENSING_SENSOR_NAME(node, idx) \
180 _CONCAT(_CONCAT(__sensing_sensor_, idx), DEVICE_DT_NAME_GET(node))
181
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), \
193 };
194
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, \
232 api_ptr, ...) \
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), \
238 cb_list_ptr); \
239 SENSING_SENSORS_DEFINE(node, reg_ptr, cb_list_ptr);
240
250#define SENSING_SENSORS_DT_INST_DEFINE(inst, ...) \
251 SENSING_SENSORS_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__)
252
270 const struct device *dev, int type,
271 sensing_sensor_handle_t *reporter_handles, int max_handles);
272
283 const struct device *dev, int type);
284
295 const struct device *dev,
297
302#ifdef __cplusplus
303}
304#endif
305
306#endif /*ZEPHYR_INCLUDE_SENSING_SENSOR_H_*/
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