Dawn Framework 1.0
Universal data acquisition framework for embedded systems
sensor_producer.hxx
1// dawn/include/dawn/io/sensor_producer.hxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#pragma once
7
8#include "dawn/io/common.hxx"
9#include "dawn/porting/config.hxx"
10#include "dawn/porting/sensors.hxx"
11
12namespace dawn
13{
22 : public CIOCommon
23 , public CIOSensorPorting
24{
25public:
26 enum
27 {
28 IO_SENSOR_PRODUCER_CFG_FIRST = 0,
29 IO_SENSOR_PRODUCER_CFG_QUEUE_SIZE = 1,
30 IO_SENSOR_PRODUCER_CFG_PERSIST = 2,
31 IO_SENSOR_PRODUCER_CFG_LAST = 31
32 };
33
34 static_assert(IO_SENSOR_PRODUCER_CFG_LAST - 1 <= SObjectCfg::ID_MAX);
35
36 explicit CIOSensorProducer(CDescObject &desc)
37 : CIOCommon(desc)
38 , info(getSensorInfo(producerToSensorClass(getCls())))
39 , queueSize(1)
40 , persist(false)
41 , registered(false)
42 , ts(0)
43 , fd(-1)
44 {
45 }
46
47 ~CIOSensorProducer() override;
48
49#ifdef CONFIG_DAWN_OBJECT_HAS_NAME
50 const char *getClassNameStr() const override
51 {
52 switch (getCls())
53 {
55 return "sprod_accel";
57 return "sprod_mag";
59 return "sprod_gyro";
61 return "sprod_light";
63 return "sprod_baro";
65 return "sprod_prox";
67 return "sprod_hum";
69 return "sprod_temp";
71 return "sprod_atemp";
73 return "sprod_rgb";
75 return "sprod_ir";
77 return "sprod_uv";
79 return "sprod_gas";
80 default:
81 return "sprod";
82 }
83 }
84#endif
85
86 int configure() override;
87 int deinit() override;
88 int setDataImpl(IODataCmn &data) override;
89
90 size_t getDataSize() const override;
91 size_t getDataDim() const override;
92
93 bool isRead() const override
94 {
95 return false;
96 };
97
98 bool isWrite() const override
99 {
100 return true;
101 };
102
103 bool isNotify() const override
104 {
105 return false;
106 };
107
108 bool isBatch() const override
109 {
110 return false;
111 };
112
113 constexpr static SObjectId::ObjectId objectId(uint16_t cls, uint8_t dtype, bool ts, uint16_t inst)
114 {
115 uint8_t flags = 0;
116
117#ifdef CONFIG_DAWN_IO_TIMESTAMP
118 if (ts)
119 {
120 flags |= CIOCommon::IO_FLAGS_TS;
121 }
122#else
123 DAWNASSERT(ts == false, "ts not supported");
124#endif
125
126 return SObjectId::objectId(SObjectId::OBJTYPE_IO, cls, dtype, flags, inst);
127 }
128
129 constexpr static SObjectId::ObjectId objectIdAccel(uint8_t dtype, bool ts, uint16_t inst)
130 {
131 return CIOSensorProducer::objectId(
133 }
134
135 constexpr static SObjectId::ObjectId objectIdMag(uint8_t dtype, bool ts, uint16_t inst)
136 {
137 return CIOSensorProducer::objectId(
139 }
140
141 constexpr static SObjectId::ObjectId objectIdGyro(uint8_t dtype, bool ts, uint16_t inst)
142 {
143 return CIOSensorProducer::objectId(
145 }
146
147 constexpr static SObjectId::ObjectId objectIdLight(uint8_t dtype, bool ts, uint16_t inst)
148 {
149 return CIOSensorProducer::objectId(CIOCommon::IO_CLASS_SENSOR_PRODUCER_LIGHT, dtype, ts, inst);
150 }
151
152 constexpr static SObjectId::ObjectId objectIdBaro(uint8_t dtype, bool ts, uint16_t inst)
153 {
154 return CIOSensorProducer::objectId(
156 }
157
158 constexpr static SObjectId::ObjectId objectIdProx(uint8_t dtype, bool ts, uint16_t inst)
159 {
160 return CIOSensorProducer::objectId(
162 }
163
164 constexpr static SObjectId::ObjectId objectIdHum(uint8_t dtype, bool ts, uint16_t inst)
165 {
166 return CIOSensorProducer::objectId(
168 }
169
170 constexpr static SObjectId::ObjectId objectIdTemp(uint8_t dtype, bool ts, uint16_t inst)
171 {
172 return CIOSensorProducer::objectId(
174 }
175
176 constexpr static SObjectId::ObjectId objectIdAtemp(uint8_t dtype, bool ts, uint16_t inst)
177 {
178 return CIOSensorProducer::objectId(
180 }
181
182 constexpr static SObjectId::ObjectId objectIdRgb(uint8_t dtype, bool ts, uint16_t inst)
183 {
184 return CIOSensorProducer::objectId(CIOCommon::IO_CLASS_SENSOR_PRODUCER_RGB, dtype, ts, inst);
185 }
186
187 constexpr static SObjectId::ObjectId objectIdIr(uint8_t dtype, bool ts, uint16_t inst)
188 {
189 return CIOSensorProducer::objectId(CIOCommon::IO_CLASS_SENSOR_PRODUCER_IR, dtype, ts, inst);
190 }
191
192 constexpr static SObjectId::ObjectId objectIdUv(uint8_t dtype, bool ts, uint16_t inst)
193 {
194 return CIOSensorProducer::objectId(CIOCommon::IO_CLASS_SENSOR_PRODUCER_UV, dtype, ts, inst);
195 }
196
197 constexpr static SObjectId::ObjectId objectIdGas(uint8_t dtype, bool ts, uint16_t inst)
198 {
199 return CIOSensorProducer::objectId(CIOCommon::IO_CLASS_SENSOR_PRODUCER_GAS, dtype, ts, inst);
200 }
201
202 constexpr static SObjectCfg::ObjectCfgId cfgIdQueueSize()
203 {
207 true,
208 1,
209 IO_SENSOR_PRODUCER_CFG_QUEUE_SIZE);
210 }
211
212 constexpr static SObjectCfg::ObjectCfgId cfgIdPersist()
213 {
217 true,
218 1,
219 IO_SENSOR_PRODUCER_CFG_PERSIST);
220 }
221
222private:
223 constexpr static const size_t DATA_BUFFER_SIZE = 32;
224
225 const SIOSensorMapInfo *info;
226 uint32_t queueSize;
227 bool persist;
228 bool registered;
229 uint64_t ts;
230 char path[PATH_MAX] = {};
231 int fd;
232
233 int configureDesc(const CDescObject &desc);
234};
235} // namespace dawn
Descriptor wrapper for individual object configuration.
Base class for all I/O objects.
Definition common.hxx:27
@ IO_FLAGS_TS
Timestamp support flag.
Definition common.hxx:76
@ IO_CLASS_SENSOR_PRODUCER_MAGNETICFIELD
Magnetic field publisher.
Definition common.hxx:130
@ IO_CLASS_SENSOR_PRODUCER_ACCELEROMETER
Accelerometer publisher.
Definition common.hxx:129
@ IO_CLASS_SENSOR_PRODUCER_LIGHT
Light publisher.
Definition common.hxx:132
@ IO_CLASS_SENSOR_PRODUCER_CONFIG
Sensor producer configuration IDs.
Definition common.hxx:142
@ IO_CLASS_SENSOR_PRODUCER_ATEMPERATURE
Ambient temperature publisher.
Definition common.hxx:137
@ IO_CLASS_SENSOR_PRODUCER_HUMIDITY
Humidity publisher.
Definition common.hxx:135
@ IO_CLASS_SENSOR_PRODUCER_IR
Infrared publisher.
Definition common.hxx:139
@ IO_CLASS_SENSOR_PRODUCER_UV
Ultraviolet publisher.
Definition common.hxx:140
@ IO_CLASS_SENSOR_PRODUCER_GAS
Gas publisher.
Definition common.hxx:141
@ IO_CLASS_SENSOR_PRODUCER_GYROSCOPE
Gyroscope publisher.
Definition common.hxx:131
@ IO_CLASS_SENSOR_PRODUCER_RGB
RGB color publisher.
Definition common.hxx:138
@ IO_CLASS_SENSOR_PRODUCER_TEMPERATURE
Temperature publisher.
Definition common.hxx:136
@ IO_CLASS_SENSOR_PRODUCER_PROXIMITY
Proximity publisher.
Definition common.hxx:134
@ IO_CLASS_SENSOR_PRODUCER_BAROMETER
Barometer publisher.
Definition common.hxx:133
Sensor/uORB publisher backed by Dawn protocol writes.
bool isNotify() const
Check if IO supports notifications.
size_t getDataDim() const
Get data vector dimension.
int configure()
Configure object from descriptor data.
bool isRead() const
Check if IO supports read operations.
int setDataImpl(IODataCmn &data)
Set data implementation (override in derived classes).
bool isBatch() const
Check if IO supports batch operations.
bool isWrite() const
Check if IO supports write operations.
size_t getDataSize() const
Get data size in bytes.
int deinit()
De-initialize object.
uint16_t getCls() const
Get object class field.
Definition object.cxx:170
static ObjectCfgId objectCfg(uint8_t type, uint16_t cls, uint8_t dtype, bool rw, uint16_t size, uint8_t id)
Construct 32-bit ConfigID from component fields.
uint32_t ObjectCfgId
ConfigID type - single 32-bit value.
Definition objectcfg.hxx:60
static size_t ID_MAX
Configuration ID field constants and bit shift positions.
Definition objectcfg.hxx:45
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
Base interface for I/O data buffers (static and dynamic).
Definition idata.hxx:21
@ OBJTYPE_IO
Input/Output object type.
Definition objectid.hxx:184
@ DTYPE_UINT32
Unsigned 32-bit integer (0 to 4294967295).
Definition objectid.hxx:96
@ DTYPE_BOOL
Boolean data type (stored in 32-bit container).
Definition objectid.hxx:72
uint32_t ObjectId
ObjectID type - single 32-bit value.
Definition objectid.hxx:44
static ObjectId objectId(uint8_t type, uint16_t cls, uint8_t dtype, uint8_t flags, uint16_t priv)
Construct 32-bit ObjectID from component fields.
Definition objectid.hxx:290