blob: 05d29daef2c6762356abcb5d5c1b15aeb33f87b7 (
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
|
//
// Copyright 2010 Ettus Research LLC
//
// This program 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 of the License, or
// (at your option) any later version.
//
// This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
//
#include <uhd/utils.hpp>
#include "dboard_interface.hpp"
#include "fw_common.h"
/***********************************************************************
* Structors
**********************************************************************/
dboard_interface::dboard_interface(impl_base *impl){
_impl = impl;
}
dboard_interface::~dboard_interface(void){
/* NOP */
}
/***********************************************************************
* Clock Rates
**********************************************************************/
double dboard_interface::get_rx_clock_rate(void){
return _impl->get_master_clock_freq();
}
double dboard_interface::get_tx_clock_rate(void){
return _impl->get_master_clock_freq();
}
/***********************************************************************
* GPIO
**********************************************************************/
/*!
* Static function to convert a gpio bank enum
* to an over-the-wire value for the usrp2 control.
* \param bank the dboard interface gpio bank enum
* \return an over the wire representation
*/
static uint8_t gpio_bank_to_otw(uhd::usrp::dboard::interface::gpio_bank_t bank){
switch(bank){
case uhd::usrp::dboard::interface::GPIO_TX_BANK: return USRP2_GPIO_BANK_TX;
case uhd::usrp::dboard::interface::GPIO_RX_BANK: return USRP2_GPIO_BANK_RX;
}
throw std::runtime_error("unknown gpio bank");
}
void dboard_interface::set_gpio_ddr(gpio_bank_t bank, uint16_t value, uint16_t mask){
//setup the out data
usrp2_ctrl_data_t out_data;
out_data.id = htonl(USRP2_CTRL_ID_USE_THESE_GPIO_DDR_SETTINGS_BRO);
out_data.data.gpio_config.bank = gpio_bank_to_otw(bank);
out_data.data.gpio_config.value = htons(value);
out_data.data.gpio_config.mask = htons(mask);
//send and recv
usrp2_ctrl_data_t in_data = _impl->ctrl_send_and_recv(out_data);
ASSERT_THROW(htonl(in_data.id) == USRP2_CTRL_ID_GOT_THE_GPIO_DDR_SETTINGS_DUDE);
}
void dboard_interface::write_gpio(gpio_bank_t bank, uint16_t value, uint16_t mask){
//setup the out data
usrp2_ctrl_data_t out_data;
out_data.id = htonl(USRP2_CTRL_ID_SET_YOUR_GPIO_PIN_OUTS_BRO);
out_data.data.gpio_config.bank = gpio_bank_to_otw(bank);
out_data.data.gpio_config.value = htons(value);
out_data.data.gpio_config.mask = htons(mask);
//send and recv
usrp2_ctrl_data_t in_data = _impl->ctrl_send_and_recv(out_data);
ASSERT_THROW(htonl(in_data.id) == USRP2_CTRL_ID_I_SET_THE_GPIO_PIN_OUTS_DUDE);
}
uint16_t dboard_interface::read_gpio(gpio_bank_t bank){
//setup the out data
usrp2_ctrl_data_t out_data;
out_data.id = htonl(USRP2_CTRL_ID_GIVE_ME_YOUR_GPIO_PIN_VALS_BRO);
out_data.data.gpio_config.bank = gpio_bank_to_otw(bank);
//send and recv
usrp2_ctrl_data_t in_data = _impl->ctrl_send_and_recv(out_data);
ASSERT_THROW(htonl(in_data.id) == USRP2_CTRL_ID_HERE_IS_YOUR_GPIO_PIN_VALS_DUDE);
return ntohs(in_data.data.gpio_config.value);
}
void dboard_interface::set_atr_reg(gpio_bank_t bank, uint16_t tx_value, uint16_t rx_value, uint16_t mask){
//setup the out data
usrp2_ctrl_data_t out_data;
out_data.id = htonl(USRP2_CTRL_ID_USE_THESE_ATR_SETTINGS_BRO);
out_data.data.atr_config.bank = gpio_bank_to_otw(bank);
out_data.data.atr_config.tx_value = htons(tx_value);
out_data.data.atr_config.rx_value = htons(rx_value);
out_data.data.atr_config.mask = htons(mask);
//send and recv
usrp2_ctrl_data_t in_data = _impl->ctrl_send_and_recv(out_data);
ASSERT_THROW(htonl(in_data.id) == USRP2_CTRL_ID_GOT_THE_ATR_SETTINGS_DUDE);
}
|