aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/UHDDevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Transceiver52M/UHDDevice.cpp')
-rw-r--r--Transceiver52M/UHDDevice.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/Transceiver52M/UHDDevice.cpp b/Transceiver52M/UHDDevice.cpp
index a065ed7..c725696 100644
--- a/Transceiver52M/UHDDevice.cpp
+++ b/Transceiver52M/UHDDevice.cpp
@@ -58,6 +58,8 @@ const double rx_smpl_offset = .00005;
const double rx_smpl_offset = .0000869;
#endif
+static TIMESTAMP init_rd_ts = 0;
+
/** Timestamp conversion
@param timestamp a UHD or OpenBTS timestamp
@param rate sample rate
@@ -169,8 +171,8 @@ public:
bool setTxFreq(double wFreq);
bool setRxFreq(double wFreq);
- inline TIMESTAMP initialWriteTimestamp() { return 0; }
- inline TIMESTAMP initialReadTimestamp() { return 0; }
+ inline TIMESTAMP initialWriteTimestamp() { return init_rd_ts; }
+ inline TIMESTAMP initialReadTimestamp() { return init_rd_ts; }
inline double fullScaleInputValue() { return 32000 * tx_ampl; }
inline double fullScaleOutputValue() { return 32000; }
@@ -546,6 +548,17 @@ void uhd_device::restart(uhd::time_spec_t ts)
cmd = uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS;
cmd.stream_now = true;
usrp_dev->issue_stream_cmd(cmd);
+
+ uhd::rx_metadata_t md;
+ uint32_t buff[rx_spp];
+
+ usrp_dev->get_device()->recv(buff,
+ rx_spp,
+ md,
+ uhd::io_type_t::COMPLEX_INT16,
+ uhd::device::RECV_MODE_ONE_PACKET);
+
+ init_rd_ts = convert_time(md.time_spec, actual_smpl_rt);
}
bool uhd_device::start()
@@ -912,7 +925,7 @@ ssize_t smpl_buf::read(void *buf, size_t len, TIMESTAMP timestamp)
num_smpls = len;
// Starting index
- size_t read_start = data_start + (timestamp - time_start);
+ size_t read_start = data_start + (timestamp - time_start) % buf_len;
// Read it
if (read_start + num_smpls < buf_len) {