aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/include/uhd/usrp/usrp.h40
-rw-r--r--host/lib/usrp/usrp_c.cpp48
2 files changed, 88 insertions, 0 deletions
diff --git a/host/include/uhd/usrp/usrp.h b/host/include/uhd/usrp/usrp.h
index ab9c4d28f..1bde694b4 100644
--- a/host/include/uhd/usrp/usrp.h
+++ b/host/include/uhd/usrp/usrp.h
@@ -36,6 +36,13 @@
#include <stdint.h>
#include <time.h>
+//! Register info
+typedef struct {
+ size_t bitwidth;
+ bool readable;
+ bool writable;
+} uhd_usrp_register_info_t;
+
/*
* Streamers
*/
@@ -1105,6 +1112,39 @@ UHD_API uhd_error uhd_usrp_get_gpio_attr(
uint32_t *attr_out
);
+//! Enumerate the full paths of USRP registers available for read/write
+UHD_API uhd_error uhd_usrp_enumerate_registers(
+ uhd_usrp_handle h,
+ size_t mboard,
+ uhd_string_vector_handle *registers_out
+);
+
+//! Get more information about a low-level device register
+UHD_API uhd_error uhd_usrp_get_register_info(
+ uhd_usrp_handle h,
+ const char* path,
+ size_t mboard,
+ uhd_usrp_register_info_t *register_info_out
+);
+
+//! Write a low-level register field for a device register in the USRP hardware
+UHD_API uhd_error uhd_usrp_write_register(
+ uhd_usrp_handle h,
+ const char* path,
+ uint32_t field,
+ uint64_t value,
+ size_t mboard
+);
+
+//! Read a low-level register field from a device register in the USRP hardware
+UHD_API uhd_error uhd_usrp_read_register(
+ uhd_usrp_handle h,
+ const char* path,
+ uint32_t field,
+ size_t mboard,
+ uint64_t *value_out
+);
+
#ifdef __cplusplus
}
#endif
diff --git a/host/lib/usrp/usrp_c.cpp b/host/lib/usrp/usrp_c.cpp
index 724b907a1..69f2bd5e5 100644
--- a/host/lib/usrp/usrp_c.cpp
+++ b/host/lib/usrp/usrp_c.cpp
@@ -1363,3 +1363,51 @@ uhd_error uhd_usrp_get_gpio_attr(
*attr_out = USRP(h)->get_gpio_attr(std::string(bank), std::string(attr), mboard);
)
}
+
+uhd_error uhd_usrp_enumerate_registers(
+ uhd_usrp_handle h,
+ size_t mboard,
+ uhd_string_vector_handle *registers_out
+){
+ UHD_SAFE_C_SAVE_ERROR(h,
+ (*registers_out)->string_vector_cpp = USRP(h)->enumerate_registers(mboard);
+ )
+}
+
+uhd_error uhd_usrp_get_register_info(
+ uhd_usrp_handle h,
+ const char* path,
+ size_t mboard,
+ uhd_usrp_register_info_t *register_info_out
+){
+ UHD_SAFE_C_SAVE_ERROR(h,
+ uhd::usrp::multi_usrp::register_info_t register_info_cpp = USRP(h)->get_register_info(path, mboard);
+ register_info_out->bitwidth = register_info_cpp.bitwidth;
+ register_info_out->readable = register_info_cpp.readable;
+ register_info_out->writable = register_info_cpp.writable;
+ )
+}
+
+uhd_error uhd_usrp_write_register(
+ uhd_usrp_handle h,
+ const char* path,
+ uint32_t field,
+ uint64_t value,
+ size_t mboard
+){
+ UHD_SAFE_C_SAVE_ERROR(h,
+ USRP(h)->write_register(path, field, value, mboard);
+ )
+}
+
+uhd_error uhd_usrp_write_register(
+ uhd_usrp_handle h,
+ const char* path,
+ uint32_t field,
+ size_t mboard,
+ uint64_t *value_out
+){
+ UHD_SAFE_C_SAVE_ERROR(h,
+ *value_out = USRP(h)->read_register(path, field, mboard);
+ )
+}