commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r9454 - gnuradio/branches/features/gr-usrp2/gr-usrp2/s


From: jcorgan
Subject: [Commit-gnuradio] r9454 - gnuradio/branches/features/gr-usrp2/gr-usrp2/src
Date: Fri, 29 Aug 2008 21:22:51 -0600 (MDT)

Author: jcorgan
Date: 2008-08-29 21:22:50 -0600 (Fri, 29 Aug 2008)
New Revision: 9454

Modified:
   gnuradio/branches/features/gr-usrp2/gr-usrp2/src/test_gr_usrp2.cc
   gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2.i
   gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2_source_base.cc
   gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2_source_base.h
Log:
wip

Modified: gnuradio/branches/features/gr-usrp2/gr-usrp2/src/test_gr_usrp2.cc
===================================================================
--- gnuradio/branches/features/gr-usrp2/gr-usrp2/src/test_gr_usrp2.cc   
2008-08-30 00:58:33 UTC (rev 9453)
+++ gnuradio/branches/features/gr-usrp2/gr-usrp2/src/test_gr_usrp2.cc   
2008-08-30 03:22:50 UTC (rev 9454)
@@ -22,7 +22,12 @@
 
 #include <usrp2/strtod_si.h>
 #include <gruel/realtime.h>
+#include <gr_top_block.h>
 #include <usrp2_source_32fc.h>
+#include <gr_head.h>
+#include <gr_null_sink.h>
+#include <gr_file_sink.h>
+#include <sys/time.h>
 #include <string.h>
 #include <iostream>
 
