commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r8880 - gnuradio/branches/developers/trondeau/dbs/gr-u


From: trondeau
Subject: [Commit-gnuradio] r8880 - gnuradio/branches/developers/trondeau/dbs/gr-usrp/src
Date: Sun, 13 Jul 2008 13:48:47 -0600 (MDT)

Author: trondeau
Date: 2008-07-13 13:48:46 -0600 (Sun, 13 Jul 2008)
New Revision: 8880

Modified:
   gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.cc
   gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.h
   gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.i
Log:
returning proper mux value.

Modified: gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.cc
===================================================================
--- gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.cc 
2008-07-13 17:42:39 UTC (rev 8879)
+++ gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.cc 
2008-07-13 19:48:46 UTC (rev 8880)
@@ -30,6 +30,28 @@
 #include <assert.h>
 
 
+truth_table_element_t::truth_table_element_t(int side, unsigned int uses, 
+                                            bool swap_iq, unsigned int 
mux_val=0)
+  : d_side(side), d_uses(uses), d_swap_iq(swap_iq), d_mux_val(mux_val)
+{
+}
+
+bool
+truth_table_element_t::operator ==(const truth_table_element_t &in)
+{
+  return ((d_side == in.d_side) && (d_uses == in.d_uses)
+         && (d_swap_iq == in.d_swap_iq));
+}
+
+bool
+truth_table_element_t::operator !=(const truth_table_element_t &in)
+{
+  return !(*this == in);
+}
+
+
+
+
 usrp1_base::usrp1_base(const std::string &name, gr_io_signature_sptr insig, 
gr_io_signature_sptr outsig)
   : gr_sync_block (name, insig, outsig)
 {
@@ -88,7 +110,7 @@
 
 
 int
-usrp1_base::determine_rx_mux_value(int subdev_spec_side, int subdev_spec)
+usrp1_base::determine_rx_mux_value(const std::vector<int> &subdev_spec)
 {
   /*
     Determine appropriate Rx mux value as a function of the subdevice choosen 
and the
@@ -115,21 +137,22 @@
     (side, 1) says connect only the A/D's used by subdevice 1 to the DDC.
   */
 
-  int side = subdev_spec_side;  // side A = 0, side B = 1
-  
+  int side = subdev_spec[0];  // side A = 0, side B = 1
+  int spec = subdev_spec[1];
+
   if(!((side == 0 || side == 1))) {
     throw "Invalid subdev_spec";
     //raise ValueError, "Invalid subdev_spec: %r:" % (subdev_spec,)
   }
 
-  /*
-  db_base *db = u->d_db[side];    // This is a tuple of length 1 or 2 
containing the subdevice
+  db_base *db = d_db[side];    // This is a tuple of length 1 or 2 containing 
the subdevice
                                   //   classes for the selected side.
   
   unsigned int subdev0_uses, subdev1_uses, uses;
 
   // compute bitmasks of used A/D's
   
+  printf("db[0].is_quadrature(): %d\n", db[0].is_quadrature());
   if(db[0].is_quadrature()) {
     subdev0_uses = 0x3;               // uses A/D 0 and 1
   }
@@ -144,10 +167,10 @@
     subdev1_uses = 0x0;              // uses no A/D (doesn't exist)
   }
   
-  if(subdev_spec == 0) {
+  if(spec == 0) {
     uses = subdev0_uses;
   }
-  else if(subdev_spec == 1) {
+  else if(spec == 1) {
     uses = subdev1_uses;
   }
   else {
@@ -161,29 +184,31 @@
   }
   
   bool swap_iq = db[0].i_and_q_swapped();
-    
-  struct elements_t truth_table_elements[8] = {
+  
+  truth_table_element_t truth_table[8] = {
     // (side, uses, swap_iq) : mux_val
-    {0, 0x1, false, 0xf0f0f0f0},
-    {0, 0x2, false, 0xf0f0f0f1},
-    {0, 0x3, false, 0x00000010},
-    {0, 0x3, true,  0x00000001},
-    {1, 0x1, false, 0xf0f0f0f2},
-    {1, 0x2, false, 0xf0f0f0f3},
-    {1, 0x3, false, 0x00000032},
-    {1, 0x3, true,  0x00000023}
+    truth_table_element_t(0, 0x1, false, 0xf0f0f0f0),
+    truth_table_element_t(0, 0x2, false, 0xf0f0f0f1),
+    truth_table_element_t(0, 0x3, false, 0x00000010),
+    truth_table_element_t(0, 0x3, true,  0x00000001),
+    truth_table_element_t(1, 0x1, false, 0xf0f0f0f2),
+    truth_table_element_t(1, 0x2, false, 0xf0f0f0f3),
+    truth_table_element_t(1, 0x3, false, 0x00000032),
+    truth_table_element_t(1, 0x3, true,  0x00000023)
   };
   
-  truth_table_t truth_table(truth_table_elements, 8);
-  //return hexint(truth_table.search(side, uses, swap_iq));
-  */
+  truth_table_element_t match(side, uses, swap_iq);
+  
+  int i=0;
+  while((i < 8) && (truth_table[i] != match))
+    i++;
 
-  return 0x00000010;
+  return hexint(truth_table[i].mux_val());
 }
 
 
 int
-usrp1_base::determine_tx_mux_value(int subdev_spec_side, int subdev_spec)
+usrp1_base::determine_tx_mux_value(const std::vector<int> &subdev_spec)
 {
   /*
     Determine appropriate Tx mux value as a function of the subdevice choosen.
@@ -198,7 +223,7 @@
     determine the value manually.
   */
 
-  int side = subdev_spec_side;  // side A = 0, side B = 1
+  int side = subdev_spec[0];  // side A = 0, side B = 1
   if(!((side == 0) || (side == 1))) {
     throw "Invalid subdev_spec";
     //raise ValueError, "Invalid subdev_spec: %r:" % (subdev_spec,)
@@ -218,7 +243,7 @@
 }
  
 db_base *
-usrp1_base::selected_subdev(int subdev_spec_side, int subdev_spec)
+usrp1_base::selected_subdev(const std::vector<int> &subdev_spec)
 {
   /*
     Return the user specified daughterboard subdevice.
@@ -229,7 +254,7 @@
   */
 
   // FIXME: make sure we don't leave this in memory
-  return &d_db[subdev_spec_side][subdev_spec];
+  return &d_db[subdev_spec[0]][subdev_spec[1]];
   //return d_db;
 }
 
@@ -370,4 +395,3 @@
   throw "No suitable daughterboard found!";
   //raise RuntimeError, "No suitable daughterboard found!";
 }
-

Modified: gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.h
===================================================================
--- gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.h  
2008-07-13 17:42:39 UTC (rev 8879)
+++ gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.h  
2008-07-13 19:48:46 UTC (rev 8880)
@@ -40,9 +40,28 @@
 #define FPGA_MODE_COUNTING usrp_standard_rx::FPGA_MODE_COUNTING
 
 
+class truth_table_element_t 
+{
+public:
+  truth_table_element_t(int side, unsigned int uses, bool swap_iq, unsigned 
int mux_val);
+  bool operator==(const truth_table_element_t &in);
+  bool operator!=(const truth_table_element_t &in);
+
+  unsigned int mux_val() { return d_mux_val; }
+
+private:
+  int          d_side;
+  unsigned int d_uses;
+  bool         d_swap_iq;
+  unsigned int d_mux_val;
+};
+
 /*!
  * \brief abstract interface to Universal Software Radio Peripheral (Rev 1)
  */
+
+typedef std::vector<int> subdev_spec_t;
+
 class usrp1_base : public gr_sync_block
 {
  protected:
@@ -60,10 +79,9 @@
 
   db_base * db(int side) { return d_db[side]; }
 
-  int determine_tx_mux_value(int subdev_spec_side, int subdev_spec);
-  int determine_rx_mux_value(int subdev_spec_side, int subdev_spec);
-  //db_base_sptr selected_subdev(int subdev_spec_side, int subdev_spec);
-  db_base * selected_subdev(int subdev_spec_side, int subdev_spec);
+  int determine_tx_mux_value(const std::vector<int> &subdev_spec);
+  int determine_rx_mux_value(const std::vector<int> &subdev_spec);
+  db_base * selected_subdev(const std::vector<int> &subdev_spec);
   
   virtual bool start() {return false;}
   virtual bool stop() {return false;}
@@ -380,8 +398,4 @@
 struct subdev_spec pick_rx_subdevice(usrp1_base &u);
 struct subdev_spec pick_subdev(usrp1_base &u, int candidates[], int 
ncandidates);
 
-//bool tune(usrp1_base *u, int chan, db_base *subdev, float target_freq, 
tune_result_sptr res);
-//bool tune(usrp1_base *u, int chan, db_base *subdev, float target_freq);
-
-
 #endif /* INCLUDED_USRP1_BASE_H */

Modified: gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.i
===================================================================
--- gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.i  
2008-07-13 17:42:39 UTC (rev 8879)
+++ gnuradio/branches/developers/trondeau/dbs/gr-usrp/src/usrp1_base.i  
2008-07-13 19:48:46 UTC (rev 8880)
@@ -48,10 +48,9 @@
   db_base * db(int side);
 
 
-  int determine_tx_mux_value(int subdev_spec_side, int subdev_spec);
-  int determine_rx_mux_value(int subdev_spec_side, int subdev_spec);
-  //db_base_sptr selected_subdev(int subdev_spec_side, int subdev_spec);
-  db_base * selected_subdev(int subdev_spec_side, int subdev_spec);
+  int determine_tx_mux_value(const std::vector<int> &subdev_spec);
+  int determine_rx_mux_value(const std::vector<int> &subdev_spec);
+  db_base * selected_subdev(const std::vector<int> &subdev_spec);
 
   virtual bool start() {return false;}
   virtual bool stop() {return false;}
@@ -109,3 +108,4 @@
   int  nddc();
   int  nduc();
 };
+





reply via email to

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