8#include <nuttx/sensors/sensor.h>
12#include "dawn/io/common.hxx"
13#include "dawn/porting/config.hxx"
17#define SENSOR_PATH_FMT "/dev/uorb/sensor_%s%s%d"
28 struct io_sensor_map_info_s
35 }
typedef SIOSensorMapInfo;
39 static const SIOSensorMapInfo *getSensorInfo(int16_t cls)
41 static const SIOSensorMapInfo map[] = {
44 sizeof(
struct sensor_accel),
46 offsetof(struct sensor_accel, x)},
47 {CIOCommon::IO_CLASS_SENSOR_MAGNETICFIELD,
49 sizeof(
struct sensor_mag),
51 offsetof(struct sensor_mag, x)},
52 {CIOCommon::IO_CLASS_SENSOR_GYROSCOPE,
54 sizeof(
struct sensor_gyro),
56 offsetof(struct sensor_gyro, x)},
57 {CIOCommon::IO_CLASS_SENSOR_LIGHT,
59 sizeof(
struct sensor_light),
61 offsetof(struct sensor_light, light)},
62 {CIOCommon::IO_CLASS_SENSOR_BAROMETER,
64 sizeof(
struct sensor_baro),
66 offsetof(struct sensor_baro, pressure)},
67 {CIOCommon::IO_CLASS_SENSOR_PROXIMITY,
69 sizeof(
struct sensor_prox),
71 offsetof(struct sensor_prox, proximity)},
72 {CIOCommon::IO_CLASS_SENSOR_HUMIDITY,
74 sizeof(
struct sensor_humi),
76 offsetof(struct sensor_humi, humidity)},
77 {CIOCommon::IO_CLASS_SENSOR_TEMPERATURE,
79 sizeof(
struct sensor_temp),
81 offsetof(struct sensor_temp, temperature)},
82 {CIOCommon::IO_CLASS_SENSOR_ATEMPERATURE,
84 sizeof(
struct sensor_temp),
86 offsetof(struct sensor_temp, temperature)},
87 {CIOCommon::IO_CLASS_SENSOR_RGB,
89 sizeof(
struct sensor_rgb),
91 offsetof(struct sensor_rgb, r)},
92 {CIOCommon::IO_CLASS_SENSOR_IR,
94 sizeof(
struct sensor_ir),
96 offsetof(struct sensor_ir, ir)},
97 {CIOCommon::IO_CLASS_SENSOR_UV,
99 sizeof(
struct sensor_uv),
101 offsetof(struct sensor_uv, uvi)},
102 {CIOCommon::IO_CLASS_SENSOR_GAS,
104 sizeof(
struct sensor_gas),
106 offsetof(struct sensor_gas, gas_resistance)},
107 {CIOCommon::IO_CLASS_SENSOR_CO2,
109 sizeof(
struct sensor_co2),
111 offsetof(struct sensor_co2, co2)},
112 {CIOCommon::IO_CLASS_SENSOR_TVOC,
114 sizeof(
struct sensor_tvoc),
116 offsetof(struct sensor_tvoc, tvoc)},
121 {CIOCommon::IO_CLASS_SENSOR_GNSS,
123 sizeof(
struct sensor_gnss),
126 {CIOCommon::IO_CLASS_SENSOR_GNSS_TIME,
128 sizeof(
struct sensor_gnss),
131 {CIOCommon::IO_CLASS_SENSOR_GNSS_INFO,
133 sizeof(
struct sensor_gnss),
136 {CIOCommon::IO_CLASS_SENSOR_GNSS_SATELLITES,
138 sizeof(
struct sensor_gnss),
143 for (
size_t i = 0; i <
sizeof(map) /
sizeof(map[0]); i++)
145 if (map[i].cls == cls)
154 static int16_t producerToSensorClass(int16_t cls)
156 static_assert(CIOCommon::IO_CLASS_SENSOR_PRODUCER_TVOC -
157 CIOCommon::IO_CLASS_SENSOR_PRODUCER_ACCELEROMETER ==
158 CIOCommon::IO_CLASS_SENSOR_TVOC - CIOCommon::IO_CLASS_SENSOR_ACCELEROMETER,
159 "Sensor and sensor producer class ranges must stay aligned");
161 if (cls < CIOCommon::IO_CLASS_SENSOR_PRODUCER_ACCELEROMETER ||
162 cls > CIOCommon::IO_CLASS_SENSOR_PRODUCER_TVOC)
164 return CIOCommon::IO_CLASS_ANY;
167 return cls - CIOCommon::IO_CLASS_SENSOR_PRODUCER_ACCELEROMETER +
168 CIOCommon::IO_CLASS_SENSOR_ACCELEROMETER;
@ IO_CLASS_SENSOR_ACCELEROMETER
Accelerometer sensor.
Out-of-tree user-extension hooks for Dawn.