Hoernchen has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-trx/+/32764 )

Change subject: devices: add freq/gain override for uhd
......................................................................

devices: add freq/gain override for uhd

This allows using arbitrary gain and frequencies.

Change-Id: I3c1b9a067cafc6d696b9aa2da8ee0480ec1e094f
---
M CommonLibs/config_defs.h
M CommonLibs/trx_vty.c
M Transceiver52M/device/uhd/UHDDevice.cpp
3 files changed, 122 insertions(+), 0 deletions(-)

Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved




diff --git a/CommonLibs/config_defs.h b/CommonLibs/config_defs.h
index 33be73f..bf49bcf 100644
--- a/CommonLibs/config_defs.h
+++ b/CommonLibs/config_defs.h
@@ -57,4 +57,14 @@
        unsigned int stack_size;
        unsigned int num_chans;
        struct trx_chan chans[TRX_CHAN_MAX];
+       struct {
+               bool ul_freq_override;
+               bool dl_freq_override;
+               bool ul_gain_override;
+               bool dl_gain_override;
+               double ul_freq;
+               double dl_freq;
+               double ul_gain;
+               double dl_gain;
+       } overrides;
 };
diff --git a/CommonLibs/trx_vty.c b/CommonLibs/trx_vty.c
index 6724189..1878d83 100644
--- a/CommonLibs/trx_vty.c
+++ b/CommonLibs/trx_vty.c
@@ -285,6 +285,60 @@
        return CMD_SUCCESS;
 }

+DEFUN_ATTR(cfg_ul_freq_override, cfg_ul_freq_override_cmd,
+          "ul-freq-override FLOAT",
+          "Overrides Rx carrier frequency\n"
+          "Frequency in Hz (e.g. 145300000)\n",
+          CMD_ATTR_HIDDEN)
+{
+       struct trx_ctx *trx = trx_from_vty(vty);
+
+       trx->cfg.overrides.ul_freq_override = true;
+       trx->cfg.overrides.ul_freq = atof(argv[0]);
+
+       return CMD_SUCCESS;
+}
+DEFUN_ATTR(cfg_dl_freq_override, cfg_dl_freq_override_cmd,
+          "dl-freq-override FLOAT",
+          "Overrides Tx carrier frequency\n"
+          "Frequency in Hz (e.g. 145300000)\n",
+          CMD_ATTR_HIDDEN)
+{
+       struct trx_ctx *trx = trx_from_vty(vty);
+
+       trx->cfg.overrides.dl_freq_override = true;
+       trx->cfg.overrides.dl_freq = atof(argv[0]);
+
+       return CMD_SUCCESS;
+}
+
+DEFUN_ATTR(cfg_ul_gain_override, cfg_ul_gain_override_cmd,
+          "ul-gain-override FLOAT",
+          "Overrides Rx gain\n"
+          "gain in dB\n",
+          CMD_ATTR_HIDDEN)
+{
+       struct trx_ctx *trx = trx_from_vty(vty);
+
+       trx->cfg.overrides.ul_gain_override = true;
+       trx->cfg.overrides.ul_gain = atof(argv[0]);
+
+       return CMD_SUCCESS;
+}
+DEFUN_ATTR(cfg_dl_gain_override, cfg_dl_gain_override_cmd,
+          "dl-gain-override FLOAT",
+          "Overrides Tx gain\n"
+          "gain in dB\n",
+          CMD_ATTR_HIDDEN)
+{
+       struct trx_ctx *trx = trx_from_vty(vty);
+
+       trx->cfg.overrides.dl_gain_override = true;
+       trx->cfg.overrides.dl_gain = atof(argv[0]);
+
+       return CMD_SUCCESS;
+}
+
 DEFUN(cfg_swap_channels, cfg_swap_channels_cmd,
        "swap-channels (disable|enable)",
        "Swap primary and secondary channels of the PHY (if any)\n"
@@ -638,6 +692,14 @@
                vty_out(vty, " stack-size %u%s", trx->cfg.stack_size, 
VTY_NEWLINE);
        if (trx->cfg.ul_fn_offset != 0)
                vty_out(vty, " ul-fn-offset %d%s", trx->cfg.ul_fn_offset, 
VTY_NEWLINE);
+       if (trx->cfg.overrides.dl_freq_override)
+               vty_out(vty, " dl-freq-override %f%s", 
trx->cfg.overrides.dl_freq, VTY_NEWLINE);
+       if (trx->cfg.overrides.ul_freq_override)
+               vty_out(vty, " ul-freq-override %f%s", 
trx->cfg.overrides.ul_freq, VTY_NEWLINE);
+       if (trx->cfg.overrides.dl_gain_override)
+               vty_out(vty, " dl-gain-override %f%s", 
trx->cfg.overrides.dl_gain, VTY_NEWLINE);
+       if (trx->cfg.overrides.ul_gain_override)
+               vty_out(vty, " ul-gain-override %f%s", 
trx->cfg.overrides.ul_gain, VTY_NEWLINE);
        trx_rate_ctr_threshold_write_config(vty, " ");

        for (i = 0; i < trx->cfg.num_chans; i++) {
@@ -803,6 +865,10 @@

        install_element(TRX_NODE, &cfg_chan_cmd);
        install_element(TRX_NODE, &cfg_ul_fn_offset_cmd);
+       install_element(TRX_NODE, &cfg_ul_freq_override_cmd);
+       install_element(TRX_NODE, &cfg_dl_freq_override_cmd);
+       install_element(TRX_NODE, &cfg_ul_gain_override_cmd);
+       install_element(TRX_NODE, &cfg_dl_gain_override_cmd);
        install_node(&chan_node, dummy_config_write);
        install_element(CHAN_NODE, &cfg_chan_rx_path_cmd);
        install_element(CHAN_NODE, &cfg_chan_tx_path_cmd);
diff --git a/Transceiver52M/device/uhd/UHDDevice.cpp 
b/Transceiver52M/device/uhd/UHDDevice.cpp
index 95ea8e7..ec772aa 100644
--- a/Transceiver52M/device/uhd/UHDDevice.cpp
+++ b/Transceiver52M/device/uhd/UHDDevice.cpp
@@ -295,6 +295,9 @@
                return 0.0f;
        }

+       if (cfg->overrides.ul_gain_override)
+               return rx_gains[chan];
+
        usrp_dev->set_rx_gain(db, chan);
        rx_gains[chan] = usrp_dev->get_rx_gain(chan);

@@ -337,6 +340,9 @@
                return 0.0f;
        }

