diff options
-rw-r--r-- | host/include/uhd/types/CMakeLists.txt | 1 | ||||
-rw-r--r-- | host/include/uhd/types/memmap_iface.hpp | 42 |
2 files changed, 43 insertions, 0 deletions
diff --git a/host/include/uhd/types/CMakeLists.txt b/host/include/uhd/types/CMakeLists.txt index 108a37da4..730ee0e65 100644 --- a/host/include/uhd/types/CMakeLists.txt +++ b/host/include/uhd/types/CMakeLists.txt @@ -15,6 +15,7 @@ UHD_INSTALL(FILES eeprom.hpp endianness.hpp mac_addr.hpp + memmap_iface.hpp metadata.hpp ranges.hpp ref_vector.hpp diff --git a/host/include/uhd/types/memmap_iface.hpp b/host/include/uhd/types/memmap_iface.hpp new file mode 100644 index 000000000..fa6c18d4a --- /dev/null +++ b/host/include/uhd/types/memmap_iface.hpp @@ -0,0 +1,42 @@ +// +// Copyright 2020 Ettus Research, a National Instruments Brand +// +// SPDX-License-Identifier: GPL-3.0-or-later +// + +#pragma once + +#include <uhd/config.hpp> +#include <uhd/types/time_spec.hpp> +#include <stdint.h> +#include <functional> + +namespace uhd { + +//! Represents a 32-bit, memory-mapped interface (peek/poke). +// This is a simplified version of wb_iface, useful for those cases when we use +// closures to provide bespoke peek/poke interfaces to objects. +struct UHD_API memmap32_iface +{ + using poke32_fn_t = std::function<void(const uint32_t addr, const uint32_t data)>; + using peek32_fn_t = std::function<uint32_t(const uint32_t addr)>; + + poke32_fn_t poke32; + peek32_fn_t peek32; +}; + +//! Represents a 32-bit, memory-mapped interface (peek/poke). +// +// The difference to memmap32_iface is that the poke command will require a command +// time. +struct UHD_API memmap32_iface_timed +{ + using poke32_fn_t = std::function<void( + const uint32_t addr, const uint32_t data, const uhd::time_spec_t& time)>; + using peek32_fn_t = std::function<uint32_t(const uint32_t addr)>; + + poke32_fn_t poke32; + peek32_fn_t peek32; +}; + +} // namespace uhd |