/* Copyright (C) 2013,2014 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 ODR-DabMux. ODR-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. ODR-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 ODR-DabMux. If not, see . */ #ifndef _TAGITEMS_H_ #define _TAGITEMS_H_ #include "config.h" #include "Eti.h" #include #include #include 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; rfa = 0; //shall be zero rfu = 0; //mnsc is valid } 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; uint16_t mnsc; uint16_t dflc; // modulo 5000 frame counter // ATST (optional) bool atstf; // presence of atst data uint8_t utco; uint32_t seconds; uint32_t tsta; // the FIC (optional) bool ficf; const unsigned char* fic_data; size_t fic_length; // rfu bool rfudf; uint32_t rfud; }; // 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_; }; // ETSI TS 102 821, 5.2.2.2 Dummy padding class TagStarDMY : public TagItem { public: /* length is the TAG value length in bytes */ TagStarDMY(uint32_t length) : length_(length) {} std::vector Assemble(); private: uint32_t length_; }; #endif