/*
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:
std::vector Assemble();
// SSTCn
uint8_t scid;
uint16_t sad;
uint8_t tpl;
uint8_t rfa;
// Pointer to MSTn data
uint8_t* mst_data;
size_t mst_length; // STLn * 8 bytes
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