Merged r11377:11390 from jcorgan/usrp-headers in to trunk.
[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 #include <db_boards.h>
24 #include <usrp/usrp_dbid.h>
25 #include <usrp/db_basic.h>
26 #include <usrp/db_tv_rx.h>
27 #include <usrp/db_dbs_rx.h>
28 #include <usrp/db_flexrf.h>
29 #include <usrp/db_flexrf_mimo.h>
30 #include <usrp/db_xcvr2450.h>
31 #include <usrp/db_dtt754.h>
32 #include <usrp/db_dtt768.h>
33 #include <cstdio>
34
35 std::vector<db_base_sptr>
36 instantiate_dbs(int dbid, usrp_basic_sptr usrp, int which_side)
37 {
38   std::vector<db_base_sptr> db;
39
40   switch(dbid) {
41
42   case(USRP_DBID_BASIC_TX):
43     db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side)));
44     break;
45
46   case(USRP_DBID_BASIC_RX):
47     db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0)));
48     db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1)));
49     db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 2)));
50     break;
51
52   case(USRP_DBID_LF_TX):
53     db.push_back(db_base_sptr(new db_lf_tx(usrp, which_side)));
54     break;
55
56   case(USRP_DBID_LF_RX):
57     db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 0)));
58     db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 1)));
59     db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 2)));
60     break;
61     
62   case(USRP_DBID_DBS_RX):
63     db.push_back(db_base_sptr(new db_dbs_rx(usrp, which_side)));
64     break;
65
66   case(USRP_DBID_TV_RX):
67     db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 43.75e6, 5.75e6)));
68     break;
69   case(USRP_DBID_TV_RX_REV_2):
70     db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 44e6, 20e6)));
71     break;
72   case(USRP_DBID_TV_RX_REV_3):
73     db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 44e6, 20e6)));
74     break;
75
76   case(USRP_DBID_FLEX_2400_TX):
77     db.push_back(db_base_sptr(new db_flexrf_2400_tx(usrp, which_side)));
78     break;
79   case(USRP_DBID_FLEX_2400_RX):
80     db.push_back(db_base_sptr(new db_flexrf_2400_rx(usrp, which_side)));
81     break;
82   case(USRP_DBID_FLEX_1200_TX):
83     db.push_back(db_base_sptr(new db_flexrf_1200_tx(usrp, which_side)));
84     break;
85   case(USRP_DBID_FLEX_1200_RX):
86     db.push_back(db_base_sptr(new db_flexrf_1200_rx(usrp, which_side)));
87     break;
88   case(USRP_DBID_FLEX_1800_TX):
89     db.push_back(db_base_sptr(new db_flexrf_1800_tx(usrp, which_side)));
90     break;
91   case(USRP_DBID_FLEX_1800_RX):
92     db.push_back(db_base_sptr(new db_flexrf_1800_rx(usrp, which_side)));
93     break;
94   case(USRP_DBID_FLEX_900_TX):
95     db.push_back(db_base_sptr(new db_flexrf_900_tx(usrp, which_side)));
96     break;
97   case(USRP_DBID_FLEX_900_RX):
98     db.push_back(db_base_sptr(new db_flexrf_900_rx(usrp, which_side)));
99     break;
100   case(USRP_DBID_FLEX_400_TX):
101     db.push_back(db_base_sptr(new db_flexrf_400_tx(usrp, which_side)));
102     break;
103   case(USRP_DBID_FLEX_400_RX):
104     db.push_back(db_base_sptr(new db_flexrf_400_rx(usrp, which_side)));
105     break;
106   case(USRP_DBID_FLEX_2400_TX_MIMO_A):
107     db.push_back(db_base_sptr(new db_flexrf_2400_tx_mimo_a(usrp, which_side)));
108     break;
109   case(USRP_DBID_FLEX_2400_RX_MIMO_A):
110     db.push_back(db_base_sptr(new db_flexrf_2400_rx_mimo_a(usrp, which_side)));
111     break;
112   case(USRP_DBID_FLEX_1800_TX_MIMO_A):
113     db.push_back(db_base_sptr(new db_flexrf_1800_tx_mimo_a(usrp, which_side)));
114     break;
115   case(USRP_DBID_FLEX_1800_RX_MIMO_A):
116     db.push_back(db_base_sptr(new db_flexrf_1800_rx_mimo_a(usrp, which_side)));
117     break;
118   case(USRP_DBID_FLEX_1200_TX_MIMO_A):
119     db.push_back(db_base_sptr(new db_flexrf_1200_tx_mimo_a(usrp, which_side)));
120     break;
121   case(USRP_DBID_FLEX_1200_RX_MIMO_A):
122     db.push_back(db_base_sptr(new db_flexrf_1200_rx_mimo_a(usrp, which_side)));
123     break;
124   case(USRP_DBID_FLEX_900_TX_MIMO_A):
125     db.push_back(db_base_sptr(new db_flexrf_900_tx_mimo_a(usrp, which_side)));
126     break;
127   case(USRP_DBID_FLEX_900_RX_MIMO_A):
128     db.push_back(db_base_sptr(new db_flexrf_900_rx_mimo_a(usrp, which_side)));
129     break;
130   case(USRP_DBID_FLEX_400_TX_MIMO_A):
131     db.push_back(db_base_sptr(new db_flexrf_400_tx_mimo_a(usrp, which_side)));
132     break;
133   case(USRP_DBID_FLEX_400_RX_MIMO_A):
134     db.push_back(db_base_sptr(new db_flexrf_400_rx_mimo_a(usrp, which_side)));
135     break;
136   case(USRP_DBID_FLEX_2400_TX_MIMO_B):
137     db.push_back(db_base_sptr(new db_flexrf_2400_tx_mimo_b(usrp, which_side)));
138     break;
139   case(USRP_DBID_FLEX_2400_RX_MIMO_B):
140     db.push_back(db_base_sptr(new db_flexrf_2400_rx_mimo_b(usrp, which_side)));
141     break;
142   case(USRP_DBID_FLEX_1800_TX_MIMO_B):
143     db.push_back(db_base_sptr(new db_flexrf_1800_tx_mimo_b(usrp, which_side)));
144     break;
145   case(USRP_DBID_FLEX_1800_RX_MIMO_B):
146     db.push_back(db_base_sptr(new db_flexrf_1800_rx_mimo_b(usrp, which_side)));
147     break;
148   case(USRP_DBID_FLEX_1200_TX_MIMO_B):
149     db.push_back(db_base_sptr(new db_flexrf_1200_tx_mimo_b(usrp, which_side)));
150     break;
151   case(USRP_DBID_FLEX_1200_RX_MIMO_B):
152     db.push_back(db_base_sptr(new db_flexrf_1200_rx_mimo_b(usrp, which_side)));
153     break;
154   case(USRP_DBID_FLEX_900_TX_MIMO_B):
155     db.push_back(db_base_sptr(new db_flexrf_900_tx_mimo_b(usrp, which_side)));
156     break;
157   case(USRP_DBID_FLEX_900_RX_MIMO_B):
158     db.push_back(db_base_sptr(new db_flexrf_900_rx_mimo_b(usrp, which_side)));
159     break;
160   case(USRP_DBID_FLEX_400_TX_MIMO_B):
161     db.push_back(db_base_sptr(new db_flexrf_400_tx_mimo_b(usrp, which_side)));
162     break;
163   case(USRP_DBID_FLEX_400_RX_MIMO_B):
164     db.push_back(db_base_sptr(new db_flexrf_400_rx_mimo_b(usrp, which_side)));
165     break;
166
167   case(USRP_DBID_XCVR2450_TX):
168     db.push_back(db_base_sptr(new db_xcvr2450_tx(usrp, which_side)));
169     break;
170   case(USRP_DBID_XCVR2450_RX):
171     db.push_back(db_base_sptr(new db_xcvr2450_rx(usrp, which_side)));
172     break;
173   
174 #if 0   // FIXME wbx doesn't compile
175   case(USRP_DBID_WBX_LO_TX):
176     db.push_back(db_base_sptr(new db_wbx_lo_tx(usrp, which_side)));
177     break;
178   case(USRP_DBID_WBX_LO_RX):
179     db.push_back(db_base_sptr(new db_wbx_lo_rx(usrp, which_side)));
180     break;
181 #endif
182
183   case(USRP_DBID_DTT754):
184     db.push_back(db_base_sptr(new db_dtt754(usrp, which_side)));
185     break;
186   case(USRP_DBID_DTT768):
187     db.push_back(db_base_sptr(new db_dtt768(usrp, which_side)));
188     break;
189
190   case(-1):
191     if (boost::dynamic_pointer_cast<usrp_basic_tx>(usrp)){
192       db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side)));
193     }
194     else {
195       db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0)));
196       db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1)));
197     }
198     break;
199   
200   case(-2):
201   default:
202     if (boost::dynamic_pointer_cast<usrp_basic_tx>(usrp)){
203       fprintf(stderr, "\n\aWarning: Treating daughterboard with invalid EEPROM contents as if it were a \"Basic Tx.\"\n");
204       fprintf(stderr, "Warning: This is almost certainly wrong...  Use appropriate burn-*-eeprom utility.\n\n");
205       db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side)));
206     }
207     else {
208       fprintf(stderr, "\n\aWarning: Treating daughterboard with invalid EEPROM contents as if it were a \"Basic Rx.\"\n");
209       fprintf(stderr, "Warning: This is almost certainly wrong...  Use appropriate burn-*-eeprom utility.\n\n");
210       db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0)));
211       db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1)));
212     }
213     break;
214   }
215
216   return db;
217 }