commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r10488 - in gnuradio/branches/releases/3.2/usrp2: firm


From: jcorgan
Subject: [Commit-gnuradio] r10488 - in gnuradio/branches/releases/3.2/usrp2: firmware/apps firmware/include firmware/lib fpga/timing host/apps host/apps/bitrot host/include/usrp2 host/lib
Date: Mon, 23 Feb 2009 15:50:48 -0700 (MST)

Author: jcorgan
Date: 2009-02-23 15:50:47 -0700 (Mon, 23 Feb 2009)
New Revision: 10488

Added:
   gnuradio/branches/releases/3.2/usrp2/host/apps/bitrot/
   gnuradio/branches/releases/3.2/usrp2/host/apps/bitrot/rx_samples.cc
Removed:
   gnuradio/branches/releases/3.2/usrp2/host/apps/bitrot/rx_samples.cc
   gnuradio/branches/releases/3.2/usrp2/host/apps/rx_samples.cc
Modified:
   gnuradio/branches/releases/3.2/usrp2/firmware/apps/app_common_v2.c
   gnuradio/branches/releases/3.2/usrp2/firmware/include/usrp2_eth_packet.h
   gnuradio/branches/releases/3.2/usrp2/firmware/lib/memory_map.h
   gnuradio/branches/releases/3.2/usrp2/fpga/timing/time_sync.v
   gnuradio/branches/releases/3.2/usrp2/host/include/usrp2/usrp2.h
   gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2.cc
   gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2_impl.cc
   gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2_impl.h
Log:
Merged r10424, r10426 from trunk into release 3.2 branch

Modified: gnuradio/branches/releases/3.2/usrp2/firmware/apps/app_common_v2.c
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/firmware/apps/app_common_v2.c  
2009-02-23 22:39:24 UTC (rev 10487)
+++ gnuradio/branches/releases/3.2/usrp2/firmware/apps/app_common_v2.c  
2009-02-23 22:50:47 UTC (rev 10488)
@@ -55,6 +55,18 @@
 }
 
 static bool
