1 //
2 // Copyright 2016 Ettus Research LLC
3 // Copyright 2018 Ettus Research, a National Instruments Company
4 //
5 // SPDX-License-Identifier: GPL-3.0-or-later
6 //
7 
8 #ifndef INCLUDED_DBOARD_TWINRX_GAIN_TABLES_HPP
9 #define INCLUDED_DBOARD_TWINRX_GAIN_TABLES_HPP
10 
11 #include "twinrx_ctrl.hpp"
12 #include <uhd/config.hpp>
13 #include <uhd/types/ranges.hpp>
14 #include <stdint.h>
15 
16 // Turn off optimization on macOS/Clang. With optimizations
17 // on, twinrx_gain_tables hours to build
18 #if defined(UHD_PLATFORM_MACOS)
19 #   pragma clang optimize off
20 #endif
21 namespace uhd { namespace usrp { namespace dboard { namespace twinrx {
22 
23 class twinrx_gain_config_t
24 {
25 public:
twinrx_gain_config_t(size_t index_,double sys_gain_,uint8_t atten1_,uint8_t atten2_,bool amp1_,bool amp2_)26     twinrx_gain_config_t(size_t index_,
27         double sys_gain_,
28         uint8_t atten1_,
29         uint8_t atten2_,
30         bool amp1_,
31         bool amp2_)
32         : index(index_)
33         , sys_gain(sys_gain_)
34         , atten1(atten1_)
35         , atten2(atten2_)
36         , amp1(amp1_)
37         , amp2(amp2_)
38     {
39     }
40 
operator =(const twinrx_gain_config_t & src)41     twinrx_gain_config_t& operator=(const twinrx_gain_config_t& src)
42     {
43         if (this != &src) {
44             this->index    = src.index;
45             this->sys_gain = src.sys_gain;
46             this->atten1   = src.atten1;
47             this->atten2   = src.atten2;
48             this->amp1     = src.amp1;
49             this->amp2     = src.amp2;
50         }
51         return *this;
52     }
53 
54     size_t index;
55     double sys_gain;
56     uint8_t atten1;
57     uint8_t atten2;
58     bool amp1;
59     bool amp2;
60 };
61 
62 class twinrx_gain_table
63 {
64 public:
65     static const twinrx_gain_table lookup_table(twinrx_ctrl::signal_path_t signal_path,
66         twinrx_ctrl::preselector_path_t presel_path,
67         std::string profile);
68 
twinrx_gain_table(const std::vector<twinrx_gain_config_t> & tbl)69     twinrx_gain_table(const std::vector<twinrx_gain_config_t>& tbl) : _tbl(tbl) {}
70 
71     const twinrx_gain_config_t& find_by_index(size_t index) const;
72 
get_num_entries() const73     inline size_t get_num_entries() const
74     {
75         return _tbl.size();
76     }
77 
78     uhd::gain_range_t get_gain_range() const;
79 
80 private:
81     const std::vector<twinrx_gain_config_t>& _tbl;
82 };
83 
84 
85 }}}} // namespace uhd::usrp::dboard::twinrx
86 
87 #if defined(UHD_PLATFORM_MACOS)
88 #   pragma clang optimize on
89 #endif
90 
91 #endif /* INCLUDED_DBOARD_TWINRX_GAIN_TABLES_HPP */
92