Merge branch 'wip/wxgui' of http://gnuradio.org/git/jblum
[debian/gnuradio] / usrp / host / lib / db_boards.cc
1 /* -*- c++ -*- */
2 //
3 // Copyright 2008,2009 Free Software Foundation, Inc.
4 //
5 // This file is part of GNU Radio
6 //
7 // GNU Radio is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either asversion 3, or (at your option)
10 // any later version.
11 //
12 // GNU Radio is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with GNU Radio; see the file COPYING.  If not, write to
19 // the Free Software Foundation, Inc., 51 Franklin Street,
20 // Boston, MA 02110-1301, USA.
21 //
22
23 #ifdef HAVE_CONFIG_H
24 #include "config.h"
25 #endif
26
27 #include <db_boards.h>
28 #include <usrp/usrp_dbid.h>
29 #include <usrp/db_basic.h>
30 #include <usrp/db_tv_rx.h>
31 #include <usrp/db_tv_rx_mimo.h>
32 #include <usrp/db_dbs_rx.h>
33 #include <usrp/db_flexrf.h>
34 #include <usrp/db_flexrf_mimo.h>
35 #include <usrp/db_wbxng.h>
36 #include <usrp/db_xcvr2450.h>
37 #include <usrp/db_dtt754.h>
38 #include <usrp/db_dtt768.h>
39 #include <cstdio>
40
41 std::vector<db_base_sptr>
42 instantiate_dbs(int dbid, usrp_basic_sptr usrp, int which_side)
43 {
44   std::vector<db_base_sptr> db;
45
46   switch(dbid) {
47
48   case(USRP_DBID_BASIC_TX):
49     db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side)));
50     break;
51
52   case(USRP_DBID_BASIC_RX):
53     db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0)));
54     db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1)));
55     db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 2)));
56     break;
57
58   case(USRP_DBID_LF_TX):
59     db.push_back(db_base_sptr(new db_lf_tx(usrp, which_side)));
60     break;
61
62   case(USRP_DBID_LF_RX):
63     db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 0)));
64     db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 1)));
65     db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 2)));
66     break;
67
68   case(USRP_DBID_DBS_RX):
69     db.push_back(db_base_sptr(new db_dbs_rx(usrp, which_side)));
70     break;
71
72   case(USRP_DBID_TV_RX):
73     db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 43.75e6, 5.75e6)));
74     break;
75   case(USRP_DBID_TV_RX_REV_2):
76     db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 44e6, 20e6)));
77     break;
78   case(USRP_DBID_TV_RX_REV_3):
79     db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 44e6, 20e6)));
80     break;
81   case(USRP_DBID_TV_RX_MIMO):
82     db.push_back(db_base_sptr(new db_tv_rx_mimo(usrp, which_side, 43.75e6, 5.75e6)));
83     break;
84   case(USRP_DBID_TV_RX_REV_2_MIMO):
85     db.push_back(db_base_sptr(new db_tv_rx_mimo(usrp, which_side, 44e6, 20e6)));
86     break;
87   case(USRP_DBID_TV_RX_REV_3_MIMO):
88     db.push_back(db_base_sptr(new db_tv_rx_mimo(usrp, which_side, 44e6, 20e6)));
89     break;
90
91   case(USRP_DBID_FLEX_2400_TX):
92     db.push_back(db_base_sptr(new db_flexrf_2400_tx(usrp, which_side)));
93     break;
94   case(USRP_DBID_FLEX_2400_RX):
95     db.push_back(db_base_sptr(new db_flexrf_2400_rx(usrp, which_side)));
96     break;
97   case(USRP_DBID_FLEX_1200_TX):
98     db.push_back(db_base_sptr(new db_flexrf_1200_tx(usrp, which_side)));
99     break;
100   case(USRP_DBID_FLEX_1200_RX):
101     db.push_back(db_base_sptr(new db_flexrf_1200_rx(usrp, which_side)));
102     break;
103   case(USRP_DBID_FLEX_1800_TX):
104     db.push_back(db_base_sptr(new db_flexrf_1800_tx(usrp, which_side)));
105     break;
106   case(USRP_DBID_FLEX_1800_RX):
107     db.push_back(db_base_sptr(new db_flexrf_1800_rx(usrp, which_side)));
108     break;
109   case(USRP_DBID_FLEX_900_TX):
110     db.push_back(db_base_sptr(new db_flexrf_900_tx(usrp, which_side)));
111     break;
112   case(USRP_DBID_FLEX_900_RX):
113     db.push_back(db_base_sptr(new db_flexrf_900_rx(usrp, which_side)));
114     break;
115   case(USRP_DBID_FLEX_400_TX):
116     db.push_back(db_base_sptr(new db_flexrf_400_tx(usrp, which_side)));
117     break;
118   case(USRP_DBID_FLEX_400_RX):
119     db.push_back(db_base_sptr(new db_flexrf_400_rx(usrp, which_side)));
120     break;
121   case(USRP_DBID_FLEX_2400_TX_MIMO_A):
122     db.push_back(db_base_sptr(new db_flexrf_2400_tx_mimo_a(usrp, which_side)));
123     break;
124   case(USRP_DBID_FLEX_2400_RX_MIMO_A):
125     db.push_back(db_base_sptr(new db_flexrf_2400_rx_mimo_a(usrp, which_side)));
126     break;
127   case(USRP_DBID_FLEX_1800_TX_MIMO_A):
128     db.push_back(db_base_sptr(new db_flexrf_1800_tx_mimo_a(usrp, which_side)));
129     break;
130   case(USRP_DBID_FLEX_1800_RX_MIMO_A):
131     db.push_back(db_base_sptr(new db_flexrf_1800_rx_mimo_a(usrp, which_side)));
132     break;
133   case(USRP_DBID_FLEX_1200_TX_MIMO_A):
134     db.push_back(db_base_sptr(new db_flexrf_1200_tx_mimo_a(usrp, which_side)));
135     break;
136   case(USRP_DBID_FLEX_1200_RX_MIMO_A):
137     db.push_back(db_base_sptr(new db_flexrf_1200_rx_mimo_a(usrp, which_side)));
138     break;
139   case(USRP_DBID_FLEX_900_TX_MIMO_A):
140     db.push_back(db_base_sptr(new db_flexrf_900_tx_mimo_a(usrp, which_side)));
141     break;
142   case(USRP_DBID_FLEX_900_RX_MIMO_A):
143     db.push_back(db_base_sptr(new db_flexrf_900_rx_mimo_a(usrp, which_side)));
144     break;
145   case(USRP_DBID_FLEX_400_TX_MIMO_A):
146     db.push_back(db_base_sptr(new db_flexrf_400_tx_mimo_a(usrp, which_side)));
147     break;
148   case(USRP_DBID_FLEX_400_RX_MIMO_A):
149     db.push_back(db_base_sptr(new db_flexrf_400_rx_mimo_a(usrp, which_side)));
150     break;
151   case(USRP_DBID_FLEX_2400_TX_MIMO_B):
152     db.push_back(db_base_sptr(new db_flexrf_2400_tx_mimo_b(usrp, which_side)));
153     break;
154   case(USRP_DBID_FLEX_2400_RX_MIMO_B):
155     db.push_back(db_base_sptr(new db_flexrf_2400_rx_mimo_b(usrp, which_side)));
156     break;
157   case(USRP_DBID_FLEX_1800_TX_MIMO_B):
158     db.push_back(db_base_sptr(new db_flexrf_1800_tx_mimo_b(usrp, which_side)));
159     break;
160   case(USRP_DBID_FLEX_1800_RX_MIMO_B):
161     db.push_back(db_base_sptr(new db_flexrf_1800_rx_mimo_b(usrp, which_side)));
162     break;
163   case(USRP_DBID_FLEX_1200_TX_MIMO_B):
164     db.push_back(db_base_sptr(new db_flexrf_1200_tx_mimo_b(usrp, which_side)));
165     break;
166   case(USRP_DBID_FLEX_1200_RX_MIMO_B):
167     db.push_back(db_base_sptr(new db_flexrf_1200_rx_mimo_b(usrp, which_side)));
168     break;
169   case(USRP_DBID_FLEX_900_TX_MIMO_B):
170     db.push_back(db_base_sptr(new db_flexrf_900_tx_mimo_b(usrp, which_side)));
171     break;
172   case(USRP_DBID_FLEX_900_RX_MIMO_B):
173     db.push_back(db_base_sptr(new db_flexrf_900_rx_mimo_b(usrp, which_side)));
174     break;
175   case(USRP_DBID_FLEX_400_TX_MIMO_B):
176     db.push_back(db_base_sptr(new db_flexrf_400_tx_mimo_b(usrp, which_side)));
177     break;
178   case(USRP_DBID_FLEX_400_RX_MIMO_B):
179     db.push_back(db_base_sptr(new db_flexrf_400_rx_mimo_b(usrp, which_side)));
180     break;
181
182   case(USRP_DBID_XCVR2450_TX):
183     db.push_back(db_base_sptr(new db_xcvr2450_tx(usrp, which_side)));
184     break;
185   case(USRP_DBID_XCVR2450_RX):
186     db.push_back(db_base_sptr(new db_xcvr2450_rx(usrp, which_side)));
187     break;
188
189 #if 0   // FIXME wbx doesn't compile
190   case(USRP_DBID_WBX_LO_TX):
191     db.push_back(db_base_sptr(new db_wbx_lo_tx(usrp, which_side)));
192     break;
193   case(USRP_DBID_WBX_LO_RX):
194     db.push_back(db_base_sptr(new db_wbx_lo_rx(usrp, which_side)));
195     break;
196 #endif
197
198   case(USRP_DBID_WBX_NG_TX):
199     db.push_back(db_base_sptr(new db_wbxng_tx(usrp, which_side)));
200     break;
201   case(USRP_DBID_WBX_NG_RX):
202     db.push_back(db_base_sptr(new db_wbxng_rx(usrp, which_side)));
203     break;
204
205   case(USRP_DBID_DTT754):
206     db.push_back(db_base_sptr(new db_dtt754(usrp, which_side)));
207     break;
208   case(USRP_DBID_DTT768):
209     db.push_back(db_base_sptr(new db_dtt768(usrp, which_side)));
210     break;
211
212   case(-1):
213     if (boost::dynamic_pointer_cast<usrp_basic_tx>(usrp)){
214       db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side)));
215     }
216     else {
217       db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0)));
218       db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1)));
219     }
220     break;
221
222   case(-2):
223   default:
224     if (boost::dynamic_pointer_cast<usrp_basic_tx>(usrp)){
225       fprintf(stderr, "\n\aWarning: Treating daughterboard with invalid EEPROM contents as if it were a \"Basic Tx.\"\n");
226       fprintf(stderr, "Warning: This is almost certainly wrong...  Use appropriate burn-*-eeprom utility.\n\n");
227       db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side)));
228     }
229     else {
230       fprintf(stderr, "\n\aWarning: Treating daughterboard with invalid EEPROM contents as if it were a \"Basic Rx.\"\n");
231       fprintf(stderr, "Warning: This is almost certainly wrong...  Use appropriate burn-*-eeprom utility.\n\n");
232       db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0)));
233       db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1)));
234     }
235     break;
236   }
237
238   return db;
239 }