An insufficient attempt to fix the set_freq problem...
[debian/gnuradio] / usrp2 / host / lib / usrp2_impl.h
index f513cf9d38f40b0fa9dedbfc51b2395ebc05afa2..f6ba77acce1efbba602137e156f919f80fd1d81a 100644 (file)
@@ -26,6 +26,7 @@
 #include "control.h"
 #include "ring.h"
 #include <string>
+#include <iostream>
 
 namespace usrp2 {
   
@@ -83,6 +84,13 @@ namespace usrp2 {
     int                   d_tx_interp;         // shadow tx interp 
     int                   d_rx_decim;          // shadow rx decim
 
+    // FIXME KLUDGE: shadow rx streaming state
+    bool          d_rx_str_p;          // Is the rx streaming?
+    unsigned int   d_rx_str_channel;
+    unsigned int   d_rx_str_items_per_frame;
+
+    friend struct without_streaming;
+
     void inc_enqueued() {
       omni_mutex_lock l(d_enqueued_mutex);
       d_num_enqueued++;
@@ -107,6 +115,7 @@ namespace usrp2 {
     data_handler::result handle_data_packet(const void *base, size_t len);
     bool dboard_info();
 
+
   public:
     impl(const std::string &ifc, props *p);
     ~impl();
@@ -175,6 +184,30 @@ namespace usrp2 {
     bool burn_mac_addr(const std::string &new_addr);
   };
   
+
+  struct without_streaming {
+    usrp2::impl *d_impl;
+    bool        d_was_streaming;
+
+    without_streaming(usrp2::impl *p)
+      : d_impl(p), d_was_streaming(p->d_rx_str_p)
+    {
+      if (d_was_streaming){
+       std::cerr << "without_streaming: stopping streaming\n";
+       d_impl->stop_rx_streaming(d_impl->d_rx_str_channel);
+      }
+    }
+
+    ~without_streaming()
+    {
+      if (d_was_streaming){
+       std::cerr << "without_streaming: re-starting streaming\n";
+       d_impl->start_rx_streaming(d_impl->d_rx_str_channel, d_impl->d_rx_str_items_per_frame);
+      }
+    }
+  };
+
+
 } // namespace usrp2
 
 #endif /* INCLUDED_USRP2_IMPL_H */