+       if (cfg->overrides.dl_gain_override)
+               return atten; // ensures caller does not apply digital 
attenuation
+
        get_dev_band_desc(desc);
        tx_power = desc.nom_out_tx_power - atten;
        db = TxPower2TxGain(desc, tx_power);
@@ -626,6 +632,32 @@
        // Print configuration
        LOGC(DDEV, INFO) << "Device configuration: " << 
usrp_dev->get_pp_string();

+       if (cfg->overrides.dl_freq_override) {
+               uhd::tune_request_t treq_tx = 
uhd::tune_request_t(cfg->overrides.dl_freq, 0);
+               auto tres = usrp_dev->set_tx_freq(treq_tx, 0);
+               tx_freqs[0] = usrp_dev->get_tx_freq(0);
+               LOGCHAN(0, DDEV, INFO) << "OVERRIDE set_freq(" << tx_freqs[0] 
<< ", TX): " << tres.to_pp_string() << std::endl;
+       }
+
+       if (cfg->overrides.ul_freq_override) {
+               uhd::tune_request_t treq_rx = 
uhd::tune_request_t(cfg->overrides.ul_freq, 0);
+               auto tres = usrp_dev->set_rx_freq(treq_rx, 0);
+               rx_freqs[0] = usrp_dev->get_rx_freq(0);
+               LOGCHAN(0, DDEV, INFO) << "OVERRIDE set_freq(" << rx_freqs[0] 
<< ", RX): " << tres.to_pp_string() << std::endl;
+       }
+
+       if (cfg->overrides.ul_gain_override) {
+               usrp_dev->set_rx_gain(cfg->overrides.ul_gain, 0);
+               rx_gains[0] = usrp_dev->get_rx_gain(0);
+               LOGCHAN(0, DDEV, INFO) << " OVERRIDE RX gain:" << rx_gains[0] 
<< std::endl;
+       }
+
+       if (cfg->overrides.dl_gain_override) {
+               usrp_dev->set_tx_gain(cfg->overrides.dl_gain, 0);
+               tx_gains[0] = usrp_dev->get_tx_gain(0);
+               LOGCHAN(0, DDEV, INFO) << " OVERRIDE TX gain:" << tx_gains[0] 
<< std::endl;
+       }
+
        if (iface == MULTI_ARFCN)
                return MULTI_ARFCN;

@@ -978,6 +1010,9 @@
        uhd::tune_result_t tres;
        std::string str_dir = tx ? "Tx" : "Rx";

+       if (cfg->overrides.dl_freq_override || cfg->overrides.ul_freq_override)
+               return true;
+
        if (!update_band_from_freq(freq, chan, tx))
                return false;


--
To view, visit https://gerrit.osmocom.org/c/osmo-trx/+/32764
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-trx
Gerrit-Branch: master
Gerrit-Change-Id: I3c1b9a067cafc6d696b9aa2da8ee0480ec1e094f
Gerrit-Change-Number: 32764
Gerrit-PatchSet: 11
Gerrit-Owner: Hoernchen <[email protected]>
Gerrit-Reviewer: Hoernchen <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to