diff --git a/lib/hackrf/hackrf_source_c.cc b/lib/hackrf/hackrf_source_c.cc index 51268c9..2b74afb 100644 --- a/lib/hackrf/hackrf_source_c.cc +++ b/lib/hackrf/hackrf_source_c.cc @@ -176,12 +176,6 @@ hackrf_source_c::hackrf_source_c (const std::string &args) _buf[i] = (unsigned short *) malloc(_buf_len); } - ret = hackrf_start_rx( _dev, _hackrf_rx_callback, (void *)this ); - if (ret != HACKRF_SUCCESS) - std::cerr << "Failed to start streaming (" << ret << ")" << std::endl; - - while ( ! hackrf_is_streaming( _dev ) ); - // _thread = gruel::thread(_hackrf_wait, this); } @@ -191,7 +185,6 @@ hackrf_source_c::hackrf_source_c (const std::string &args) hackrf_source_c::~hackrf_source_c () { if (_dev) { - hackrf_stop_rx( _dev ); // _thread.join(); hackrf_close( _dev ); _dev = NULL; @@ -253,6 +246,38 @@ void hackrf_source_c::hackrf_wait() { } +bool hackrf_source_c::start() +{ + if ( ! _dev ) + return false; + + int ret = hackrf_start_rx( _dev, _hackrf_rx_callback, (void *)this ); + if (ret != HACKRF_SUCCESS) { + std::cerr << "Failed to start RX streaming (" << ret << ")" << std::endl; + return false; + } + + while ( ! hackrf_is_streaming( _dev ) ); + + return (bool) hackrf_is_streaming( _dev ); +} + +bool hackrf_source_c::stop() +{ + if ( ! _dev ) + return false; + + int ret = hackrf_stop_rx( _dev ); + if (ret != HACKRF_SUCCESS) { + std::cerr << "Failed to stop RX streaming (" << ret << ")" << std::endl; + return false; + } + + while ( hackrf_is_streaming( _dev ) ); + + return ! (bool) hackrf_is_streaming( _dev ); +} + int hackrf_source_c::work( int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items ) diff --git a/lib/hackrf/hackrf_source_c.h b/lib/hackrf/hackrf_source_c.h index 67dd8c6..02ff2a5 100644 --- a/lib/hackrf/hackrf_source_c.h +++ b/lib/hackrf/hackrf_source_c.h @@ -78,6 +78,9 @@ private: public: ~hackrf_source_c (); // public destructor + bool start(); + bool stop(); + int work( int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items );