Merge commit 'v3.3.0' into upstream
[debian/gnuradio] / gr-usrp2 / src / usrp2_source_base.h
index 34d9fea0b60ad3b130e74d88d9994982fbc6b203..9e35e2e9360e245f6a5971e2ea182c0ab773970b 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2008 Free Software Foundation, Inc.
+ * Copyright 2008,2009,2010 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
 #ifndef INCLUDED_USRP2_SOURCE_BASE_H
 #define INCLUDED_USRP2_SOURCE_BASE_H
 
-#include <gr_sync_block.h>
-#include <usrp2/usrp2.h>
-#include <stdexcept>
+#include <usrp2_base.h>
 
-// BIG ASS FIXME: get from lower layer MTU calculation
-#define USRP2_MIN_RX_SAMPLES 371
-
-class usrp2_source_base : public gr_sync_block {
-  
+/*!
+ * Base class for all USRP2 source blocks
+ */
+class usrp2_source_base : public usrp2_base 
+{
 protected:
   usrp2_source_base(const char *name,
                    gr_io_signature_sptr output_signature,
@@ -39,16 +37,24 @@ protected:
                    const std::string &mac)
     throw (std::runtime_error);
 
-  usrp2::usrp2::sptr d_u2;
-
 public:
   ~usrp2_source_base();
 
+  /*!
+   * \brief Set antenna
+   */
+  bool set_antenna(int ant);
+
   /*!
    * \brief Set receiver gain
    */
   bool set_gain(double gain);
 
+  /*!
+   * \brief Set receive LO offset frequency
+   */
+  bool set_lo_offset(double frequency);
+
   /*!
    * \brief Set receiver center frequency
    */
@@ -60,26 +66,99 @@ public:
   bool set_decim(int decimation_factor);
 
   /*!
-   * \brief Get USRP2 hardware MAC address
+   * \brief Set receive IQ scale factors
+   */
+  bool set_scale_iq(int scale_i, int scale_q);
+
+  /*!
+   * \brief Get receive decimation rate
+   */
+  int decim();
+
+  /*!
+   * \brief Get the ADC sample rate
+   */
+  bool adc_rate(long *rate);
+
+  /*!
+   * \brief Returns minimum Rx gain 
+   */
+  double gain_min();
+
+  /*!
+   * \brief Returns maximum Rx gain 
+   */
+  double gain_max();
+  
+  /*!
+   * \brief Returns Rx gain db_per_step
+   */
+  double gain_db_per_step();
+  
+  /*!
+   * \brief Returns minimum Rx center frequency
+   */
+  double freq_min();
+
+  /*!
+   * \brief Returns maximum Rx center frequency
    */
-  std::string mac_addr();
+  double freq_max();
   
+  /*!
+   * \brief Get Rx daughterboard ID
+   *
+   * \param[out] dbid returns the daughterboard id.
+   *
+   * daughterboard id >= 0 if successful, -1 if no daugherboard installed,
+   * -2 if invalid EEPROM on daughterboard.
+   */
+  bool daughterboard_id(int *dbid);
+
+  /*!
+   * \brief Returns number of receiver overruns
+   */
+  unsigned int overruns();
+
+  /*!
+   * \brief Returns number of missing sequence numbers
+   */
+  unsigned int missing();
+
   /*!
    * \brief Called by scheduler when starting flowgraph
    */
-  bool start();
+  virtual bool start();
   
   /*!
    * \brief Called by scheduler when stopping flowgraph
    */
-  bool stop();
+  virtual bool stop();
+
+  /*!
+   * \brief Set daughterboard GPIO data direction register.
+   */
+  bool set_gpio_ddr(uint16_t value, uint16_t mask);
+
+  /*!
+   * \brief Set daughterboard GPIO output selection register.
+   */
+  bool set_gpio_sels(std::string sels);
+
+  /*!
+   * \brief Set daughterboard GPIO pin values.
+   */
+  bool write_gpio(uint16_t value, uint16_t mask);
+
+  /*!
+   * \brief Read daughterboard GPIO pin values
+   */
+  bool read_gpio(uint16_t *value);
 
   /*!
-   * \brief Derived class must override this
+   * \brief Enable streaming GPIO in sample LSBs
    */
-  virtual int work(int noutput_items,
-                  gr_vector_const_void_star &input_items,
-                  gr_vector_void_star &output_items) = 0;
+  bool enable_gpio_streaming(int enable);
 };
 
 #endif /* INCLUDED_USRP2_SOURCE_BASE_H */