From 05da854addac962e20ff9f1e7bdad3cbacb66905 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 22 Nov 2013 19:12:30 +0100 Subject: Add AFPacket and a few TagItems --- src/dabOutput/edi/TagItems.h | 116 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 src/dabOutput/edi/TagItems.h (limited to 'src/dabOutput/edi/TagItems.h') diff --git a/src/dabOutput/edi/TagItems.h b/src/dabOutput/edi/TagItems.h new file mode 100644 index 0000000..c0e863a --- /dev/null +++ b/src/dabOutput/edi/TagItems.h @@ -0,0 +1,116 @@ +/* + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + EDI output. + This defines a few TAG items as defined ETSI TS 102 821 and + ETSI TS 102 693 + + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see . + */ + +#ifndef _TAGITEMS_H_ +#define _TAGITEMS_H_ + +#include "config.h" +#include "Eti.h" +#include +#include +#include +#define PACKED __attribute__ ((packed)) + +class TagItem +{ + public: + virtual std::vector Assemble() = 0; +}; + +// ETSI TS 102 693, 5.1.1 Protocol type and revision +class TagStarPTR : public TagItem +{ + public: + std::vector Assemble(); +}; + +// ETSI TS 102 693, 5.1.3 DAB ETI(LI) Management (deti) +class TagDETI : public TagItem +{ + public: + TagDETI() + { + // set optional fields to "not present" + atstf = 0; + rfudf = 0; + ficf = 0; + + dflc = 0; // counter + } + std::vector Assemble(); + + /***** DATA in intermediary format ****/ + // For the ETI Header: must be defined ! + uint8_t stat; + uint8_t mid; + uint8_t fp; + uint8_t rfa; + uint8_t rfu; + uint8_t mnsc; + + // ATST (optional) + bool atstf; // presence of atst data + uint8_t utco; + uint32_t seconds; + uint32_t tsta; + + // the FIC (optional) + bool ficf; + const char* fic_data; + size_t fic_length; + + // rfu + bool rfudf; + uint32_t rfud; + + private: + uint32_t dflc; //modulo 5000 counter for each eti frame + +}; + +// ETSI TS 102 693, 5.1.5 ETI Sub-Channel Stream +class TagESTn : public TagItem +{ + public: + TagESTn(uint8_t id) : id_(id) {} ; + + std::vector Assemble(); + + // SSTCn + uint8_t scid; + uint8_t sad; + uint8_t tpl; + uint8_t rfa; + + // Pointer to MSTn data + uint8_t* mst_data; + size_t mst_length; // STLn * 8 bytes + + private: + uint8_t id_; +}; +#endif + -- cgit v1.2.3