Dawn Framework 1.0
Universal data acquisition framework for embedded systems
process.hxx
1// dawn/include/dawn/prog/process.hxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#pragma once
7
8#include <vector>
9
10#include "dawn/porting/config.hxx"
11#include "dawn/prog/common.hxx"
12
13namespace dawn
14{
15class CIOCommon;
16class IIOCommon;
17class io_ddata_t;
18
28{
29public:
32 enum
33 {
37 };
38
46
54 : CProgCommon(desc)
55 {
56 }
57
64 ~CProgProcess() override;
65
72 int configure() override;
73
80 int init() override;
81
88 int deinit() override;
89
96 int doStart() override;
97
104 int doStop() override;
105
112 bool hasThread() const override;
113
121 int trigger(uint8_t cmd) override;
122
123protected:
124 struct SBindState
125 {
126 virtual ~SBindState() = default;
127
128 virtual void reset()
129 {
130 }
131 };
132
133private:
136 struct SProcessBind
137 {
138 CProgProcess *owner = nullptr;
139 SProgStatsIOBind cfg = {};
140 CIOCommon *src = nullptr;
141 CIOCommon *output = nullptr;
142 io_ddata_t *ioData = nullptr;
143 io_ddata_t *outputData = nullptr;
144 SBindState *state = nullptr;
145 bool initsample = false;
146 bool active = false;
147 };
148
151 std::vector<SProcessBind> binds;
152
161 static int ioNotifierCb(void *priv, io_ddata_t *data);
162
170 int configureDesc(const CDescObject &desc);
171
179 int allocObject(const SProgStatsIOBind *alloc);
180
187 int bindPrepare(SProcessBind *bind);
188
189protected:
196 virtual int configureExtraCfgItem(const CDescObject &desc,
197 const SObjectCfg::SObjectCfgItem *item,
198 size_t &offset);
199
210 virtual void handle(CIOCommon *output,
211 io_ddata_t *data,
212 io_ddata_t *ioData,
213 io_ddata_t *outputData,
214 bool &initsample) = 0;
215
224 virtual int bindStateAlloc(CIOCommon *src,
225 CIOCommon *output,
226 io_ddata_t *ioData,
227 io_ddata_t *outputData,
228 SBindState **state);
229
236 virtual void handleWithState(CIOCommon *output,
237 io_ddata_t *data,
238 io_ddata_t *ioData,
239 io_ddata_t *outputData,
240 bool &initsample,
241 void *state);
242
252 {
253 if (!binds.empty())
254 {
255 return binds[0].output;
256 }
257 return nullptr;
258 }
259
269 {
270 if (!binds.empty())
271 {
272 return binds[0].src;
273 }
274 return nullptr;
275 }
276
284 void handleCmn(SProcessBind *bind, io_ddata_t *data)
285 {
286 DAWNASSERT(bind != nullptr, "nullptr pointer");
287 DAWNASSERT(data != nullptr, "nullptr pointer");
288
289 // Handle by derived processing implementation
290
291 this->handleWithState(
292 bind->output, data, bind->ioData, bind->outputData, bind->initsample, bind->state);
293 };
294};
295} // Namespace dawn
Descriptor wrapper for individual object configuration.
Base class for all I/O objects.
Definition common.hxx:27
Base class for all PROG (processing) objects.
Definition common.hxx:27
Base class for callback-driven sample processing Program objects.
Definition process.hxx:28
CProgProcess(CDescObject &desc)
Construct a a Program from descriptor.
Definition process.hxx:53
int trigger(uint8_t cmd)
Execute a trigger command.
Definition process.cxx:310
bool hasThread() const
Check if a background thread is active.
Definition process.cxx:305
CIOCommon * getOutputIO() const
Get the output IO for the first bind.
Definition process.hxx:251
int init()
One-time initialize Program after bindings are resolved.
Definition process.cxx:207
CIOCommon * getSourceIO() const
Get the source IO for the first bind.
Definition process.hxx:268
virtual void handle(CIOCommon *output, io_ddata_t *data, io_ddata_t *ioData, io_ddata_t *outputData, bool &initsample)=0
Process incoming sample.
int configure()
Configure Program from descriptor.
Definition process.cxx:189
int deinit()
Deinitialize Program.
Definition process.cxx:259
virtual void handleWithState(CIOCommon *output, io_ddata_t *data, io_ddata_t *ioData, io_ddata_t *outputData, bool &initsample, void *state)
Process incoming sample with optional per-binding state.
Definition process.cxx:110
virtual int configureExtraCfgItem(const CDescObject &desc, const SObjectCfg::SObjectCfgItem *item, size_t &offset)
Parse program-specific config item (optional extension hook).
Definition process.cxx:85
~CProgProcess()
Destruct the a Program.
Definition process.cxx:184
virtual int bindStateAlloc(CIOCommon *src, CIOCommon *output, io_ddata_t *ioData, io_ddata_t *outputData, SBindState **state)
Allocate optional per-binding derived state.
Definition process.cxx:95
void handleCmn(SProcessBind *bind, io_ddata_t *data)
Common callback wrapper.
Definition process.hxx:284
int doStart()
Start the Program.
Definition process.cxx:282
int doStop()
Stop the Program.
Definition process.cxx:295
@ PROG_STATS_CFG_FIRST
First config ID.
Definition process.hxx:34
@ PROG_STATS_CFG_IOBIND
I/O binding configuration.
Definition process.hxx:35
@ PROG_STATS_CFG_LAST
Last config ID.
Definition process.hxx:36
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
Configuration structure for process I/O binding.
Definition process.hxx:42
SObjectId::UObjectId output
Output I/O object ID.
Definition process.hxx:44
SObjectId::UObjectId objid
Source I/O object ID.
Definition process.hxx:43
Heap-allocated dynamic I/O data buffer.
Definition ddata.hxx:21
32-bit encoded object identifier (union with bit field).
Definition objectid.hxx:218