USRP Hardware Driver and USRP Manual  Version: 4.0.0.0-0-unknown
UHD and USRP Manual
mb_controller.hpp
Go to the documentation of this file.
1 //
2 // Copyright 2019 Ettus Research, a National Instruments Brand
3 //
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 //
6 
7 #pragma once
8 
9 #include <uhd/config.hpp>
11 #include <uhd/types/sensors.hpp>
12 #include <uhd/types/time_spec.hpp>
15 #include <unordered_map>
16 #include <functional>
17 #include <memory>
18 #include <vector>
19 
20 namespace uhd { namespace rfnoc {
21 
25 {
26 public:
27  using sptr = std::shared_ptr<mb_controller>;
28 
29  virtual ~mb_controller() {}
30 
31  /**************************************************************************
32  * Timebase API
33  *************************************************************************/
40  {
41  public:
42  using sptr = std::shared_ptr<timekeeper>;
43  using write_period_fn_t = std::function<void(uint64_t)>;
44 
46 
47  virtual ~timekeeper() {}
48 
59 
66  virtual uint64_t get_ticks_now() = 0;
67 
76 
81  virtual uint64_t get_ticks_last_pps() = 0;
82 
85  void set_time_now(const uhd::time_spec_t& time);
86 
89  virtual void set_ticks_now(const uint64_t ticks) = 0;
90 
94 
97  virtual void set_ticks_next_pps(const uint64_t ticks) = 0;
98 
101  double get_tick_rate()
102  {
103  return _tick_rate;
104  }
105 
106  protected:
115  void set_tick_rate(const double rate);
116 
121  virtual void set_period(const uint64_t period_ns) = 0;
122 
123  private:
125  double _tick_rate = 1.0;
126  };
127 
129  // on this device.
130  size_t get_num_timekeepers() const;
131 
133  //
134  // \throws uhd::index_error if \p tk_idx is not valid
135  timekeeper::sptr get_timekeeper(const size_t tk_idx) const;
136 
137  /**************************************************************************
138  * Motherboard Control
139  *************************************************************************/
142  virtual void init() {}
143 
148  virtual std::string get_mboard_name() const = 0;
149 
191  virtual void set_time_source(const std::string& source) = 0;
192 
197  virtual std::string get_time_source() const = 0;
198 
203  virtual std::vector<std::string> get_time_sources() const = 0;
204 
246  virtual void set_clock_source(const std::string& source) = 0;
247 
252  virtual std::string get_clock_source() const = 0;
253 
258  virtual std::vector<std::string> get_clock_sources() const = 0;
259 
269  virtual void set_sync_source(
270  const std::string& clock_source, const std::string& time_source) = 0;
271 
293  virtual void set_sync_source(const uhd::device_addr_t& sync_source) = 0;
294 
299  virtual uhd::device_addr_t get_sync_source() const = 0;
300 
305  virtual std::vector<uhd::device_addr_t> get_sync_sources() = 0;
306 
314  virtual void set_clock_source_out(const bool enb) = 0;
315 
323  virtual void set_time_source_out(const bool enb) = 0;
324 
330  virtual uhd::sensor_value_t get_sensor(const std::string& name) = 0;
331 
336  virtual std::vector<std::string> get_sensor_names() = 0;
337 
341 
356  virtual bool synchronize(std::vector<mb_controller::sptr>& mb_controllers,
357  const uhd::time_spec_t& time_spec = uhd::time_spec_t(0.0),
358  const bool quiet = false);
359 
365  virtual std::vector<std::string> get_gpio_banks() const;
366 
372  virtual std::vector<std::string> get_gpio_srcs(const std::string& bank) const;
373 
376  virtual std::vector<std::string> get_gpio_src(const std::string& bank);
377 
385  virtual void set_gpio_src(
386  const std::string& bank, const std::vector<std::string>& src);
387 
388 protected:
392  void register_timekeeper(const size_t idx, timekeeper::sptr tk);
393 
394 private:
395  /**************************************************************************
396  * Attributes
397  *************************************************************************/
398  std::unordered_map<size_t, timekeeper::sptr> _timekeepers;
399 };
400 
401 }} // namespace uhd::rfnoc
uhd::rfnoc::mb_controller::init
virtual void init()
Definition: mb_controller.hpp:142
uhd::rfnoc::mb_controller::set_time_source_out
virtual void set_time_source_out(const bool enb)=0
uhd::rfnoc::mb_controller::timekeeper::get_tick_rate
double get_tick_rate()
Definition: mb_controller.hpp:101
sensors.hpp
uhd::rfnoc::mb_controller::get_time_sources
virtual std::vector< std::string > get_time_sources() const =0
device_addr.hpp
time_spec.hpp
config.hpp
uhd::rfnoc::mb_controller::timekeeper::get_time_last_pps
uhd::time_spec_t get_time_last_pps(void)
uhd::rfnoc::mb_controller::timekeeper::set_period
virtual void set_period(const uint64_t period_ns)=0
uhd::rfnoc::mb_controller::timekeeper::set_ticks_next_pps
virtual void set_ticks_next_pps(const uint64_t ticks)=0
uhd::rfnoc::mb_controller::get_mboard_name
virtual std::string get_mboard_name() const =0
uhd::rfnoc::mb_controller::get_sync_sources
virtual std::vector< uhd::device_addr_t > get_sync_sources()=0
uhd::rfnoc::mb_controller::timekeeper
Definition: mb_controller.hpp:40
uhd::rfnoc::mb_controller::register_timekeeper
void register_timekeeper(const size_t idx, timekeeper::sptr tk)
uhd::rfnoc::mb_controller::set_clock_source
virtual void set_clock_source(const std::string &source)=0
uhd::rfnoc::mb_controller::timekeeper::set_time_now
void set_time_now(const uhd::time_spec_t &time)
uhd::rfnoc::mb_controller
Definition: mb_controller.hpp:25
uhd::rfnoc::mb_controller::get_sync_source
virtual uhd::device_addr_t get_sync_source() const =0
uhd::rfnoc::mb_controller::set_sync_source
virtual void set_sync_source(const std::string &clock_source, const std::string &time_source)=0
UHD_API
#define UHD_API
Definition: config.h:67
uhd::usrp::cal::source
source
Identify the source of calibration data, i.e., where was it stored.
Definition: database.hpp:22
noncopyable.hpp
uhd::rfnoc::mb_controller::timekeeper::set_tick_rate
void set_tick_rate(const double rate)
uhd::rfnoc::mb_controller::timekeeper::get_time_now
uhd::time_spec_t get_time_now(void)
uhd::rfnoc::mb_controller::get_time_source
virtual std::string get_time_source() const =0
uhd::device_addr_t
Definition: device_addr.hpp:38
uhd::rfnoc::mb_controller::timekeeper::sptr
std::shared_ptr< timekeeper > sptr
Definition: mb_controller.hpp:42
uhd::rfnoc::mb_controller::get_clock_sources
virtual std::vector< std::string > get_clock_sources() const =0
uhd::rfnoc::mb_controller::timekeeper::set_ticks_now
virtual void set_ticks_now(const uint64_t ticks)=0
uhd::rfnoc::mb_controller::timekeeper::write_period_fn_t
std::function< void(uint64_t)> write_period_fn_t
Definition: mb_controller.hpp:43
uhd::rfnoc::mb_controller::sptr
std::shared_ptr< mb_controller > sptr
Definition: mb_controller.hpp:27
uhd::rfnoc::mb_controller::synchronize
virtual bool synchronize(std::vector< mb_controller::sptr > &mb_controllers, const uhd::time_spec_t &time_spec=uhd::time_spec_t(0.0), const bool quiet=false)
uhd
Definition: build_info.hpp:12
uhd::rfnoc::mb_controller::set_gpio_src
virtual void set_gpio_src(const std::string &bank, const std::vector< std::string > &src)
uhd::time_spec_t
Definition: time_spec.hpp:31
uhd::rfnoc::mb_controller::get_gpio_srcs
virtual std::vector< std::string > get_gpio_srcs(const std::string &bank) const
uhd::rfnoc::mb_controller::timekeeper::get_ticks_last_pps
virtual uint64_t get_ticks_last_pps()=0
uhd::rfnoc::mb_controller::set_time_source
virtual void set_time_source(const std::string &source)=0
uhd::rfnoc::mb_controller::timekeeper::~timekeeper
virtual ~timekeeper()
Definition: mb_controller.hpp:47
uhd::rfnoc::mb_controller::get_num_timekeepers
size_t get_num_timekeepers() const
Returns the number of timekeepers, which equals the number of timebases.
uhd::rfnoc::mb_controller::get_eeprom
virtual uhd::usrp::mboard_eeprom_t get_eeprom()=0
uhd::rfnoc::mb_controller::~mb_controller
virtual ~mb_controller()
Definition: mb_controller.hpp:29
uhd::dict< std::string, std::string >
mboard_eeprom.hpp
uhd::rfnoc::mb_controller::set_clock_source_out
virtual void set_clock_source_out(const bool enb)=0
uhd::rfnoc::mb_controller::get_gpio_src
virtual std::vector< std::string > get_gpio_src(const std::string &bank)
uhd::rfnoc::mb_controller::get_clock_source
virtual std::string get_clock_source() const =0
uhd::rfnoc::mb_controller::timekeeper::timekeeper
timekeeper()
uhd::rfnoc::mb_controller::get_sensor_names
virtual std::vector< std::string > get_sensor_names()=0
uhd::rfnoc::mb_controller::get_timekeeper
timekeeper::sptr get_timekeeper(const size_t tk_idx) const
Return a reference to the tk_idx-th timekeeper on this motherboard.
uhd::noncopyable
boost::noncopyable noncopyable
Definition: noncopyable.hpp:45
uhd::rfnoc::mb_controller::get_gpio_banks
virtual std::vector< std::string > get_gpio_banks() const
uhd::rfnoc::mb_controller::timekeeper::get_ticks_now
virtual uint64_t get_ticks_now()=0
uhd::rfnoc::mb_controller::set_sync_source
virtual void set_sync_source(const uhd::device_addr_t &sync_source)=0
uhd::rfnoc::mb_controller::get_sensor
virtual uhd::sensor_value_t get_sensor(const std::string &name)=0
uhd::sensor_value_t
Definition: sensors.hpp:29
uhd::rfnoc::mb_controller::timekeeper::set_time_next_pps
void set_time_next_pps(const uhd::time_spec_t &time)