aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/usrp1/usrp1_impl.cpp
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2011-10-11 12:12:25 -0700
committerJosh Blum <josh@joshknows.com>2011-11-03 20:37:12 -0700
commit5538048873f140f3ac2bbab12dc5b0729f68f1a5 (patch)
treeb59ea73c1f26adde73ff9434a0e37e8581f94517 /host/lib/usrp/usrp1/usrp1_impl.cpp
parentfce49fd66f577b92482af6ad516944befa31b861 (diff)
downloaduhd-5538048873f140f3ac2bbab12dc5b0729f68f1a5.tar.gz
uhd-5538048873f140f3ac2bbab12dc5b0729f68f1a5.tar.bz2
uhd-5538048873f140f3ac2bbab12dc5b0729f68f1a5.zip
usrp1: support variable clock rate through API
Diffstat (limited to 'host/lib/usrp/usrp1/usrp1_impl.cpp')
-rw-r--r--host/lib/usrp/usrp1/usrp1_impl.cpp36
1 files changed, 28 insertions, 8 deletions
diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp
index db652b033..5788c536f 100644
--- a/host/lib/usrp/usrp1/usrp1_impl.cpp
+++ b/host/lib/usrp/usrp1/usrp1_impl.cpp
@@ -225,14 +225,25 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
// create clock control objects
////////////////////////////////////////////////////////////////////
_master_clock_rate = 64e6;
- try{
- if (not mb_eeprom["mcr"].empty())
+ if (device_addr.has_key("mcr")){
+ try{
+ _master_clock_rate = boost::lexical_cast<double>(device_addr["mcr"]);
+ }
+ catch(const std::exception &e){
+ UHD_MSG(error) << "Error parsing FPGA clock rate from device address: " << e.what() << std::endl;
+ }
+ }
+ else if (not mb_eeprom["mcr"].empty()){
+ try{
_master_clock_rate = boost::lexical_cast<double>(mb_eeprom["mcr"]);
- }catch(const std::exception &e){
- UHD_MSG(error) << "Error parsing FPGA clock rate from EEPROM: " << e.what() << std::endl;
+ }
+ catch(const std::exception &e){
+ UHD_MSG(error) << "Error parsing FPGA clock rate from EEPROM: " << e.what() << std::endl;
+ }
}
UHD_MSG(status) << boost::format("Using FPGA clock rate of %fMHz...") % (_master_clock_rate/1e6) << std::endl;
- _tree->create<double>(mb_path / "tick_rate").set(_master_clock_rate);
+ _tree->create<double>(mb_path / "tick_rate")
+ .subscribe(boost::bind(&usrp1_impl::update_tick_rate, this, _1));
////////////////////////////////////////////////////////////////////
// create codec control objects
@@ -278,7 +289,7 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
_tree->create<double>(rx_dsp_path / "freq/value")
.coerce(boost::bind(&usrp1_impl::update_rx_dsp_freq, this, dspno, _1));
_tree->create<meta_range_t>(rx_dsp_path / "freq/range")
- .set(meta_range_t(-_master_clock_rate/2, +_master_clock_rate/2));
+ .publish(boost::bind(&usrp1_impl::get_rx_dsp_freq_range, this));
_tree->create<stream_cmd_t>(rx_dsp_path / "stream_cmd");
if (dspno == 0){
//only subscribe the callback for dspno 0 since it will stream all dsps
@@ -298,8 +309,8 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
.coerce(boost::bind(&usrp1_impl::update_tx_samp_rate, this, dspno, _1));
_tree->create<double>(tx_dsp_path / "freq/value")
.coerce(boost::bind(&usrp1_impl::update_tx_dsp_freq, this, dspno, _1));
- _tree->create<meta_range_t>(tx_dsp_path / "freq/range") //magic scalar comes from codec control:
- .set(meta_range_t(-_master_clock_rate*0.6875, +_master_clock_rate*0.6875));
+ _tree->create<meta_range_t>(tx_dsp_path / "freq/range")
+ .publish(boost::bind(&usrp1_impl::get_tx_dsp_freq_range, this));
}
////////////////////////////////////////////////////////////////////
@@ -443,3 +454,12 @@ double usrp1_impl::update_rx_codec_gain(const std::string &db, const double gain
_dbc[db].codec->set_rx_pga_gain(gain, 'B');
return _dbc[db].codec->get_rx_pga_gain('A');
}
+
+uhd::meta_range_t usrp1_impl::get_rx_dsp_freq_range(void){
+ return meta_range_t(-_master_clock_rate/2, +_master_clock_rate/2);
+}
+
+uhd::meta_range_t usrp1_impl::get_tx_dsp_freq_range(void){
+ //magic scalar comes from codec control:
+ return meta_range_t(-_master_clock_rate*0.6875, +_master_clock_rate*0.6875);
+}