11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
23PROMEKI_NAMESPACE_BEGIN
79 PROMEKI_DATATYPE(Cea708Service, DataTypeCea708Service, 1)
83 static constexpr uint8_t MaxServiceNumber = 63;
89 static constexpr uint8_t ExtendedServiceNumberFrom = 7;
95 Cea708Service() = default;
99 Cea708Service(uint8_t serviceNumber, Buffer data)
100 : _serviceNumber(serviceNumber), _data(std::move(data)) {}
104 uint8_t serviceNumber()
const {
return _serviceNumber; }
107 void setServiceNumber(uint8_t n) { _serviceNumber = n; }
111 const Buffer &data()
const {
return _data; }
114 Buffer &data() {
return _data; }
118 bool isNull()
const {
return _serviceNumber == 0; }
122 bool isExtended()
const {
return _serviceNumber >= ExtendedServiceNumberFrom; }
135 static Cea708Service fromText(uint8_t serviceNumber,
const String &text);
152 JsonObject toJson()
const;
160 String toString()
const;
167 bool operator==(
const Cea708Service &o)
const;
168 bool operator!=(
const Cea708Service &o)
const {
return !(*
this == o); }
177 Error writeToStream(DataStream &s)
const;
183 template <u
int32_t V>
static Result<Cea708Service> readFromStream(DataStream &s);
186 uint8_t _serviceNumber = 0;
236class Cea708DtvccPacket {
238 PROMEKI_DATATYPE(Cea708DtvccPacket, DataTypeCea708DtvccPacket, 1)
242 static constexpr uint8_t MaxPayloadBytes = 127;
246 static constexpr uint8_t CcTypePacketStart = 2;
249 static constexpr uint8_t CcTypePacketData = 3;
253 Cea708DtvccPacket() = default;
256 Cea708DtvccPacket(uint8_t sequenceNumber, List<Cea708Service> blocks)
257 : _sequenceNumber(sequenceNumber & 0x03), _serviceBlocks(std::move(blocks)) {}
260 uint8_t sequenceNumber()
const {
return _sequenceNumber; }
263 void setSequenceNumber(uint8_t n) { _sequenceNumber =
static_cast<uint8_t
>(n & 0x03); }
266 const List<Cea708Service> &serviceBlocks()
const {
return _serviceBlocks; }
269 List<Cea708Service> &serviceBlocks() {
return _serviceBlocks; }
274 size_t payloadByteCount()
const;
280 Buffer toPayloadBytes()
const;
284 static Result<List<Cea708Service>> parsePayloadBytes(
const void *data,
size_t size);
293 Cea708Cdp::CcDataList toCcData()
const;
300 static Result<Cea708DtvccPacket> fromCcData(
const Cea708Cdp::CcDataList &triples);
308 JsonObject toJson()
const;
316 String toString()
const;
318 bool operator==(
const Cea708DtvccPacket &o)
const {
319 return _sequenceNumber == o._sequenceNumber && _serviceBlocks == o._serviceBlocks;
321 bool operator!=(
const Cea708DtvccPacket &o)
const {
return !(*
this == o); }
330 Error writeToStream(DataStream &s)
const;
336 template <u
int32_t V>
static Result<Cea708DtvccPacket> readFromStream(DataStream &s);
339 uint8_t _sequenceNumber = 0;
340 List<Cea708Service> _serviceBlocks;