From 94325a3f602618cd980c5f261f4b661c31623dd9 Mon Sep 17 00:00:00 2001 From: Alexander Chemeris Date: Sat, 11 Jul 2015 12:48:53 -0400 Subject: UHD: HACK: diversity switch control function. --- Transceiver52M/UHDDevice.cpp | 30 ++++++++++++++++++++++++++++++ Transceiver52M/radioDevice.h | 2 ++ 2 files changed, 32 insertions(+) diff --git a/Transceiver52M/UHDDevice.cpp b/Transceiver52M/UHDDevice.cpp index b094abd..a62e02f 100644 --- a/Transceiver52M/UHDDevice.cpp +++ b/Transceiver52M/UHDDevice.cpp @@ -332,6 +332,8 @@ public: TIMESTAMP getCurrentTimestampRx() { return current_time.to_ticks(rx_rate); } TIMESTAMP getCurrentTimestampTx() { return current_time.to_ticks(tx_rate); } + void set_diversity(bool diversity, TIMESTAMP cmd_time, size_t chan); + /** Receive and process asynchronous message @return true if message received or false on timeout or error */ @@ -373,6 +375,8 @@ private: uhd::time_spec_t current_time; std::vector rx_buffers; + std::vector* > divsw_props; + void init_gains(); int set_master_clk(double rate); int set_rates(double tx_rate, double rx_rate); @@ -794,6 +798,12 @@ int uhd_device::open(const std::string &args, bool extref, bool swap_channels) ts_offset = (TIMESTAMP) (offset * rx_rate); } + divsw_props.resize(chans); + for (size_t i=0; iget_device()->get_tree()->access(db_path / "rx_frontends" / "0" / "diversity"); + } + // Initialize and shadow gain values init_gains(); @@ -1264,6 +1274,26 @@ double uhd_device::fullScaleOutputValue() return (double) SHRT_MAX; } +void uhd_device::set_diversity(bool diversity, TIMESTAMP cmd_timestamp, size_t chan) +{ + // Shift read time with respect to transmit clock + TIMESTAMP rx_timestamp = cmd_timestamp+ts_offset; + const uhd::time_spec_t cmd_time = convert_time(rx_timestamp, rx_rate); + +// LOG(INFO) << "Sending timed command at " << std::setprecision(15) << cmd_time.get_real_secs() << " sec " +// << rx_timestamp << " original cmd_timestamp=" << cmd_timestamp; +// LOG(INFO) << "Sending timed command at " << cmd_time.get_real_secs() << " sec " +// << rx_timestamp << " original cmd_timestamp=" << cmd_timestamp; + + usrp_dev->set_command_time(cmd_time); + divsw_props[chan]->set(diversity ? 1 : 0); +// usrp_dev->get_device()->get_tree()->access(db_path / "rx_frontends" / "0" / "diversity").set(diversity ? 1 : 0); +// usrp_dev->set_rx_antenna((diversity?"RX2":"RX1"), chan); +// usrp_dev->set_rx_gain((diversity?rx_gains[chan]-10:rx_gains[chan]), chan); +// usrp_dev->set_rx_gain(rx_gains[chan], chan); + usrp_dev->clear_command_time(); +} + bool uhd_device::recv_async_msg() { uhd::async_metadata_t md; diff --git a/Transceiver52M/radioDevice.h b/Transceiver52M/radioDevice.h index 9a7497a..3ed5350 100644 --- a/Transceiver52M/radioDevice.h +++ b/Transceiver52M/radioDevice.h @@ -133,6 +133,8 @@ class RadioDevice { virtual TIMESTAMP getCurrentTimestampRx() = 0; virtual TIMESTAMP getCurrentTimestampTx() = 0; + /** Diversity switch support */ + virtual void set_diversity(bool diversity, TIMESTAMP cmd_time, size_t chan) = 0; }; #endif -- cgit v1.2.3