@@ -44,12 +49,11 @@
   fprintf(stderr, "  -g GAIN              specify receive daughterboard gain 
[default=0]\n");
   fprintf(stderr, "  -f FREQUENCY         specify receive center frequency in 
Hz [default=0.0]\n");
   fprintf(stderr, "  -d DECIM             specify receive decimation rate 
[default=5]\n");
-#if 0
   fprintf(stderr, "  -N NSAMPLES          specify number of samples to receive 
[default=infinite]\n");
   fprintf(stderr, "  -o OUTPUT_FILENAME   specify file to receive samples 
[default=none]\n");
+#if 0
   fprintf(stderr, "  -s                   write complex<short> 
[default=complex<float>]\n");
 #endif
-  fprintf(stderr, "  -v                   verbose output\n");
 }
 
 int
@@ -61,18 +65,16 @@
   double rx_gain = 0.0;
   double rx_freq = 0.0;
   int rx_decim = 5;
+  char *output_filename = 0;
+  uint64_t nsamples = 0;
 #if 0
-  uint64_t nsamples = 0;
   bool output_shorts = false;
-  char *output_filename = 0;
 #endif
-  bool verbose = false;
 
   int ch;
 
-  //while ((ch = getopt(argc, argv, "he:m:f:d:g:N:o:sv")) != EOF){
-  while ((ch = getopt(argc, argv, "he:m:g:f:d:v")) != EOF){
-    //double tmp;
+  while ((ch = getopt(argc, argv, "he:m:g:f:d:N:o:")) != EOF){
+    double tmp;
     switch (ch){
 
     case 'e':
@@ -108,7 +110,6 @@
       }
       break;
 
-#if 0
     case 'N':
       if (!strtod_si(optarg, &tmp)) {
         std::cerr << "invalid number: " << optarg << std::endl;
@@ -118,17 +119,14 @@
       nsamples = static_cast<uint64_t>(tmp);
       break;
       
-    case 's':
-      output_shorts = true;
-      break;
-
     case 'o':
       output_filename = optarg;
       break;
-#endif      
-    case 'v':
-      verbose = true;
+#if 0
+    case 's':
+      output_shorts = true;
       break;
+#endif
 
     case 'h':
     default:
@@ -137,58 +135,84 @@
     }
   }
 
+  // Get real-time scheduling priority
   gruel::rt_status_t rt = gruel::enable_realtime_scheduling();
   if (rt != gruel::RT_OK)
     std::cerr << "Failed to enable realtime scheduling" << std::endl;
 
+  // Flow graph top block
+  gr_top_block_sptr tb = gr_make_top_block("test_gr_usrp2");
+
+  // Construct and configure a USRP2 block
   usrp2_source_32fc_sptr u2 = usrp2_make_source_32fc(interface, mac_addr_str);
 
-  if (!u2->set_gain(rx_gain)){
+  // Set the received decimation rate
+  if (!u2->set_decim(rx_decim)) {
+    fprintf(stderr, "set_decim(%d) failed\n", rx_decim);
+    exit(1);
+  }
+
+  // Set the daughterboard receive gain
+  if (!u2->set_gain(rx_gain)) {
     fprintf(stderr, "set_gain(%f) failed\n", rx_gain);
     exit(1);
   }
 
+  // Tune the receive center frequency
   usrp2::tune_result tr;
-  if (!u2->set_center_freq(rx_freq, &tr)){
+  if (!u2->set_center_freq(rx_freq, &tr)) {
     fprintf(stderr, "set_center_freq(%g) failed\n", rx_freq);
     exit(1);
   }
 
-  if (verbose){
-    printf("USRP2 MAC address: %s\n\n", u2->mac_addr().c_str());
-    printf("Daughterboard configuration:\n");
-    printf("  baseband_freq=%f\n", tr.baseband_freq);
-    printf("       ddc_freq=%f\n", tr.dxc_freq);
-    printf("  residual_freq=%f\n", tr.residual_freq);
-    printf("       inverted=%s\n\n", tr.spectrum_inverted ? "yes" : "no");
-  }
+  // Construct a file sink or null sink if no file specified
+  gr_block_sptr sink;
+  if (output_filename == 0)
+    sink = gr_make_null_sink(sizeof(gr_complex));
+  else
+    sink = gr_make_file_sink(sizeof(gr_complex), output_filename);
 
-  if (!u2->set_decim(rx_decim)) {
-    fprintf(stderr, "set_decim(%d) failed\n", rx_decim);
-    exit(1);
+  // Construct a head block if number of samples was specified
+  // Wire flowgraph
+  gr_block_sptr head;
+  if (nsamples > 0) {
+    head = gr_make_head(sizeof(gr_complex), nsamples);
+    tb->connect(u2, 0, head, 0);
+    tb->connect(head, 0, sink, 0);
   }
+  else 
+    tb->connect(u2, 0, sink, 0);
+    
+  printf("USRP2 MAC address: %s\n\n", u2->mac_addr().c_str());
+  printf("Daughterboard configuration:\n");
+  printf("  baseband_freq=%f\n", tr.baseband_freq);
+  printf("       ddc_freq=%f\n", tr.dxc_freq);
+  printf("  residual_freq=%f\n", tr.residual_freq);
+  printf("       inverted=%s\n\n", tr.spectrum_inverted ? "yes" : "no");
+  printf("USRP2 using decimation rate of %d\n", rx_decim);
 
-  if (verbose)
-    printf("USRP2 using decimation rate of %d\n", rx_decim);
+  if (nsamples > 0)
+    printf("Receiving %zd samples\n", nsamples);
+  else
+    printf("Receiving infinite samples (Ctrl-C to stop)\n");
 
-#if 0    
-  if (verbose) {
-    if (nsamples > 0)
-        printf("Receiving %zd samples\n\n", nsamples);
-    else
-        printf("Receiving infinite samples\n\n");
-  }
+  if (output_filename)
+    printf("Writing samples to %s\n", output_filename);
+  else    
+    printf("Dumping samples to null sink\n");
+
   
   struct timeval start, end;
   gettimeofday(&start, 0);
 
-  // Run flowgraph here
+  tb->run();
 
   gettimeofday(&end, 0);
   long n_usecs = end.tv_usec-start.tv_usec;
   long n_secs = end.tv_sec-start.tv_sec;
   double elapsed = (double)n_secs + (double)n_usecs*1e-6;
-#endif
 
+  printf("\nElapsed time: %.3f seconds\n", elapsed);
+
   return 0;
 }

Modified: gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2.i
===================================================================
--- gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2.i    2008-08-30 
00:58:33 UTC (rev 9453)
+++ gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2.i    2008-08-30 
03:22:50 UTC (rev 9454)
@@ -102,6 +102,8 @@
   %rename(_real_set_center_freq) set_center_freq;
   bool set_center_freq(double frequency, usrp2::tune_result *r);
   bool set_decim(int decimation_factor);
+
+  const std::string &mac_addr();
 };
 
 // create a more pythonic interface

Modified: gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2_source_base.cc
===================================================================
--- gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2_source_base.cc       
2008-08-30 00:58:33 UTC (rev 9453)
+++ gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2_source_base.cc       
2008-08-30 03:22:50 UTC (rev 9454)
@@ -66,3 +66,9 @@
 {
   return d_u2->set_rx_decim(decimation_factor);
 }
+
+const std::string &
+usrp2_source_base::mac_addr()
+{
+  return d_u2->mac_addr();
+}

Modified: gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2_source_base.h
===================================================================
--- gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2_source_base.h        
2008-08-30 00:58:33 UTC (rev 9453)
+++ gnuradio/branches/features/gr-usrp2/gr-usrp2/src/usrp2_source_base.h        
2008-08-30 03:22:50 UTC (rev 9454)
@@ -62,6 +62,11 @@
   bool set_decim(int decimation_factor);
 
   /*!
+   * \brief Get USRP2 hardware MAC address
+   */
+  const std::string &mac_addr();
+  
+  /*!
    * \brief Derived class must override this
    */
   virtual int work(int noutput_items,





reply via email to

[Prev in Thread] Current Thread [Next in Thread]