USRP Hardware Driver and USRP Manual Version: 4.7.0.0-0-unknown
UHD and USRP Manual
 
Loading...
Searching...
No Matches
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>
12#include <uhd/types/sensors.hpp>
16#include <unordered_map>
17#include <functional>
18#include <memory>
19#include <vector>
20
21namespace uhd { namespace rfnoc {
22
26 : public uhd::noncopyable,
28{
29public:
30 using sptr = std::shared_ptr<mb_controller>;
32
38 using sync_source_updater_t = std::function<void(const sync_source_t& sync_source)>;
39
40 ~mb_controller() override = default;
41
42 /**************************************************************************
43 * Timebase API
44 *************************************************************************/
60 {
61 public:
62 using sptr = std::shared_ptr<timekeeper>;
63 using write_period_fn_t = std::function<void(uint64_t)>;
64
66
67 virtual ~timekeeper() {}
68
87
102 virtual uint64_t get_ticks_now() = 0;
103
112
117 virtual uint64_t get_ticks_last_pps() = 0;
118
125
133 virtual void set_ticks_now(const uint64_t ticks) = 0;
134
146
160 virtual void set_ticks_next_pps(const uint64_t ticks) = 0;
161
165 {
166 return _tick_rate;
167 }
168
169 protected:
178 void set_tick_rate(const double rate);
179
184 virtual void set_period(const uint64_t period_ns) = 0;
185
186 private:
188 double _tick_rate = 1.0;
189 };
190
192 // on this device.
193 //
194 // Most USRPs have one timekeeper. Refer to the manual for your device
195 // family for potential exceptions to this behavior. Custom FPGA images
196 // may also implement multiple timekeepers for various purposes.
197 size_t get_num_timekeepers() const;
198
200 //
201 // For most USRPs, timekeeper index 0 is used to access the main timekeeper.
202 // When using a USRP with multiple timekeepers, refer to the relevant device
203 // family manual for more information on timekeeper mapping and enumeration.
204 //
205 // Custom FPGA images can implement multiple timekeepers.
206 //
207 // To make sure that \p tk_idx is a valid value, get_num_timekeepers() can
208 // be used to query the number of timekeepers available.
209 //
210 // \throws uhd::index_error if \p tk_idx is not valid
211 timekeeper::sptr get_timekeeper(const size_t tk_idx) const;
212
213 /**************************************************************************
214 * Motherboard Control
215 *************************************************************************/
218 virtual void init() {}
219
224 virtual std::string get_mboard_name() const = 0;
225
267 virtual void set_time_source(const std::string& source) = 0;
268
273 virtual std::string get_time_source() const = 0;
274
279 virtual std::vector<std::string> get_time_sources() const = 0;
280
322 virtual void set_clock_source(const std::string& source) = 0;
323
328 virtual std::string get_clock_source() const = 0;
329
334 virtual std::vector<std::string> get_clock_sources() const = 0;
335
345 virtual void set_sync_source(
346 const std::string& clock_source, const std::string& time_source) = 0;
347
377 virtual void set_sync_source(const uhd::device_addr_t& sync_source) = 0;
378
384
389 virtual std::vector<uhd::device_addr_t> get_sync_sources() = 0;
390
398 virtual void set_clock_source_out(const bool enb) = 0;
399
407 virtual void set_time_source_out(const bool enb) = 0;
408
414 virtual uhd::sensor_value_t get_sensor(const std::string& name) = 0;
415
420 virtual std::vector<std::string> get_sensor_names() = 0;
421
425
461 virtual bool synchronize(std::vector<mb_controller::sptr>& mb_controllers,
462 const uhd::time_spec_t& time_spec = uhd::time_spec_t(0.0),
463 const bool quiet = false);
464
470 virtual std::vector<std::string> get_gpio_banks() const;
471
477 virtual std::vector<std::string> get_gpio_srcs(const std::string& bank) const;
478
481 virtual std::vector<std::string> get_gpio_src(const std::string& bank);
482
490 virtual void set_gpio_src(
491 const std::string& bank, const std::vector<std::string>& src);
492
502
503protected:
507 void register_timekeeper(const size_t idx, timekeeper::sptr tk);
508
509private:
510 /**************************************************************************
511 * Attributes
512 *************************************************************************/
513 std::unordered_map<size_t, timekeeper::sptr> _timekeepers;
514};
515
516}} // namespace uhd::rfnoc
Definition device_addr.hpp:38
Definition discoverable_feature_getter_iface.hpp:18
Definition mb_controller.hpp:60
virtual void set_ticks_now(const uint64_t ticks)=0
virtual ~timekeeper()
Definition mb_controller.hpp:67
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:62
virtual void set_ticks_next_pps(const uint64_t ticks)=0
double get_tick_rate()
Definition mb_controller.hpp:164
std::function< void(uint64_t)> write_period_fn_t
Definition mb_controller.hpp:63
void set_tick_rate(const double rate)
virtual uint64_t get_ticks_last_pps()=0
Definition mb_controller.hpp:28
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:218
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 register_sync_source_updater(sync_source_updater_t callback_f)
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:30
virtual std::vector< uhd::device_addr_t > get_sync_sources()=0
virtual std::string get_clock_source() const =0
std::function< void(const sync_source_t &sync_source)> sync_source_updater_t
Definition mb_controller.hpp:38
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)
~mb_controller() override=default
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 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:87
Definition build_info.hpp:12
boost::noncopyable noncopyable
Definition noncopyable.hpp:45
Definition sensors.hpp:29