libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
ancafd.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <cstdint>
14#include <promeki/datatype.h>
15#include <promeki/error.h>
16#include <promeki/json.h>
17#include <promeki/namespace.h>
18#include <promeki/result.h>
19#include <promeki/string.h>
20
21PROMEKI_NAMESPACE_BEGIN
22
23class DataStream;
24
96class AncAfd {
97 public:
98 PROMEKI_DATATYPE(AncAfd, DataTypeAncAfd, 1)
99
100
108 enum BarFlag : uint8_t {
109 TopBar = 0x80,
110 BottomBar = 0x40,
111 LeftBar = 0x20,
112 RightBar = 0x10,
113 };
114
116 AncAfd() = default;
117
119 AncAfd(uint8_t afdCode, bool ar)
120 : _afdCode(static_cast<uint8_t>(afdCode & 0x0F)), _arFlag(ar) {}
121
122 // -- AFD code + AR flag -----------------------------------
123
125 uint8_t afdCode() const { return _afdCode; }
126
128 void setAfdCode(uint8_t code) { _afdCode = static_cast<uint8_t>(code & 0x0F); }
129
131 bool arFlag() const { return _arFlag; }
132
134 void setArFlag(bool on) { _arFlag = on; }
135
136 // -- Bar-data flags ---------------------------------------
137
139 uint8_t barFlags() const { return _barFlags; }
140
148 void setBarFlags(uint8_t flags) {
149 _barFlags = static_cast<uint8_t>(flags & 0xF0);
150 }
151
153 bool hasBarFlag(BarFlag f) const {
154 return (_barFlags & static_cast<uint8_t>(f)) != 0;
155 }
156
158 void setBarFlag(BarFlag f, bool on) {
159 if (on) _barFlags = static_cast<uint8_t>(_barFlags | static_cast<uint8_t>(f));
160 else _barFlags = static_cast<uint8_t>(_barFlags & ~static_cast<uint8_t>(f));
161 }
162
165 bool topBar() const { return hasBarFlag(TopBar); }
166 void setTopBar(bool on) { setBarFlag(TopBar, on); }
167 bool bottomBar() const { return hasBarFlag(BottomBar); }
168 void setBottomBar(bool on) { setBarFlag(BottomBar, on); }
169 bool leftBar() const { return hasBarFlag(LeftBar); }
170 void setLeftBar(bool on) { setBarFlag(LeftBar, on); }
171 bool rightBar() const { return hasBarFlag(RightBar); }
172 void setRightBar(bool on) { setBarFlag(RightBar, on); }
174
182 bool hasBarData() const { return _barFlags != 0; }
183
184 // -- Bar-data values --------------------------------------
185
187 uint16_t barValue1() const { return _barValue1; }
188
190 void setBarValue1(uint16_t v) { _barValue1 = v; }
191
193 uint16_t barValue2() const { return _barValue2; }
194
196 void setBarValue2(uint16_t v) { _barValue2 = v; }
197
198 // -- Comparison -------------------------------------------
199
201 bool operator==(const AncAfd &o) const {
202 return _afdCode == o._afdCode && _arFlag == o._arFlag &&
203 _barFlags == o._barFlags && _barValue1 == o._barValue1 &&
204 _barValue2 == o._barValue2;
205 }
206
208 bool operator!=(const AncAfd &o) const { return !(*this == o); }
209
210 // -- Diagnostics ------------------------------------------
211
213 String toString() const;
214
216 JsonObject toJson() const;
217
218 // -- DataStream -------------------------------------------
219
221 Error writeToStream(DataStream &s) const;
222
224 template <uint32_t V> static Result<AncAfd> readFromStream(DataStream &s);
225
226 private:
227 uint8_t _afdCode = 0;
228 bool _arFlag = false;
229 uint8_t _barFlags = 0;
230 uint16_t _barValue1 = 0;
231 uint16_t _barValue2 = 0;
232};
233
234PROMEKI_NAMESPACE_END
235
236#endif // PROMEKI_ENABLE_PROAV