Hi again,

some more improvements, this time for the tx part only. This patch saves about 
10% CPU for the test_usrp_inband_tx example.

-- 
Stefan Brüns  /  Bergstraße 21  /  52062 Aachen
phone: +49 241 53809034     mobile: +49 151 50412019
=== modified file 'usrp/host/lib/inband/symbols_usrp_rx_cs.h'
--- usrp/host/lib/inband/symbols_usrp_rx_cs.h	2007-09-05 00:43:43 +0000
+++ usrp/host/lib/inband/symbols_usrp_rx_cs.h	2009-01-26 01:54:15 +0000
@@ -25,6 +25,7 @@
 
 // Outgoing
 static pmt_t s_cmd_usrp_rx_start_reading = pmt_intern("cmd-usrp-rx-start-reading");
+static pmt_t s_cmd_usrp_rx_handle = pmt_intern("cmd-usrp-rx-handle");
 
 // Incoming
 static pmt_t s_response_usrp_rx_read = pmt_intern("response-usrp-rx-read");

=== modified file 'usrp/host/lib/inband/symbols_usrp_tx_cs.h'
--- usrp/host/lib/inband/symbols_usrp_tx_cs.h	2007-09-05 00:43:43 +0000
+++ usrp/host/lib/inband/symbols_usrp_tx_cs.h	2009-01-26 01:54:15 +0000
@@ -25,6 +25,7 @@
 
 // Outgoing
 static pmt_t s_cmd_usrp_tx_write = pmt_intern("cmd-usrp-tx-write");
+static pmt_t s_cmd_usrp_tx_handle = pmt_intern("cmd-usrp-tx-handle");
 
 // Incoming
 static pmt_t s_response_usrp_tx_write = pmt_intern("response-usrp-tx-write");

=== modified file 'usrp/host/lib/inband/usrp_rx.cc'
--- usrp/host/lib/inband/usrp_rx.cc	2009-01-12 21:31:44 +0000
+++ usrp/host/lib/inband/usrp_rx.cc	2009-01-26 01:54:15 +0000
@@ -93,6 +93,8 @@
     
     if(pmt_eqv(event, s_cmd_usrp_rx_start_reading))
       read_and_respond(data);
+    if(pmt_eqv(event, s_cmd_usrp_rx_handle))
+      d_urx = boost::any_cast<usrp_standard_rx_sptr>(pmt_any_ref(data));
   }
 }
 
@@ -115,13 +117,12 @@
   unsigned int n_read;
   unsigned int pkt_size = sizeof(transport_pkt);
 
-  pmt_t invocation_handle = pmt_nth(0, data);
-
-  // Need the handle to the RX port to send responses, this is passed
-  // by the USRP interface m-block
-  pmt_t handle = pmt_nth(1, data);
-  d_urx = 
-    boost::any_cast<usrp_standard_rx_sptr>(pmt_any_ref(handle));
+  if(!d_urx) {
+      std::cerr << "[usrp_rx] USRP RX Handle not set, shutting down\n";
+      d_cs->send(s_response_usrp_rx_read, 
+                 pmt_list3(PMT_NIL, PMT_F, PMT_NIL));
+      return;
+  }
 
   if(verbose)
     std::cout << "[usrp_rx] Waiting for packets..\n";

=== modified file 'usrp/host/lib/inband/usrp_tx.cc'
--- usrp/host/lib/inband/usrp_tx.cc	2009-01-26 01:06:02 +0000
+++ usrp/host/lib/inband/usrp_tx.cc	2009-01-26 01:54:15 +0000
@@ -83,6 +83,8 @@
     
     if(pmt_eqv(event, s_cmd_usrp_tx_write))
       write(data);
+    if(pmt_eqv(event, s_cmd_usrp_tx_handle))
+      d_utx = boost::any_cast<usrp_standard_tx_sptr>(pmt_any_ref(data));
   }
 }
 
@@ -100,7 +102,13 @@
   pmt_t invocation_handle = pmt_nth(0, data);
   pmt_t channel = pmt_nth(1, data);
   pmt_t v_packets = pmt_nth(2, data);
-  d_utx = boost::any_cast<usrp_standard_tx_sptr>(pmt_any_ref(pmt_nth(3, data)));
+
+  if(!d_utx) {
+      std::cerr << "[usrp_tx] USRP TX Handle not set, shutting down\n";
+      d_cs->send(s_response_usrp_tx_write,
+                 pmt_list3(PMT_NIL, PMT_F, PMT_NIL));
+      return;
+  }
 
   size_t n_bytes;
   bool underrun;  // this will need to go, as it is taken care of in the packet headers
@@ -114,7 +122,7 @@
 
   if (ret == (int) n_bytes) {
     if (verbose)
-      std::cout << "[usrp_server] Write of " << n_bytes << " successful\n";
+      std::cout << "[usrp_tx] Write of " << n_bytes << " successful\n";
     // need to respond with the channel so the USRP server knows who to forward the result of
     // the write to by looking up the owner of the channel
     d_cs->send(s_response_usrp_tx_write,
@@ -122,7 +130,7 @@
   }
   else {
     if (verbose)
-      std::cout << "[usrp_server] Error writing " << n_bytes << " bytes to USB bus\n";
+      std::cout << "[usrp_tx] Error writing " << n_bytes << " bytes to USB bus\n";
     d_cs->send(s_response_usrp_tx_write,
 	       pmt_list3(invocation_handle, PMT_F, channel));
   }

=== modified file 'usrp/host/lib/inband/usrp_usb_interface.cc'
--- usrp/host/lib/inband/usrp_usb_interface.cc	2009-01-26 01:06:02 +0000
+++ usrp/host/lib/inband/usrp_usb_interface.cc	2009-01-26 01:54:15 +0000
@@ -412,6 +412,11 @@
 //  d_utx->_write_oe(1, 0xffff, 0xffff);
 //  d_urx->_write_oe(1, 0xffff, 0xffff);
 
+  pmt_t tx_handle = pmt_make_any(d_utx);
+  pmt_t rx_handle = pmt_make_any(d_urx);
+  d_tx_cs->send(s_cmd_usrp_tx_handle, tx_handle);
+  d_rx_cs->send(s_cmd_usrp_rx_handle, rx_handle);
+
   d_cs->send(s_response_usrp_open, pmt_list2(invocation_handle, PMT_T));
 }
 
@@ -426,17 +431,7 @@
 void
 usrp_usb_interface::handle_cmd_write(pmt_t data)
 {
-  pmt_t invocation_handle = pmt_nth(0, data);
-  pmt_t channel = pmt_nth(1, data);
-  pmt_t pkts = pmt_nth(2, data);
-
-  pmt_t tx_handle = pmt_make_any(d_utx);
-
-  d_tx_cs->send(s_cmd_usrp_tx_write, 
-                pmt_list4(invocation_handle, 
-                          channel,
-                          pkts,
-                          tx_handle));
+  d_tx_cs->send(s_cmd_usrp_tx_write, data);
 }
 
 /*!
@@ -455,9 +450,7 @@
   if(!d_fake_usrp)
     d_urx->start();
 
-  pmt_t rx_handle = pmt_make_any(d_urx);
-
-  d_rx_cs->send(s_cmd_usrp_rx_start_reading, pmt_list2(PMT_NIL, rx_handle));
+  d_rx_cs->send(s_cmd_usrp_rx_start_reading, PMT_NIL);
 
   d_rx_reading = true;
 

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to