diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2019-09-23 20:09:39 +0200 | 
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2019-09-23 20:09:39 +0200 | 
| commit | 09e514732788d821189c59ddc58e70355ba1a3cb (patch) | |
| tree | d7adc353859aa7f796bda0b4be12421f69779e73 /lib/edi/PFT.h | |
| parent | 56ad3cdd13e4c0078329ede5781bae4fcaeed569 (diff) | |
| download | ODR-SourceCompanion-09e514732788d821189c59ddc58e70355ba1a3cb.tar.gz ODR-SourceCompanion-09e514732788d821189c59ddc58e70355ba1a3cb.tar.bz2 ODR-SourceCompanion-09e514732788d821189c59ddc58e70355ba1a3cb.zip | |
Add code from common repository
Diffstat (limited to 'lib/edi/PFT.h')
| -rw-r--r-- | lib/edi/PFT.h | 78 | 
1 files changed, 78 insertions, 0 deletions
| diff --git a/lib/edi/PFT.h b/lib/edi/PFT.h new file mode 100644 index 0000000..502aa39 --- /dev/null +++ b/lib/edi/PFT.h @@ -0,0 +1,78 @@ +/* +   Copyright (C) 2019 +   Matthias P. Braendli, matthias.braendli@mpb.li + +    http://www.opendigitalradio.org + +   EDI output, +   Protection, Fragmentation and Transport. (PFT) + +   Are supported: +    Reed-Solomon and Fragmentation + +   This implements part of PFT as defined ETSI TS 102 821. + +   */ +/* +   This file is part of the ODR-mmbTools. + +   This program 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. + +   This program 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 this program.  If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "config.h" +#include <vector> +#include <list> +#include <stdexcept> +#include <cstdint> +#include "AFPacket.h" +#include "Log.h" +#include "ReedSolomon.h" +#include "EDIConfig.h" + +namespace edi { + +typedef std::vector<uint8_t> RSBlock; +typedef std::vector<uint8_t> PFTFragment; + +class PFT +{ +    public: +        static constexpr int PARITYBYTES = 48; + +        PFT(); +        PFT(const configuration_t& conf); + +        // return a list of PFT fragments with the correct +        // PFT headers +        std::vector< PFTFragment > Assemble(AFPacket af_packet); + +        // Apply Reed-Solomon FEC to the AF Packet +        RSBlock Protect(AFPacket af_packet); + +        // Cut a RSBlock into several fragments that can be transmitted +        std::vector< std::vector<uint8_t> > ProtectAndFragment(AFPacket af_packet); + +    private: +        unsigned int m_k = 207; // length of RS data word +        unsigned int m_m = 3; // number of fragments that can be recovered if lost +        unsigned int m_dest_port = 12000; // Destination port for transport header +        uint16_t m_pseq = 0; +        size_t m_num_chunks = 0; +        bool m_verbose = 0; +}; + +} + | 
