Zephyr API Documentation 4.4.0-rc1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
sensor.h
Go to the documentation of this file.
1/*
2* Copyright (c) 2016 Intel Corporation
3*
4* SPDX-License-Identifier: Apache-2.0
5*/
6#ifndef ZEPHYR_INCLUDE_DRIVERS_SENSOR_H_
7#define ZEPHYR_INCLUDE_DRIVERS_SENSOR_H_
8
14
27
28#include <errno.h>
29#include <stdlib.h>
30
31#include <zephyr/device.h>
33#include <zephyr/dsp/types.h>
34#include <zephyr/rtio/rtio.h>
36#include <zephyr/types.h>
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
61
117
142
145
156
159
162
167
170
173
182
185
188
231
234
237
242
248
253};
254
328
338
414
422typedef void (*sensor_trigger_handler_t)(const struct device *dev,
423 const struct sensor_trigger *trigger);
424
429
434typedef int (*sensor_attr_set_t)(const struct device *dev,
435 enum sensor_channel chan,
436 enum sensor_attribute attr,
437 const struct sensor_value *val);
438
443typedef int (*sensor_attr_get_t)(const struct device *dev,
444 enum sensor_channel chan,
445 enum sensor_attribute attr,
446 struct sensor_value *val);
447
452typedef int (*sensor_trigger_set_t)(const struct device *dev,
453 const struct sensor_trigger *trig,
455
460typedef int (*sensor_sample_fetch_t)(const struct device *dev,
461 enum sensor_channel chan);
462
467typedef int (*sensor_channel_get_t)(const struct device *dev,
468 enum sensor_channel chan,
469 struct sensor_value *val);
470
471/* Forward declaration */
472struct sensor_decoder_api;
473
478typedef int (*sensor_get_decoder_t)(const struct device *dev,
479 const struct sensor_decoder_api **api);
480
489typedef void (*sensor_submit_t)(const struct device *sensor, struct rtio_iodev_sqe *sqe);
490
524
527
540
542/* Ensure sensor_chan_spec is sensibly sized to pass by value */
543BUILD_ASSERT(sizeof(struct sensor_chan_spec) <= sizeof(uintptr_t),
544 "sensor_chan_spec size should be equal or less than the size of a machine word");
546
555static inline bool sensor_chan_spec_eq(struct sensor_chan_spec chan_spec0,
556 struct sensor_chan_spec chan_spec1)
557{
558 return chan_spec0.chan_type == chan_spec1.chan_type &&
559 chan_spec0.chan_idx == chan_spec1.chan_idx;
560}
561
579 int (*get_frame_count)(const uint8_t *buffer, struct sensor_chan_spec chan_spec,
580 uint16_t *frame_count);
581
594 int (*get_size_info)(struct sensor_chan_spec channel, size_t *base_size,
595 size_t *frame_size);
596
621 int (*decode)(const uint8_t *buffer, struct sensor_chan_spec chan_spec, uint32_t *fit,
622 uint16_t max_count, void *data_out);
623
631 bool (*has_trigger)(const uint8_t *buffer, enum sensor_trigger_type trigger);
632};
633
664
668#define SENSOR_DECODE_CONTEXT_INIT(decoder_, buffer_, channel_type_, channel_index_) \
669 { \
670 .decoder = (decoder_), \
671 .buffer = (buffer_), \
672 .channel = {.chan_type = (channel_type_), .chan_idx = (channel_index_)}, \
673 .fit = 0, \
674 }
675
684static inline int sensor_decode(struct sensor_decode_context *ctx, void *out, uint16_t max_count)
685{
686 return ctx->decoder->decode(ctx->buffer, ctx->channel, &ctx->fit, max_count, out);
687}
688
690 size_t *frame_size);
691
703
708
709#define SENSOR_STREAM_TRIGGER_PREP(_trigger, _opt) \
710 { \
711 .trigger = (_trigger), .opt = (_opt), \
712 }
713
714/*
715 * Internal data structure used to store information about the IODevice for async reading and
716 * streaming sensor data.
717 */
719 const struct device *sensor;
720 const bool is_streaming;
721 union {
724 };
725 size_t count;
726 const size_t max;
727};
728
744#define SENSOR_DT_READ_IODEV(name, dt_node, ...) \
745 static struct sensor_chan_spec _CONCAT(__channel_array_, name)[] = {__VA_ARGS__}; \
746 static struct sensor_read_config _CONCAT(__sensor_read_config_, name) = { \
747 .sensor = DEVICE_DT_GET(dt_node), \
748 .is_streaming = false, \
749 .channels = _CONCAT(__channel_array_, name), \
750 .count = ARRAY_SIZE(_CONCAT(__channel_array_, name)), \
751 .max = ARRAY_SIZE(_CONCAT(__channel_array_, name)), \
752 }; \
753 RTIO_IODEV_DEFINE(name, &__sensor_iodev_api, _CONCAT(&__sensor_read_config_, name))
754
774#define SENSOR_DT_STREAM_IODEV(name, dt_node, ...) \
775 static struct sensor_stream_trigger _CONCAT(__trigger_array_, name)[] = {__VA_ARGS__}; \
776 static struct sensor_read_config _CONCAT(__sensor_read_config_, name) = { \
777 .sensor = DEVICE_DT_GET(dt_node), \
778 .is_streaming = true, \
779 .triggers = _CONCAT(__trigger_array_, name), \
780 .count = ARRAY_SIZE(_CONCAT(__trigger_array_, name)), \
781 .max = ARRAY_SIZE(_CONCAT(__trigger_array_, name)), \
782 }; \
783 RTIO_IODEV_DEFINE(name, &__sensor_iodev_api, &_CONCAT(__sensor_read_config_, name))
784
785/* The default decoder API */
786extern const struct sensor_decoder_api __sensor_default_decoder;
787
788/* The default sensor iodev API */
789extern const struct rtio_iodev_api __sensor_iodev_api;
790
803__syscall int sensor_attr_set(const struct device *dev,
804 enum sensor_channel chan,
805 enum sensor_attribute attr,
806 const struct sensor_value *val);
807
808static inline int z_impl_sensor_attr_set(const struct device *dev,
809 enum sensor_channel chan,
810 enum sensor_attribute attr,
811 const struct sensor_value *val)
812{
813 const struct sensor_driver_api *api =
814 (const struct sensor_driver_api *)dev->api;
815
816 if (api->attr_set == NULL) {
817 return -ENOSYS;
818 }
819
820 return api->attr_set(dev, chan, attr, val);
821}
822
835__syscall int sensor_attr_get(const struct device *dev,
836 enum sensor_channel chan,
837 enum sensor_attribute attr,
838 struct sensor_value *val);
839
840static inline int z_impl_sensor_attr_get(const struct device *dev,
841 enum sensor_channel chan,
842 enum sensor_attribute attr,
843 struct sensor_value *val)
844{
845 const struct sensor_driver_api *api =
846 (const struct sensor_driver_api *)dev->api;
847
848 if (api->attr_get == NULL) {
849 return -ENOSYS;
850 }
851
852 return api->attr_get(dev, chan, attr, val);
853}
854
877static inline int sensor_trigger_set(const struct device *dev,
878 const struct sensor_trigger *trig,
880{
881 const struct sensor_driver_api *api =
882 (const struct sensor_driver_api *)dev->api;
883
884 if (api->trigger_set == NULL) {
885 return -ENOSYS;
886 }
887
888 return api->trigger_set(dev, trig, handler);
889}
890
909__syscall int sensor_sample_fetch(const struct device *dev);
910
911static inline int z_impl_sensor_sample_fetch(const struct device *dev)
912{
913 const struct sensor_driver_api *api =
914 (const struct sensor_driver_api *)dev->api;
915
916 return api->sample_fetch(dev, SENSOR_CHAN_ALL);
917}
918
940__syscall int sensor_sample_fetch_chan(const struct device *dev,
941 enum sensor_channel type);
942
943static inline int z_impl_sensor_sample_fetch_chan(const struct device *dev,
944 enum sensor_channel type)
945{
946 const struct sensor_driver_api *api =
947 (const struct sensor_driver_api *)dev->api;
948
949 return api->sample_fetch(dev, type);
950}
951
973__syscall int sensor_channel_get(const struct device *dev,
974 enum sensor_channel chan,
975 struct sensor_value *val);
976
977static inline int z_impl_sensor_channel_get(const struct device *dev,
978 enum sensor_channel chan,
979 struct sensor_value *val)
980{
981 const struct sensor_driver_api *api =
982 (const struct sensor_driver_api *)dev->api;
983
984 return api->channel_get(dev, chan, val);
985}
986
987#if defined(CONFIG_SENSOR_ASYNC_API) || defined(__DOXYGEN__)
988
989/*
990 * Generic data structure used for encoding the sample timestamp and number of channels sampled.
991 */
992struct __attribute__((__packed__)) sensor_data_generic_header {
995
996 /*
997 ** The number of channels present in the frame.
998 * This will be the true number of elements in channel_info and in the q31 values that
999 * follow the header.
1000 */
1002
1005
1006 /* This padding is needed to make sure that the 'channels' field is aligned */
1007 int8_t _padding[sizeof(struct sensor_chan_spec) - 1];
1008
1011};
1012
1021#define SENSOR_CHANNEL_3_AXIS(chan) \
1022 ((chan) == SENSOR_CHAN_ACCEL_XYZ || (chan) == SENSOR_CHAN_GYRO_XYZ || \
1023 (chan) == SENSOR_CHAN_MAGN_XYZ || (chan) == SENSOR_CHAN_POS_DXYZ)
1024
1033#define SENSOR_CHANNEL_IS_ACCEL(chan) \
1034 ((chan) == SENSOR_CHAN_ACCEL_XYZ || (chan) == SENSOR_CHAN_ACCEL_X || \
1035 (chan) == SENSOR_CHAN_ACCEL_Y || (chan) == SENSOR_CHAN_ACCEL_Z)
1036
1045#define SENSOR_CHANNEL_IS_GYRO(chan) \
1046 ((chan) == SENSOR_CHAN_GYRO_XYZ || (chan) == SENSOR_CHAN_GYRO_X || \
1047 (chan) == SENSOR_CHAN_GYRO_Y || (chan) == SENSOR_CHAN_GYRO_Z)
1048
1057__syscall int sensor_get_decoder(const struct device *dev,
1058 const struct sensor_decoder_api **decoder);
1059
1060static inline int z_impl_sensor_get_decoder(const struct device *dev,
1061 const struct sensor_decoder_api **decoder)
1062{
1063 const struct sensor_driver_api *api = (const struct sensor_driver_api *)dev->api;
1064
1065 __ASSERT_NO_MSG(api != NULL);
1066
1067 if (api->get_decoder == NULL) {
1068 *decoder = &__sensor_default_decoder;
1069 return 0;
1070 }
1071
1072 return api->get_decoder(dev, decoder);
1073}
1074
1093__syscall int sensor_reconfigure_read_iodev(const struct rtio_iodev *iodev,
1094 const struct device *sensor,
1095 const struct sensor_chan_spec *channels,
1096 size_t num_channels);
1097
1098static inline int z_impl_sensor_reconfigure_read_iodev(const struct rtio_iodev *iodev,
1099 const struct device *sensor,
1100 const struct sensor_chan_spec *channels,
1101 size_t num_channels)
1102{
1103 struct sensor_read_config *cfg = (struct sensor_read_config *)iodev->data;
1104
1105 if (cfg->max < num_channels || cfg->is_streaming) {
1106 return -ENOMEM;
1107 }
1108
1109 cfg->sensor = sensor;
1110 memcpy(cfg->channels, channels, num_channels * sizeof(struct sensor_chan_spec));
1111 cfg->count = num_channels;
1112 return 0;
1113}
1114
1115static inline int sensor_stream(const struct rtio_iodev *iodev, struct rtio *ctx, void *userdata,
1116 struct rtio_sqe **handle)
1117{
1118 if (IS_ENABLED(CONFIG_USERSPACE)) {
1119 struct rtio_sqe sqe;
1120
1122 rtio_sqe_copy_in_get_handles(ctx, &sqe, handle, 1);
1123 } else {
1124 struct rtio_sqe *sqe = rtio_sqe_acquire(ctx);
1125
1126 if (sqe == NULL) {
1127 return -ENOMEM;
1128 }
1129 if (handle != NULL) {
1130 *handle = sqe;
1131 }
1133 }
1134 rtio_submit(ctx, 0);
1135 return 0;
1136}
1137
1152static inline int sensor_read(const struct rtio_iodev *iodev, struct rtio *ctx, uint8_t *buf,
1153 size_t buf_len)
1154{
1155 if (IS_ENABLED(CONFIG_USERSPACE)) {
1156 struct rtio_sqe sqe;
1157
1159 rtio_sqe_copy_in(ctx, &sqe, 1);
1160 } else {
1161 struct rtio_sqe *sqe = rtio_sqe_acquire(ctx);
1162
1163 if (sqe == NULL) {
1164 return -ENOMEM;
1165 }
1167 }
1168 rtio_submit(ctx, 0);
1169
1170 struct rtio_cqe *cqe = rtio_cqe_consume_block(ctx);
1171 int res = cqe->result;
1172
1173 __ASSERT(cqe->userdata == buf,
1174 "consumed non-matching completion for sensor read into buffer %p\n", buf);
1175
1176 rtio_cqe_release(ctx, cqe);
1177
1178 return res;
1179}
1180
1194static inline int sensor_read_async_mempool(const struct rtio_iodev *iodev, struct rtio *ctx,
1195 void *userdata)
1196{
1197 if (IS_ENABLED(CONFIG_USERSPACE)) {
1198 struct rtio_sqe sqe;
1199
1201 rtio_sqe_copy_in(ctx, &sqe, 1);
1202 } else {
1203 struct rtio_sqe *sqe = rtio_sqe_acquire(ctx);
1204
1205 if (sqe == NULL) {
1206 return -ENOMEM;
1207 }
1209 }
1210 rtio_submit(ctx, 0);
1211 return 0;
1212}
1213
1226 void *userdata);
1227
1240
1241#endif /* defined(CONFIG_SENSOR_ASYNC_API) || defined(__DOXYGEN__) */
1242
1246#define SENSOR_G 9806650LL
1247
1251#define SENSOR_PI 3141592LL
1252
1261static inline int32_t sensor_ms2_to_g(const struct sensor_value *ms2)
1262{
1263 int64_t micro_ms2 = ms2->val1 * 1000000LL + ms2->val2;
1264
1265 if (micro_ms2 > 0) {
1266 return (micro_ms2 + SENSOR_G / 2) / SENSOR_G;
1267 } else {
1268 return (micro_ms2 - SENSOR_G / 2) / SENSOR_G;
1269 }
1270}
1271
1278static inline void sensor_g_to_ms2(int32_t g, struct sensor_value *ms2)
1279{
1280 ms2->val1 = ((int64_t)g * SENSOR_G) / 1000000LL;
1281 ms2->val2 = ((int64_t)g * SENSOR_G) % 1000000LL;
1282}
1283
1292static inline int32_t sensor_ms2_to_mg(const struct sensor_value *ms2)
1293{
1294 int64_t nano_ms2 = (ms2->val1 * 1000000LL + ms2->val2) * 1000LL;
1295
1296 if (nano_ms2 > 0) {
1297 return (nano_ms2 + SENSOR_G / 2) / SENSOR_G;
1298 } else {
1299 return (nano_ms2 - SENSOR_G / 2) / SENSOR_G;
1300 }
1301}
1302
1311static inline int32_t sensor_ms2_to_ug(const struct sensor_value *ms2)
1312{
1313 int64_t micro_ms2 = (ms2->val1 * INT64_C(1000000)) + ms2->val2;
1314
1315 return (micro_ms2 * 1000000LL) / SENSOR_G;
1316}
1317
1324static inline void sensor_ug_to_ms2(int32_t ug, struct sensor_value *ms2)
1325{
1326 ms2->val1 = ((int64_t)ug * SENSOR_G / 1000000LL) / 1000000LL;
1327 ms2->val2 = ((int64_t)ug * SENSOR_G / 1000000LL) % 1000000LL;
1328}
1329
1337static inline int32_t sensor_rad_to_degrees(const struct sensor_value *rad)
1338{
1339 int64_t micro_rad_s = rad->val1 * 1000000LL + rad->val2;
1340
1341 if (micro_rad_s > 0) {
1342 return (micro_rad_s * 180LL + SENSOR_PI / 2) / SENSOR_PI;
1343 } else {
1344 return (micro_rad_s * 180LL - SENSOR_PI / 2) / SENSOR_PI;
1345 }
1346}
1347
1354static inline void sensor_degrees_to_rad(int32_t d, struct sensor_value *rad)
1355{
1356 rad->val1 = ((int64_t)d * SENSOR_PI / 180LL) / 1000000LL;
1357 rad->val2 = ((int64_t)d * SENSOR_PI / 180LL) % 1000000LL;
1358}
1359
1371static inline int32_t sensor_rad_to_10udegrees(const struct sensor_value *rad)
1372{
1373 int64_t micro_rad_s = rad->val1 * 1000000LL + rad->val2;
1374
1375 return (micro_rad_s * 180LL * 100000LL) / SENSOR_PI;
1376}
1377
1384static inline void sensor_10udegrees_to_rad(int32_t d, struct sensor_value *rad)
1385{
1386 rad->val1 = ((int64_t)d * SENSOR_PI / 180LL / 100000LL) / 1000000LL;
1387 rad->val2 = ((int64_t)d * SENSOR_PI / 180LL / 100000LL) % 1000000LL;
1388}
1389
1396static inline double sensor_value_to_double(const struct sensor_value *val)
1397{
1398 return (double)val->val1 + (double)val->val2 / 1000000;
1399}
1400
1407static inline float sensor_value_to_float(const struct sensor_value *val)
1408{
1409 return (float)val->val1 + (float)val->val2 / 1000000;
1410}
1411
1419static inline int sensor_value_from_double(struct sensor_value *val, double inp)
1420{
1421 if (inp < (double)INT32_MIN || inp > (double)INT32_MAX) {
1422 return -ERANGE;
1423 }
1424
1425 int32_t val1 = (int32_t)inp;
1426 int32_t val2 = (int32_t)((inp - (double)val1) * 1000000.0);
1427
1428 val->val1 = val1;
1429 val->val2 = val2;
1430
1431 return 0;
1432}
1433
1441static inline int sensor_value_from_float(struct sensor_value *val, float inp)
1442{
1443 if (inp < (float)INT32_MIN || inp >= (float)INT32_MAX) {
1444 return -ERANGE;
1445 }
1446
1447 int32_t val1 = (int32_t)inp;
1448 int32_t val2 = (int32_t)((inp - (float)val1) * 1000000.0f);
1449
1450 val->val1 = val1;
1451 val->val2 = val2;
1452
1453 return 0;
1454}
1455
1456#ifdef CONFIG_SENSOR_INFO
1457
1458struct sensor_info {
1459 const struct device *dev;
1460 const char *vendor;
1461 const char *model;
1462 const char *friendly_name;
1463};
1464
1465#define SENSOR_INFO_INITIALIZER(_dev, _vendor, _model, _friendly_name) \
1466 { \
1467 .dev = _dev, \
1468 .vendor = _vendor, \
1469 .model = _model, \
1470 .friendly_name = _friendly_name, \
1471 }
1472
1473#define SENSOR_INFO_DEFINE(name, ...) \
1474 static const STRUCT_SECTION_ITERABLE(sensor_info, name) = \
1475 SENSOR_INFO_INITIALIZER(__VA_ARGS__)
1476
1477#define SENSOR_INFO_DT_NAME(node_id) \
1478 _CONCAT(__sensor_info, DEVICE_DT_NAME_GET(node_id))
1479
1480#define SENSOR_INFO_DT_DEFINE(node_id) \
1481 SENSOR_INFO_DEFINE(SENSOR_INFO_DT_NAME(node_id), \
1482 DEVICE_DT_GET(node_id), \
1483 DT_NODE_VENDOR_OR(node_id, NULL), \
1484 DT_NODE_MODEL_OR(node_id, NULL), \
1485 DT_PROP_OR(node_id, friendly_name, NULL)) \
1486
1487#else
1488
1489#define SENSOR_INFO_DEFINE(name, ...)
1490#define SENSOR_INFO_DT_DEFINE(node_id)
1491
1492#endif /* CONFIG_SENSOR_INFO */
1493
1521#define SENSOR_DEVICE_DT_DEFINE(node_id, init_fn, pm_device, \
1522 data_ptr, cfg_ptr, level, prio, \
1523 api_ptr, ...) \
1524 DEVICE_DT_DEFINE(node_id, init_fn, pm_device, \
1525 data_ptr, cfg_ptr, level, prio, \
1526 api_ptr, __VA_ARGS__); \
1527 \
1528 SENSOR_INFO_DT_DEFINE(node_id);
1529
1539#define SENSOR_DEVICE_DT_INST_DEFINE(inst, ...) \
1540 SENSOR_DEVICE_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__)
1541
1548static inline int64_t sensor_value_to_deci(const struct sensor_value *val)
1549{
1550 return ((int64_t)val->val1 * 10) + val->val2 / 100000;
1551}
1552
1559static inline int64_t sensor_value_to_centi(const struct sensor_value *val)
1560{
1561 return ((int64_t)val->val1 * 100) + val->val2 / 10000;
1562}
1563
1570static inline int64_t sensor_value_to_milli(const struct sensor_value *val)
1571{
1572 return ((int64_t)val->val1 * 1000) + val->val2 / 1000;
1573}
1574
1581static inline int64_t sensor_value_to_micro(const struct sensor_value *val)
1582{
1583 return ((int64_t)val->val1 * 1000000) + val->val2;
1584}
1585
1593static inline int sensor_value_from_milli(struct sensor_value *val, int64_t milli)
1594{
1595 if (milli < ((int64_t)INT32_MIN - 1) * 1000LL ||
1596 milli > ((int64_t)INT32_MAX + 1) * 1000LL) {
1597 return -ERANGE;
1598 }
1599
1600 val->val1 = (int32_t)(milli / 1000);
1601 val->val2 = (int32_t)(milli % 1000) * 1000;
1602
1603 return 0;
1604}
1605
1613static inline int sensor_value_from_micro(struct sensor_value *val, int64_t micro)
1614{
1615 if (micro < ((int64_t)INT32_MIN - 1) * 1000000LL ||
1616 micro > ((int64_t)INT32_MAX + 1) * 1000000LL) {
1617 return -ERANGE;
1618 }
1619
1620 val->val1 = (int32_t)(micro / 1000000LL);
1621 val->val2 = (int32_t)(micro % 1000000LL);
1622
1623 return 0;
1624}
1625
1629
1635#define SENSOR_DECODER_NAME() UTIL_CAT(DT_DRV_COMPAT, __decoder_api)
1636
1644#define SENSOR_DECODER_DT_GET(node_id) \
1645 &UTIL_CAT(DT_STRING_TOKEN_BY_IDX(node_id, compatible, 0), __decoder_api)
1646
1662#define SENSOR_DECODER_API_DT_DEFINE() \
1663 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), (), (static)) \
1664 const STRUCT_SECTION_ITERABLE(sensor_decoder_api, SENSOR_DECODER_NAME())
1665
1666#define Z_MAYBE_SENSOR_DECODER_DECLARE_INTERNAL_IDX(node_id, prop, idx) \
1667 extern const struct sensor_decoder_api UTIL_CAT( \
1668 DT_STRING_TOKEN_BY_IDX(node_id, prop, idx), __decoder_api);
1669
1670#define Z_MAYBE_SENSOR_DECODER_DECLARE_INTERNAL(node_id) \
1671 COND_CODE_1(DT_NODE_HAS_PROP(node_id, compatible), \
1672 (DT_FOREACH_PROP_ELEM(node_id, compatible, \
1673 Z_MAYBE_SENSOR_DECODER_DECLARE_INTERNAL_IDX)), \
1674 ())
1675
1676DT_FOREACH_STATUS_OKAY_NODE(Z_MAYBE_SENSOR_DECODER_DECLARE_INTERNAL)
1677
1678#ifdef __cplusplus
1679}
1680#endif
1681
1682#include <zephyr/syscalls/sensor.h>
1683
1684#endif /* ZEPHYR_INCLUDE_DRIVERS_SENSOR_H_ */
irp nz macro MOVR cc d
Definition asm-macro-32-bit-gnu.h:11
System error numbers.
#define DT_FOREACH_STATUS_OKAY_NODE(fn)
Invokes fn for every status okay node in the tree.
Definition devicetree.h:3185
#define RTIO_PRIO_NORM
Normal priority.
Definition sqe.h:55
static void rtio_sqe_prep_read_with_pool(struct rtio_sqe *sqe, const struct rtio_iodev *iodev, int8_t prio, void *userdata)
Prepare a read op submission with context's mempool.
Definition sqe.h:452
static int rtio_sqe_copy_in(struct rtio *r, const struct rtio_sqe *sqes, size_t sqe_count)
Copy an array of SQEs into the queue.
Definition rtio.h:922
int rtio_sqe_copy_in_get_handles(struct rtio *r, const struct rtio_sqe *sqes, struct rtio_sqe **handle, size_t sqe_count)
Copy an array of SQEs into the queue and get resulting handles back.
static void rtio_sqe_prep_read(struct rtio_sqe *sqe, const struct rtio_iodev *iodev, int8_t prio, uint8_t *buf, uint32_t len, void *userdata)
Prepare a read op submission.
Definition sqe.h:431
static struct rtio_sqe * rtio_sqe_acquire(struct rtio *r)
Acquire a single submission queue event if available.
Definition rtio.h:327
static void rtio_sqe_prep_read_multishot(struct rtio_sqe *sqe, const struct rtio_iodev *iodev, int8_t prio, void *userdata)
Definition sqe.h:460
static void rtio_cqe_release(struct rtio *r, struct rtio_cqe *cqe)
Release consumed completion queue event.
Definition rtio.h:501
static struct rtio_cqe * rtio_cqe_consume_block(struct rtio *r)
Wait for and consume a single completion queue event.
Definition rtio.h:477
int rtio_submit(struct rtio *r, uint32_t wait_count)
Submit I/O requests to the underlying executor.
int(* sensor_attr_get_t)(const struct device *dev, enum sensor_channel chan, enum sensor_attribute attr, struct sensor_value *val)
Callback API to get a sensor attribute.
Definition sensor.h:443
int(* sensor_get_decoder_t)(const struct device *dev, const struct sensor_decoder_api **api)
Callback API to get the sensor decoder implementation.
Definition sensor.h:478
int(* sensor_attr_set_t)(const struct device *dev, enum sensor_channel chan, enum sensor_attribute attr, const struct sensor_value *val)
Callback API to set a sensor attribute.
Definition sensor.h:434
int(* sensor_channel_get_t)(const struct device *dev, enum sensor_channel chan, struct sensor_value *val)
Callback API to read a sensor channel from the driver buffer.
Definition sensor.h:467
int(* sensor_sample_fetch_t)(const struct device *dev, enum sensor_channel chan)
Callback API to fetch a sensor sample into the driver buffer.
Definition sensor.h:460
void(* sensor_submit_t)(const struct device *sensor, struct rtio_iodev_sqe *sqe)
Callback API to service an RTIO submission for a sensor device.
Definition sensor.h:489
int(* sensor_trigger_set_t)(const struct device *dev, const struct sensor_trigger *trig, sensor_trigger_handler_t handler)
Callback API to set a sensor trigger and handler.
Definition sensor.h:452
#define SENSOR_G
The value of gravitational constant in micro m/s^2.
Definition sensor.h:1246
static int sensor_decode(struct sensor_decode_context *ctx, void *out, uint16_t max_count)
Decode N frames using a sensor_decode_context.
Definition sensor.h:684
static int sensor_stream(const struct rtio_iodev *iodev, struct rtio *ctx, void *userdata, struct rtio_sqe **handle)
Definition sensor.h:1115
static int32_t sensor_rad_to_degrees(const struct sensor_value *rad)
Helper function for converting radians to degrees.
Definition sensor.h:1337
sensor_trigger_type
Sensor trigger types.
Definition sensor.h:258
sensor_attribute
Sensor attribute types.
Definition sensor.h:342
int sensor_get_decoder(const struct device *dev, const struct sensor_decoder_api **decoder)
Get the sensor's decoder API.
static void sensor_ug_to_ms2(int32_t ug, struct sensor_value *ms2)
Helper function to convert acceleration from micro Gs to m/s^2.
Definition sensor.h:1324
static double sensor_value_to_double(const struct sensor_value *val)
Helper function for converting struct sensor_value to double.
Definition sensor.h:1396
static float sensor_value_to_float(const struct sensor_value *val)
Helper function for converting struct sensor_value to float.
Definition sensor.h:1407
int sensor_natively_supported_channel_size_info(struct sensor_chan_spec channel, size_t *base_size, size_t *frame_size)
static void sensor_degrees_to_rad(int32_t d, struct sensor_value *rad)
Helper function for converting degrees to radians.
Definition sensor.h:1354
static int32_t sensor_ms2_to_ug(const struct sensor_value *ms2)
Helper function to convert acceleration from m/s^2 to micro Gs.
Definition sensor.h:1311
static int sensor_value_from_float(struct sensor_value *val, float inp)
Helper function for converting float to struct sensor_value.
Definition sensor.h:1441
static void sensor_g_to_ms2(int32_t g, struct sensor_value *ms2)
Helper function to convert acceleration from Gs to m/s^2.
Definition sensor.h:1278
static int64_t sensor_value_to_milli(const struct sensor_value *val)
Helper function for converting struct sensor_value to integer milli units.
Definition sensor.h:1570
#define SENSOR_PI
The value of constant PI in micros.
Definition sensor.h:1251
int sensor_reconfigure_read_iodev(const struct rtio_iodev *iodev, const struct device *sensor, const struct sensor_chan_spec *channels, size_t num_channels)
Reconfigure a reading iodev.
static int sensor_trigger_set(const struct device *dev, const struct sensor_trigger *trig, sensor_trigger_handler_t handler)
Activate a sensor's trigger and set the trigger handler.
Definition sensor.h:877
sensor_stream_data_opt
Options for what to do with the associated data when a trigger is consumed.
Definition sensor.h:695
static int sensor_value_from_milli(struct sensor_value *val, int64_t milli)
Helper function for converting integer milli units to struct sensor_value.
Definition sensor.h:1593
void(* sensor_trigger_handler_t)(const struct device *dev, const struct sensor_trigger *trigger)
Callback API upon firing of a trigger.
Definition sensor.h:422
static int64_t sensor_value_to_micro(const struct sensor_value *val)
Helper function for converting struct sensor_value to integer micro units.
Definition sensor.h:1581
int sensor_channel_get(const struct device *dev, enum sensor_channel chan, struct sensor_value *val)
Get a reading from a sensor device.
static int32_t sensor_ms2_to_mg(const struct sensor_value *ms2)
Helper function to convert acceleration from m/s^2 to milli Gs.
Definition sensor.h:1292
int sensor_sample_fetch(const struct device *dev)
Fetch a sample from the sensor and store it in an internal driver buffer.
void(* sensor_processing_callback_t)(int result, uint8_t *buf, uint32_t buf_len, void *userdata)
Callback function used with the helper processing function.
Definition sensor.h:1225
sensor_channel
Sensor channels.
Definition sensor.h:65
static void sensor_10udegrees_to_rad(int32_t d, struct sensor_value *rad)
Helper function for converting 10 micro degrees to radians.
Definition sensor.h:1384
static int32_t sensor_ms2_to_g(const struct sensor_value *ms2)
Helper function to convert acceleration from m/s^2 to Gs.
Definition sensor.h:1261
void sensor_processing_with_callback(struct rtio *ctx, sensor_processing_callback_t cb)
Helper function for common processing of sensor data.
static int64_t sensor_value_to_deci(const struct sensor_value *val)
Helper function for converting struct sensor_value to integer deci units.
Definition sensor.h:1548
static int sensor_value_from_micro(struct sensor_value *val, int64_t micro)
Helper function for converting integer micro units to struct sensor_value.
Definition sensor.h:1613
int sensor_sample_fetch_chan(const struct device *dev, enum sensor_channel type)
Fetch a sample from the sensor and store it in an internal driver buffer.
static int sensor_read(const struct rtio_iodev *iodev, struct rtio *ctx, uint8_t *buf, size_t buf_len)
Blocking one shot read of samples from a sensor into a buffer.
Definition sensor.h:1152
static int32_t sensor_rad_to_10udegrees(const struct sensor_value *rad)
Helper function for converting radians to 10 micro degrees.
Definition sensor.h:1371
static int64_t sensor_value_to_centi(const struct sensor_value *val)
Helper function for converting struct sensor_value to integer centi units.
Definition sensor.h:1559
static bool sensor_chan_spec_eq(struct sensor_chan_spec chan_spec0, struct sensor_chan_spec chan_spec1)
Check if channel specs are equivalent.
Definition sensor.h:555
int sensor_attr_get(const struct device *dev, enum sensor_channel chan, enum sensor_attribute attr, struct sensor_value *val)
Get an attribute for a sensor.
static int sensor_value_from_double(struct sensor_value *val, double inp)
Helper function for converting double to struct sensor_value.
Definition sensor.h:1419
static int sensor_read_async_mempool(const struct rtio_iodev *iodev, struct rtio *ctx, void *userdata)
One shot non-blocking read with pool allocated buffer.
Definition sensor.h:1194
int sensor_attr_set(const struct device *dev, enum sensor_channel chan, enum sensor_attribute attr, const struct sensor_value *val)
Set an attribute for a sensor.
@ SENSOR_TRIG_OVERFLOW
Trigger fires when data overflows.
Definition sensor.h:310
@ SENSOR_TRIG_DELTA
Trigger fires when the selected channel varies significantly.
Definition sensor.h:274
@ SENSOR_TRIG_NEAR_FAR
Trigger fires when a near/far event is detected.
Definition sensor.h:276
@ SENSOR_TRIG_FREEFALL
Trigger fires when a free fall is detected.
Definition sensor.h:292
@ SENSOR_TRIG_PRIV_START
This and higher values are sensor specific.
Definition sensor.h:321
@ SENSOR_TRIG_FIFO_FULL
Trigger fires when the FIFO becomes full.
Definition sensor.h:304
@ SENSOR_TRIG_MOTION
Trigger fires when motion is detected.
Definition sensor.h:295
@ SENSOR_TRIG_STATIONARY
Trigger fires when no motion has been detected for a while.
Definition sensor.h:298
@ SENSOR_TRIG_COMMON_COUNT
Number of all common sensor triggers.
Definition sensor.h:315
@ SENSOR_TRIG_THRESHOLD
Trigger fires when channel reading transitions configured thresholds.
Definition sensor.h:283
@ SENSOR_TRIG_MAX
Maximum value describing a sensor trigger type.
Definition sensor.h:326
@ SENSOR_TRIG_DOUBLE_TAP
Trigger fires when a double tap is detected.
Definition sensor.h:289
@ SENSOR_TRIG_TILT
Trigger fires when a tilt is detected.
Definition sensor.h:307
@ SENSOR_TRIG_TIMER
Timer-based trigger, useful when the sensor does not have an interrupt line.
Definition sensor.h:263
@ SENSOR_TRIG_FIFO_WATERMARK
Trigger fires when the FIFO watermark has been reached.
Definition sensor.h:301
@ SENSOR_TRIG_TAP
Trigger fires when a single tap is detected.
Definition sensor.h:286
@ SENSOR_TRIG_DATA_READY
Trigger fires whenever new data is ready.
Definition sensor.h:265
@ SENSOR_ATTR_HYSTERESIS
Definition sensor.h:360
@ SENSOR_ATTR_FEATURE_MASK
Enable/disable sensor features.
Definition sensor.h:380
@ SENSOR_ATTR_CALIB_TARGET
Calibration target.
Definition sensor.h:374
@ SENSOR_ATTR_OFFSET
The sensor value returned will be altered by the amount indicated by offset: final_value = sensor_val...
Definition sensor.h:369
@ SENSOR_ATTR_BATCH_DURATION
Hardware batch duration in ticks.
Definition sensor.h:391
@ SENSOR_ATTR_OVERSAMPLING
Oversampling factor.
Definition sensor.h:362
@ SENSOR_ATTR_FF_DUR
Free-fall duration represented in milliseconds.
Definition sensor.h:388
@ SENSOR_ATTR_UPPER_THRESH
Upper threshold for trigger.
Definition sensor.h:351
@ SENSOR_ATTR_CONFIGURATION
Configure the operating modes of a sensor.
Definition sensor.h:376
@ SENSOR_ATTR_RESOLUTION
Configure the resolution of a sensor.
Definition sensor.h:395
@ SENSOR_ATTR_CALIBRATION
Set a calibration value needed by a sensor.
Definition sensor.h:378
@ SENSOR_ATTR_CHIP_ID
Chip ID of a sensor.
Definition sensor.h:397
@ SENSOR_ATTR_COMMON_COUNT
Number of all common sensor attributes.
Definition sensor.h:401
@ SENSOR_ATTR_ALERT
Alert threshold or alert enable/disable.
Definition sensor.h:382
@ SENSOR_ATTR_SLOPE_TH
Threshold for any-motion (slope) trigger.
Definition sensor.h:353
@ SENSOR_ATTR_GAIN
Configure the gain of a sensor.
Definition sensor.h:393
@ SENSOR_ATTR_SAMPLING_FREQUENCY
Sensor sampling frequency, i.e.
Definition sensor.h:347
@ SENSOR_ATTR_FULL_SCALE
Sensor range, in SI units.
Definition sensor.h:364
@ SENSOR_ATTR_LOWER_THRESH
Lower threshold for trigger.
Definition sensor.h:349
@ SENSOR_ATTR_SLOPE_DUR
Duration for which the slope values needs to be outside the threshold for the trigger to fire.
Definition sensor.h:358
@ SENSOR_ATTR_MAX
Maximum value describing a sensor attribute type.
Definition sensor.h:412
@ SENSOR_ATTR_PRIV_START
This and higher values are sensor specific.
Definition sensor.h:407
@ SENSOR_STREAM_DATA_INCLUDE
Include whatever data is associated with the trigger.
Definition sensor.h:697
@ SENSOR_STREAM_DATA_NOP
Do nothing with the associated trigger data, it may be consumed later.
Definition sensor.h:699
@ SENSOR_STREAM_DATA_DROP
Flush/clear whatever data is associated with the trigger.
Definition sensor.h:701
@ SENSOR_CHAN_GAUGE_STATE_OF_HEALTH
State of health measurement in %.
Definition sensor.h:212
@ SENSOR_CHAN_PM_1_0_CF
PM1.0 concentration (standard particle, CF=1), in µg/m³
Definition sensor.h:119
@ SENSOR_CHAN_PM_1_0
1.0 micro-meters Particulate Matter, in ug/m^3
Definition sensor.h:125
@ SENSOR_CHAN_DIE_TEMP
Device die temperature in degrees Celsius.
Definition sensor.h:91
@ SENSOR_CHAN_PRESS
Pressure in kilopascal.
Definition sensor.h:95
@ SENSOR_CHAN_GAUGE_TIME_TO_FULL
Time to full in minutes.
Definition sensor.h:216
@ SENSOR_CHAN_ACCEL_XYZ
Acceleration on the X, Y and Z axes.
Definition sensor.h:73
@ SENSOR_CHAN_MAGN_X
Magnetic field on the X axis, in Gauss.
Definition sensor.h:83
@ SENSOR_CHAN_O2
O2 level, in parts per million (ppm).
Definition sensor.h:149
@ SENSOR_CHAN_CURRENT
Current, in amps.
Definition sensor.h:164
@ SENSOR_CHAN_GYRO_XYZ
Angular velocity around the X, Y and Z axes.
Definition sensor.h:81
@ SENSOR_CHAN_VSHUNT
Current Shunt Voltage in milli-volts.
Definition sensor.h:161
@ SENSOR_CHAN_GREEN
Illuminance in green spectrum, in lux.
Definition sensor.h:112
@ SENSOR_CHAN_GRAVITY_VECTOR
Gravity Vector (X/Y/Z components in m/s^2).
Definition sensor.h:228
@ SENSOR_CHAN_MAGN_Z
Magnetic field on the Z axis, in Gauss.
Definition sensor.h:87
@ SENSOR_CHAN_MAGN_Y
Magnetic field on the Y axis, in Gauss.
Definition sensor.h:85
@ SENSOR_CHAN_GAUGE_DESIRED_VOLTAGE
Desired voltage of cell in V (nominal voltage).
Definition sensor.h:222
@ SENSOR_CHAN_POWER
Power in watts.
Definition sensor.h:166
@ SENSOR_CHAN_PM_2_5
2.5 micro-meters Particulate Matter, in ug/m^3
Definition sensor.h:127
@ SENSOR_CHAN_RESISTANCE
Resistance , in Ohm.
Definition sensor.h:169
@ SENSOR_CHAN_GAME_ROTATION_VECTOR
Game Rotation Vector (unit quaternion components X/Y/Z/W).
Definition sensor.h:226
@ SENSOR_CHAN_AMBIENT_LIGHT
Ambient illuminance in visible spectrum, in lux.
Definition sensor.h:104
@ SENSOR_CHAN_PM_0_5_COUNT
Number of particles ≥ 0.5 µm per 0.1 liter of air.
Definition sensor.h:133
@ SENSOR_CHAN_GAUGE_AVG_CURRENT
Average current, in amps (negative=discharging).
Definition sensor.h:192
@ SENSOR_CHAN_ENCODER_COUNT
Raw quadrature decoder count, in counts.
Definition sensor.h:233
@ SENSOR_CHAN_GYRO_Y
Angular velocity around the Y axis, in radians/s.
Definition sensor.h:77
@ SENSOR_CHAN_GAUGE_DESIRED_CHARGING_CURRENT
Desired charging current in mA.
Definition sensor.h:224
@ SENSOR_CHAN_FREQUENCY
Frequency, in Hz.
Definition sensor.h:187
@ SENSOR_CHAN_PM_2_5_CF
PM2.5 concentration (standard particle, CF=1), in µg/m³
Definition sensor.h:121
@ SENSOR_CHAN_GAUGE_FULL_CHARGE_CAPACITY
Full Charge Capacity in mAh.
Definition sensor.h:202
@ SENSOR_CHAN_ROTATION
Angular rotation, in degrees.
Definition sensor.h:172
@ SENSOR_CHAN_AMBIENT_TEMP
Ambient temperature in degrees Celsius.
Definition sensor.h:93
@ SENSOR_CHAN_MAGN_XYZ
Magnetic field on the X, Y and Z axes.
Definition sensor.h:89
@ SENSOR_CHAN_GAUGE_STDBY_CURRENT
Standby current, in amps (negative=discharging).
Definition sensor.h:194
@ SENSOR_CHAN_GAUGE_MAX_LOAD_CURRENT
Max load current, in amps (negative=discharging).
Definition sensor.h:196
@ SENSOR_CHAN_ACCEL_Y
Acceleration on the Y axis, in m/s^2.
Definition sensor.h:69
@ SENSOR_CHAN_RPM
Revolutions per minute, in RPM.
Definition sensor.h:184
@ SENSOR_CHAN_GAUGE_FULL_AVAIL_CAPACITY
Full Available Capacity in mAh.
Definition sensor.h:208
@ SENSOR_CHAN_VOLTAGE
Voltage, in volts.
Definition sensor.h:158
@ SENSOR_CHAN_FLOW_RATE
Flow rate in litres per minute.
Definition sensor.h:155
@ SENSOR_CHAN_BLUE
Illuminance in blue spectrum, in lux.
Definition sensor.h:114
@ SENSOR_CHAN_LIGHT
Illuminance in visible spectrum, in lux.
Definition sensor.h:106
@ SENSOR_CHAN_GAUGE_DESIGN_VOLTAGE
Design voltage of cell in V (max voltage).
Definition sensor.h:220
@ SENSOR_CHAN_PM_5_COUNT
Number of particles ≥ 5.0 µm per 0.1 liter of air.
Definition sensor.h:139
@ SENSOR_CHAN_ACCEL_Z
Acceleration on the Z axis, in m/s^2.
Definition sensor.h:71
@ SENSOR_CHAN_CO2
CO2 level, in parts per million (ppm).
Definition sensor.h:147
@ SENSOR_CHAN_GAUGE_STATE_OF_CHARGE
State of charge measurement in %.
Definition sensor.h:200
@ SENSOR_CHAN_POS_DXYZ
Position change on the X, Y and Z axis, in points.
Definition sensor.h:181
@ SENSOR_CHAN_GBIAS_XYZ
Gyroscope bias (X/Y/Z components in radians/s).
Definition sensor.h:230
@ SENSOR_CHAN_GAUGE_CYCLE_COUNT
Cycle count (total number of charge/discharge cycles).
Definition sensor.h:218
@ SENSOR_CHAN_GAUGE_TEMP
Gauge temperature.
Definition sensor.h:198
@ SENSOR_CHAN_POS_DY
Position change on the Y axis, in points.
Definition sensor.h:177
@ SENSOR_CHAN_GYRO_Z
Angular velocity around the Z axis, in radians/s.
Definition sensor.h:79
@ SENSOR_CHAN_PM_10_CF
PM10 concentration (standard particle, CF=1), in µg/m³
Definition sensor.h:123
@ SENSOR_CHAN_POS_DX
Position change on the X axis, in points.
Definition sensor.h:175
@ SENSOR_CHAN_GAUGE_AVG_POWER
Average power in mW.
Definition sensor.h:210
@ SENSOR_CHAN_GAUGE_TIME_TO_EMPTY
Time to empty in minutes.
Definition sensor.h:214
@ SENSOR_CHAN_PM_10
10 micro-meters Particulate Matter, in ug/m^3
Definition sensor.h:129
@ SENSOR_CHAN_GAUGE_REMAINING_CHARGE_CAPACITY
Remaining Charge Capacity in mAh.
Definition sensor.h:204
@ SENSOR_CHAN_PM_1_0_COUNT
Number of particles ≥ 1.0 µm per 0.1 liter of air.
Definition sensor.h:135
@ SENSOR_CHAN_PM_0_3_COUNT
Number of particles ≥ 0.3 µm per 0.1 liter of air.
Definition sensor.h:131
@ SENSOR_CHAN_PM_10_COUNT
Number of particles ≥ 10.0 µm per 0.1 liter of air.
Definition sensor.h:141
@ SENSOR_CHAN_ALL
All channels.
Definition sensor.h:236
@ SENSOR_CHAN_GAUGE_VOLTAGE
Voltage, in volts.
Definition sensor.h:190
@ SENSOR_CHAN_PROX
Proximity.
Definition sensor.h:100
@ SENSOR_CHAN_COMMON_COUNT
Number of all common sensor channels.
Definition sensor.h:241
@ SENSOR_CHAN_PRIV_START
This and higher values are sensor specific.
Definition sensor.h:247
@ SENSOR_CHAN_GYRO_X
Angular velocity around the X axis, in radians/s.
Definition sensor.h:75
@ SENSOR_CHAN_GAS_RES
Gas sensor resistance in ohms.
Definition sensor.h:153
@ SENSOR_CHAN_HUMIDITY
Humidity, in percent.
Definition sensor.h:102
@ SENSOR_CHAN_DISTANCE
Distance.
Definition sensor.h:144
@ SENSOR_CHAN_IR
Illuminance in infra-red spectrum, in lux.
Definition sensor.h:108
@ SENSOR_CHAN_MAX
Maximum value describing a sensor channel type.
Definition sensor.h:252
@ SENSOR_CHAN_PM_2_5_COUNT
Number of particles ≥ 2.5 µm per 0.1 liter of air.
Definition sensor.h:137
@ SENSOR_CHAN_POS_DZ
Position change on the Z axis, in points.
Definition sensor.h:179
@ SENSOR_CHAN_RED
Illuminance in red spectrum, in lux.
Definition sensor.h:110
@ SENSOR_CHAN_ALTITUDE
Altitude, in meters.
Definition sensor.h:116
@ SENSOR_CHAN_GAUGE_NOM_AVAIL_CAPACITY
Nominal Available Capacity in mAh.
Definition sensor.h:206
@ SENSOR_CHAN_ACCEL_X
Acceleration on the X axis, in m/s^2.
Definition sensor.h:67
@ SENSOR_CHAN_VOC
VOC level, in parts per billion (ppb).
Definition sensor.h:151
#define IS_ENABLED(config_macro)
Check for macro definition in compiler-visible expressions.
Definition util_macro.h:154
#define ENOSYS
Function not implemented.
Definition errno.h:82
#define ENOMEM
Not enough core.
Definition errno.h:50
#define ERANGE
Result too large.
Definition errno.h:72
#define NULL
Definition iar_missing_defs.h:20
#define BUILD_ASSERT(EXPR, MSG...)
Definition llvm.h:51
Size of off_t must be equal or less than size of size_t
Definition retained_mem.h:29
Real-Time IO device API for moving bytes with low effort.
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__INT32_TYPE__ int32_t
Definition stdint.h:74
#define INT32_MAX
Definition stdint.h:18
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
#define INT32_MIN
Definition stdint.h:24
#define INT16_MAX
Definition stdint.h:17
__INT64_TYPE__ int64_t
Definition stdint.h:75
__INT8_TYPE__ int8_t
Definition stdint.h:72
void * memcpy(void *ZRESTRICT d, const void *ZRESTRICT s, size_t n)
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
A completion queue event.
Definition cqe.h:83
void * userdata
Associated userdata with operation.
Definition cqe.h:87
int32_t result
Result from operation.
Definition cqe.h:86
API that an RTIO IO device should implement.
Definition iodev.h:33
IO device submission queue entry.
Definition sqe.h:394
struct rtio_sqe sqe
Definition sqe.h:395
An IO device with a function table for submitting requests.
Definition iodev.h:48
void * data
Definition iodev.h:53
A submission queue event.
Definition sqe.h:304
void * userdata
User provided data which is returned upon operation completion.
Definition sqe.h:322
uint32_t buf_len
Length of buffer.
Definition sqe.h:328
const struct rtio_iodev * iodev
Device to operation on.
Definition sqe.h:313
const uint8_t * buf
Buffer to write from.
Definition sqe.h:329
An RTIO context containing what can be viewed as a pair of queues.
Definition rtio.h:71
Sensor Channel Specification.
Definition sensor.h:536
uint16_t chan_idx
A sensor channel index.
Definition sensor.h:538
uint16_t chan_type
A sensor channel type.
Definition sensor.h:537
Definition sensor.h:992
uint64_t timestamp_ns
The timestamp at which the data was collected from the sensor.
Definition sensor.h:994
int8_t shift
Shift value for all samples in the frame.
Definition sensor.h:1004
uint32_t num_channels
Definition sensor.h:1001
struct sensor_chan_spec channels[0]
Channels present in the frame.
Definition sensor.h:1010
Used for iterating over the data frames via the sensor_decoder_api.
Definition sensor.h:658
const struct sensor_decoder_api * decoder
Definition sensor.h:659
struct sensor_chan_spec channel
Definition sensor.h:661
const uint8_t * buffer
Definition sensor.h:660
uint32_t fit
Definition sensor.h:662
Decodes a single raw data buffer.
Definition sensor.h:568
int(* get_size_info)(struct sensor_chan_spec channel, size_t *base_size, size_t *frame_size)
Get the size required to decode a given channel.
Definition sensor.h:594
int(* get_frame_count)(const uint8_t *buffer, struct sensor_chan_spec chan_spec, uint16_t *frame_count)
Get the frame_count for a specified chan_spec from the buffer.
Definition sensor.h:579
int(* decode)(const uint8_t *buffer, struct sensor_chan_spec chan_spec, uint32_t *fit, uint16_t max_count, void *data_out)
Decode up to max_count frames specified by chan_spec from the buffer.
Definition sensor.h:621
bool(* has_trigger)(const uint8_t *buffer, enum sensor_trigger_type trigger)
Check if the given trigger type is present.
Definition sensor.h:631
<span class="mlabel">Driver Operations</span> Sensor driver operations
Definition sensor.h:494
sensor_get_decoder_t get_decoder
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition sensor.h:518
sensor_attr_set_t attr_set
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition sensor.h:498
sensor_attr_get_t attr_get
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition sensor.h:502
sensor_trigger_set_t trigger_set
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition sensor.h:506
sensor_sample_fetch_t sample_fetch
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition sensor.h:510
sensor_channel_get_t channel_get
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition sensor.h:514
sensor_submit_t submit
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition sensor.h:522
Definition sensor.h:718
struct sensor_chan_spec *const channels
Definition sensor.h:722
size_t count
Definition sensor.h:725
struct sensor_stream_trigger *const triggers
Definition sensor.h:723
const bool is_streaming
Definition sensor.h:720
const struct device * sensor
Definition sensor.h:719
const size_t max
Definition sensor.h:726
Definition sensor.h:704
enum sensor_stream_data_opt opt
Definition sensor.h:706
enum sensor_trigger_type trigger
Definition sensor.h:705
Sensor trigger spec.
Definition sensor.h:332
enum sensor_trigger_type type
Trigger type.
Definition sensor.h:334
enum sensor_channel chan
Channel the trigger is set on.
Definition sensor.h:336
Representation of a sensor readout value.
Definition sensor.h:55
int32_t val2
Fractional part of the value (in one-millionth parts).
Definition sensor.h:59
int32_t val1
Integer part of the value.
Definition sensor.h:57
#define INT64_C(x)
Definition xcc.h:119