diff options
Diffstat (limited to 'Transceiver52M/device/uhd/UHDDevice.cpp')
-rw-r--r-- | Transceiver52M/device/uhd/UHDDevice.cpp | 71 |
1 files changed, 45 insertions, 26 deletions
diff --git a/Transceiver52M/device/uhd/UHDDevice.cpp b/Transceiver52M/device/uhd/UHDDevice.cpp index f109660..d8b969a 100644 --- a/Transceiver52M/device/uhd/UHDDevice.cpp +++ b/Transceiver52M/device/uhd/UHDDevice.cpp @@ -557,7 +557,7 @@ int uhd_device::open(const std::string &args, int ref, bool swap_channels) #ifdef USE_UHD_3_11 uhd::log::add_logger("OsmoTRX", &uhd_log_handler); uhd::log::set_log_level(uhd::log::debug); - uhd::log::set_console_level(uhd::log::off); + uhd::log::set_console_level(uhd::log::debug); uhd::log::set_logger_level("OsmoTRX", uhd::log::debug); #else uhd::msg::register_handler(&uhd_msg_handler); @@ -870,7 +870,7 @@ int uhd_device::readSamples(std::vector<short *> &bufs, int len, bool *overrun, if (rc < 0) { LOGC(DDEV, ERROR) << rx_buffers[0]->str_code(rc); LOGC(DDEV, ERROR) << rx_buffers[0]->str_status(timestamp); - return 0; + return len; } // Receive samples from the usrp until we have enough @@ -975,13 +975,14 @@ int uhd_device::writeSamples(std::vector<short *> &bufs, int len, bool *underrun bool uhd_device::updateAlignment(TIMESTAMP timestamp) { + aligned = false; return true; } uhd::tune_request_t uhd_device::select_freq(double freq, size_t chan, bool tx) { double rf_spread, rf_freq; - std::vector<double> freqs; + std::vector<tune_result> freqs; uhd::tune_request_t treq(freq); if (dev_type == UMTRX) { @@ -1013,17 +1014,17 @@ uhd::tune_request_t uhd_device::select_freq(double freq, size_t chan, bool tx) freqs = rx_freqs; /* Tune directly if other channel isn't tuned */ - if (freqs[!chan] < 10.0) + if (freqs[!chan].freq < 10.0) return treq; /* Find center frequency between channels */ - rf_spread = fabs(freqs[!chan] - freq); + rf_spread = fabs(freqs[!chan].freq - freq); if (rf_spread > dev_param_map.at(dev_key(B210, tx_sps, rx_sps)).mcr) { LOGC(DDEV, ALERT) << rf_spread << "Hz tuning spread not supported\n"; return treq; } - rf_freq = (freqs[!chan] + freq) / 2.0f; + rf_freq = (freqs[!chan].freq + freq) / 2.0f; treq.rf_freq_policy = uhd::tune_request_t::POLICY_MANUAL; treq.target_freq = freq; @@ -1041,11 +1042,13 @@ bool uhd_device::set_freq(double freq, size_t chan, bool tx) if (tx) { tres = usrp_dev->set_tx_freq(treq, chan); - tx_freqs[chan] = usrp_dev->get_tx_freq(chan); + tx_freqs[chan].uhd = tres; + tx_freqs[chan].freq = usrp_dev->get_tx_freq(chan); str_dir = "Tx"; } else { tres = usrp_dev->set_rx_freq(treq, chan); - rx_freqs[chan] = usrp_dev->get_rx_freq(chan); + rx_freqs[chan].uhd = tres; + rx_freqs[chan].freq = usrp_dev->get_rx_freq(chan); str_dir = "Rx"; } LOGCHAN(chan, DDEV, INFO) << "set_freq(" << freq << ", " << str_dir << "): " << tres.to_pp_string() << std::endl; @@ -1059,13 +1062,15 @@ bool uhd_device::set_freq(double freq, size_t chan, bool tx) */ if (treq.rf_freq_policy == uhd::tune_request_t::POLICY_MANUAL) { if (tx) { - treq = select_freq(tx_freqs[!chan], !chan, true); + treq = select_freq(tx_freqs[!chan].freq, !chan, true); tres = usrp_dev->set_tx_freq(treq, !chan); - tx_freqs[!chan] = usrp_dev->get_tx_freq(!chan); + tx_freqs[chan].uhd = tres; + tx_freqs[!chan].freq = usrp_dev->get_tx_freq(!chan); } else { - treq = select_freq(rx_freqs[!chan], !chan, false); + treq = select_freq(rx_freqs[!chan].freq, !chan, false); tres = usrp_dev->set_rx_freq(treq, !chan); - rx_freqs[!chan] = usrp_dev->get_rx_freq(!chan); + tx_freqs[chan].uhd = tres; + rx_freqs[!chan].freq = usrp_dev->get_rx_freq(!chan); } LOGCHAN(chan, DDEV, INFO) << "set_freq(" << freq << ", " << str_dir << "): " << tres.to_pp_string() << std::endl; @@ -1105,6 +1110,20 @@ bool uhd_device::setTxFreq(double wFreq, size_t chan) return true; } +bool uhd_device::setRxOffset(double wOffset, size_t chan) +{ + uhd::tune_result_t tres; + uhd::tune_request_t treq(rx_freqs[chan].freq - wOffset); + + treq.rf_freq_policy = uhd::tune_request_t::POLICY_MANUAL; + treq.rf_freq = rx_freqs[chan].uhd.actual_rf_freq; + + tres = usrp_dev->set_rx_freq(treq, chan); + rx_freqs[chan].freq = usrp_dev->get_rx_freq(chan); + + return true; +} + bool uhd_device::setRxFreq(double wFreq, size_t chan) { uint16_t req_arfcn; @@ -1116,19 +1135,19 @@ bool uhd_device::setRxFreq(double wFreq, size_t chan) } ScopedLock lock(tune_lock); - req_arfcn = gsm_freq102arfcn(wFreq / 1000 / 100, 1); - if (req_arfcn == 0xffff) { - LOGCHAN(chan, DDEV, ALERT) << "Unknown ARFCN for Rx Frequency " << wFreq / 1000 << " kHz"; - return false; - } - if (gsm_arfcn2band_rc(req_arfcn, &req_band) < 0) { - LOGCHAN(chan, DDEV, ALERT) << "Unknown GSM band for Rx Frequency " << wFreq - << " Hz (ARFCN " << req_arfcn << " )"; - return false; - } + // req_arfcn = gsm_freq102arfcn(wFreq / 1000 / 100, 1); + // if (req_arfcn == 0xffff) { + // LOGCHAN(chan, DDEV, ALERT) << "Unknown ARFCN for Rx Frequency " << wFreq / 1000 << " kHz"; + // return false; + // } + // if (gsm_arfcn2band_rc(req_arfcn, &req_band) < 0) { + // LOGCHAN(chan, DDEV, ALERT) << "Unknown GSM band for Rx Frequency " << wFreq + // << " Hz (ARFCN " << req_arfcn << " )"; + // return false; + // } - if (!set_band(req_band)) - return false; + // if (!set_band(req_band)) + // return false; return set_freq(wFreq, chan, false); } @@ -1140,7 +1159,7 @@ double uhd_device::getTxFreq(size_t chan) return 0.0; } - return tx_freqs[chan]; + return tx_freqs[chan].freq; } double uhd_device::getRxFreq(size_t chan) @@ -1150,7 +1169,7 @@ double uhd_device::getRxFreq(size_t chan) return 0.0; } - return rx_freqs[chan]; + return rx_freqs[chan].freq; } bool uhd_device::setRxAntenna(const std::string &ant, size_t chan) |