aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/dboard/e3xx/e31x_radio_ctrl_impl.hpp
blob: 581a90c8ef640e651b11f733e0c7138b652fe14a (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
//
// Copyright 2018 Ettus Research, a National Instruments Company
//
// SPDX-License-Identifier: GPL-3.0-or-later
//

#ifndef INCLUDED_LIBUHD_RFNOC_E31X_RADIO_CTRL_IMPL_HPP
#define INCLUDED_LIBUHD_RFNOC_E31X_RADIO_CTRL_IMPL_HPP

#include "e3xx_constants.hpp"
#include "e3xx_radio_ctrl_impl.hpp"

namespace uhd {
    namespace rfnoc {

/*! \brief Provide access to an E31X radio.
 */
class e31x_radio_ctrl_impl : public e3xx_radio_ctrl_impl
{
public:
    /************************************************************************
     * Structors
     ***********************************************************************/
    e31x_radio_ctrl_impl(
        const make_args_t &make_args
    );
    virtual ~e31x_radio_ctrl_impl();

protected:

    /**************************************************************************
     * ATR/ Switches Types
     *************************************************************************/

    enum tx_sw1_t {
        TX_SW1_LB_80 = 7,
        TX_SW1_LB_160 = 6,
        TX_SW1_LB_225 = 5,
        TX_SW1_LB_400 = 4,
        TX_SW1_LB_575 = 3,
        TX_SW1_LB_1000 = 2,
        TX_SW1_LB_1700 = 1,
        TX_SW1_LB_2750 = 0,
        TX_SW1_HB_5850 = 7
    };

    enum vctxrx_sw_t {
        VCTXRX_SW_TX_HB = 3,
        VCTXRX1_SW_TX_LB = 1,
        VCTXRX1_SW_RX = 2,
        VCTXRX2_SW_TX_LB = 2,
        VCTXRX2_SW_RX = 1,
        VCTXRX_SW_OFF = 0,
    };

    enum rx_sw1_t {
        RX_SW1_LB_B2 = 4,
        RX_SW1_LB_B3 = 2,
        RX_SW1_LB_B4 = 0,
        RX_SW1_LB_B5 = 1,
        RX_SW1_LB_B6 = 3,
        RX_SW1_LB_B7 = 5,
        RX_SW1_OFF = 7
    };

    enum rx_swc_t {
        RX_SWC_LB_B2 = 2,
        RX_SWC_LB_B3 = 3,
        RX_SWC_LB_B4 = 1,
        RX_SWC_OFF = 0
    };

    enum rx_swb_t {
        RX_SWB_LB_B5 = 2,
        RX_SWB_LB_B6 = 3,
        RX_SWB_LB_B7 = 1,
        RX_SWB_OFF = 0
    };

    enum vcrx_sw_t {
        VCRX_SW_LB = 1,
        VCRX_SW_HB = 2,
        VCRX_SW_OFF = 0 //or 3
    };

    // (TX_ENABLEB, TX_ENABLEA)
    enum tx_bias_t {
        TX1_BIAS_HB_ON = 1,
        TX1_BIAS_LB_ON = 2,
        TX2_BIAS_HB_ON = 1,
        TX2_BIAS_LB_ON = 2,
        TX_BIAS_OFF = 0
    };

    /************************************************************************
     * API calls
     ***********************************************************************/
    virtual bool check_radio_config();

    const std::string get_default_timing_mode()
    {
        return TIMING_MODE_1R1T;
    };

    /*! Run a loopback self test.
     *
     * This will write data to the AD936x and read it back again.
     * If this test fails, it generally means the interface is broken,
     * so we assume it passes and throw otherwise. Running this requires
     * a core that we can peek and poke the loopback values into.
     *
     * \param iface An interface to the associated radio control core
     * \param iface The radio control core's address to write the loopback value
     * \param iface The radio control core's readback address to read back the returned
     * value
     *
     * \throws a uhd::runtime_error if the loopback value didn't match.
     */
    void loopback_self_test(std::function<void(uint32_t)> poker_functor,
        std::function<uint64_t()> peeker_functor);

    uint32_t get_rx_switches(
        const size_t chan,
        const double freq,
        const std::string &ant
    );

    uint32_t get_tx_switches(
        const size_t chan,
        const double freq
    );

    uint32_t get_idle_switches();

    uint32_t get_tx_led();
    uint32_t get_rx_led();
    uint32_t get_txrx_led();
    uint32_t get_idle_led();
}; /* class radio_ctrl_impl */

}} /* namespace uhd::rfnoc */

#endif /* INCLUDED_LIBUHD_RFNOC_E31X_RADIO_CTRL_IMPL_HPP */
// vim: sw=4 et: