Dawn Framework 1.0
Universal data acquisition framework for embedded systems
sdata.hxx
1// dawn/include/dawn/io/sdata.hxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#pragma once
7
8#include <cassert>
9#include <cstddef>
10#include <cstdlib>
11#include <cstring>
12
13#include "dawn/io/idata.hxx"
14#include "dawn/porting/config.hxx"
15
16namespace dawn
17{
20template<typename T, size_t N>
22{
24 T data[N];
25};
26
29template<typename T, size_t N>
31{
32 T data[N];
33};
34
37template<typename T, size_t N, size_t M = 1, bool TS = false>
38struct io_sdata_t : public io_data_cmn_t
39{
42
46 : data{}
47 , dummyTs(0)
48 {
49 assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8);
50 }
51
60 constexpr T &operator()(size_t index, size_t batch = 0)
61 {
62 assert(index < N);
63 assert(batch < M);
64 return data[batch].data[index];
65 }
66
74 constexpr io_ts_t &operator[](size_t batch)
75 {
76 (void)batch;
77 return dummyTs;
78 }
79
82 constexpr static size_t getSize()
83 {
84 return sizeof(T);
85 }
86
89 constexpr size_t getItems() override
90 {
91 return N;
92 }
93
96 constexpr static size_t getBatch()
97 {
98 return M;
99 }
100
103 constexpr size_t getBufferSize() const
104 {
105 return sizeof(this->data);
106 }
107
114 constexpr size_t getDataSize() override
115 {
116 return sizeof(T) * N;
117 }
118
126 constexpr void *getPtr(size_t batch = 0) override
127 {
128 return (void *)&data[batch];
129 }
130
138 constexpr void *getDataPtr(size_t batch = 0) override
139 {
140 return (void *)&data[batch];
141 }
142
145 bool hasTimestamp() override
146 {
147 return false;
148 }
149
157 constexpr io_ts_t &getTs(size_t batch = 0) override
158 {
159 (void)batch;
160 return dummyTs;
161 };
162};
163
166template<typename T, size_t N, size_t M>
167struct io_sdata_t<T, N, M, true> : public io_data_cmn_t
168{
172
176 : data{}
177 {
178 assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8);
179 }
180
189 constexpr T &operator()(size_t index, size_t batch = 0)
190 {
191 assert(index < N);
192 assert(batch < M);
193 return data[batch].data[index];
194 }
195
203 constexpr io_ts_t &operator[](size_t batch)
204 {
205 assert(batch < M);
206 return data[batch].ts;
207 }
208
211 constexpr static size_t getSize()
212 {
213 return sizeof(T);
214 }
215
218 constexpr size_t getItems() override
219 {
220 return N;
221 }
222
225 constexpr static size_t getBatch()
226 {
227 return M;
228 }
229
232 constexpr size_t getBufferSize() const
233 {
234 return sizeof(this->data);
235 }
236
243 constexpr size_t getDataSize() override
244 {
245 return sizeof(T) * N;
246 }
247
255 constexpr void *getPtr(size_t batch = 0) override
256 {
257 return (void *)&data[batch];
258 }
259
267 constexpr void *getDataPtr(size_t batch = 0) override
268 {
269 return (void *)data[batch].data;
270 }
271
274 bool hasTimestamp() override
275 {
276 return true;
277 }
278
286 constexpr io_ts_t &getTs(size_t batch = 0) override
287 {
288 return data[batch].ts;
289 };
290};
291
292} // Namespace dawn
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
uint64_t io_ts_t
Timestamp data type (uint64_t, typically microseconds since boot).
Definition idata.hxx:16
Single batch of I/O data without timestamp.
Definition sdata.hxx:31
T data[N]
Data elements (N items of type T)
Definition sdata.hxx:32
Single batch of I/O data with timestamp.
Definition sdata.hxx:22
T data[N]
Data elements (N items of type T)
Definition sdata.hxx:24
io_ts_t ts
Timestamp for this measurement.
Definition sdata.hxx:23
bool hasTimestamp()
This buffer has per-batch timestamp.
Definition sdata.hxx:274
size_t getDataSize()
Get data size in bytes.
Definition sdata.hxx:243
static size_t getBatch()
Get number of batches.
Definition sdata.hxx:225
void * getDataPtr(size_t batch=0)
Get pointer to data only (skips timestamp).
Definition sdata.hxx:267
io_ts_t & operator[](size_t batch)
Get timestamp for batch.
Definition sdata.hxx:203
static size_t getSize()
Get element size in bytes.
Definition sdata.hxx:211
void * getPtr(size_t batch=0)
Get pointer to batch (timestamp + data).
Definition sdata.hxx:255
size_t getBufferSize() const
Get total buffer size in bytes.
Definition sdata.hxx:232
io_sdata_t()
Constructor - initialize all data to zero.
Definition sdata.hxx:175
T & operator()(size_t index, size_t batch=0)
Get data element by index and batch.
Definition sdata.hxx:189
size_t getItems()
Get number of items per batch.
Definition sdata.hxx:218
io_ts_t & getTs(size_t batch=0)
Get timestamp reference for batch.
Definition sdata.hxx:286
Static (compile-time) I/O data buffer (no timestamp).
Definition sdata.hxx:39
io_ts_t & operator[](size_t batch)
Get timestamp (returns shared dummy).
Definition sdata.hxx:74
size_t getItems()
Get number of items per batch.
Definition sdata.hxx:89
void * getDataPtr(size_t batch=0)
Get pointer to data only (same as getPtr for no-timestamp).
Definition sdata.hxx:138
io_sdata_t()
Constructor - initialize all data to zero.
Definition sdata.hxx:45
io_ts_t & getTs(size_t batch=0)
Get timestamp reference (returns shared dummy).
Definition sdata.hxx:157
io_ts_t dummyTs
Dummy timestamp for API compatibility.
Definition sdata.hxx:41
bool hasTimestamp()
This buffer has no per-batch timestamp.
Definition sdata.hxx:145
io_data_nots_s< T, N > data[M]
Array of M batches (each: N elements, no timestamp)
Definition sdata.hxx:40
size_t getDataSize()
Get data size in bytes.
Definition sdata.hxx:114
static size_t getSize()
Get element size in bytes.
Definition sdata.hxx:82
size_t getBufferSize() const
Get total buffer size in bytes.
Definition sdata.hxx:103
static size_t getBatch()
Get number of batches.
Definition sdata.hxx:96
void * getPtr(size_t batch=0)
Get pointer to batch (data only, no timestamp).
Definition sdata.hxx:126
T & operator()(size_t index, size_t batch=0)
Get data element by index and batch.
Definition sdata.hxx:60