aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/include/uhdlib
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2018-04-06 11:36:04 -0700
committerMartin Braun <martin.braun@ettus.com>2018-04-06 18:39:11 -0700
commitd4eaee390db2fefd4564b6054d8d066c437d8cff (patch)
treea549bdb025674630ccff63d699a6ba63eab4d35f /host/lib/include/uhdlib
parentbf1d22ffe871c9b4293d87ff0f5abe7511dab00b (diff)
downloaduhd-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.hpp2
-rw-r--r--host/lib/include/uhdlib/utils/atomic.hpp74
-rw-r--r--host/lib/include/uhdlib/utils/system_time.hpp18
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 */