diff options
author | Martin Braun <martin.braun@ettus.com> | 2018-04-06 11:36:04 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2018-04-06 18:39:11 -0700 |
commit | d4eaee390db2fefd4564b6054d8d066c437d8cff (patch) | |
tree | a549bdb025674630ccff63d699a6ba63eab4d35f /host/lib/include/uhdlib | |
parent | bf1d22ffe871c9b4293d87ff0f5abe7511dab00b (diff) | |
download | uhd-d4eaee390db2fefd4564b6054d8d066c437d8cff.tar.gz uhd-d4eaee390db2fefd4564b6054d8d066c437d8cff.tar.bz2 uhd-d4eaee390db2fefd4564b6054d8d066c437d8cff.zip |
lib: move atomic.hpp and system_time.hpp to uhdlib
Diffstat (limited to 'host/lib/include/uhdlib')
-rw-r--r-- | host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp | 2 | ||||
-rw-r--r-- | host/lib/include/uhdlib/utils/atomic.hpp | 74 | ||||
-rw-r--r-- | host/lib/include/uhdlib/utils/system_time.hpp | 18 |
3 files changed, 93 insertions, 1 deletions
diff --git a/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp b/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp index 74807741f..3a17b864e 100644 --- a/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp +++ b/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp @@ -8,7 +8,7 @@ #ifndef INCLUDED_LIBUHD_USRP_COMMON_RECV_PACKET_DEMUXER_3000_HPP #define INCLUDED_LIBUHD_USRP_COMMON_RECV_PACKET_DEMUXER_3000_HPP -#include <uhd/utils/system_time.hpp> +#include <uhdlib/utils/system_time.hpp> #include <uhd/config.hpp> #include <uhd/transport/zero_copy.hpp> #include <uhd/utils/log.hpp> diff --git a/host/lib/include/uhdlib/utils/atomic.hpp b/host/lib/include/uhdlib/utils/atomic.hpp new file mode 100644 index 000000000..5436eea81 --- /dev/null +++ b/host/lib/include/uhdlib/utils/atomic.hpp @@ -0,0 +1,74 @@ +// +// Copyright 2012-2013,2016-2017 Ettus Research LLC +// Copyright 2018 Ettus Research, a National Instruments Company +// +// SPDX-License-Identifier: GPL-3.0-or-later +// + +#ifndef INCLUDED_UHD_UTILS_ATOMIC_HPP +#define INCLUDED_UHD_UTILS_ATOMIC_HPP + +#include <uhd/config.hpp> +#include <uhd/types/time_spec.hpp> +#include <uhdlib/utils/system_time.hpp> +#include <boost/thread/thread.hpp> +#include <atomic> + +namespace uhd{ + + /*! DEPRECATED -- Will be removed in coming versions of UHD. + * + * Spin-wait on a condition with a timeout. + * \param cond an atomic variable to compare + * \param value compare to atomic for true/false + * \param timeout the timeout in seconds + * \return true for cond == value, false for timeout + */ + template<typename T> + UHD_INLINE bool spin_wait_with_timeout( + std::atomic<T> &cond, + const T value, + const double timeout + ){ + if (cond == value) return true; + const time_spec_t exit_time = uhd::get_system_time() + time_spec_t(timeout); + while (cond != value) { + if (uhd::get_system_time() > exit_time) { + return false; + } + boost::this_thread::interruption_point(); + boost::this_thread::yield(); + } + return true; + } + + /*! DEPRECATED -- Will be removed in coming versions of UHD. + * + * Claimer class to provide synchronization for multi-thread access. + * Claiming enables buffer classes to be used with a buffer queue. + */ + class simple_claimer{ + public: + simple_claimer(void){ + this->release(); + } + + UHD_INLINE void release(void){ + _locked = false; + } + + UHD_INLINE bool claim_with_wait(const double timeout){ + if (spin_wait_with_timeout(_locked, false, timeout)){ + _locked = true; + return true; + } + return false; + } + + private: + std::atomic<bool> _locked; + }; + +} //namespace uhd + +#endif /* INCLUDED_UHD_UTILS_ATOMIC_HPP */ diff --git a/host/lib/include/uhdlib/utils/system_time.hpp b/host/lib/include/uhdlib/utils/system_time.hpp new file mode 100644 index 000000000..30cd5a673 --- /dev/null +++ b/host/lib/include/uhdlib/utils/system_time.hpp @@ -0,0 +1,18 @@ +// +// Copyright 2017 Ettus Research (National Instruments Corp.) +// +// SPDX-License-Identifier: GPL-3.0+ +// + +#include <uhd/types/time_spec.hpp> + +namespace uhd { + + /*! + * Get the system time in time_spec_t format. + * Uses the highest precision clock available. + * \return the system time as a time_spec_t + */ + time_spec_t get_system_time(void); + +}; /* namespace uhd */ |