1 /* -*- c++ -*- */
2 /*
3  * Copyright 2010-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 // Defined during configure; avoids trying to locate
24 // header files if UHD was not installed.
25 #ifdef GR_HAVE_UHD
26 
27 #define GR_UHD_API
28 
29 #include <uhd/version.hpp>
30 
31 //suppress 319. No access specifier given for base class name (ignored).
32 #pragma SWIG nowarn=319
33 
34 ////////////////////////////////////////////////////////////////////////
35 // standard includes
36 ////////////////////////////////////////////////////////////////////////
37 
38 %include <std_vector.i>
39 %include "gnuradio.i"
40 
41 //load generated python docstrings
42 %include "uhd_swig_doc.i"
43 
44 ////////////////////////////////////////////////////////////////////////
45 // SWIG should not see the uhd::usrp::multi_usrp class
46 ////////////////////////////////////////////////////////////////////////
47 %ignore gr::uhd::usrp_sink::get_device;
48 %ignore gr::uhd::usrp_source::get_device;
49 
50 ////////////////////////////////////////////////////////////////////////
51 // block headers
52 ////////////////////////////////////////////////////////////////////////
53 %{
54 #include <gnuradio/uhd/usrp_source.h>
55 #include <gnuradio/uhd/usrp_sink.h>
56 #include <gnuradio/uhd/amsg_source.h>
57 %}
58 
59 %include "gnuradio/uhd/usrp_block.h"
60 
61 ////////////////////////////////////////////////////////////////////////
62 // used types
63 ////////////////////////////////////////////////////////////////////////
64 
65 %template(uhd_string_vector_t) std::vector<std::string>;
66 
67 %template(uhd_size_vector_t) std::vector<size_t>;
68 
69 %include <uhd/config.hpp>
70 
71 %include <uhd/utils/pimpl.hpp>
72 
73 %ignore uhd::dict::operator[]; //ignore warnings about %extend
74 %include <uhd/types/dict.hpp>
75 %template(string_string_dict_t) uhd::dict<std::string, std::string>; //define after dict
76 
77 %extend uhd::dict<std::string, std::string>{
__getitem__(std::string key)78     std::string __getitem__(std::string key) {return (*self)[key];}
__setitem__(std::string key,std::string val)79     void __setitem__(std::string key, std::string val) {(*self)[key] = val;}
80 };
81 
82 %include <uhd/types/device_addr.hpp>
83 
84 %template(range_vector_t) std::vector<uhd::range_t>; //define before range
85 %include <uhd/types/ranges.hpp>
86 
87 %include <uhd/types/tune_request.hpp>
88 
89 %include <uhd/types/tune_result.hpp>
90 
91 %include <uhd/types/time_spec.hpp>
92 
93 %extend uhd::time_spec_t{
__add__(const uhd::time_spec_t & what)94     uhd::time_spec_t __add__(const uhd::time_spec_t &what)
95     {
96         uhd::time_spec_t temp = *self;
97         temp += what;
98         return temp;
99     }
__sub__(const uhd::time_spec_t & what)100     uhd::time_spec_t __sub__(const uhd::time_spec_t &what)
101     {
102         uhd::time_spec_t temp = *self;
103         temp -= what;
104         return temp;
105     }
__eq__(const uhd::time_spec_t & what)106     bool __eq__(const uhd::time_spec_t &what)
107     {
108       return (what == *self);
109     }
110 };
111 
112 %include <uhd/types/stream_cmd.hpp>
113 
114 %include <uhd/types/metadata.hpp>
115 
116 %template(device_addr_vector_t) std::vector<uhd::device_addr_t>;
117 
118 %include <uhd/types/sensors.hpp>
119 
120 %include <uhd/stream.hpp>
121 
122 %include <uhd/types/filters.hpp>
123 
124 %include stdint.i
125 
126 // Used for lists of filter taps
127 %template(uhd_vector_int16_t) std::vector<int16_t>;
128 
129 ////////////////////////////////////////////////////////////////////////
130 // swig dboard_iface for python access
131 ////////////////////////////////////////////////////////////////////////
132 %include <uhd/types/serial.hpp>
133 %include <uhd/usrp/dboard_iface.hpp>
134 
135 #if UHD_VERSION < 4000000
136 
137 %template(filter_info_base_sptr) boost::shared_ptr<uhd::filter_info_base>;
138 %template(analog_filter_base_stpr) boost::shared_ptr<uhd::analog_filter_base>;
139 %template(analog_filter_lp_stpr) boost::shared_ptr<uhd::analog_filter_lp>;
140 %template(digital_filter_base_int16_t_sptr) boost::shared_ptr<uhd::digital_filter_base<int16_t>>;
141 %template(digital_filter_fir_int16_t_sptr) boost::shared_ptr<uhd::digital_filter_fir<int16_t>>;
142 
143 %extend uhd::filter_info_base{
to_analog_info_base(boost::shared_ptr<uhd::filter_info_base> ptr)144     boost::shared_ptr<uhd::analog_filter_base> to_analog_info_base(boost::shared_ptr<uhd::filter_info_base> ptr) {
145        return boost::dynamic_pointer_cast<uhd::analog_filter_base>(ptr);
146     }
147 
to_analog_filter_lp(boost::shared_ptr<uhd::filter_info_base> ptr)148     boost::shared_ptr<uhd::analog_filter_lp> to_analog_filter_lp(boost::shared_ptr<uhd::filter_info_base> ptr) {
149        return boost::dynamic_pointer_cast<uhd::analog_filter_lp>(ptr);
150     }
151 
to_digital_filter_base_int16(boost::shared_ptr<uhd::filter_info_base> ptr)152     boost::shared_ptr<uhd::digital_filter_base<int16_t>> to_digital_filter_base_int16(boost::shared_ptr<uhd::filter_info_base> ptr) {
153        return boost::dynamic_pointer_cast<uhd::digital_filter_base<int16_t>>(ptr);
154     }
155 
to_digital_filter_fir_int16(boost::shared_ptr<uhd::filter_info_base> ptr)156     boost::shared_ptr<uhd::digital_filter_fir<int16_t>> to_digital_filter_fir_int16(boost::shared_ptr<uhd::filter_info_base> ptr) {
157        return boost::dynamic_pointer_cast<uhd::digital_filter_fir<int16_t>>(ptr);
158     }
159 }
160 
161 %template(dboard_iface_sptr) boost::shared_ptr<uhd::usrp::dboard_iface>;
162 
163 #else
164 
165 %template(filter_info_base_sptr) std::shared_ptr<uhd::filter_info_base>;
166 %template(analog_filter_base_stpr) std::shared_ptr<uhd::analog_filter_base>;
167 %template(analog_filter_lp_stpr) std::shared_ptr<uhd::analog_filter_lp>;
168 %template(digital_filter_base_int16_t_sptr) std::shared_ptr<uhd::digital_filter_base<int16_t>>;
169 %template(digital_filter_fir_int16_t_sptr) std::shared_ptr<uhd::digital_filter_fir<int16_t>>;
170 
171 %extend uhd::filter_info_base{
172     std::shared_ptr<uhd::analog_filter_base> to_analog_info_base(std::shared_ptr<uhd::filter_info_base> ptr) {
173        return std::dynamic_pointer_cast<uhd::analog_filter_base>(ptr);
174     }
175 
176     std::shared_ptr<uhd::analog_filter_lp> to_analog_filter_lp(std::shared_ptr<uhd::filter_info_base> ptr) {
177        return std::dynamic_pointer_cast<uhd::analog_filter_lp>(ptr);
178     }
179 
180     std::shared_ptr<uhd::digital_filter_base<int16_t>> to_digital_filter_base_int16(std::shared_ptr<uhd::filter_info_base> ptr) {
181        return std::dynamic_pointer_cast<uhd::digital_filter_base<int16_t>>(ptr);
182     }
183 
184     std::shared_ptr<uhd::digital_filter_fir<int16_t>> to_digital_filter_fir_int16(std::shared_ptr<uhd::filter_info_base> ptr) {
185        return std::dynamic_pointer_cast<uhd::digital_filter_fir<int16_t>>(ptr);
186     }
187 
188 %template(dboard_iface_sptr) std::shared_ptr<uhd::usrp::dboard_iface>;
189 
190 }
191 
192 #endif
193 
194 ////////////////////////////////////////////////////////////////////////
195 // block magic
196 ////////////////////////////////////////////////////////////////////////
197 %include <gnuradio/uhd/usrp_source.h>
198 %include <gnuradio/uhd/usrp_sink.h>
199 %include <gnuradio/uhd/amsg_source.h>
200 
201 GR_SWIG_BLOCK_MAGIC2(uhd, usrp_source)
202 GR_SWIG_BLOCK_MAGIC2(uhd, usrp_sink)
203 GR_SWIG_BLOCK_MAGIC2(uhd, amsg_source)
204 
205 ////////////////////////////////////////////////////////////////////////
206 // device discovery (no need to %include device.hpp)
207 ////////////////////////////////////////////////////////////////////////
208 %{
209 static uhd::device_addrs_t find_devices_raw(const uhd::device_addr_t &dev_addr = uhd::device_addr_t()){
210     return uhd::device::find(dev_addr);
211 }
212 %}
213 
214 static uhd::device_addrs_t find_devices_raw(const uhd::device_addr_t &dev_addr = uhd::device_addr_t());
215 
216 ////////////////////////////////////////////////////////////////////////
217 // helpful constants
218 ////////////////////////////////////////////////////////////////////////
219 %{
220 static const size_t ALL_MBOARDS = uhd::usrp::multi_usrp::ALL_MBOARDS;
221 static const size_t ALL_CHANS = uhd::usrp::multi_usrp::ALL_CHANS;
222 static const std::string ALL_GAINS = uhd::usrp::multi_usrp::ALL_GAINS;
223 
224 #ifdef UHD_USRP_MULTI_USRP_LO_CONFIG_API
225 static const std::string ALL_LOS = uhd::usrp::multi_usrp::ALL_LOS;
226 #else
227 static const std::string ALL_LOS;
228 #endif
229 %}
230 
231 static const size_t ALL_MBOARDS;
232 static const size_t ALL_CHANS;
233 static const std::string ALL_GAINS;
234 static const std::string ALL_LOS;
235 
236 %{
237 #include <uhd/version.hpp>
get_version_string(void)238 std::string get_version_string(void){
239     return uhd::get_version_string();
240 }
241 %}
242 std::string get_version_string(void);
243 
244 #endif  /* GR_HAVE_UHD */
245