aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDimitri Stolnikov <horiz0n@gmx.net>2013-06-07 22:37:29 +0200
committerDimitri Stolnikov <horiz0n@gmx.net>2013-06-07 22:37:29 +0200
commit2cd4126288dc1b6e42165be57fb5beb3dae48aa0 (patch)
tree633391b5158cc1a3b1f1f3fff3c3d38bc8e42f02 /lib
parentb59b0080f5061e09cc3d2071b8bba7f554dec83a (diff)
hackrf: add fractional sample rate support introduced in libhackrf
d9c46cbdac
Diffstat (limited to 'lib')
-rw-r--r--lib/hackrf/hackrf_sink_c.cc9
-rw-r--r--lib/hackrf/hackrf_source_c.cc9
2 files changed, 14 insertions, 4 deletions
diff --git a/lib/hackrf/hackrf_sink_c.cc b/lib/hackrf/hackrf_sink_c.cc
index 6d33dde..d9865a2 100644
--- a/lib/hackrf/hackrf_sink_c.cc
+++ b/lib/hackrf/hackrf_sink_c.cc
@@ -474,6 +474,10 @@ osmosdr::meta_range_t hackrf_sink_c::get_sample_rates()
{
osmosdr::meta_range_t range;
+ /* we only add integer rates here because of better phase noise performance.
+ * the user is allowed to request arbitrary (fractional) rates within these
+ * boundaries. */
+
range += osmosdr::range_t( 8e6 );
range += osmosdr::range_t( 10e6 );
range += osmosdr::range_t( 12.5e6 );
@@ -488,12 +492,13 @@ double hackrf_sink_c::set_sample_rate( double rate )
int ret;
if (_dev) {
- ret = hackrf_sample_rate_set( _dev, uint32_t(rate) );
+ //ret = hackrf_sample_rate_set( _dev, uint32_t(rate) );
+ ret = hackrf_set_fracrate( _dev, float(rate/1e6) );
if ( HACKRF_SUCCESS == ret ) {
_sample_rate = rate;
set_bandwidth( rate );
} else {
- HACKRF_THROW_ON_ERROR( ret, HACKRF_FUNC_STR( "hackrf_sample_rate_set", rate ) )
+ HACKRF_THROW_ON_ERROR( ret, HACKRF_FUNC_STR( "hackrf_set_fracrate", rate ) )
}
}
diff --git a/lib/hackrf/hackrf_source_c.cc b/lib/hackrf/hackrf_source_c.cc
index 767679e..fd4ee76 100644
--- a/lib/hackrf/hackrf_source_c.cc
+++ b/lib/hackrf/hackrf_source_c.cc
@@ -366,6 +366,10 @@ osmosdr::meta_range_t hackrf_source_c::get_sample_rates()
{
osmosdr::meta_range_t range;
+ /* we only add integer rates here because of better phase noise performance.
+ * the user is allowed to request arbitrary (fractional) rates within these
+ * boundaries. */
+
range += osmosdr::range_t( 8e6 );
range += osmosdr::range_t( 10e6 );
range += osmosdr::range_t( 12.5e6 );
@@ -380,12 +384,13 @@ double hackrf_source_c::set_sample_rate( double rate )
int ret;
if (_dev) {
- ret = hackrf_sample_rate_set( _dev, uint32_t(rate) );
+ //ret = hackrf_sample_rate_set( _dev, uint32_t(rate) );
+ ret = hackrf_set_fracrate( _dev, float(rate/1e6) );
if ( HACKRF_SUCCESS == ret ) {
_sample_rate = rate;
set_bandwidth( rate );
} else {
- HACKRF_THROW_ON_ERROR( ret, HACKRF_FUNC_STR( "hackrf_sample_rate_set", rate ) )
+ HACKRF_THROW_ON_ERROR( ret, HACKRF_FUNC_STR( "hackrf_set_fracrate", rate ) )
}
}