USRP Hardware Driver and USRP Manual Version: 4.0.0.0
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>
15#include <unordered_map>
16#include <functional>
17#include <memory>
18#include <vector>
19
20namespace uhd { namespace rfnoc {
21
25{
26public:
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
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
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
388protected:
392 void register_timekeeper(const size_t idx, timekeeper::sptr tk);
393
394private:
395 /**************************************************************************
396 * Attributes
397 *************************************************************************/
398 std::unordered_map<size_t, timekeeper::sptr> _timekeepers;
399};
400
401}} // namespace uhd::rfnoc
Definition: device_addr.hpp:38
Definition: mb_controller.hpp:40
virtual void set_ticks_now(const uint64_t ticks)=0
virtual ~timekeeper()
Definition: mb_controller.hpp:47
uhd::time_spec_t get_time_last_pps(void)
void set_time_next_pps(const uhd::time_spec_t &time)
uhd::time_spec_t get_time_now(void)
virtual void set_period(const uint64_t period_ns)=0
void set_time_now(const uhd::time_spec_t &time)
std::shared_ptr< timekeeper > sptr
Definition: mb_controller.hpp:42
virtual void set_ticks_next_pps(const uint64_t ticks)=0
double get_tick_rate()
Definition: mb_controller.hpp:101
std::function< void(uint64_t)> write_period_fn_t
Definition: mb_controller.hpp:43
void set_tick_rate(const double rate)
virtual uint64_t get_ticks_last_pps()=0
Definition: mb_controller.hpp:25
virtual std::string get_mboard_name() const =0
virtual uhd::usrp::mboard_eeprom_t get_eeprom()=0
timekeeper::sptr get_timekeeper(const size_t tk_idx) const
Return a reference to the tk_idx-th timekeeper on this motherboard.
virtual void init()
Definition: mb_controller.hpp:142
virtual uhd::sensor_value_t get_sensor(const std::string &name)=0
virtual std::vector< std::string > get_gpio_banks() const
virtual void set_time_source(const std::string &source)=0
virtual void set_sync_source(const std::string &clock_source, const std::string &time_source)=0
virtual std::vector< std::string > get_time_sources() const =0
virtual std::string get_time_source() const =0
std::shared_ptr< mb_controller > sptr
Definition: mb_controller.hpp:27
virtual std::vector< uhd::device_addr_t > get_sync_sources()=0
virtual std::string get_clock_source() const =0
virtual void set_clock_source_out(const bool enb)=0
virtual void set_gpio_src(const std::string &bank, const std::vector< std::string > &src)
virtual std::vector< std::string > get_sensor_names()=0
size_t get_num_timekeepers() const
Returns the number of timekeepers, which equals the number of timebases.
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)
virtual void set_sync_source(const uhd::device_addr_t &sync_source)=0
virtual void set_clock_source(const std::string &source)=0
virtual std::vector< std::string > get_gpio_src(const std::string &bank)
void register_timekeeper(const size_t idx, timekeeper::sptr tk)
virtual std::vector< std::string > get_clock_sources() const =0
virtual void set_time_source_out(const bool enb)=0
virtual ~mb_controller()
Definition: mb_controller.hpp:29
virtual uhd::device_addr_t get_sync_source() const =0
virtual std::vector< std::string > get_gpio_srcs(const std::string &bank) const
Definition: time_spec.hpp:31
#define UHD_API
Definition: config.h:67
source
Identify the source of calibration data, i.e., where was it stored.
Definition: database.hpp:22
Definition: build_info.hpp:12
boost::noncopyable noncopyable
Definition: noncopyable.hpp:45
Definition: sensors.hpp:29