phyphox BLE
Plot your Arduino's data in the phyphox app and control the board from the phone
Loading...
Searching...
No Matches
ElementData.h
Go to the documentation of this file.
1// The plain-data description of an experiment. This is what the sketch's builder classes in
2// phyphoxBleExperiment.h fill in, what addExperiment() copies into one exactly-sized block,
3// and what the serializer turns into XML — on demand, one part at a time, never as a whole
4// document.
5//
6// Everything is plain data: copying is memcpy, variable-length parts (subgraphs, maps,
7// options, elements, …) are counted pointers into that block, and strings are const char*
8// pointers to the sketch's literals (docs/concepts.md, "Strings").
9#ifndef PHYPHOX_BLE_CORE_ELEMENTDATA_H
10#define PHYPHOX_BLE_CORE_ELEMENTDATA_H
11
12#include <stdint.h>
13#include "Config.h"
14#include "Errors.h"
15
16namespace phyphox {
17
19typedef void (*ChangeCallback)(float value);
20typedef void (*PressCallback)();
21
26
28enum Layout : uint8_t { LAYOUT_NONE = 0, LY_AUTO, LY_EXTEND, LY_FIXED };
29enum Align : uint8_t { ALIGN_NONE = 0, AL_LEFT, AL_RIGHT, AL_CENTER };
30
32typedef const char* Color;
33
36 uint8_t channelX = 0;
37 uint8_t channelY = 1;
39 Color color = nullptr;
40 float lineWidth = 0;
41 bool active = false;
42};
43
44struct GraphData {
45 const char* labelX = nullptr;
46 const char* labelY = nullptr;
47 const char* unitX = nullptr;
48 const char* unitY = nullptr;
49 const char* unitYperX = nullptr;
50 int8_t xPrecision = -1;
51 int8_t yPrecision = -1;
52 float minX = 0, maxX = 0, minY = 0, maxY = 0;
54 float aspectRatio = 0;
55 // boolean attributes, tri-state: bit set in `flagsSet` means "emit", bit in `flags` the value
56 enum Flag : uint16_t { F_TIME_ON_X = 1, F_TIME_ON_Y = 2, F_SYSTEM_TIME = 4, F_LINEAR_TIME = 8,
57 F_LOG_X = 16, F_LOG_Y = 32, F_FOLLOW_X = 64, F_PARTIAL_UPDATE = 128,
59 uint16_t flags = 0;
60 uint16_t flagsSet = 0;
61 const SubgraphData* subgraphs = nullptr;
62 uint8_t subgraphCount = 0;
63};
64
68struct MapEntry {
69 const char* text = nullptr;
70 float a = 0;
71 float b = 0;
72 enum : uint8_t { HAS_MIN = 1, HAS_MAX = 2 };
73 uint8_t flags = 0;
74};
75
76struct ValueData {
77 uint8_t channel = 1;
78 const char* unit = nullptr;
79 Color color = nullptr;
80 int8_t precision = -1;
81 float size = 0;
82 float factor = 0;
83 bool scientific = false;
84 const MapEntry* maps = nullptr;
85 uint8_t mapCount = 0;
86};
87
91 uint8_t channel = 0;
92 float defaultValue = 0;
93 bool hasDefault = false;
95 uint8_t submitWithChannel = 0;
96};
97
98struct EditData {
100 const char* unit = nullptr;
101 bool isSigned = true, isDecimal = true;
102 bool signedSet = false, decimalSet = false;
103 float min = 0, max = 0; bool minSet = false, maxSet = false;
104 float factor = 0;
105};
106
109 float minValue = 0, maxValue = 1, stepSize = 1;
110 bool minSet = false, maxSet = false, stepSet = false;
111 int8_t precision = -1;
112 bool showValue = true, showValueSet = false;
113 Color color = nullptr;
114};
115
118 const MapEntry* options = nullptr;
119 uint8_t optionCount = 0;
120 Color color = nullptr;
121};
122
126
129 float value = 1;
131};
132
133struct InfoData {
134 Color color = nullptr;
135 float size = 0;
137 bool bold = false, italic = false;
138};
139
141 float height = 0;
142 Color color = nullptr;
143};
144
170
171struct ViewData {
172 const char* label = nullptr;
173 const char* xmlAttribute = nullptr;
174 const ElementData* elements = nullptr;
175 uint8_t elementCount = 0;
176};
177
179 const char* label = nullptr;
180 const char* xmlAttribute = nullptr;
181 uint8_t channel = 1;
182};
183
185 const char* label = nullptr;
186 const char* xmlAttribute = nullptr;
187 const ExportDataData* entries = nullptr;
188 uint8_t entryCount = 0;
189};
190
192
194 const char* type = nullptr;
195 const char* xmlAttribute = nullptr;
196 uint16_t rate = 0;
197 bool average = false, averageSet = false;
198 const char* rateStrategy = nullptr;
199 uint16_t stride = 0;
200 const char* nameFilter = nullptr;
201 int32_t typeFilter = -1;
204 uint8_t componentCount = 0;
206};
207
212 const char* title = nullptr;
213 const char* category = nullptr;
214 const char* description = nullptr;
215 Color color = nullptr;
216 uint16_t repeating = 0;
217 bool subscribeOnStart = false;
218 bool resendUnchanged = false;
219 const ViewData* views = nullptr;
220 uint8_t viewCount = 0;
221 const ExportSetData* exportSets = nullptr;
222 uint8_t exportSetCount = 0;
223 const SensorData* sensors = nullptr;
224 uint8_t sensorCount = 0;
225 uint8_t exportDataCount_ = 0;
227};
228
229} // namespace phyphox
230
231#endif
#define PHYPHOX_BLE_SENSOR_COMPONENTS
Components a phone sensor can deliver: x, y, z, abs, accuracy, t — the format has six.
Definition Config.h:35
Definition ChannelStore.h:11
Align
Definition ElementData.h:29
@ AL_CENTER
Definition ElementData.h:29
@ AL_RIGHT
Definition ElementData.h:29
@ ALIGN_NONE
Definition ElementData.h:29
@ AL_LEFT
Definition ElementData.h:29
ElementType
Definition ElementData.h:22
@ EL_VALUE
Definition ElementData.h:23
@ EL_NONE
Definition ElementData.h:23
@ EL_EDIT
Definition ElementData.h:23
@ EL_BUTTON
Definition ElementData.h:23
@ EL_GRAPH
Definition ElementData.h:23
@ EL_DROPDOWN
Definition ElementData.h:23
@ EL_SLIDER
Definition ElementData.h:23
@ EL_TOGGLE
Definition ElementData.h:23
@ EL_SEPARATOR
Definition ElementData.h:24
@ EL_INFO
Definition ElementData.h:24
Style
Definition ElementData.h:27
@ ST_VBARS
Definition ElementData.h:27
@ STYLE_NONE
Definition ElementData.h:27
@ ST_MAP
Definition ElementData.h:27
@ ST_DOTS
Definition ElementData.h:27
@ ST_LINES
Definition ElementData.h:27
@ ST_HBARS
Definition ElementData.h:27
Layout
Definition ElementData.h:28
@ LY_FIXED
Definition ElementData.h:28
@ LAYOUT_NONE
Definition ElementData.h:28
@ LY_EXTEND
Definition ElementData.h:28
@ LY_AUTO
Definition ElementData.h:28
const char * Color
A colour is six hex digits, validated by the setter; nullptr means "not set".
Definition ElementData.h:32
SensorComponent
Definition ElementData.h:191
@ COMP_X
Definition ElementData.h:191
@ COMP_Y
Definition ElementData.h:191
@ COMP_NONE
Definition ElementData.h:191
@ COMP_ABS
Definition ElementData.h:191
@ COMP_T
Definition ElementData.h:191
@ COMP_ACCURACY
Definition ElementData.h:191
@ COMP_Z
Definition ElementData.h:191
void(* ChangeCallback)(float value)
Callback types. Plain function pointers (captureless lambdas convert), never std::function.
Definition ElementData.h:19
void(* PressCallback)()
Definition ElementData.h:20
Definition ElementData.h:127
InputCommon in
channel receives value on every press; onChange unused
Definition ElementData.h:128
float value
the constant written on press
Definition ElementData.h:129
PressCallback onPress
Definition ElementData.h:130
Definition ElementData.h:116
InputCommon in
Definition ElementData.h:117
Color color
Definition ElementData.h:120
uint8_t optionCount
Definition ElementData.h:119
const MapEntry * options
Definition ElementData.h:118
Definition ElementData.h:98
bool decimalSet
Definition ElementData.h:102
bool minSet
Definition ElementData.h:103
float factor
Definition ElementData.h:104
float min
Definition ElementData.h:103
bool signedSet
Definition ElementData.h:102
InputCommon in
Definition ElementData.h:99
bool isDecimal
Definition ElementData.h:101
float max
Definition ElementData.h:103
bool maxSet
Definition ElementData.h:103
bool isSigned
Definition ElementData.h:101
const char * unit
Definition ElementData.h:100
One view element. label and xmlAttribute are common to all; the union holds the rest.
Definition ElementData.h:146
ButtonData button
Definition ElementData.h:159
EditData edit
Definition ElementData.h:155
GraphData graph
Definition ElementData.h:153
SliderData slider
Definition ElementData.h:156
ValueData value
Definition ElementData.h:154
void init(ElementType t)
Activate the union member for t with its defaults (the builders call this).
const char * label
Definition ElementData.h:148
ElementData()
Definition ElementData.h:163
ToggleData toggle
Definition ElementData.h:158
const InputCommon * input() const
DropdownData dropdown
Definition ElementData.h:157
const char * xmlAttribute
raw attribute text appended verbatim (escape hatch)
Definition ElementData.h:149
uint8_t visibilityChannel
input channel whose last value shows/hides the element
Definition ElementData.h:150
InputCommon * input()
The input-channel part, if this element has one; nullptr otherwise.
ErrorRecord error
Definition ElementData.h:151
ElementType type
Definition ElementData.h:147
SeparatorData separator
Definition ElementData.h:161
InfoData info
Definition ElementData.h:160
The first error recorded on an element, with the setter it came from.
Definition Errors.h:26
The whole experiment.
Definition ElementData.h:211
const char * description
Definition ElementData.h:214
uint8_t sensorCount
Definition ElementData.h:224
ErrorRecord error
experiment-level errors (capacity, channel conflicts)
Definition ElementData.h:226
const char * category
Definition ElementData.h:213
bool subscribeOnStart
Definition ElementData.h:217
Color color
Definition ElementData.h:215
uint8_t exportSetCount
Definition ElementData.h:222
uint8_t viewCount
Definition ElementData.h:220
const ViewData * views
Definition ElementData.h:219
bool resendUnchanged
D14: drop the change detector, write inputs every cycle.
Definition ElementData.h:218
const ExportSetData * exportSets
Definition ElementData.h:221
const SensorData * sensors
Definition ElementData.h:223
uint8_t exportDataCount_
internal: entries placed so far during the copy
Definition ElementData.h:225
const char * title
Definition ElementData.h:212
uint16_t repeating
samples per data notification for the array write (0 = off)
Definition ElementData.h:216
Definition ElementData.h:178
uint8_t channel
data channel (0 = time)
Definition ElementData.h:181
const char * xmlAttribute
Definition ElementData.h:180
const char * label
Definition ElementData.h:179
Definition ElementData.h:184
const ExportDataData * entries
Definition ElementData.h:187
const char * label
Definition ElementData.h:185
const char * xmlAttribute
Definition ElementData.h:186
uint8_t entryCount
Definition ElementData.h:188
Definition ElementData.h:44
const char * unitX
Definition ElementData.h:47
Layout scaleMaxX
Definition ElementData.h:53
int8_t yPrecision
Definition ElementData.h:51
float maxY
Definition ElementData.h:52
float minX
Definition ElementData.h:52
Layout scaleMinX
Definition ElementData.h:53
Layout scaleMinY
Definition ElementData.h:53
uint8_t subgraphCount
Definition ElementData.h:62
float maxX
Definition ElementData.h:52
uint16_t flags
Definition ElementData.h:59
Layout scaleMaxY
Definition ElementData.h:53
const char * unitYperX
Definition ElementData.h:49
const char * unitY
Definition ElementData.h:48
Flag
Definition ElementData.h:56
@ F_PARTIAL_UPDATE
Definition ElementData.h:57
@ F_FOLLOW_X
Definition ElementData.h:57
@ F_HIDE_TIME_MARKERS
Definition ElementData.h:58
@ F_LINEAR_TIME
Definition ElementData.h:56
@ F_SUPPRESS_SCI
Definition ElementData.h:58
@ F_TIME_ON_X
Definition ElementData.h:56
@ F_LOG_Y
Definition ElementData.h:57
@ F_SYSTEM_TIME
Definition ElementData.h:56
@ F_TIME_ON_Y
Definition ElementData.h:56
@ F_LOG_X
Definition ElementData.h:57
@ F_SHOW_COLOR_SCALE
Definition ElementData.h:58
float aspectRatio
0 = not set
Definition ElementData.h:54
uint16_t flagsSet
Definition ElementData.h:60
const SubgraphData * subgraphs
the first curve, then the added ones
Definition ElementData.h:61
int8_t xPrecision
-1 = not set
Definition ElementData.h:50
const char * labelY
Definition ElementData.h:46
const char * labelX
Definition ElementData.h:45
float minY
Definition ElementData.h:52
Definition ElementData.h:133
bool italic
Definition ElementData.h:137
Align align
Definition ElementData.h:136
bool bold
Definition ElementData.h:137
Color color
Definition ElementData.h:134
float size
Definition ElementData.h:135
Common part of every element that writes into an input channel (edit, slider, dropdown,...
Definition ElementData.h:90
ChangeCallback onChange
Definition ElementData.h:94
uint8_t submitWithChannel
a button's channel: send only when it is pressed (triggerId)
Definition ElementData.h:95
float defaultValue
Definition ElementData.h:92
uint8_t channel
1…PHYPHOX_BLE_MAX_INPUT_CHANNEL; 0 = not set (ERR at add time)
Definition ElementData.h:91
bool hasDefault
Definition ElementData.h:93
A value map entry (text shown while min <= value <= max) or a dropdown option (text + value).
Definition ElementData.h:68
@ HAS_MAX
Definition ElementData.h:72
@ HAS_MIN
Definition ElementData.h:72
float b
Definition ElementData.h:71
uint8_t flags
Definition ElementData.h:73
float a
Definition ElementData.h:70
const char * text
Definition ElementData.h:69
Definition ElementData.h:193
const char * rateStrategy
auto | request | generate | limit (format 1.14)
Definition ElementData.h:198
bool averageSet
Definition ElementData.h:197
const char * type
a phyphox sensor type string (SENSOR_* in phyphoxBle.h)
Definition ElementData.h:194
uint8_t channels[PHYPHOX_BLE_SENSOR_COMPONENTS]
input channel each component lands in
Definition ElementData.h:203
uint16_t stride
use every n-th reading; 0 = not set
Definition ElementData.h:199
uint16_t rate
0 = not set (1.x emitted 80 by default; 2.0 emits nothing = fastest)
Definition ElementData.h:196
int32_t typeFilter
Android sensor type constant; −1 = not set (1.19)
Definition ElementData.h:201
const char * xmlAttribute
Definition ElementData.h:195
uint8_t componentCount
Definition ElementData.h:204
SensorComponent components[PHYPHOX_BLE_SENSOR_COMPONENTS]
Definition ElementData.h:202
const char * nameFilter
for type "custom" or to pick one of several sensors (1.19)
Definition ElementData.h:200
bool average
Definition ElementData.h:197
ErrorRecord error
Definition ElementData.h:205
Definition ElementData.h:140
Color color
Definition ElementData.h:142
float height
0 = not set (format default 0.1)
Definition ElementData.h:141
Definition ElementData.h:107
bool showValueSet
Definition ElementData.h:112
float minValue
Definition ElementData.h:109
bool stepSet
Definition ElementData.h:110
bool minSet
Definition ElementData.h:110
bool maxSet
Definition ElementData.h:110
InputCommon in
Definition ElementData.h:108
float stepSize
Definition ElementData.h:109
float maxValue
Definition ElementData.h:109
Color color
Definition ElementData.h:113
int8_t precision
Definition ElementData.h:111
bool showValue
Definition ElementData.h:112
One curve of a graph. Channel 0 is the phone's arrival time, 1…5 the data channels.
Definition ElementData.h:35
Style style
Definition ElementData.h:38
Color color
Definition ElementData.h:39
uint8_t channelX
Definition ElementData.h:36
float lineWidth
0 = not set
Definition ElementData.h:40
bool active
Definition ElementData.h:41
uint8_t channelY
Definition ElementData.h:37
Definition ElementData.h:123
InputCommon in
Definition ElementData.h:124
Definition ElementData.h:76
const char * unit
Definition ElementData.h:78
uint8_t channel
data channel shown (1.x default was CH3; 2.0 defaults to 1)
Definition ElementData.h:77
float factor
0 = not set (format default 1.0)
Definition ElementData.h:82
uint8_t mapCount
Definition ElementData.h:85
int8_t precision
Definition ElementData.h:80
Color color
Definition ElementData.h:79
const MapEntry * maps
Definition ElementData.h:84
float size
Definition ElementData.h:81
bool scientific
Definition ElementData.h:83
Definition ElementData.h:171
const ElementData * elements
Definition ElementData.h:174
const char * xmlAttribute
Definition ElementData.h:173
const char * label
Definition ElementData.h:172
uint8_t elementCount
Definition ElementData.h:175