aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/cores
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2011-10-16 10:43:48 -0700
committerJosh Blum <josh@joshknows.com>2011-11-03 20:37:13 -0700
commitae9e89d76b2eb86a29995f04aaab1aa59ee93f04 (patch)
tree29b37a85c2779c9d3abca81028396f5e4cbdcebc /host/lib/usrp/cores
parentfe204a322ecbba4dd8b195987667651f0a1b7c80 (diff)
downloaduhd-ae9e89d76b2eb86a29995f04aaab1aa59ee93f04.tar.gz
uhd-ae9e89d76b2eb86a29995f04aaab1aa59ee93f04.tar.bz2
uhd-ae9e89d76b2eb86a29995f04aaab1aa59ee93f04.zip
usrp: added get_tx/rx_rates
Diffstat (limited to 'host/lib/usrp/cores')
-rw-r--r--host/lib/usrp/cores/rx_dsp_core_200.cpp21
-rw-r--r--host/lib/usrp/cores/rx_dsp_core_200.hpp2
-rw-r--r--host/lib/usrp/cores/tx_dsp_core_200.cpp21
-rw-r--r--host/lib/usrp/cores/tx_dsp_core_200.hpp2
4 files changed, 36 insertions, 10 deletions
diff --git a/host/lib/usrp/cores/rx_dsp_core_200.cpp b/host/lib/usrp/cores/rx_dsp_core_200.cpp
index b121bc849..6d306d507 100644
--- a/host/lib/usrp/cores/rx_dsp_core_200.cpp
+++ b/host/lib/usrp/cores/rx_dsp_core_200.cpp
@@ -134,12 +134,23 @@ public:
_link_rate = rate/sizeof(boost::uint16_t); //in samps/s (allows for 8sc)
}
+ uhd::meta_range_t get_host_rates(void){
+ meta_range_t range;
+ for (int rate = 512; rate > 256; rate -= 4){
+ range.push_back(range_t(_tick_rate/rate));
+ }
+ for (int rate = 256; rate > 128; rate -= 2){
+ range.push_back(range_t(_tick_rate/rate));
+ }
+ for (int rate = 128; rate >= int(std::ceil(_tick_rate/_link_rate)); rate -= 1){
+ range.push_back(range_t(_tick_rate/rate));
+ }
+ return range;
+ }
+
double set_host_rate(const double rate){
- size_t decim_rate = uhd::clip<size_t>(
- boost::math::iround(_tick_rate/rate), size_t(std::ceil(_tick_rate/_link_rate)), 512
- );
- if (decim_rate > 128) decim_rate &= ~0x1; //CIC up to 128, have to use 1 HB
- if (decim_rate > 256) decim_rate &= ~0x3; //CIC up to 128, have to use 2 HB
+ const size_t decim_rate = this->get_host_rates().clip(
+ boost::math::iround(_tick_rate/rate), true);
size_t decim = decim_rate;
//determine which half-band filters are activated
diff --git a/host/lib/usrp/cores/rx_dsp_core_200.hpp b/host/lib/usrp/cores/rx_dsp_core_200.hpp
index ddd6f2abf..89b8c1f51 100644
--- a/host/lib/usrp/cores/rx_dsp_core_200.hpp
+++ b/host/lib/usrp/cores/rx_dsp_core_200.hpp
@@ -48,6 +48,8 @@ public:
virtual double set_host_rate(const double rate) = 0;
+ virtual uhd::meta_range_t get_host_rates(void) = 0;
+
virtual double get_scaling_adjustment(void) = 0;
virtual uhd::meta_range_t get_freq_range(void) = 0;
diff --git a/host/lib/usrp/cores/tx_dsp_core_200.cpp b/host/lib/usrp/cores/tx_dsp_core_200.cpp
index f37b53527..1d571ea7c 100644
--- a/host/lib/usrp/cores/tx_dsp_core_200.cpp
+++ b/host/lib/usrp/cores/tx_dsp_core_200.cpp
@@ -74,12 +74,23 @@ public:
_link_rate = rate/sizeof(boost::uint16_t); //in samps/s (allows for 8sc)
}
+ uhd::meta_range_t get_host_rates(void){
+ meta_range_t range;
+ for (int rate = 512; rate > 256; rate -= 4){
+ range.push_back(range_t(_tick_rate/rate));
+ }
+ for (int rate = 256; rate > 128; rate -= 2){
+ range.push_back(range_t(_tick_rate/rate));
+ }
+ for (int rate = 128; rate >= int(std::ceil(_tick_rate/_link_rate)); rate -= 1){
+ range.push_back(range_t(_tick_rate/rate));
+ }
+ return range;
+ }
+
double set_host_rate(const double rate){
- size_t interp_rate = uhd::clip<size_t>(
- boost::math::iround(_tick_rate/rate), size_t(std::ceil(_tick_rate/_link_rate)), 512
- );
- if (interp_rate > 128) interp_rate &= ~0x1; //CIC up to 128, have to use 1 HB
- if (interp_rate > 256) interp_rate &= ~0x3; //CIC up to 128, have to use 2 HB
+ const size_t interp_rate = this->get_host_rates().clip(
+ boost::math::iround(_tick_rate/rate), true);
size_t interp = interp_rate;
//determine which half-band filters are activated
diff --git a/host/lib/usrp/cores/tx_dsp_core_200.hpp b/host/lib/usrp/cores/tx_dsp_core_200.hpp
index 65f822558..e6be63557 100644
--- a/host/lib/usrp/cores/tx_dsp_core_200.hpp
+++ b/host/lib/usrp/cores/tx_dsp_core_200.hpp
@@ -40,6 +40,8 @@ public:
virtual double set_host_rate(const double rate) = 0;
+ virtual uhd::meta_range_t get_host_rates(void) = 0;
+
virtual uhd::meta_range_t get_freq_range(void) = 0;
virtual double set_freq(const double freq) = 0;