11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
23PROMEKI_NAMESPACE_BEGIN
125 PROMEKI_DATATYPE(AncOp47Sdp, DataTypeAncOp47Sdp, 1)
129 static constexpr
size_t MaxVbiPackets = 5;
134 static constexpr
size_t WstPacketSize = 45;
137 static constexpr uint8_t Identifier1 = 0x51;
140 static constexpr uint8_t Identifier2 = 0x15;
144 static constexpr uint8_t FormatCodeWstTeletext = 0x02;
147 static constexpr uint8_t FooterId = 0x74;
151 static constexpr uint8_t RunInCode = 0x55;
155 static constexpr uint8_t FramingCode = 0x27;
159 static constexpr uint8_t FieldOneBit = 0x80;
163 static constexpr uint8_t LineMask = 0x1F;
176 uint8_t lineNumber = 0;
181 bool fieldOne =
false;
193 uint8_t reservedBits = 0;
198 ::promeki::Array<uint8_t, WstPacketSize> wstData{};
201 bool operator==(
const VbiPacket &o)
const {
202 return lineNumber == o.lineNumber &&
203 fieldOne == o.fieldOne &&
204 reservedBits == o.reservedBits &&
205 wstData == o.wstData;
209 bool operator!=(
const VbiPacket &o)
const {
return !(*
this == o); }
213 using PacketList = ::promeki::List<VbiPacket>;
216 AncOp47Sdp() =
default;
221 uint16_t footerSequenceCounter()
const {
return _fsc; }
224 void setFooterSequenceCounter(uint16_t v) { _fsc = v; }
229 const PacketList &packets()
const {
return _packets; }
240 void setPackets(PacketList p) { _packets = std::move(p); }
243 void addPacket(
const VbiPacket &p) { _packets.pushToBack(p); }
246 void clearPackets() { _packets.clear(); }
251 bool operator==(
const AncOp47Sdp &o)
const {
252 return _fsc == o._fsc && _packets == o._packets;
256 bool operator!=(
const AncOp47Sdp &o)
const {
return !(*
this == o); }
261 String toString()
const;
264 JsonObject toJson()
const;
269 Error writeToStream(DataStream &s)
const;
272 template <u
int32_t V>
static Result<AncOp47Sdp> readFromStream(DataStream &s);