GNU Radio Manual and C++ API Reference  3.7.5.1
The Free & Open Software Radio Ecosystem
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
atsc_deinterleaver_impl.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2014 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3, or (at your option)
10  * any later version.
11  *
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with GNU Radio; see the file COPYING. If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street,
20  * Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef INCLUDED_DTV_ATSC_DEINTERLEAVER_IMPL_H
24 #define INCLUDED_DTV_ATSC_DEINTERLEAVER_IMPL_H
25 
27 #include "atsc_types.h"
28 #include "interleaver_fifo.h"
29 
30 namespace gr {
31  namespace dtv {
32 
34  {
35  private:
36  //! transform a single symbol
37  unsigned char transform(unsigned char input) {
38  unsigned char retval = m_fifo[m_commutator]->stuff(input);
39  m_commutator++;
40  if (m_commutator >= 52)
41  m_commutator = 0;
42  return retval;
43  }
44 
45  /*!
46  * Note: The use of the alignment_fifo keeps the encoder and decoder
47  * aligned if both are synced to a field boundary. There may be other
48  * ways to implement this function. This is a best guess as to how
49  * this should behave, as we have no test vectors for either the
50  * interleaver or deinterleaver.
51  */
52  interleaver_fifo<unsigned char> alignment_fifo;
53 
54  int m_commutator;
55  std::vector<interleaver_fifo<unsigned char> *> m_fifo;
56 
57  public:
60 
61  int work(int noutput_items,
62  gr_vector_const_void_star &input_items,
63  gr_vector_void_star &output_items);
64 
65  //! reset interleaver (flushes contents and resets commutator)
66  void reset();
67 
68  //! sync interleaver (resets commutator, but doesn't flush fifos)
69  void sync() { m_commutator = 0; }
70  };
71 
72  } /* namespace dtv */
73 } /* namespace gr */
74 
75 #endif /* INCLUDED_DTV_ATSC_DEINTERLEAVER_IMPL_H */
ATSC deinterleave RS encoded ATSC data ( atsc_mpeg_packet_rs_encoded –> atsc_mpeg_packet_rs_encoded)i...
Definition: atsc_deinterleaver.h:38
std::vector< const void * > gr_vector_const_void_star
Definition: gnuradio-runtime/include/gnuradio/types.h:38
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
just like gr::block::general_work, only this arranges to call consume_each for you ...
std::vector< void * > gr_vector_void_star
Definition: gnuradio-runtime/include/gnuradio/types.h:37
void reset()
reset interleaver (flushes contents and resets commutator)
void sync()
sync interleaver (resets commutator, but doesn't flush fifos)
Definition: atsc_deinterleaver_impl.h:69
Definition: atsc_deinterleaver_impl.h:33