summaryrefslogtreecommitdiff
path: root/gr-usrp2/src/usrp2_sink_base.h
blob: d831d4df6951d4ee2e250e2f1059c610f820262b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/* -*- c++ -*- */
/*
 * Copyright 2008,2010 Free Software Foundation, Inc.
 * 
 * This file is part of GNU Radio
 * 
 * GNU Radio 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, or (at your option)
 * any later version.
 * 
 * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street,
 * Boston, MA 02110-1301, USA.
 */

#ifndef INCLUDED_USRP2_SINK_BASE_H
#define INCLUDED_USRP2_SINK_BASE_H

#include <usrp2_base.h>

/*!
 * Base class for all USRP2 transmit blocks
 */
class usrp2_sink_base : public usrp2_base 
{
protected:
  usrp2_sink_base(const char *name,
		  gr_io_signature_sptr input_signature,
		  const std::string &ifc,
		  const std::string &mac)
    throw (std::runtime_error);

  bool d_should_wait;
  usrp2::fpga_timestamp d_tx_time;

public:
  ~usrp2_sink_base();

  /*!
   * \brief Set antenna
   */
  bool set_antenna(int ant);

  /*!
   * \brief Set transmitter gain
   */
  bool set_gain(double gain);

  /*!
   * \brief Set transmitter LO offset frequency
   */
  bool set_lo_offset(double frequency);

  /*!
   * \brief Set transmitter center frequency
   */
  bool set_center_freq(double frequency, usrp2::tune_result *tr);
   
  /*!
   * \brief Set transmit interpolation rate
   */
  bool set_interp(int interp_factor);

  /*!
   * \brief Calculate default scale_iq for given interpolation factor
   */
  void default_scale_iq(int interpolation_factor, int *scale_i, int *scale_q);

  /*!
   * \brief Set transmit IQ scale factors
   */
  bool set_scale_iq(int scale_i, int scale_q);

  /*!
   * \brief Get transmit interpolation rate
   */
  int interp();

  /*!
   * \brief Get DAC sample rate in Hz 
   */
  bool dac_rate(long *rate);

  /*!
   * \brief Returns minimum Tx gain 
   */
  double gain_min();

  /*!
   * \brief Returns maximum Tx gain 
   */
  double gain_max();
  
  /*!
   * \brief Returns Tx gain db_per_step
   */
  double gain_db_per_step();

  /*!
   * \brief Returns minimum Tx center frequency
   */
  double freq_min();

  /*!
   * \brief Returns maximum Tx center frequency
   */
  double freq_max();

  /*!
   * \brief Get Tx 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 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 First samples begin streaming to USRP2 at given time
   */
  bool start_streaming_at(usrp2::fpga_timestamp time);
};

#endif /* INCLUDED_USRP2_SINK_BASE_H */