diff options
Diffstat (limited to 'Transceiver52M/UHDDevice.cpp')
-rw-r--r-- | Transceiver52M/UHDDevice.cpp | 19 |
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) { |