blob: ee8d0ae0fe285fd1666f9145284b970c07871689 [file] [log] [blame]
piotr4089c1a2014-08-06 14:10:56 +02001/* -*- c++ -*- */
ptrkrysik529895b2014-12-02 18:07:38 +01002/*
3 * @file
4 * @author Piotr Krysik <ptrkrysik@gmail.com>
5 * @section LICENSE
6 *
7 * Gr-gsm is free software; you can redistribute it and/or modify
piotr4089c1a2014-08-06 14:10:56 +02008 * 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.
ptrkrysik529895b2014-12-02 18:07:38 +010011 *
12 * Gr-gsm is distributed in the hope that it will be useful,
piotr4089c1a2014-08-06 14:10:56 +020013 * 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.
ptrkrysik529895b2014-12-02 18:07:38 +010016 *
piotr4089c1a2014-08-06 14:10:56 +020017 * You should have received a copy of the GNU General Public License
ptrkrysik529895b2014-12-02 18:07:38 +010018 * along with gr-gsm; see the file COPYING. If not, write to
piotr4089c1a2014-08-06 14:10:56 +020019 * the Free Software Foundation, Inc., 51 Franklin Street,
20 * Boston, MA 02110-1301, USA.
21 */
22
23#ifdef HAVE_CONFIG_H
24#include "config.h"
25#endif
26
27#include <gnuradio/io_signature.h>
28#include "controlled_const_source_f_impl.h"
29
30namespace gr {
31 namespace gsm {
32
33 controlled_const_source_f::sptr
34 controlled_const_source_f::make(float constant)
35 {
36 return gnuradio::get_initial_sptr
37 (new controlled_const_source_f_impl(constant));
38 }
39
40 void controlled_const_source_f_impl::set_constant_msg(pmt::pmt_t msg){
41 if(pmt::is_real(msg)){
42 set_constant(pmt::to_double(msg));
43 }
44 }
45
46 /*
47 * The private constructor
48 */
49 controlled_const_source_f_impl::controlled_const_source_f_impl(float constant)
50 : gr::sync_block("controlled_const_source_f",
51 gr::io_signature::make(0, 0, 0),
52 gr::io_signature::make(1, 1, sizeof(float)))
53 {
54 set_constant(constant);
55 message_port_register_in(pmt::mp("constant_msg"));
56 set_msg_handler(pmt::mp("constant_msg"), boost::bind(&controlled_const_source_f_impl::set_constant_msg, this, _1));
57 }
58
59 /*
60 * Our virtual destructor.
61 */
62 controlled_const_source_f_impl::~controlled_const_source_f_impl()
63 {
64 }
65
66 int
67 controlled_const_source_f_impl::work(int noutput_items,
68 gr_vector_const_void_star &input_items,
69 gr_vector_void_star &output_items)
70 {
71 float *optr = (float*)output_items[0];
72 float t;
73
74 t = d_constant;
75 std::fill_n(optr, noutput_items, t);
76
77 return noutput_items;
78 }
79
80 void controlled_const_source_f_impl::set_constant(float constant){
81 d_constant = constant;
82 }
piotr4089c1a2014-08-06 14:10:56 +020083
84 } /* namespace gsm */
85} /* namespace gr */
86