| 43 |
43 |
#include <uhd/utils/assert.hpp>
|
| 44 |
44 |
#include <uhd/utils/static.hpp>
|
| 45 |
45 |
#include <uhd/utils/algorithm.hpp>
|
|
46 |
#include <uhd/usrp/dboard_id.hpp>
|
| 46 |
47 |
#include <uhd/usrp/dboard_base.hpp>
|
| 47 |
48 |
#include <uhd/usrp/dboard_manager.hpp>
|
| 48 |
49 |
#include <boost/assign/list_of.hpp>
|
| ... | ... | |
| 65 |
66 |
static const uhd::dict<std::string, gain_range_t> rfx_tx_gain_ranges; //empty
|
| 66 |
67 |
|
| 67 |
68 |
static const uhd::dict<std::string, gain_range_t> rfx_rx_gain_ranges = map_list_of
|
|
69 |
("PGA0", gain_range_t(0, 70, float(0.022)))
|
|
70 |
;
|
|
71 |
|
|
72 |
static const uhd::dict<std::string, gain_range_t> rfx400_rx_gain_ranges = map_list_of
|
| 68 |
73 |
("PGA0", gain_range_t(0, 45, float(0.022)))
|
| 69 |
74 |
;
|
| 70 |
75 |
|
| ... | ... | |
| 88 |
93 |
|
| 89 |
94 |
private:
|
| 90 |
95 |
freq_range_t _freq_range;
|
|
96 |
uhd::dict<std::string, gain_range_t> _rx_gain_ranges;
|
| 91 |
97 |
uhd::dict<dboard_iface::unit_t, bool> _div2;
|
| 92 |
98 |
double _rx_lo_freq, _tx_lo_freq;
|
| 93 |
99 |
std::string _rx_ant;
|
| ... | ... | |
| 166 |
172 |
_div2[dboard_iface::UNIT_RX] = rx_div2;
|
| 167 |
173 |
_div2[dboard_iface::UNIT_TX] = tx_div2;
|
| 168 |
174 |
|
|
175 |
if(this->get_rx_id() == 0x0024) { //RFX400
|
|
176 |
_rx_gain_ranges = rfx400_rx_gain_ranges;
|
|
177 |
}
|
|
178 |
else {
|
|
179 |
_rx_gain_ranges = rfx_rx_gain_ranges;
|
|
180 |
}
|
|
181 |
|
|
182 |
|
| 169 |
183 |
//enable the clocks that we need
|
| 170 |
184 |
this->get_iface()->set_clock_enabled(dboard_iface::UNIT_TX, true);
|
| 171 |
185 |
this->get_iface()->set_clock_enabled(dboard_iface::UNIT_RX, true);
|
| ... | ... | |
| 193 |
207 |
set_tx_lo_freq((_freq_range.min + _freq_range.max)/2.0);
|
| 194 |
208 |
set_rx_ant("RX2");
|
| 195 |
209 |
|
| 196 |
|
BOOST_FOREACH(const std::string &name, rfx_rx_gain_ranges.keys()){
|
| 197 |
|
set_rx_gain(rfx_rx_gain_ranges[name].min, name);
|
|
210 |
BOOST_FOREACH(const std::string &name, _rx_gain_ranges.keys()){
|
|
211 |
set_rx_gain(_rx_gain_ranges[name].min, name);
|
| 198 |
212 |
}
|
| 199 |
213 |
}
|
| 200 |
214 |
|
| ... | ... | |
| 247 |
261 |
}
|
| 248 |
262 |
|
| 249 |
263 |
void rfx_xcvr::set_rx_gain(float gain, const std::string &name){
|
| 250 |
|
assert_has(rfx_rx_gain_ranges.keys(), name, "rfx rx gain name");
|
|
264 |
assert_has(_rx_gain_ranges.keys(), name, "rfx rx gain name");
|
| 251 |
265 |
if(name == "PGA0"){
|
| 252 |
266 |
float dac_volts = rx_pga0_gain_to_dac_volts(gain);
|
| 253 |
267 |
_rx_gains[name] = gain;
|
| ... | ... | |
| 402 |
416 |
return;
|
| 403 |
417 |
|
| 404 |
418 |
case SUBDEV_PROP_GAIN_RANGE:
|
| 405 |
|
assert_has(rfx_rx_gain_ranges.keys(), name, "rfx rx gain name");
|
| 406 |
|
val = rfx_rx_gain_ranges[name];
|
|
419 |
assert_has(_rx_gain_ranges.keys(), name, "rfx rx gain name");
|
|
420 |
val = _rx_gain_ranges[name];
|
| 407 |
421 |
return;
|
| 408 |
422 |
|
| 409 |
423 |
case SUBDEV_PROP_GAIN_NAMES:
|
| 410 |
|
val = prop_names_t(rfx_rx_gain_ranges.keys());
|
|
424 |
val = prop_names_t(_rx_gain_ranges.keys());
|
| 411 |
425 |
return;
|
| 412 |
426 |
|
| 413 |
427 |
case SUBDEV_PROP_FREQ:
|