Lines Matching full:sensor

8 #include <zephyr/drivers/sensor.h>
48 static uint32_t arbitrate_interval(struct sensing_sensor *sensor) in arbitrate_interval() argument
55 for_each_client_conn(sensor, conn) { in arbitrate_interval()
56 LOG_INF("arbitrate interval, sensor:%s for each conn:%p, interval:%d(us)", in arbitrate_interval()
57 sensor->dev->name, conn, conn->interval); in arbitrate_interval()
65 /* min_interval == UINT32_MAX means sensor is not opened by any clients, in arbitrate_interval()
70 LOG_DBG("arbitrate interval, sensor:%s, interval:%d(us)", in arbitrate_interval()
71 sensor->dev->name, interval); in arbitrate_interval()
76 static int set_arbitrate_interval(struct sensing_sensor *sensor, uint32_t interval) in set_arbitrate_interval() argument
78 struct sensing_submit_config *config = sensor->iodev->data; in set_arbitrate_interval()
82 __ASSERT(sensor && sensor->dev, "set arbitrate interval, sensor or sensor device is NULL"); in set_arbitrate_interval()
84 LOG_INF("set arbitrate interval:%d, sensor:%s, is_streaming:%d", in set_arbitrate_interval()
85 interval, sensor->dev->name, config->is_streaming); in set_arbitrate_interval()
92 ret = sensor_attr_set(sensor->dev, config->chan, in set_arbitrate_interval()
95 LOG_ERR("%s set attr freq failed:%d", sensor->dev->name, ret); in set_arbitrate_interval()
99 if (sensor->interval) { in set_arbitrate_interval()
101 rtio_sqe_cancel(sensor->stream_sqe); in set_arbitrate_interval()
103 k_timer_stop(&sensor->timer); in set_arbitrate_interval()
109 ret = sensor_stream(sensor->iodev, &sensing_rtio_ctx, in set_arbitrate_interval()
110 sensor, &sensor->stream_sqe); in set_arbitrate_interval()
112 k_timer_start(&sensor->timer, K_USEC(interval), in set_arbitrate_interval()
117 sensor->interval = interval; in set_arbitrate_interval()
122 static int config_interval(struct sensing_sensor *sensor) in config_interval() argument
124 uint32_t interval = arbitrate_interval(sensor); in config_interval()
126 LOG_INF("config interval, sensor:%s, interval:%d", sensor->dev->name, interval); in config_interval()
128 return set_arbitrate_interval(sensor, interval); in config_interval()
131 static uint32_t arbitrate_sensitivity(struct sensing_sensor *sensor, int index) in arbitrate_sensitivity() argument
137 for_each_client_conn(sensor, conn) { in arbitrate_sensitivity()
138 LOG_DBG("arbitrate sensitivity, sensor:%s for each conn:%p, idx:%d, sens:%d", in arbitrate_sensitivity()
139 sensor->dev->name, conn, index, in arbitrate_sensitivity()
148 LOG_DBG("arbitrate sensitivity, sensor:%s, min_sensitivity:%d", in arbitrate_sensitivity()
149 sensor->dev->name, min_sensitivity); in arbitrate_sensitivity()
151 /* min_sensitivity == UINT32_MAX means no client is requesting to open sensor, in arbitrate_sensitivity()
157 static int set_arbitrate_sensitivity(struct sensing_sensor *sensor, int index, uint32_t sensitivity) in set_arbitrate_sensitivity() argument
159 struct sensing_submit_config *config = (struct sensing_submit_config *)sensor->iodev->data; in set_arbitrate_sensitivity()
163 /* update sensor sensitivity */ in set_arbitrate_sensitivity()
164 sensor->sensitivity[index] = sensitivity; in set_arbitrate_sensitivity()
166 for (i = 0; i < sensor->sensitivity_count; i++) { in set_arbitrate_sensitivity()
167 threshold.val1 = MIN(sensor->sensitivity[i], threshold.val1); in set_arbitrate_sensitivity()
170 return sensor_attr_set(sensor->dev, config->chan, in set_arbitrate_sensitivity()
174 static int config_sensitivity(struct sensing_sensor *sensor, int index) in config_sensitivity() argument
176 uint32_t sensitivity = arbitrate_sensitivity(sensor, index); in config_sensitivity()
178 LOG_INF("config sensitivity, sensor:%s, index:%d, sensitivity:%d", in config_sensitivity()
179 sensor->dev->name, index, sensitivity); in config_sensitivity()
181 return set_arbitrate_sensitivity(sensor, index, sensitivity); in config_sensitivity()
184 static int config_sensor(struct sensing_sensor *sensor) in config_sensor() argument
189 ret = config_interval(sensor); in config_sensor()
191 LOG_WRN("sensor:%s config interval error", sensor->dev->name); in config_sensor()
194 for (i = 0; i < sensor->sensitivity_count; i++) { in config_sensor()
195 ret = config_sensitivity(sensor, i); in config_sensor()
197 LOG_WRN("sensor:%s config sensitivity index:%d error:%d", in config_sensor()
198 sensor->dev->name, i, ret); in config_sensor()
207 LOG_INF("sensor later config begin..."); in sensor_later_config()
209 for_each_sensor_reverse(sensor) { in sensor_later_config()
210 if (atomic_test_and_clear_bit(&sensor->flag, SENSOR_LATER_CFG_BIT)) { in sensor_later_config()
211 LOG_INF("sensor later config, sensor:%s", in sensor_later_config()
212 sensor->dev->name); in sensor_later_config()
213 config_sensor(sensor); in sensor_later_config()
236 static void save_config_and_notify(struct sensing_sensor *sensor) in save_config_and_notify() argument
240 __ASSERT(sensor, "save config and notify, sensing_sensor not be NULL"); in save_config_and_notify()
242 LOG_INF("save config and notify, sensor:%s", sensor->dev->name); in save_config_and_notify()
244 /* remember sensor_later_config bit to sensor */ in save_config_and_notify()
245 atomic_set_bit(&sensor->flag, SENSOR_LATER_CFG_BIT); in save_config_and_notify()
253 static int set_sensor_state(struct sensing_sensor *sensor, enum sensing_sensor_state state) in set_sensor_state() argument
255 __ASSERT(sensor, "set sensor state, sensing_sensor is NULL"); in set_sensor_state()
257 sensor->state = state; in set_sensor_state()
284 struct sensing_sensor *sensor = CONTAINER_OF(timer_id, in sensing_sensor_polling_timer() local
288 sensor_read_async_mempool(sensor->iodev, &sensing_rtio_ctx, sensor); in sensing_sensor_polling_timer()
291 static int init_sensor(struct sensing_sensor *sensor) in init_sensor() argument
297 __ASSERT(sensor && sensor->dev, "init sensor, sensor or sensor device is NULL"); in init_sensor()
299 k_timer_init(&sensor->timer, sensing_sensor_polling_timer, NULL); in init_sensor()
300 sys_slist_init(&sensor->client_list); in init_sensor()
302 for (i = 0; i < sensor->reporter_num; i++) { in init_sensor()
303 conn = &sensor->conns[i]; in init_sensor()
305 /* source sensor has been assigned in compile time */ in init_sensor()
306 init_connection(conn, NULL, sensor); in init_sensor()
308 LOG_INF("init sensor, reporter:%s, client:%s, connection:%d(%p)", in init_sensor()
309 conn->source->dev->name, sensor->dev->name, i, conn); in init_sensor()
312 config = sensor->iodev->data; in init_sensor()
313 config->chan = sensing_sensor_type_to_chan(sensor->info->type); in init_sensor()
326 for_each_sensor(sensor) { in sensing_init()
327 ret = init_sensor(sensor); in sensing_init()
329 LOG_ERR("sensor:%s initial error", sensor->dev->name); in sensing_init()
332 ret = set_sensor_state(sensor, state); in sensing_init()
334 LOG_ERR("set sensor:%s state:%d error", sensor->dev->name, state); in sensing_init()
336 LOG_INF("sensing init, sensor:%s, state:%d", sensor->dev->name, sensor->state); in sensing_init()
347 int open_sensor(struct sensing_sensor *sensor, struct sensing_connection **conn) in open_sensor() argument
351 if (sensor->state != SENSING_SENSOR_STATE_READY) { in open_sensor()
355 /* create connection from sensor to application(client = NULL) */ in open_sensor()
361 init_connection(tmp_conn, sensor, NULL); in open_sensor()
377 __ASSERT(!tmp_conn->sink, "sensor derived from device tree cannot be closed"); in close_sensor()
412 LOG_INF("set interval, sensor:%s, interval:%u(us)", conn->source->dev->name, interval); in set_interval()
425 LOG_INF("set interval, sensor:%s, conn:%p, interval:%d", in set_interval()
438 LOG_INF("get interval, sensor:%s, interval:%u(us)", conn->source->dev->name, *interval); in get_interval()
449 LOG_INF("set sensitivity, sensor:%s, index:%d, sensitivity:%d, count:%d", in set_sensitivity()
454 LOG_ERR("sensor:%s sensitivity index:%d invalid", conn->source->dev->name, index); in set_sensitivity()
478 LOG_ERR("sensor:%s sensitivity index:%d invalid", conn->source->dev->name, index); in get_sensitivity()
496 LOG_INF("get_sensitivity, sensor:%s, index:%d, sensitivity:%d, count:%d", in get_sensitivity()