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