+sync_every_pps(const op_generic_t *p)
+{
+  // FIXME use bit fields or defined masks
+  if (p->ok)
+    timesync_regs->tick_control |= 16;
+  else
+    timesync_regs->tick_control &= ~16;
+
+  return true;
+}
+
+static bool
 config_mimo_cmd(const op_config_mimo_t *p)
 {
   clocks_mimo_config(p->flags);
@@ -505,6 +517,11 @@
       subpktlen = generic_reply(gp, reply_payload, reply_payload_space, true);
       break;
 
+    case OP_SYNC_EVERY_PPS:
+      subpktlen = generic_reply(gp, reply_payload, reply_payload_space,
+                               sync_every_pps((op_generic_t *) payload));
+      break;
+
     default:
       printf("app_common_v2: unhandled opcode = %d\n", gp->opcode);
       break;

Modified: 
gnuradio/branches/releases/3.2/usrp2/firmware/include/usrp2_eth_packet.h
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/firmware/include/usrp2_eth_packet.h    
2009-02-23 22:39:24 UTC (rev 10487)
+++ gnuradio/branches/releases/3.2/usrp2/firmware/include/usrp2_eth_packet.h    
2009-02-23 22:50:47 UTC (rev 10488)
@@ -195,6 +195,8 @@
 #define OP_SET_RX_LO_OFFSET_REPLY    (OP_SET_RX_LO_OFFSET | OP_REPLY_BIT)
 #define OP_RESET_DB                  15
 #define OP_RESET_DB_REPLY            (OP_RESET_DB | OP_REPLY_BIT)
+#define OP_SYNC_EVERY_PPS            16
+#define OP_SYNC_EVERY_PPS_REPLY      (OP_SYNC_EVERY_PPS | OP_REPLY_BIT)
 
 /*
  * All subpackets are a multiple of 4 bytes long.

Modified: gnuradio/branches/releases/3.2/usrp2/firmware/lib/memory_map.h
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/firmware/lib/memory_map.h      
2009-02-23 22:39:24 UTC (rev 10487)
+++ gnuradio/branches/releases/3.2/usrp2/firmware/lib/memory_map.h      
2009-02-23 22:50:47 UTC (rev 10488)
@@ -629,6 +629,25 @@
 #define TIMESYNC_BASE  0xE800
 
 typedef struct {
+  /*!
+   * \brief Time sync configuration.
+   *
+   * <pre>
+   *
+   *    3                   2                   1                       
+   *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   * +-----------------------------------------------------+-+-+-+-+-+
+   * |                                                     |T|G|X|I|S|
+   * +-----------------------------------------------------+-+-+-+-+-+
+   *
+   * S - Tick source (0 = free run, 1 = pps, default=0)
+   * I - Tick interrupt enable (not implemented)
+   * X - Use external sync source (default=1)
+   * G - PPS edge selection (0=negedge, 1=posedge, default=0)
+   * T - Trigger sync every pps edge (default=0)
+   *
+   * </pre>
+   */
   volatile uint32_t tick_control;
   volatile uint32_t tick_interval;
   volatile uint32_t delta_time;

Modified: gnuradio/branches/releases/3.2/usrp2/fpga/timing/time_sync.v
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/fpga/timing/time_sync.v        
2009-02-23 22:39:24 UTC (rev 10487)
+++ gnuradio/branches/releases/3.2/usrp2/fpga/timing/time_sync.v        
2009-02-23 22:50:47 UTC (rev 10488)
@@ -22,6 +22,7 @@
    reg                tick_int_enable, tick_source, external_sync;
    reg [31:0]  tick_interval;
    reg                sync_on_next_pps;
+   reg         sync_every_pps;
    reg                pps_edge;
    
    // Generate master time
@@ -30,7 +31,7 @@
        master_time <= 0;
      else if(external_sync & sync_rcvd)
        master_time <= master_time_rcvd + delta_time;
-     else if(pps_ext & sync_on_next_pps)
+     else if(pps_ext & (sync_on_next_pps|sync_every_pps))
        master_time <= 0;
      else
        master_time <= master_time + 1;
@@ -62,6 +63,7 @@
          tick_interval <= 100000-1;  // default to 1K times per second
          delta_time <= 0;
          pps_edge <= 0;
+         sync_every_pps <= 0;
        end
      else if(wb_write)
        case(adr_i[2:0])
@@ -71,6 +73,7 @@
              tick_int_enable <= dat_i[1];
              external_sync <= dat_i[2];
              pps_edge <= dat_i[3];
+             sync_every_pps <= dat_i[4];
           end
         3'd1 :
           tick_interval <= dat_i;

Copied: gnuradio/branches/releases/3.2/usrp2/host/apps/bitrot (from rev 10426, 
gnuradio/trunk/usrp2/host/apps/bitrot)

Deleted: gnuradio/branches/releases/3.2/usrp2/host/apps/bitrot/rx_samples.cc

Copied: gnuradio/branches/releases/3.2/usrp2/host/apps/bitrot/rx_samples.cc 
(from rev 10426, gnuradio/trunk/usrp2/host/apps/bitrot/rx_samples.cc)
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/host/apps/bitrot/rx_samples.cc         
                (rev 0)
+++ gnuradio/branches/releases/3.2/usrp2/host/apps/bitrot/rx_samples.cc 
2009-02-23 22:50:47 UTC (rev 10488)
@@ -0,0 +1,382 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2007 Free Software Foundation, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "usrp2_basic.h"
+#include <iostream>
+#include <complex>
+#include <getopt.h>
+#include <string.h>
+#include "strtod_si.h"
+#include <signal.h>
+#include <stdexcept>
+#include "gri_if_stats.h"
+#include <gr_realtime.h>
+
+
+typedef std::complex<float> fcomplex;
+
+static volatile bool signaled = false;
+
+static void 
+sig_handler(int sig)
+{
+  signaled = true;
+}
+
+static void
+install_sig_handler(int signum,
+                   void (*new_handler)(int))
+{
+  struct sigaction new_action;
+  memset (&new_action, 0, sizeof (new_action));
+
+  new_action.sa_handler = new_handler;
+  sigemptyset (&new_action.sa_mask);
+  new_action.sa_flags = 0;
+
+  if (sigaction (signum, &new_action, 0) < 0){
+    perror ("sigaction (install new)");
+    throw std::runtime_error ("sigaction");
+  }
+}
+
+
+/*
+ * Vectorize me!
+ */
+void
+convert_samples_to_complex(size_t nsamples,
+                          uint32_t *i_samples,
+                          fcomplex *c_samples)
+{
+  uint32_t *p = i_samples;
+  for (size_t i = 0; i < nsamples; i++){
+    int16_t  si = ((int16_t) (p[i] >> 16));
+    int16_t  sq = ((int16_t) (p[i] & 0xffff));
+    c_samples[i] = fcomplex((float) si, (float) sq);
+  }
+}
+
+
+static void
+usage(const char *progname)
+{
+  const char *p = strrchr(progname, '/');      // drop leading directory path
+  if (p)
+    p++;
+
+  if (strncmp(p, "lt-", 3) == 0)               // drop lt- libtool prefix
+    p += 3;
+  
+  fprintf(stderr, "Usage: %s [options]\n\n", p);
+  fprintf(stderr, "Options:\n");
+  fprintf(stderr, "  -h                   show this message and exit\n");
+  fprintf(stderr, "  -e ETH_INTERFACE     specify ethernet interface 
[default=eth0]\n");
+  fprintf(stderr, "  -m MAC_ADDR          mac address of USRP2 HH:HH 
[default=first one found]\n");
+  fprintf(stderr, "  -o OUTPUT_FILE       set output filename 
[default=NONE]\n");
+  fprintf(stderr, "  -f FREQ              set frequency to FREQ 
[default=0]\n");
+  fprintf(stderr, "  -d DECIM             set decimation rate to DECIM 
[default=32]\n");
+  fprintf(stderr, "  -N NSAMPLES          total number of samples to receive 
[default=2.5e6]\n");
+  fprintf(stderr, "  -F SAMPLES_PER_FRAME number of samples in each frame 
[default=371]\n");
+  fprintf(stderr, "  -S SCALE             fpga scaling factor for I & Q 
[default=1024]\n");
+  fprintf(stderr, "  -M DONT_LOCK|LOCK_TO_SMA|LOCK_TO_MIMO   specify MIMO 
clock source\n");
+  fprintf(stderr, "  -P                   provide clock to MIMO connector\n");
+}
+
+struct pkt_info {
+  int          d_nsamples;
+  int          d_timestamp;
+  unsigned int d_seqno;
+
+  pkt_info(int nsamples, int timestamp, int seqno)
+    : d_nsamples(nsamples),
+      d_timestamp(timestamp),
+      d_seqno(seqno) {}
+};
+
+int
+main(int argc, char **argv)
+{
+
+  // options and their defaults
+  const char *interface = "eth0";
+  const char *mac_addr_str = 0;
+  const char *output_filename = 0;
+  double freq = 0;
+  int32_t decim = 32;
+  int32_t nsamples = static_cast<int32_t>(2.5e6);
+  int32_t samples_per_frame = 371;
+  int32_t scale = 1024;
+  int    mimo_config = MC_WE_DONT_LOCK;
+  bool   provide_clock = false;
+
+  int    ch;
+  double tmp;
+  u2_mac_addr_t mac_addr;
+
+  setvbuf(stdout, 0, _IOFBF, 64 * 1024); // make stdout fully buffered
+
+  while ((ch = getopt(argc, argv, "he:m:o:f:d:N:F:S:M:P")) != EOF){
+    switch (ch){
+
+    case 'e':
+      interface = optarg;
+      break;
+      
+    case 'm':
+      mac_addr_str = optarg;
+      if (!usrp2_basic::parse_mac_addr(optarg, &mac_addr)){
+       std::cerr << "invalid mac addr: " << optarg << std::endl;
+       usage(argv[0]);
+       exit(1);
+      }
+      break;
+
+    case 'o':
+      output_filename = optarg;
+      break;
+      
+    case 'f':
+      if (!strtod_si(optarg, &freq)){
+       std::cerr << "invalid number: " << optarg << std::endl;
+       usage(argv[0]);
+       exit(1);
+      }
+      break;
+
+    case 'N':
+      if (!strtod_si(optarg, &tmp)){
+       std::cerr << "invalid number: " << optarg << std::endl;
+       usage(argv[0]);
+       exit(1);
+      }
+      nsamples = static_cast<int32_t>(tmp);
+      break;
+
+    case 'F':
+      samples_per_frame = strtol(optarg, 0, 0);
+      break;
+
+    case 'd':
+      decim = strtol(optarg, 0, 0);
+      break;
+
+    case 'S':
+      if (!strtod_si(optarg, &tmp)){
+       std::cerr << "invalid number: " << optarg << std::endl;
+       usage(argv[0]);
+       exit(1);
+      }
+      scale = static_cast<int32_t>(tmp);
+      break;
+      
+    case 'M':
+      if (strcmp(optarg, "DONT_LOCK") == 0)
+       mimo_config = MC_WE_DONT_LOCK;
+      else if (strcmp(optarg, "LOCK_TO_SMA") == 0)
+       mimo_config = MC_WE_LOCK_TO_SMA;
+      else if (strcmp(optarg, "LOCK_TO_MIMO") == 0)
+       mimo_config = MC_WE_LOCK_TO_MIMO;
+      else {
+       usage(argv[0]);
+       exit(1);
+      }
+      break;
+
+    case 'P':
+      provide_clock = true;
+      break;
+
+    case 'h':
+    default:
+      usage(argv[0]);
+      exit(1);
+    }
+  }
+  
+  if (argc - optind != 0){
+    usage(argv[0]);
+    exit(1);
+  }
+
+  FILE *of = 0;
+  if (output_filename)
+    of = fopen(output_filename, "wb");
+
+  usrp2_basic *u2 = new usrp2_basic();
+
+  if (!u2->open(interface)){
+    std::cerr << "couldn't open " << interface << std::endl;
+    return 0;
+  }
+
+
+  install_sig_handler(SIGINT, sig_handler);
+  if (1){
+    install_sig_handler(SIGALRM, sig_handler);
+    alarm(5);
+  }
+
+  
+  std::vector<op_id_reply_t> r = u2->find_usrps();
+
+  for (size_t i = 0; i < r.size(); i++){
+    std::cout << r[i] << std::endl;
+  }
+
+  if (r.size() == 0){
+    std::cerr << "No USRP2 found.\n";
+    return 1;
+  }
+
+  u2_mac_addr_t which = r[0].addr;     // pick the first one
+
+
+  gr_rt_status_t rt = gr_enable_realtime_scheduling();
+  if (rt != RT_OK)
+    std::cerr << "failed to enable realtime scheduling\n";
+
+  if (provide_clock)
+    mimo_config |= MC_PROVIDE_CLK_TO_MIMO;
+
+  u2->config_mimo(which, mimo_confg);
+  
+
+  gri_if_stats start, stop;
+  gri_get_if_stats(interface, &start);
+
+  if (!u2->start_rx(which, freq, decim, nsamples, samples_per_frame, scale, 
scale)){
+    std::cerr << "start_rx failed\n";
+    return 1;
+  }
+
+
+  std::vector<pkt_info> history;
+  history.reserve(64*1024);            // preallocate 64K entries
+
+  
+  long total_samples_recvd = 0;
+
+  while (!signaled && total_samples_recvd < nsamples){
+    u2_eth_samples_t   pkt;
+    // fcomplex                c_samples[U2_MAX_SAMPLES];
+    
+    // read samples
+    int n = u2->read_samples(which, &pkt);
+    if (n <= 0)
+      break;
+    
+    total_samples_recvd += n;
+
+    history.push_back(pkt_info(n, u2p_timestamp(&pkt.hdrs.fixed), 
pkt.hdrs.thdr.seqno));
+
+    // convert_samples_to_complex(n, pkt.samples, c_samples);
+    // size_t r = fwrite(c_samples, sizeof(fcomplex), n, of);
+
+    if (of){
+      fwrite(pkt.samples, sizeof(uint32_t), n, of);
+      fflush(of);
+    }
+  }
+
+
+  gri_get_if_stats(interface, &stop);
+
+  if (!u2->stop_rx(which)){
+    std::cerr << "stop_rx failed\n";
+    return 1;
+  }
+
+
+  long expected_rx_packets =
+    (nsamples + samples_per_frame - 1)/samples_per_frame;
+
+  long expected_rx_bytes   =
+    expected_rx_packets * sizeof(u2_eth_packet_t) + nsamples * 4;
+
+
+  long total_pkts_recvd = 0;
+  total_samples_recvd = 0;
+
+  int nbad_seqno = 0;
+
+  for (unsigned i = 0; i < history.size(); i++){
+    total_pkts_recvd++;
+    total_samples_recvd += history[i].d_nsamples;
+
+    bool bad_seqno = history[i].d_seqno != (i & 0xff);
+    if (bad_seqno)
+      nbad_seqno++;
+    
+    printf("%3d  %8d  %8ld  %8ld  %3d %s\n",
+          history[i].d_nsamples,
+          history[i].d_timestamp,
+          total_pkts_recvd, total_samples_recvd,
+          history[i].d_seqno,
+          bad_seqno ? "BAD SEQNO" : ""
+          );
+  }
+
+  if (nbad_seqno == 0)
+    printf("\nAll sequence numbers are correct\n");
+  else
+    printf("\n%d sequence numbers were INCORRECT\n", nbad_seqno);
+    
+
+  printf("\nUser space statistics:\n");
+  printf("  rx_samples:  %8ld",     total_samples_recvd);
+  printf("   expected  %8d  %s\n",
+        nsamples,
+        nsamples - total_samples_recvd == 0 ? "OK" : "NOT OK");
+  
+  printf("  rx_packets:  %8ld",     total_pkts_recvd);
+  printf("   expected  %8ld  %s\n",
+        expected_rx_packets,
+        expected_rx_packets - total_pkts_recvd == 0 ? "OK" : "NOT OK");
+  
+
+  fflush(stdout);
+
+  printf("\nKernel interface statistics:\n");
+
+  long long delta;
+  delta = stop.rx_bytes - start.rx_bytes;
+  printf("  rx_bytes:    %8Ld",     delta);
+  printf("   expected  %8ld  %s\n",
+        expected_rx_bytes,
+        expected_rx_bytes - delta == 0 ? "OK" : "NOT OK");
+
+  delta = stop.rx_packets - start.rx_packets;
+  printf("  rx_packets:  %8Ld",     delta);
+  printf("   expected  %8ld  %s\n",
+        expected_rx_packets,
+        expected_rx_packets - delta == 0 ? "OK" : "NOT OK");
+
+  printf("  rx_errs:     %8Ld\n",   stop.rx_errs - start.rx_errs);
+  printf("  rx_drop:     %8Ld\n",   stop.rx_drop - start.rx_drop);
+  printf("  tx_bytes:    %8Ld\n",   stop.tx_bytes - start.tx_bytes);
+  printf("  tx_packets:  %8Ld\n",   stop.tx_packets - start.tx_packets);
+  printf("  tx_errs:     %8Ld\n",   stop.tx_errs - start.tx_errs);
+  printf("  tx_drop:     %8Ld\n",   stop.tx_drop - start.tx_drop);
+
+
+  return 0;
+}

Deleted: gnuradio/branches/releases/3.2/usrp2/host/apps/rx_samples.cc

Modified: gnuradio/branches/releases/3.2/usrp2/host/include/usrp2/usrp2.h
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/host/include/usrp2/usrp2.h     
2009-02-23 22:39:24 UTC (rev 10487)
+++ gnuradio/branches/releases/3.2/usrp2/host/include/usrp2/usrp2.h     
2009-02-23 22:50:47 UTC (rev 10488)
@@ -372,11 +372,16 @@
     bool burn_mac_addr(const std::string &new_addr);
 
     /*!
-     * Reset master time to 0 at next PPS rising edge
+     * Reset master time to 0 at next PPS edge
      */
     bool sync_to_pps();
 
     /*!
+     * Reset master time to 0 at every PPS edge
+     */
+    bool sync_every_pps(bool enable);
+
+    /*!
      * Read memory from Wishbone bus as 32-bit words.  Handles endian swapping 
if needed.
      *
      * \param addr      32-bit aligned address.  Only the lower 16-bits are 
significant.

Modified: gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2.cc
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2.cc      2009-02-23 
22:39:24 UTC (rev 10487)
+++ gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2.cc      2009-02-23 
22:50:47 UTC (rev 10488)
@@ -413,6 +413,12 @@
     return d_impl->sync_to_pps();
   }
 
+  bool
+  usrp2::sync_every_pps(bool enable)
+  {
+    return d_impl->sync_every_pps(enable);
+  }
+
   std::vector<uint32_t>
   usrp2::peek32(uint32_t addr, uint32_t words)
   {

Modified: gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2_impl.cc
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2_impl.cc 2009-02-23 
22:39:24 UTC (rev 10487)
+++ gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2_impl.cc 2009-02-23 
22:50:47 UTC (rev 10488)
@@ -77,6 +77,8 @@
     case OP_SET_TX_LO_OFFSET_REPLY: return "OP_SET_TX_LO_OFFSET_REPLY";
     case OP_SET_RX_LO_OFFSET: return "OP_SET_RX_LO_OFFSET";
     case OP_SET_RX_LO_OFFSET_REPLY: return "OP_SET_RX_LO_OFFSET_REPLY";
+    case OP_SYNC_EVERY_PPS: return "OP_SYNC_EVERY_PPS";
+    case OP_SYNC_EVERY_PPS_REPLY: return "OP_SYNC_EVERY_PPS_REPLY";
 
     default:
       char buf[64];
@@ -1128,6 +1130,28 @@
     return ntohx(reply.ok) == 1;
   }
 
+  bool
+  usrp2::impl::sync_every_pps(bool enable)
+  {
+    op_generic_cmd cmd;
+    op_generic_t   reply;
+
+    memset(&cmd, 0, sizeof(cmd));
+    init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+    cmd.op.opcode = OP_SYNC_EVERY_PPS;
+    cmd.op.len = sizeof(cmd.op);
+    cmd.op.rid = d_next_rid++;
+    cmd.op.ok = enable ? 1 : 0;
+    cmd.eop.opcode = OP_EOP;
+    cmd.eop.len = sizeof(cmd.eop);
+    
+    pending_reply p(cmd.op.rid, &reply, sizeof(reply));
+    if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT))
+      return false;
+
+    return ntohx(reply.ok) == 1;
+  }
+
   std::vector<uint32_t>
   usrp2::impl::peek32(uint32_t addr, uint32_t words)
   {

Modified: gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2_impl.h
===================================================================
--- gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2_impl.h  2009-02-23 
22:39:24 UTC (rev 10487)
+++ gnuradio/branches/releases/3.2/usrp2/host/lib/usrp2_impl.h  2009-02-23 
22:50:47 UTC (rev 10488)
@@ -180,6 +180,7 @@
 
     bool burn_mac_addr(const std::string &new_addr);
     bool sync_to_pps();
+    bool sync_every_pps(bool enable);
     std::vector<uint32_t> peek32(uint32_t addr, uint32_t words);
     bool poke32(uint32_t addr, const std::vector<uint32_t> &data);
   };





reply via email to

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