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;
241class Cea708DtvccPacket {
243 PROMEKI_DATATYPE(Cea708DtvccPacket, DataTypeCea708DtvccPacket, 1)
247 static constexpr uint8_t MaxPayloadBytes = 127;
251 static constexpr uint8_t CcTypePacketStart = 2;
254 static constexpr uint8_t CcTypePacketData = 3;
258 Cea708DtvccPacket() = default;
261 Cea708DtvccPacket(uint8_t sequenceNumber, List<Cea708Service> blocks)
262 : _sequenceNumber(sequenceNumber & 0x03), _serviceBlocks(std::move(blocks)) {}
265 uint8_t sequenceNumber()
const {
return _sequenceNumber; }
268 void setSequenceNumber(uint8_t n) { _sequenceNumber =
static_cast<uint8_t
>(n & 0x03); }
271 const List<Cea708Service> &serviceBlocks()
const {
return _serviceBlocks; }
274 List<Cea708Service> &serviceBlocks() {
return _serviceBlocks; }
279 size_t payloadByteCount()
const;
285 Buffer toPayloadBytes()
const;
289 static Result<List<Cea708Service>> parsePayloadBytes(
const void *data,
size_t size);
298 Cea708Cdp::CcDataList toCcData()
const;
305 static Result<Cea708DtvccPacket> fromCcData(
const Cea708Cdp::CcDataList &triples);
313 JsonObject toJson()
const;
321 String toString()
const;
323 bool operator==(
const Cea708DtvccPacket &o)
const {
324 return _sequenceNumber == o._sequenceNumber && _serviceBlocks == o._serviceBlocks;
326 bool operator!=(
const Cea708DtvccPacket &o)
const {
return !(*
this == o); }
335 Error writeToStream(DataStream &s)
const;
341 template <u
int32_t V>
static Result<Cea708DtvccPacket> readFromStream(DataStream &s);
344 uint8_t _sequenceNumber = 0;
345 List<Cea708Service> _serviceBlocks;