GNU Radio Manual and C++ API Reference 3.7.14.0
The Free & Open Software Radio Ecosystem
generic_encoder.h
Go to the documentation of this file.
1/* -*- c++ -*- */
2/*
3 * Copyright 2013-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_FEC_GENERIC_ENCODER_H
24#define INCLUDED_FEC_GENERIC_ENCODER_H
25
26#include <gnuradio/block.h>
27#include <gnuradio/fec/api.h>
28#include <gnuradio/logger.h>
29#include <boost/shared_ptr.hpp>
30
31namespace gr {
32namespace fec {
33
35{
36protected:
38
39public:
40 friend class encoder;
41 virtual void generic_work(void* in_buffer, void* out_buffer) = 0;
42 static int base_unique_id;
43 int my_id;
44 int unique_id();
45 std::string d_name;
46 std::string alias() { return (boost::format("%s%d") % d_name % unique_id()).str(); }
47
48public:
49 typedef boost::shared_ptr<generic_encoder> sptr;
50
51 /*!
52 * Returns the rate of the code. For every 1 input bit, there
53 * are r output bits, so the rate is 1/r. Used for setting
54 * things like the encoder block's relative rate.
55 *
56 * This function MUST be reimplemented by the child class.
57 */
58 virtual double rate() = 0;
59
60 /*!
61 * Returns the input size in items that the encoder object uses
62 * to encode a full frame. Often, this number is the number of
63 * bits per frame if the input format is unpacked. If the block
64 * expects packed bytes, then this value should be the number of
65 * bytes (number of bits / 8) per input frame.
66 *
67 * The child class MUST implement this function.
68 */
69 virtual int get_input_size() = 0;
70
71 /*!
72 * Returns the output size in items that the encoder object
73 * produces after encoding a full frame. Often, this number is
74 * the number of bits in the outputted frame if the input format
75 * is unpacked. If the block produces packed bytes, then this
76 * value should be the number of bytes (number of bits / 8) per
77 * frame produced. This value is generally something like
78 * R*get_input_size() for a 1/R rate code.
79 *
80 * The child class MUST implement this function.
81 */
82 virtual int get_output_size() = 0;
83
84 /*!
85 * Set up a conversion type required to setup the data properly
86 * for this encoder. The encoder itself will not implement the
87 * conversion and expects an external wrapper (e.g.,
88 * fec.extended_encoder) to read this value and "do the right
89 * thing" to format the data.
90 *
91 * The default behavior is 'none', which means no conversion is
92 * required. Whatever the get_input_item_size() value returns,
93 * the input is expected to conform directly to this. Generally,
94 * this means unpacked bytes.
95 *
96 * If 'pack', the block expects the inputs to be packed
97 * bytes. The wrapper should implement a
98 * gr::blocks::pack_k_bits_bb(8) block for this.
99 *
100 * The child class MAY implement this function. If not
101 * reimplemented, it returns "none".
102 */
103 virtual const char* get_input_conversion();
104
105 /*!
106 * Set up a conversion type required to understand the output
107 * style of this encoder. Generally an encoder will produce
108 * unpacked bytes with a bit set in the LSB.
109 *
110 * The default behavior is 'none', which means no conversion is
111 * required and the encoder produces unpacked bytes.
112 *
113 * If 'packed_bits', the block produces packed bits and the
114 * wrapper should unpack these (using, for instance,
115 * gr::block::unpack_k_bits_bb(8)).
116 *
117 * The child class MAY implement this function. If not
118 * reimplemented, it returns "none".
119 */
120 virtual const char* get_output_conversion();
121
122 /*!
123 * Updates the size of the frame to encode.
124 *
125 * The child class MUST implement this function and interpret
126 * how the \p frame_size information affects the block's
127 * behavior. It should also provide bounds checks.
128 */
129 virtual bool set_frame_size(unsigned int frame_size) = 0;
130
132 generic_encoder(std::string name);
134};
135
136/*! see generic_encoder::get_output_size() */
138
139/*! see generic_encoder::get_input_size() */
141
142/*! see generic_encoder::get_input_conversion() */
144
145/*! see generic_encoder::get_output_conversion() */
147
148
149} /* namespace fec */
150} /* namespace gr */
151
152#endif /* INCLUDED_FEC_GENERIC_ENCODER_H */
Creates the encoder block for use in GNU Radio flowgraphs from a given FECAPI object derived from the...
Definition: encoder.h:48
Definition: generic_encoder.h:35
virtual double rate()=0
virtual void generic_work(void *in_buffer, void *out_buffer)=0
gr::logger_ptr d_logger
Definition: generic_encoder.h:37
std::string alias()
Definition: generic_encoder.h:46
static int base_unique_id
Definition: generic_encoder.h:42
generic_encoder(void)
Definition: generic_encoder.h:131
generic_encoder(std::string name)
virtual int get_input_size()=0
virtual int get_output_size()=0
std::string d_name
Definition: generic_encoder.h:45
virtual bool set_frame_size(unsigned int frame_size)=0
boost::shared_ptr< generic_encoder > sptr
Definition: generic_encoder.h:49
virtual const char * get_input_conversion()
int my_id
Definition: generic_encoder.h:43
virtual const char * get_output_conversion()
#define FEC_API
Definition: gr-fec/include/gnuradio/fec/api.h:30
FEC_API int get_encoder_input_size(generic_encoder::sptr my_encoder)
FEC_API const char * get_encoder_output_conversion(generic_encoder::sptr my_encoder)
FEC_API int get_encoder_output_size(generic_encoder::sptr my_encoder)
FEC_API const char * get_encoder_input_conversion(generic_encoder::sptr my_encoder)
Include this header to use the message passing features.
Definition: basic_block.h:45
void * logger_ptr
Definition: logger.h:696