diff options
Diffstat (limited to 'host')
| -rw-r--r-- | host/include/uhd/usrp/usrp.h | 40 | ||||
| -rw-r--r-- | host/lib/usrp/usrp_c.cpp | 48 | 
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); +    ) +} | 
