Zephyr Project API 3.7.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
emul_sensor.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Google LLC
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
9
10#include <stdint.h>
11
28__subsystem struct emul_sensor_driver_api {
30 int (*set_channel)(const struct emul *target, struct sensor_chan_spec ch,
31 const q31_t *value, int8_t shift);
33 int (*get_sample_range)(const struct emul *target, struct sensor_chan_spec ch, q31_t *lower,
34 q31_t *upper, q31_t *epsilon, int8_t *shift);
36 int (*set_attribute)(const struct emul *target, struct sensor_chan_spec ch,
37 enum sensor_attribute attribute, const void *value);
39 int (*get_attribute_metadata)(const struct emul *target, struct sensor_chan_spec ch,
40 enum sensor_attribute attribute, q31_t *min, q31_t *max,
41 q31_t *increment, int8_t *shift);
42};
54static inline bool emul_sensor_backend_is_supported(const struct emul *target)
55{
56 return target && target->backend_api;
57}
58
71static inline int emul_sensor_backend_set_channel(const struct emul *target,
72 struct sensor_chan_spec ch, const q31_t *value,
73 int8_t shift)
74{
75 if (!target || !target->backend_api) {
76 return -ENOTSUP;
77 }
78
79 struct emul_sensor_driver_api *api = (struct emul_sensor_driver_api *)target->backend_api;
80
81 if (api->set_channel) {
82 return api->set_channel(target, ch, value, shift);
83 }
84 return -ENOTSUP;
85}
86
104static inline int emul_sensor_backend_get_sample_range(const struct emul *target,
105 struct sensor_chan_spec ch, q31_t *lower,
106 q31_t *upper, q31_t *epsilon, int8_t *shift)
107{
108 if (!target || !target->backend_api) {
109 return -ENOTSUP;
110 }
111
112 struct emul_sensor_driver_api *api = (struct emul_sensor_driver_api *)target->backend_api;
113
114 if (api->get_sample_range) {
115 return api->get_sample_range(target, ch, lower, upper, epsilon, shift);
116 }
117 return -ENOTSUP;
118}
119
130static inline int emul_sensor_backend_set_attribute(const struct emul *target,
131 struct sensor_chan_spec ch,
132 enum sensor_attribute attribute,
133 const void *value)
134{
135 if (!target || !target->backend_api) {
136 return -ENOTSUP;
137 }
138
139 struct emul_sensor_driver_api *api = (struct emul_sensor_driver_api *)target->backend_api;
140
141 if (api->set_attribute == NULL) {
142 return -ENOTSUP;
143 }
144 return api->set_attribute(target, ch, attribute, value);
145}
146
164static inline int emul_sensor_backend_get_attribute_metadata(const struct emul *target,
165 struct sensor_chan_spec ch,
166 enum sensor_attribute attribute,
167 q31_t *min, q31_t *max,
168 q31_t *increment, int8_t *shift)
169{
170 if (!target || !target->backend_api) {
171 return -ENOTSUP;
172 }
173
174 struct emul_sensor_driver_api *api = (struct emul_sensor_driver_api *)target->backend_api;
175
176 if (api->get_attribute_metadata == NULL) {
177 return -ENOTSUP;
178 }
179 return api->get_attribute_metadata(target, ch, attribute, min, max, increment, shift);
180}
181
int32_t q31_t
32-bit fractional data type in 1.31 format.
Definition types.h:35
static int emul_sensor_backend_get_sample_range(const struct emul *target, struct sensor_chan_spec ch, q31_t *lower, q31_t *upper, q31_t *epsilon, int8_t *shift)
Query an emulator for a channel's supported sample value range and tolerance.
Definition emul_sensor.h:104
static int emul_sensor_backend_get_attribute_metadata(const struct emul *target, struct sensor_chan_spec ch, enum sensor_attribute attribute, q31_t *min, q31_t *max, q31_t *increment, int8_t *shift)
Get metadata about an attribute.
Definition emul_sensor.h:164
static bool emul_sensor_backend_is_supported(const struct emul *target)
Check if a given sensor emulator supports the backend API.
Definition emul_sensor.h:54
static int emul_sensor_backend_set_channel(const struct emul *target, struct sensor_chan_spec ch, const q31_t *value, int8_t shift)
Set an expected value for a given channel on a given sensor emulator.
Definition emul_sensor.h:71
static int emul_sensor_backend_set_attribute(const struct emul *target, struct sensor_chan_spec ch, enum sensor_attribute attribute, const void *value)
Set the emulator's attribute values.
Definition emul_sensor.h:130
sensor_attribute
Sensor attribute types.
Definition sensor.h:296
#define ENOTSUP
Unsupported value.
Definition errno.h:114
Public APIs for the sensor driver.
__INT8_TYPE__ int8_t
Definition stdint.h:72
An emulator instance - represents the target emulated device/peripheral that is interacted with throu...
Definition emul.h:80
const void * backend_api
Address of the API structure exposed by the emulator instance.
Definition emul.h:100
Sensor Channel Specification.
Definition sensor.h:431