From 8d6b63e1e86ae0f1ee8b084ea2db6d5b5b705179 Mon Sep 17 00:00:00 2001 From: Nicholas Corgan Date: Fri, 14 Aug 2015 08:03:00 -0700 Subject: C API: added soft register API --- host/include/uhd/usrp/usrp.h | 40 ++++++++++++++++++++++++++++++++++++ host/lib/usrp/usrp_c.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) (limited to 'host') 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 #include +//! 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); + ) +} -- cgit v1.2.3