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